9

使用带有 C# 的 ASP.NET MVC 3 我有一个网页来显示一个地图,我想在该地图上添加一条由多个纬度和经度坐标组成的折线。使用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 添加到“<em>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);
4

2 回答 2

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");

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

附带说明一下,多边形的序列化似乎存在不符合 GeoJSON 规范的问题——不确定这是否也会影响折线。但这一问题一年后仍未得到解决,这对 GeoJSON 库来说并不好。该项目似乎被放弃了。

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

于 2012-08-01T09:31:51.943 回答
1

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

如果您碰巧使用 PostGres/PostGIS,则可以使用ST_AsGeoJson函数直接从数据库中返回 GeoJson,这很方便。否则,您将需要从查看JSON.NET开始,它是 ASP MVC 的事实上的标准 JSON 序列化库。我发现它有点全面,而且我还没有深入研究它,以建议你如何在仅仅获得一点熟悉的情况下继续前进。

此外,似乎有一个适用于 JSON.NET 的 GeoJson 插件,它有一个Nuget 包和相应的GitHub存储库。我没有亲自使用过它,所以我不能完全保证它的稳定性/功能集等,但无论如何它可能是一个很好的起点。

希望这会有所帮助,我很想听听你最终会做什么!

于 2012-07-30T21:44:11.333 回答