Asp.net mvc 从ASP.NET MVC控制器获取GeoJson数据的Ajax调用

Asp.net mvc 从ASP.NET MVC控制器获取GeoJson数据的Ajax调用,asp.net-mvc,jquery,geojson,leaflet,Asp.net Mvc,Jquery,Geojson,Leaflet,使用ASP.NET MVC 3和C#我有一个网页来显示地图,我想在地图上添加一条由多个纬度和经度坐标组成的多段线。使用小册子JavaScript库,您可以添加GeoJson层。我想从C#中的数据库中获取经度和纬度坐标,并将坐标列表传递给JavaScript以创建GeoJson或作为GeoJson 下面是我希望创建的GeoJson示例: var polyline = { "type": "Feature", "geometry": { "type": "Line

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

下面是我希望创建的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 linestring对象从C#传递到JavaScript。我无法使用Json传递它:

return Json(data, JsonRequestBehavior.AllowGet);

我真的没有什么灵丹妙药,但我相信我至少可以为你指明正确的方向

如果您碰巧使用了PostGres/PostGIS,那么可以使用该函数直接从数据库返回GeoJson,这很方便。否则,您将希望从研究开始,这是ASP MVC的事实标准JSON序列化库。我发现它有点满了,而且我还没有深入研究它,以建议你如何继续,而不仅仅是获得一点熟悉

另外,JSON.NET似乎有一个GeoJson插件,它有一个。我没有亲自使用过它,所以我不能确切地保证它的稳定性/功能集等,但无论如何,它可能是一个很好的起点


希望这能帮上忙,我也很想听听你最后的想法

只是简单地看了一下GeoJSON.NET,它使用了,所以在返回结果时需要使用JSON.NET序列化程序(在.NET中JSON序列化程序不知道JSON.NET属性)。要做到这一点,您可以序列化并返回如下内容结果(尚未测试):

或者你可以用它

另一方面,似乎不确定这是否也会影响多段线。但事实上,这一问题一年来一直没有得到解决,这对GeoJSON库来说并不一定是好事。这个项目似乎被放弃了


我们选择在中使用GeoJSON序列化,正如我所记得的那样,它是开箱即用的

您应该尝试使用JSON.NET序列化程序而不是JavaScriptSerializer。另外,如果您在控制器内部进行上述序列化,则应该返回ContentResult,因为JsonResult也执行序列化。A在下面的回答中添加了一些代码,解释了如何实现。作为后续,该库现在支持完整的多边形序列化/反序列化。如果您发现任何问题,只需在GitHub上创建一个问题,我会尽快解决。GeoJson具有feature和geometry类,因此只需将ResponseJson传递给将返回FeatureCollection对象并填充所有数据。我想从GeoJosn那里得到featureCollection对象
var line = new GeoJSON.Net.Geometry.LineString(coordinates);
string json = JsonConvert.SerializeObject(line);
return Content(json, "application/json");