C++で作成したDLLをC#のEXEから呼び出しデバック
以前C++(vs2008)で作成したDLLをC#のexeからデバックしようとしたら、
vs2008のブレークポイントが無効になりデバックができなくなった。
この対応はネットにはいろいろと記載されているが、その時々でうまくいかないこともある。
今回うまくいった方法を記載。
基本
多くのサイトに記載されているのはVisualStudioのメニュー「ツール」-「オプション」-「デバッグ」の「元のバージョンと完全に一致するソースファイルを必要とする」をOFFにする。

今回うまくいった方法
コマンドにはc#のEXEをフルパスで設定。
アタッチははいに設定。
アタッチを設定すると予めC#のEXEを起動しておく。
次にデバックのタイプを混合に設定。
以上

GeoServer org.geoserver.platform.ServiceException: Rendering request would use 96531KB, whilst the maximum memory allowed is 65536KB
GeoServerでWMS配信をタイルから全画面に変更したら以下のエラーが出力された。
明らかにメモリ不足だが、JVMのメモリ設定も合わせて再確認のために記載。
※OSはWindowsサーバー、GeoServerのコンテナにはTomcatを使用。
(1)Tomcatのメモリ設定
Tomcatのbinフォルダにある「tomcat7w.exe」を起動

初期メモリと最大メモリを設定

初期メモリと最大メモリは同一の値にしたほうがよいらしい。
※この設定がJVMのメモリ設定に反映されると思われる
GeoServerのメモリ設定
Tomcatのメモリ設定はGeoServerにも反映される。

WMSのメモリ設定
メニューのWMSを選択して「Web Map Service」の設定ページを表示

必ずワークスペースを指定して

メモリを設定

以上
座標を可視化
ポリゴンを表す緯度、経度のCSVファイルを空間データとして可視化するには、
WellknownText形式に変換してQGISで開くのがとっても簡単!
緯度、経度のCSVを
[code]
34.2225148615066,135.164278680816
34.2222647892155,135.164253691228
34.2209399347514,135.164065751247
34.2208400011058,135.166490542546
省略
34.2190481285219,135.163178891017
34.219082076719,135.161066074617
34.2202399699249,135.162128943605
34.220981886875,135.162165915966
34.2225148615066,135.164278680816
[/code]
以下のフォーマットに変換
[code]
POLYGON((135.164278680816 34.2225148615066,135.164253691228 34.2222647892155,135.164065751247 34.2209399347514,135.166490542546 34.2208400011058,135.167490488286 34.2198321377673,135.167478515946 34.2190232289557,135.166240626338 34.2189572083141,135.16444085933 34.2166574274783,135.164740868754 34.2155735568347,135.165003879174 34.2145576776619,135.163853988215 34.214298680841,135.162641134789 34.2130657927005,135.162741137292 34.2127238336321,135.162841140057 34.2123738754678,135.162904142211 34.2121409032373,135.162616135067 34.2131237855764,135.162354128904 34.2140076796957,135.163191050544 34.2141656808295,135.164365856843 34.2169323946867,135.163178891017 34.2190481285219,135.161066074617 34.219082076719,135.162128943605 34.2202399699249,135.162165915966 34.220981886875,135.164278680816 34.2225148615066))
[/code]
更に以下のCSVに変換
[code]
NAME,GEOM
店舗,"POLYGON((135.164278680816 34.2225148615066,135.164253691228 34.2222647892155,135.164065751247 34.2209399347514,135.166490542546 34.2208400011058,135.167490488286 34.2198321377673,135.167478515946 34.2190232289557,135.166240626338 34.2189572083141,135.16444085933 34.2166574274783,135.164740868754 34.2155735568347,135.165003879174 34.2145576776619,135.163853988215 34.214298680841,135.162641134789 34.2130657927005,135.162741137292 34.2127238336321,135.162841140057 34.2123738754678,135.162904142211 34.2121409032373,135.162616135067 34.2131237855764,135.162354128904 34.2140076796957,135.163191050544 34.2141656808295,135.164365856843 34.2169323946867,135.163178891017 34.2190481285219,135.161066074617 34.219082076719,135.162128943605 34.2202399699249,135.162165915966 34.220981886875,135.164278680816 34.2225148615066))"
[/code]
QGISを開き「レイヤ」-「レイヤの追加」-「デリミテッドテキストレイヤの追加」を選択し作成したCSVを開く


座標系を聞かれるので旧日本測地ならばEPSG:4301を選択、世界測地ならばEPSG:4326を選択

以上でQGIS上で確認

GeoServerのSQLビューに渡す引数について
複数引数を必要とするSQLビューにOpenLayersから引数を渡す
[code]
select
geometry
from
shops
where
shop_code = ‘%shop_code%’
and
owner_no = %owner_no%
[/code]
上記のSQLビューに引数を渡すには以下のように引数「key:value」をセミコロンで連結
[code]
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
}
);
[code]
in句を使った条件に複数の引数を渡す
[code]
select
geometry
from
shops
where
shop_code in (%shop_code%)
[/code]
[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
}
);
[/code]
GeoServerのタイル画像上のラベルが表示されない件
GeoServerでラベル付きポイントを描画するとラベルが描画されないことがある。
ポイントがタイルの際に位置しているとラベルが描画されない。
この障害はOpenLayersからGeoServerを「singleTile: false」で呼び出していると顕著に発生
[code]
var obj = new OpenLayers.Layer.WMS(
"id_layer",
"../geoserver/suzuki/wms",
{
LAYERS: ‘shop’,
format: ‘image/png’,
transparent: true
},
{
singleTile: false
}
);
[/code]
対策としてはsingleTileをtrueにしてタイルの際を少なくすることによって対応をとるか、
スタイルのVendorOptionに以下を追加して対応
[code]
<VendorOptizon name="partials">true</VendorOption>
[/code]
GeoServerのスタイルに設定可能なFeatureTypeStyleの最大
GeoServerのスタイルに50個のFeatureTypeStyleを設定して、項目の値に応じて50パターンのスタイルを表示しようとしたが
どうも45個を超えたあたりで何も表示されなくなった。
[code]
<?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>
[/code]
そのため10種類ぐらいで使うように変更
[code]
<?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>
[/code]
.NETで作成したWebサービスをjqueryのajaxで呼んだら500サーバー内部エラー
jquery ajaxで .NET Webサービスからデータダウンロード時にデータ量が多くなると500 サーバー内部エラーが発生。(通信はJSONフォーマット)
DHCで確認したところ
以下のエラーが発生
[code]
{"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"}
[/code]
web.configに以下を追加して対応
ICONをPNGに変換
iconをpngに変換するには「ToYcon.exe」が便利。
背景透明も正しく反映してくれる。
VS2010でWebサービス(asmx)を実装
VS2008やVS2005で作成していたWebサービス(asmx)をVS2010でも作成できたのでメモ。
最終的にはJSON対応としたい。
参考サイト(というか、そのまんま)[VS2010] ASP.NET Web サービス プロジェクト (.asmx) はどこへ?
(1)VS2010でプロジェクト「ASP.NET Webアプリケーション」を作成。
(2)プロジェクト内にディレクトリServicesを作成
(3)ディレクトリServicesにWebサービス(asmx)を追加
Mapapi.asmx
namespace部分を削除
[code]
public class MapApi : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
[/code]
(4)Mapapi.asmxの編集
Mapapi.asmxを右クリックして「マークアップの」表示を選択し、修正
修正前
[code]
<%@ WebService Language="C#" CodeBehind="MapApi.asmx.cs" Class="KnlApi.Services.MapApi" %>
[/code]
修正後
[code]
<%@ WebService Language="C#" CodeBehind="MapApi.asmx.cs" Class="MapApi" %>
[/code]
(5)発行
ビルドメニューの発行を選択して画面に従って設定
画面上の発行ボタンをクリックして配置用のモジュールを作成
(6)Webサーバー上への配置
Webサーバー上にIISユーザーがアクセス可能なフォルダを作成してIIS管理マネージャーでプリケーションに設定
発行したモジュールを置いて完了
Leafletメモ
leaflet location-filter example and draggable-resizeable rectangular area-select on a map
Multiple marker selection within a box in leaflet
Creating custom control button in leaflet
leaflet-draw-implementing-custom-tools
Marker in leaflet, click event
Click Events with Leaflet and geoJSON
Leaflet.draw mapping: How to initiate the draw function without toolbar?










