我对 javascript 的学习还很陌生,我的基础知识已经碰壁了。我已经设置了一个传单地图,我希望从 JSON 中的绳索上绘制基于 divIcon 的标记。通过我无数次的研究,试图让它发挥作用。我了解到为什么我的 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。其余的我可以不用。我尝试过的上述示例是否是一种好的或正确的转换方法?如果没有,那么有没有人有比我一直在尝试的更好的建议,我可能会错过或忽略由于对这种语言非常陌生而这是一个很好的可能性?提前致谢!
EDIT:由于它引起了我的注意,我没有加载 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)。除非有更好的解决方案,否则我将暂时保留此内容。