2012-07-30 114 views
8

在C#中使用ASP.NET MVC 3我有一個網頁來顯示我想要添加由多個緯度和經度座標組成的多段線的地圖。使用小冊子 JavaScript庫可以添加GeoJson圖層。我想從C#中的數據庫獲取經度和緯度座標,並將座標列表傳遞給JavaScript以創建GeoJsonGeoJson從ASP.NET MVC控制器獲取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

您應該嘗試使用JSON.NET序列化器而不是JavaScriptSerializer。另外,如果你像上面那樣在控制器內部序列化,你應該返回一個ContentResult,因爲JsonResult也會執行序列化。在下面的答案中添加了一些代碼,以解釋如何。 – 2012-08-03 06:50:55

回答

3

只是簡單地看了一下GeoJSON.NET,它使用了JSON.NET,所以當你返回結果時你需要使用JSON.NET序列化程序(JSON序列化程序在.NET中不知道JSON.NET屬性)。做到這一點,你可以只序列化和返回一個像這樣的ContentResult類型(沒有測試):

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

或更好的,你可以使用a custom JSON.NET ActionResult

在附註中,似乎有an issue with serialization of polygons not complying with the GeoJSON specification - 不知道這是否也影響折線。但事實上,這一年還沒有確定下來,並不能保證GeoJSON庫的良好性。該項目似乎被放棄。

我們選擇使用nettopologysuite中的GeoJSON序列化,我記得它是直接使用的。

+0

作爲後續工作,該庫現在支持完整多邊形序列化/反序列化。如果你發現任何問題,只需在GitHub上創建一個問題,我會盡快解決它。 – 2014-06-11 14:27:07

1

我真的沒有一個神奇的子彈,但我相信我至少可以指出你在正確的方向。

如果您碰巧在使用PostGres/PostGIS,您可以使用ST_AsGeoJson函數直接從數據庫返回GeoJson,這很方便。否則,您需要查看JSON.NET,這是ASP MVC的事實標準JSON序列化庫。我發現它有點全面,而且我還沒有深入研究它,可以暗示你如何繼續進行,而不僅僅是獲得一點熟悉。

此外,它似乎有一個JSON.NET的GeoJson插件,它有一個Nuget Package和相應的GitHub repo。我沒有親自使用它,所以我不能完全保證它的穩定性/功能設置等等,但無論如何它可能是一個很好的起點。

希望這會有所幫助,而且我會有興趣聽到你最終的結果!

+0

GeoJson有要素和幾何類,所以只需將ResponseJson傳遞給應該返回FeatureCollection對象的所有數據。我期待從GeoJosn獲得填充的featureCollection對象 – Mohit 2016-06-10 15:57:08

相關問題