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