Ajax调用从ASP.NET MVC Controller获取GeoJson数据

使用ASP.NET MVC 3和C#我有一个网页来显示一个地图,我想在其上添加一个由多个纬度和经度坐标组成的折线。 使用Leaflet JavaScript库,您可以添加GeoJson图层。 我想从C#中的数据库中获取经度和纬度坐标,并将坐标列表传递给JavaScript以创建GeoJsonGeoJson

这是我想创建的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 } }; 

如何创建类似于上面显示的G​​eoJson并将位置数据添加到C#或JavaScript的“ coordinates ”部分,然后在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); 

简单地看一下GeoJSON.NET并使用JSON.NET ,因此在返回结果时需要使用JSON.NET序列化程序(.NET中的JSON序列化程序不知道JSON.NET属性。)为此你可以像这样序列化并返回一个ContentResult(尚未测试过):

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

或者更好,你可以使用自定义JSON.NET ActionResult 。

另外,对于不符合GeoJSON规范的多边形序列化似乎存在问题 – 不确定这是否也会影响折线。 但事实上,这一年没有修复,并不能保证GeoJSON库的好处。 该项目似乎被放弃了。

我们选择在nettopologysuite中使用GeoJSON序列化,我记得它直接开箱即用。

我真的没有这个神奇的子弹,但我相信我至少能指出你正确的方向。

如果您正好使用PostGres / PostGIS,您可以使用ST_AsGeoJson函数直接从数据库返回GeoJson,这很方便。 否则,您将首先查看JSON.NET ,它是ASP MVC的事实标准JSON序列化库。 我发现它有点全面,而且我没有深入研究它,以便建议你如何继续进行,而不仅仅是获得一点熟悉。

此外,似乎有一个JSON.NET的GeoJson插件,它有一个Nuget包和相应的GitHub repo 。 我没有亲自使用它,所以我不能保证它的稳定性/function集等等,但无论如何它可能是一个很好的跳跃点。

希望这有所帮助,我有兴趣听听你最终的结果!