Я очень новичок в изучении javascript, и мои элементарные знания попали в стену. Я настроил карту Leaflet, на которой я хотел бы построить маркеры на основе divIcon из шнуров на нем из JSON. Благодаря моим бесчисленным исследованиям, пытаясь заставить его работать. Я узнал, почему мой файл JSON не работал, хотя в консоли я подтвердил, что он читается. Я узнал, что Leaflet предпочитает, чтобы он был в GeoJSON. Поэтому я потратил еще несколько часов на изучение того, как это преобразовать. Большинство моих выводов были устаревшими и больше не работали или не относились ко мне. Это то, что я попробовал в своих тщательных исследованиях.
Для начала я установил переменную для пути к моему тестовому файлу JSON, как это определено следующим образом.
var jsonData = "./data/tracking.json";
В моей попытке конвертировать JSON в GeoJSON я попробовал это.
var outGeoJson = {}
outGeoJson['properties'] = jsonData
outGeoJson['type']= "Feature"
outGeoJson['geometry']= {"type": "Point", "coordinates":
[jsonData['lat'], jsonData['lon']]}
console.log(outGeoJson)
Проверил консоль и обнаружил, что координаты в массиве из файла JSON не определены.
Мой поиск причины, по которой это происходило неопределенно, не удался. Моя теория здесь, может быть, потому что JSON имеет ключ позиций перед массивом и тот факт, что это массив. Я продолжаю искать правильное решение, которое могло бы решить эту проблему. Я попробовал это решение дальше.
var geojson = {
type: "FeatureCollection",
features: [],
};
for (i = 0; i < jsonData.positions.length; i++) {
if (window.CP.shouldStopExecution(1)) {
break;
}
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
}
});
}
window.CP.exitedLoop(1);
console.log(geojson)
Это решение дало мне ошибку в консоли Uncaught TypeError: Cannot read property 'length' of undefined
.
Попытка устранить неполадки в этом решении в течение еще нескольких часов, и это также не удалось. Вот пример тестового файла JSON, с которым я работаю.
{
"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, lat, lon, dir, first, last anyways. Остальное я могу обойтись без. Являются ли вышеупомянутые примеры, которые я пробовал, хорошим или правильным способом конвертировать его? Если нет, то есть ли у кого-то лучшее предложение, чем то, что я пытался, что я могу пропустить или пропустить, что является довольно хорошей возможностью из-за того, что он очень зеленый для этого языка? Заранее спасибо!
РЕДАКТИРОВАТЬ: Так как это было доведено до моего внимания, я не загружаю файл JSON, это то, что я сделал, чтобы загрузить его, так как предложения не работают, поскольку они применяются к node.js и не часть родного JavaScript.
$.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)
});
При этом файл загружается в том виде, в котором он отображается в консоли, и конвертируется в GeoJSON. Я оставлю это как есть, пока нет лучшего решения.