我使用立交api獲取有關某個地區醫院的信息。 這是我用它來獲取數據的網址:意外的令牌<位於JSON中的立交橋api請求中的位置0
https://overpass-api.de/api/interpreter?data=[out:json][timeout:25];(node[amenity=hospital](41.862018386633096,12.380561828613283,41.9435317956981,12.612133026123049);way[amenity=hospital](41.862018386633096,12.380561828613283,41.9435317956981,12.612133026123049););out;
由於醫院可以也比簡單的節點方式等,我都以不同的方式對待他們,所以我這樣做:
fetch(url).then(response => {
return response.json();
}).then(results => {
results.elements.forEach(e => {
console.log('Name '+e.tags["name"])
if(e.type == "way"){
console.log('ID: ' + e.id)
let urlWay = `https://overpass-api.de/api/interpreter?data=[out:json][timeout:25];(way[amenity=hospital](${e.id}););out%20center%20meta;`;
fetch(urlWay).then(response=> {
return response.json()
}).then(result => {
lat = result.elements[0].center["lat"]
lon = result.elements[0].center["lon"]
})
} else {
//get lat lon info normally
}
然後我使用lat和lon在地圖上放置一個標記。
對此的解釋是,「方式」沒有單個緯度信息,但它由多個節點組成。這是一個例子:
{
"type": "way",
"id": 107248762,
"nodes": [
1233017145,
1233017732,
1233017520,
1233017183,
1233018290,
2144891055,
1233017895,
1233017145
],
"tags": {
"amenity": "hospital",
"wheelchair": "yes"
}
},
因此,要獲得緯度經度信息,我用的是「ID」屬性來獲取建築物的中心,通過在代碼中使用urlWay
以上,指定out center meta
。我使用elements[0]
,因爲數組只有一個元素。您可以通過單擊here來查看輸出示例。
的問題是,在某些時候,同時獲取有關途徑的信息,並把標記在地圖上,程序停止,並給我的錯誤:
SyntaxError: Unexpected token < in JSON at position 0 in overpass api request
我假設(不知道我是對的),我得到的這些JSON文件中有一個沒有正確寫入,所以我想知道如何防止此異常,也許只是忽略格式不正確的文件。
編輯:我修改了用戶mmd在答案中提出的代碼並正確工作,因此可能是與速率限制相關的錯誤。
如果您轉到瀏覽器調試工具的網絡選項卡,您可以看到請求的實際響應,以幫助您瞭解發生了什麼。您正在調用的腳本很有可能會響應html錯誤或警告頁面,所以第一個字符是'<'。發生在我身上很多 – Kaddath
你能提供一個真實的[mcve]嗎?你在共享的代碼中有[語法錯誤](http://jsbin.com/gifuwopewi/1/edit?js,console),並期望每個想要測試你的測試的人都可以自己修復它們,這是不合理的。 – Quentin
問題是,我不知道哪個不同ID的調用給出了錯誤,所以我正在尋找一種方法來避免這個錯誤,或許可以先驗地忽略這些文件。 @Quentin我會修改這個問題。 – User999