gpt4 book ai didi

asp.net-mvc - Ajax 调用从 ASP.NET MVC Controller 获取 GeoJson 数据

转载 作者:行者123 更新时间:2023-12-03 22:27:41 25 4
gpt4 key购买 nike

使用 ASP.NET MVC 3 和 C# 我有一个网页来显示 map ,我想在其中添加一条由多个纬度和经度坐标组成的折线。使用 Leaflet 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 LinseString 对象从 C# 传递到 JavaScript。我无法使用 Json 来传递它:

return Json(data, JsonRequestBehavior.AllowGet);

最佳答案

简单地浏览了一下 GeoJSON.NET,它使用 JSON.NET ,因此当您返回结果时,您需要使用 JSON.NET 序列化器(.NET 中的 JSON 序列化器不知道 JSON.NET 属性。)为此,您只需序列化并返回一个 ContentResult ,如下所示(haven' t对此进行了测试):

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 序列化,据我记得,它开箱即用。

关于asp.net-mvc - Ajax 调用从 ASP.NET MVC Controller 获取 GeoJson 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com