Geoserver | No pain,No gain. https://ufirst.jp/memo Wed, 20 Jan 2021 07:57:42 +0000 ja hourly 1 https://wordpress.org/?v=6.9.4 https://i0.wp.com/ufirst.jp/memo/wp-content/uploads/2022/08/apple-touch-icon-76x76-precomposed.png?fit=32%2C32&ssl=1 Geoserver | No pain,No gain. https://ufirst.jp/memo 32 32 126496119 重複したポリゴンの表示の優先順位を決める方法(Geoserverの場合) https://ufirst.jp/memo/2021/01/post-2802/ https://ufirst.jp/memo/2021/01/post-2802/#respond Wed, 20 Jan 2021 07:57:42 +0000 https://ufirst.jp/memo/?p=2802 GISの話

異なる属性値のポリゴンが重複しており、表現がそれぞれで異なる場合、表示するたびに表示が変わってしまう。

どういう事かというと、国土数値情報の洪水浸水区域データをGeoserverに食わせ表示させた。

浸水深1の場合青、浸水深2の場合赤といった具合にポリゴンの表示を変えるわけだが、いざ表示させたところ表示するたびに色が赤になったり青になったりした。

よく見るとポリゴンが重なっており、浸水深1のポリゴンの上に浸水深2のポリゴンが重なっている。それで表示するたびに1,2の表示の優先順位指定をしていなかった為、表示するたびにランダムに色が変わっていたと思われる。

以下のようにVendorOption の “sortBy” を使うことで表示優先順位を指定する事で表示も固定される。

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
 xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
 xmlns="http://www.opengis.net/sld"
 xmlns:ogc="http://www.opengis.net/ogc"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NamedLayer>
    <Name>restricted_zone</Name>
    <UserStyle>
      <Title>国土数値情報 洪水浸水想定区域データ</Title>
      <Abstract>国土数値情報 洪水浸水想定区域データ</Abstract>
      <FeatureTypeStyle>
        <Rule>
          <Name>1</Name>
          <Title>1</Title>
          <Abstract>1</Abstract>
	      <ogc:Filter>
	        <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>a31_201</ogc:PropertyName>
	          <ogc:Literal>1</ogc:Literal>
	        </ogc:PropertyIsEqualTo>
	      </ogc:Filter>
          <PolygonSymbolizer>
            <Fill>
              <CssParameter name="fill">#FF0000</CssParameter>
            </Fill>
          </PolygonSymbolizer>
        </Rule>
        <Rule>
          <Name>2</Name>
          <Title>2</Title>
          <Abstract>2</Abstract>
	      <ogc:Filter>
	        <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>a31_201</ogc:PropertyName>
	          <ogc:Literal>2</ogc:Literal>
	        </ogc:PropertyIsEqualTo>
	      </ogc:Filter>
          <PolygonSymbolizer>
            <Fill>
              <CssParameter name="fill">#0000FF</CssParameter>
            </Fill>
          </PolygonSymbolizer>
        </Rule>
        <VendorOption name="sortBy">a31_201</VendorOption>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

]]>
https://ufirst.jp/memo/2021/01/post-2802/feed/ 0 2802
OpenLayers6でレイヤー一覧を取得する https://ufirst.jp/memo/2019/11/post-2309/ https://ufirst.jp/memo/2019/11/post-2309/#respond Mon, 04 Nov 2019 14:56:46 +0000 https://ufirst.jp/memo/?p=2309

OpenLayersというのは2005年に誕生した地図表示JSライブラリの代表格である。バージョン3からは劇的進化を遂げ、WEB上でヌルサクの使い勝手を提供している素晴らしいプロジェクトである。
最近は利用しやすいLeaflet/MapBox勢力がシェアを高めているように思うが細かい所まで手が届く機能面と安定性から私は現在もOpenLayersを利用している。

さて、OpenLayersではol.mapにはgetLayersメソッドでレイヤー一覧を取得出来るが、ここで取得出来るのはol.layer.Layerとol.layer.LayerGroupである。
getLayersで取得したol.CollectionをforEachメソッドで回すわけだがそのさいに、ol.layer.LayerGroupの場合は更にgetLayersメソッドで入れ子構成を取得したいわけだがol.Collectionでol.layer.Layerとol.layer.LayerGroupの判断方法に悩んだのでメモしておく

なんてことはない getLayersを typeof で型判定し再帰処理すればすべてのレイヤーを取得出来る(これより良い方法をご存知の方は是非コメントお願いします!)

map.getLayers().forEach(function(layerGroup){
     getLayer(layerGroup);
 });
 function getLayer(layer){
    console.log(layer.get("title"));
    if(typeof layer.getLayers == 'function') {
         layer.getLayers().forEach(function (l) {
         getLayer(l);
     });
    }
 }

]]>
https://ufirst.jp/memo/2019/11/post-2309/feed/ 0 2309
Geoserverでベクトルタイル配信 https://ufirst.jp/memo/2017/04/geoserver%e3%81%a7%e3%83%99%e3%82%af%e3%83%88%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%ab%e9%85%8d%e4%bf%a1/ https://ufirst.jp/memo/2017/04/geoserver%e3%81%a7%e3%83%99%e3%82%af%e3%83%88%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%ab%e9%85%8d%e4%bf%a1/#respond Thu, 20 Apr 2017 12:12:49 +0000 https://ufirst.jp/memo/geoserver%e3%81%a7%e3%83%99%e3%82%af%e3%83%88%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%ab%e9%85%8d%e4%bf%a1/ GeoserverのExtentionsで可能な模様
http://suite.opengeo.org/docs/latest/dataadmin/vectortiles/index.html
試してみようと

]]>
https://ufirst.jp/memo/2017/04/geoserver%e3%81%a7%e3%83%99%e3%82%af%e3%83%88%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%ab%e9%85%8d%e4%bf%a1/feed/ 0 880
WMSのGetFeatureInfoリクエストをJSONで受け取る方法 https://ufirst.jp/memo/2013/07/wms%e3%81%aegetfeatureinfo%e3%83%aa%e3%82%af%e3%82%a8%e3%82%b9%e3%83%88%e3%82%92json%e3%81%a7%e5%8f%97%e3%81%91%e5%8f%96%e3%82%8b%e6%96%b9%e6%b3%95/ https://ufirst.jp/memo/2013/07/wms%e3%81%aegetfeatureinfo%e3%83%aa%e3%82%af%e3%82%a8%e3%82%b9%e3%83%88%e3%82%92json%e3%81%a7%e5%8f%97%e3%81%91%e5%8f%96%e3%82%8b%e6%96%b9%e6%b3%95/#respond Sun, 14 Jul 2013 16:55:26 +0000 http://home.uchida.asia/memo/?p=326 リクエストパラメータを以下のようにする
INFO_FORMAT=application/json
参照:http://docs.geoserver.org/latest/en/user/services/wms/reference.html

]]>
https://ufirst.jp/memo/2013/07/wms%e3%81%aegetfeatureinfo%e3%83%aa%e3%82%af%e3%82%a8%e3%82%b9%e3%83%88%e3%82%92json%e3%81%a7%e5%8f%97%e3%81%91%e5%8f%96%e3%82%8b%e6%96%b9%e6%b3%95/feed/ 0 326