Вызов Ajax для получения данных GeoJson из ASP.NET контроллер MVC

использование 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 LinseString из C# в JavaScript. я не смог пройти его использование Json как такового:

return Json(data, JsonRequestBehavior.AllowGet);

2 ответов


просто мельком взглянул на GeoJSON.NET и он использует JSON.NET, поэтому вам нужно использовать JSON.NET сериализатор при возврате результата (сериализатор JSON в .NET не знает о 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. Проект кажется заброшенным.

мы выбрали использование сериализации GeoJSON в nettopologysuite, который работал прямо из коробки, как я помню.


У меня нет волшебной пули для этого, но я верю, что могу по крайней мере указать вам в правильном направлении.

Если вы используете PostGres / PostGIS, вы можете использовать ST_AsGeoJson функция просто возвращает GeoJson прямо из базы данных, что удобно. В противном случае вы захотите начать с изучения JSON.NET, который является стандартной библиотекой сериализации JSON defacto для ASP MVC. Я обнаружил, что это немного полномасштабно, и я не углубился в него достаточно глубоко, чтобы предположить, как вы могли бы выйти за рамки просто немного знакомства.

кроме того, кажется, что есть плагин GeoJson для JSON.NET который имеет Пакет Nuget и тегом GitHub repo. Я не использовал его лично, поэтому я не могу точно ручаться за его стабильность/набор функций и т. д., Но в любом случае это может быть хорошим прыжком.

надеюсь, это поможет, и мне было бы интересно услышать, что вы в конечном итоге идет с!