GeoServerのSQLビューに渡す引数について

複数引数を必要とするSQLビューにOpenLayersから引数を渡す

select
    geometry
from
    shops
where
    shop_code = '%shop_code%'
and
    owner_no = %owner_no%

上記のSQLビューに引数を渡すには以下のように引数「key:value」をセミコロンで連結

var params = "shop_code:123456789;owner_no:54321";
var layer = new OpenLayers.Layer.WMS(
		"layer name",
		"../geoserver/ワークスペース名/wms",
		{
			LAYERS: 'レイヤ名',
			format: 'image/png',
			transparent: true,
			viewparams: params
		},
		{
			singleTile: false
		}
	);


in句を使った条件に複数の引数を渡す

select
    geometry
from
    shops
where
    shop_code in (%shop_code%)
var params = "shop_code:'123456789'\\,'987654321'";
var layer = new OpenLayers.Layer.WMS(
		"layer name",
		"../geoserver/ワークスペース名/wms",
		{
			LAYERS: 'レイヤ名',
			format: 'image/png',
			transparent: true,
			viewparams: params
		},
		{
			singleTile: false
		}
	);

GeoServerのタイル画像上のラベルが表示されない件

GeoServerでラベル付きポイントを描画するとラベルが描画されないことがある。

ポイントがタイルの際に位置しているとラベルが描画されない。

clip_2

この障害はOpenLayersからGeoServerを「singleTile: false」で呼び出していると顕著に発生

	var obj = new OpenLayers.Layer.WMS(
		"id_layer",
		"../geoserver/suzuki/wms",
		{
			LAYERS: 'shop',
			format: 'image/png',
			transparent: true
		},
		{
			singleTile: false
		}
	);

対策としてはsingleTileをtrueにしてタイルの際を少なくすることによって対応をとるか、
スタイルのVendorOptionに以下を追加して対応

<VendorOptizon name="partials">true</VendorOption>          

clip_4

GeoServerのスタイルに設定可能なFeatureTypeStyleの最大

GeoServerのスタイルに50個のFeatureTypeStyleを設定して、項目の値に応じて50パターンのスタイルを表示しようとしたが
どうも45個を超えたあたりで何も表示されなくなった。

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>railroad ex</Name>
    <UserStyle>
      <FeatureTypeStyle>
        <Rule>
          <Name>style1</Name>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>symbol_index</ogc:PropertyName>
              <ogc:Literal>1</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
         <PolygonSymbolizer>
           <Stroke>
             <CssParameter name="stroke">#e60000</CssParameter>
             <CssParameter name="stroke-width">3</CssParameter>
           </Stroke>
         </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
省略
      <FeatureTypeStyle>
        <Rule>
          <Name>style51</Name>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>symbol_index</ogc:PropertyName>
              <ogc:Literal>51</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
         <PolygonSymbolizer>
           <Stroke>
             <CssParameter name="stroke">#002673</CssParameter>
             <CssParameter name="stroke-width">3</CssParameter>
           </Stroke>
         </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
      <FeatureTypeStyle>
        <Rule>
          <Name>style52</Name>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>symbol_index</ogc:PropertyName>
              <ogc:Literal>52</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
         <PolygonSymbolizer>
           <Stroke>
             <CssParameter name="stroke">#ff73df</CssParameter>
             <CssParameter name="stroke-width">3</CssParameter>
           </Stroke>
         </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

そのため10種類ぐらいで使うように変更

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>trade area</Name>
    <UserStyle>
      <FeatureTypeStyle>
        <Rule>
          <Name>style1</Name>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:Function name="in">
                <ogc:PropertyName>symbol_index</ogc:PropertyName>
                <ogc:Literal>1</ogc:Literal>
                <ogc:Literal>14</ogc:Literal>
                <ogc:Literal>27</ogc:Literal>
                <ogc:Literal>40</ogc:Literal>
              </ogc:Function>
              <ogc:Literal>true</ogc:Literal>              
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
         <PolygonSymbolizer>
           <Stroke>
             <CssParameter name="stroke">#e60000</CssParameter>
             <CssParameter name="stroke-width">3</CssParameter>
           </Stroke>
         </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
省略
      <FeatureTypeStyle>
        <Rule>
          <Name>style13</Name>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:Function name="in">
                <ogc:PropertyName>symbol_index</ogc:PropertyName>
                <ogc:Literal>13</ogc:Literal>
                <ogc:Literal>26</ogc:Literal>
                <ogc:Literal>39</ogc:Literal>
                <ogc:Literal>52</ogc:Literal>
              </ogc:Function>
              <ogc:Literal>true</ogc:Literal>              
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
         <PolygonSymbolizer>
           <Stroke>
             <CssParameter name="stroke">#ff73df</CssParameter>
             <CssParameter name="stroke-width">3</CssParameter>
           </Stroke>
         </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

.NETで作成したWebサービスをjqueryのajaxで呼んだら500サーバー内部エラー

jquery ajaxで .NET Webサービスからデータダウンロード時にデータ量が多くなると500 サーバー内部エラーが発生。(通信はJSONフォーマット)

DHCで確認したところ

clip_3

以下のエラーが発生

{"Message":"JSON JavaScriptSerializer を使用したシリアル化または逆シリアル化中にエラーが発生しました。文字列の長さが maxJsonLength プロパティで設定されている値を超えています。","StackTrace":"   場所 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat)\r\n   場所 System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat)\r\n   場所 System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   場所 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

web.configに以下を追加して対応

clip_7

VS2010でWebサービス(asmx)を実装

VS2008やVS2005で作成していたWebサービス(asmx)をVS2010でも作成できたのでメモ。
最終的にはJSON対応としたい。

参考サイト(というか、そのまんま)[VS2010] ASP.NET Web サービス プロジェクト (.asmx) はどこへ?

(1)VS2010でプロジェクト「ASP.NET Webアプリケーション」を作成。

スクリーンショット 2016-12-14 17.44.43

(2)プロジェクト内にディレクトリServicesを作成

スクリーンショット 2016-12-14 17.46.51

(3)ディレクトリServicesにWebサービス(asmx)を追加

ファイル名はMapapi.asmx
スクリーンショット 2016-12-14 18.10.33

Mapapi.asmx

namespace部分を削除

public class MapApi : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
}

(4)Mapapi.asmxの編集
Mapapi.asmxを右クリックして「マークアップの」表示を選択し、修正

修正前

<%@ WebService Language="C#" CodeBehind="MapApi.asmx.cs" Class="KnlApi.Services.MapApi" %>

修正後

<%@ WebService Language="C#" CodeBehind="MapApi.asmx.cs" Class="MapApi" %>

(5)発行

ビルドメニューの発行を選択して画面に従って設定

スクリーンショット 2016-12-14 20.36.23

画面上の発行ボタンをクリックして配置用のモジュールを作成

clip_4

(6)Webサーバー上への配置

Webサーバー上にIISユーザーがアクセス可能なフォルダを作成してIIS管理マネージャーでプリケーションに設定

発行したモジュールを置いて完了

clip_6

Leafletメモ

leaflet location-filter example and draggable-resizeable rectangular area-select on a map

Leaflet Plugins

Multiple marker selection within a box in leaflet

Creating custom control button in leaflet

leaflet-draw-implementing-custom-tools

Leafletを使って地図に複数のマーカーを追加

Marker in leaflet, click event

Click Events with Leaflet and geoJSON

Leaflet.draw mapping: How to initiate the draw function without toolbar?

Using the Leaflet.draw plugin for leaflet.js

ラスタカタログのWireFrame表示を制御

ラスタカタログをMapControl上に表示した場合、表示タイルが9を超えるとWireFrameで表示される。

WireFrameで表示された例

clip_1

この数値「9」を変えるには

IWorkspaceFactory2 wsf = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();
IRasterWorkspaceEx ws = (IRasterWorkspaceEx)wsf.OpenFromFile(@"e:\newortho.gdb", 0);
IRasterCatalog cat  = ws.OpenRasterCatalog("cat");
IGdbRasterCatalogLayer rastercatalogLayer = new GdbRasterCatalogLayerClass();
IRasterCatalogDisplayProps props = (IRasterCatalogDisplayProps)rastercatalogLayer;
props.DisplayRasters = 20;
rastercatalogLayer.Setup((ITable)cat);
axMapControl1.AddLayer((ILayer)rastercatalogLayer);

これで20個まではラスタが表示される

clip_2
※画像がぼかしを入れてあります

ちなみにArcMap上ではレイヤプロパティで設定

clip_3