Я хотел преобразовать JSON в GeoJSON, чтобы отобразить divIcons на карте Leaflet из файла JSON, который я получаю из API. Будучи новичком в javascript, мне очень трудно найти рабочее решение. Я думал, что моя проблема была решена в моем другом посте Как конвертировать JSON в GeoJSON
но это решило только одну часть головоломки, о которой я не знал, с загрузкой данных в код, который я считал своей проблемой. Я все еще очень стараюсь найти работающее решение для преобразования JSON в GeoJSON, поэтому я могу работать с ним оттуда, чтобы отобразить divIcons на карте.
Я провел много исследований как здесь, так и на YouTube, и на нескольких других сайтах, большинство из которых являются устаревшими ответами, которые, похоже, не работают или не относятся к моей ситуации. Один из методов, которые я попробовал для преобразования JSON в GeoJSON, заключается в следующем.
$.getJSON("./data/tracking.json", function(jsonData) {
var outGeoJson = {}
outGeoJson['properties'] = jsonData
outGeoJson['type']= "Feature"
outGeoJson['geometry']= {"type": "Point", "coordinates":
[jsonData['lat'], jsonData['lon']]}
console.log(outGeoJson)
});
Пока я думал, что она работает, после тщательного изучения консоли после некоторого сна я заметил, что координаты все еще набираются Undefined
, поэтому он не преобразует его в GeoJSON, если он показывает данные внизу, Я до сих пор не думаю, что он загружается правильно.
Второй метод, который я попробовал, который мне нравится, так как я могу извлечь только те ключи, которые мне нужны, из файла JSON, поэтому я могу использовать его во всплывающем окне, дает те же результаты, что и выше.
$.getJSON("./data/tracking.json", function(jsonData) {
var geojson = {
type: "FeatureCollection",
features: [],
};
for (i = 0; i < jsonData.positions.length; i++)
geojson.features.push({
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [jsonData.positions[i].longitude, jsonData.positions[i].latitude]
},
"properties": {
"report_at": jsonData.positions[i].report_at,
"lat": jsonData.positions[i].lat,
"lon": jsonData.positions[i].lon,
"dir": jsonData.positions[i].dir,
"first": jsonData.positions[i].first,
"last": jsonData.positions[i].last
}
});
console.log(geojson)
});
Это то, что я пробовал до сих пор наряду с бесчисленным множеством других методов, которые сделали бы этот пост слишком длинным для перечисления. Есть ли лучший и более новый способ сделать это, чем то, что я пытаюсь сделать, это проще или есть что-то, что я просто пропускаю в приведенном выше коде, что-то новое для этого языка? Я действительно предпочитаю этот второй метод, если у кого-то нет гораздо лучшего предложения для преобразования JSON в GeoJSON, поэтому я могу проанализировать его на своем слое GeoJSON.
EDIT:
Вот пример исходного ответа JSON от API, который я пытаюсь преобразовать в GeoJSON
{
"positions": [
{
"report_at": "2015-01-21 21:00:08",
"lat": "38.9080658",
"lon": "-77.0030365",
"elev": "0",
"dir": "0",
"gps": "0",
"callsign": "WX2DX",
"email": "",
"phone": "",
"ham": "WX2DX",
"ham_show": "0",
"freq": "",
"note": "",
"im": "",
"twitter": null,
"web": "",
"unix": "1421874008",
"first": "William",
"last": "Smith",
"marker": "36181"
},
{
"report_at": "2015-01-21 11:45:12",
"lat": "39.2716141",
"lon": "-76.6192093",
"elev": "0",
"dir": "0",
"gps": "0",
"callsign": "rldovejr",
"email": null,
"phone": null,
"ham": null,
"ham_show": null,
"freq": null,
"note": null,
"im": null,
"twitter": null,
"web": null,
"unix": "1421840712",
"first": "Ron",
"last": "Dove",
"marker": "13573"
}
}