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


Использование ASP.NET MVC 3 С C# у меня есть веб-страница для отображения карты, на которую я хочу добавить полилинию, состоящую из нескольких координат широты и долготы. С помощью библиотеки JavaScriptLeaflet можно добавлять слои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 9

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. Я не использовал его лично, поэтому я не могу точно поручиться за его стабильность / набор функций и т. д., Но в любом случае это может быть хорошей отправной точкой.

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