在 javascript 中使用 osmtogeojson 处理来自 Overpass API 的数据
2019-12-23
437
好的,osmtogeojson 又出现了一个问题(我想是小问题)... 所以基本上我需要通过 Overpass API 从 openstreetmap 下载数据,但采用 geojson 格式。我不太习惯 HTTPS 请求和响应,所以我想我错过了这个和 osmtogeojson 的使用之间的一些内容,因为我得到了这个:
osmtogeojson.js:1 Uncaught TypeError: Cannot read property 'length' of undefined
at osmtogeojson.js:1
at i (osmtogeojson.js:1)
at XMLHttpRequest.xhr.onload (map_common.js:184)
使用以下测试代码(xml 数据似乎正确,当我使用 osmtogeojson 测试页面时,它在 geojson 中被正确转换)。
function updateData(sourcename){
var url = "https://overpass-api.de/api/interpreter?data=node[name=\"Châtenay-Malabry\"];out;"
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.timeout = 6000;
try{
xhr.send(null);
}
catch (error){
alert(error);
}
xhr.ontimeout = function(){
console.log("time out !");
};
xhr.onload = function(){
if (xhr.readyState === 4 && xhr.status===200){
var out = xhr.response;
console.log(out);
var out_geojson = osmtogeojson(out);
}
else{
console.log(xhr.status);
}
};
}
希望这次只是我忘记了一些东西... 提前致谢。
2个回答
当我使用 response.data 时,使用 axios 进行调用时也遇到了同样的错误 您必须使用响应的 xml。 然后它对我来说工作正常。
axios.get(overpassUrl).then(response => {
var resultAsGeojson = osmtogeojson(response.request.responseXML);
如果 XMLHttpRequest 没有 xml 响应,您必须将响应解析为 xml。
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
Helmut Seitz
2019-12-30
最后我找到了另一个解决方案(实际上完全相同):我只要求一个 json 结果,然后我解析响应并且它确实有效!
C. Roux
2019-12-31