我要把一批店家地址轉成地圖上的點。手上的地址很完整:台南市中西區民族路二段76號。縣市、行政區、路名、段、門牌,能寫的都寫了。
它回我一片空白。查無結果。
你給的 它回你 ──────────────────────────────────────────── 台南市中西區民族路二段76號 查無結果 台南市中西區民族路 正確(兩筆相距 0.1 公里) 民族路 高雄市美濃區(不是你要的)
我以為發生了什麼
我以為地址寫得越完整,查到的機率越高。門牌是裡面最精確的那一段,多給它總不會更差。
我也以為查不到的時候,它至少會退一步,給我那條路的位置——差個幾百公尺,但方向是對的。
這兩個想法都很合理。兩個都是錯的。
實際發生了什麼
2026-09-17 實測,三個帶門牌的完整地址(台南、高雄、台中各一),三個全部查無結果。它不是查得不準,是根本沒有台灣的門牌資料。
把門牌拿掉,只留「台南市中西區民族路」:正確,兩筆結果相距 0.1 公里。
把行政區也拿掉,只給「民族路」:回我十筆。十筆全部真的叫民族路,但分別在高雄的美濃、路竹、大寮、大社、岡山、茄萣、鳥松、阿蓮——彼此最遠相距 37.2 公里,而排第一的是美濃。
把筆數放寬到四十筆,民族路橫跨三個縣市,最遠兩點相距 298 公里。民生路 316 公里,中正路 297 公里。
所以規則跟直覺相反:行政區是必要的,門牌是沒用的。
官方文件寫了嗎
沒有。官方的使用政策寫了限流(每秒最多一次請求)、寫了要帶可辨識的 User-Agent,但沒有寫台灣的門牌覆蓋率是多少。
這不是它藏起來。OpenStreetMap 的資料是志工一筆一筆建的,每個國家、每個城市的完整度都不一樣,這種事本來就不會寫進文件。文件能告訴你怎麼呼叫,不能告訴你你要的那塊資料在不在裡面。
你一定會踩的那個細節
查無結果不可怕,查無結果你會發現。
可怕的是只給路名那一種:它回 HTTP 200,回一個結構完整的結果,lat 和 lon 都是漂亮的六位小數,欄位一個不缺。它看起來跟正確答案長得一模一樣。
如果你的程式寫的是「拿第一筆」,你拿到的是美濃。不會有任何錯誤訊息告訴你這件事。
重跑這個檢查,換成你自己那批地址的路名:
同一條路名查兩次,比對座標散布範圍: 1. 帶行政區查一次 → 記下回傳的每組 lat/lon 2. 不帶行政區查一次 → 記下回傳的每組 lat/lon 3. 算第 2 組裡任兩點的最大距離 第 3 步如果超過一公里,代表這條路名在台灣不只一條。 你的程式只要有任何一次沒帶到行政區,那筆資料就是隨機的。
真正該做的是把「拿第一筆」改成「拿第一筆,然後檢查它的行政區是不是你要的那個」。不符就丟掉,寧可留空也不要留一個錯的點——地圖上一個錯的點,比地圖上一個洞難發現得多。
站內延伸
- 想自己抓地理資料 → 找工具 · 稜線自己在用的
- 想知道資料查不到時該怎麼寫 → 找方法
來源: Nominatim Usage Policy|實測端點 nominatim.openstreetmap.org/search,2026-09-17
免費的東西不會騙你說它是完整的,但它也不會主動告訴你哪裡有缺。你手上那批地址裡,查得到的那些是真的查到了,查不到的那些會安靜地變成空白——而介於中間的那一種,會變成一個看起來很正常、其實在三十七公里外的點。