在来自 Overpass API 的数据上使用 javascript 中的 osmtogeojson

Using osmtogeojson in jacascript on data from Overpass API

好的,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);
            }
        };
    }

希望这次只是我忘记了什么...提前致谢。

当我使用 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");

最后我找到了另一个解决方案(实际上完全一样):我只要求一个 json 结果,然后我解析响应,它确实有效!