2012-07-30 22 views
8

ASP.NET MVC 3 with C#を使用するいくつかの緯度と経度座標からなるポリラインを追加するマップを表示するWebページがあります。 リーフレット JavaScriptライブラリを使用すると、GeoJsonのレイヤーを追加できます。私はC#でデータベースから経度と緯度の座標を取得し、座標のリストをJavaScriptに渡して、GeoJsonまたはGeoJsonを作成したいと考えています。ここASP.NET MVC ControllerからGeoJsonデータを取得するためのAjax呼び出し

は、私が作成したいにGeoJSONの例である:

var polyline = { 
     "type": "Feature", 
     "geometry": { 
     "type": "LineString", 
        "coordinates": [ 
         [-105.00341892242432, 39.75383843460583], 
         [-105.0008225440979, 39.751891803969535] … 
        ] 
       }, 
     "properties": { 
     "popupContent": "This is a polyline of many coordinates.", 
     "underConstruction": false 
     } 
}; 

どのようにと同様にGeoJSONは、上に示した作成およびC#またはJavaScriptから「座標」に位置情報を追加することができその後、のような層を追加するためにJavaScriptでそれを使用する:

var myLayer = L.geoJson().addTo(map); 
myLayer.addData(polyline); 

私はGeoJSON.netを使用して開始していると、このコードが出ている:

foreach (Position point in Positions) 
{ 
    coordinates.Add(point); 
} 

GeoJSON.Net.Geometry.LineString line = new GeoJSON.Net.Geometry.LineString(coordinates); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

var data = serializer.Serialize(lineString); 

しかし、このGeoJSON LinseStringオブジェクトをC#からJavaScriptに渡す方法はわかりません。私は、次のようなJSONを使用して、それを渡すことができませんでした:

return Json(data, JsonRequestBehavior.AllowGet); 
+0

JavaScriptSerializerの代わりにJSON.NETシリアライザを使用するようにしてください。また、上記のようなコントローラ内部でシリアル化を行う場合は、JsonResultもシリアル化を実行するため、ContentResultを返す必要があります。私の答えにいくつかのコードを追加しました。 –

答えて

3

GeoJSON.NETを簡単に見て、JSON.NETを使用しているため、結果を返すときにJSON.NETシリアライザを使用する必要があります(.NETのJSONシリアライザはJSON.NET属性について認識しません)。あなただけ(これをテストしていません)このようContentResultをシリアル化して返すことができます。この操作を行います。あなたはa custom JSON.NET ActionResultを使用することができ

var line = new GeoJSON.Net.Geometry.LineString(coordinates); 
string json = JsonConvert.SerializeObject(line); 
return Content(json, "application/json"); 

またはより良いです。

an issue with serialization of polygons not complying with the GeoJSON specificationがあります。これがポリラインにも影響するかどうかはわかりません。しかし、これが1年後に修正されていないという事実は、GeoJSONライブラリにとっては良いことではありません。プロジェクトは放棄されたようだ。

GeoJSONシリアライゼーションをnettopologysuiteで使用することを選択しました。私は覚えているようにすぐに使えました。

+0

フォローアップとして、ポリゴンのシリアライズ/デシリアライズ。問題が見つかった場合は、GitHubで問題を作成してください。すぐに修正しようとします。 –

1

私は本当にこのための特効薬はありませんが、私は、私は、少なくとも正しい方向にあなたを指すことができます信じています。

PostGres/PostGISを使用している場合は、ST_AsGeoJson関数を使用してGeoJsonをデータベースから直接返すことができます。これは便利です。それ以外の場合は、ASP MVC用の標準的なJSONシリアライズライブラリであるJSON.NETを調べることから始めましょう。私はそれがちょっといっぱいであることがわかりました、そして、私はちょうどちょっと慣れ親しむことを超えて進んでいく方法を示唆するのに十分深く掘り下げませんでした。

また、Nuget Packageと対応するGitHub repoを持つJSON.NET用のGeoJsonプラグインがあるようです。私はそれを個人的に使っていないので、安定性/機能セットなどを正確に保証することはできませんが、いずれにしても、それは良いポイントになるかもしれません。

これがうまくいくことを願っています。私は、あなたが終わりに行くことを聞くことに興味があります!

+0

GeoJsonはフィーチャとジオメトリクラスを持っているので、ResponseJsonを渡すだけで、すべてのデータが埋め込まれたFeatureCollectionオブジェクトが返されます。GeoJosnからフィーチャコレクションオブジェクトを取得するために探しています – Mohit