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

Dim*_*try 9 asp.net-mvc jquery geojson leaflet

使用带有C#的ASP.NET MVC 3我有一个网页来显示一个地图,我想在其上添加一条由多个纬度和经度坐标组成的折线.使用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
      }
};
Run Code Online (Sandbox Code Playgroud)

如何创建类似于上面显示的G​​eoJson并将位置数据添加到C#或JavaScript 的" coordinates "部分,然后在JavaScript中使用它来添加图层:

var myLayer = L.geoJson().addTo(map);
myLayer.addData(polyline);
Run Code Online (Sandbox Code Playgroud)

我已经开始使用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);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将这个GeoJSON LinseString对象从C#传递给JavaScript.我无法使用Json传递它:

return Json(data, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

Asb*_*ørn 4

简单浏览了一下 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");
Run Code Online (Sandbox Code Playgroud)

或者更好的是,您可以使用自定义 JSON.NET ActionResult

顺便说一句,不符合 GeoJSON 规范的多边形序列化似乎存在问题- 不确定这是否也会影响折线。但事实上,这个问题已经一年没有得到解决,这对 GeoJSON 库来说并没有什么好处。该项目似乎已被放弃。

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