接入教程
GET https://nominatim.openstreetmap.org/search?q=Beijing&format=json&limit=11. 搜索地址返回坐标列表:
2. 逆地理编码:/reverse?lat=39.9&lon=116.4&format=json。
3. 必须设置有效User-Agent或Referer标识你的应用。
4. 严格遵守每秒1次请求限制,长时间运行的脚本降至每分钟4次。
5. 展示结果时必须标注 OpenStreetMap 署名。
Python 地址搜索
python
import requests
headers = {"User-Agent":"MyApp/1.0 (my@email.com)"}
url = "https://nominatim.openstreetmap.org/search"
r = requests.get(url, params={"q":"Beijing","format":"json","limit":1}, headers=headers)
print(r.json()[0]["lat"], r.json()[0]["lon"])
PHP 地址搜索
php
<?php
$ctx = stream_context_create(["http"=>["header"=>"User-Agent: MyApp/1.0 (my@email.com)\r\n"]]);
$url = "https://nominatim.openstreetmap.org/search?q=Beijing&format=json&limit=1";
$d = json_decode(file_get_contents($url, false, $ctx), true);
echo $d[0]["lat"] . "," . $d[0]["lon"];
JavaScript 地址搜索
javascript
// 浏览器端无法设置自定义User-Agent,建议服务端调用
const data = await fetch("https://nominatim.openstreetmap.org/search?q=Beijing&format=json&limit=1", {
headers: {"User-Agent": "MyApp/1.0"}
}).then(r => r.json());
console.log(data[0].lat, data[0].lon);
常见问题
使用限制是什么?
严格每秒1次请求,长脚本每秒0.06次(4次/分),必须带有效User-Agent/Referer。
需要署名吗?
需要。使用OSM数据必须标注OpenStreetMap署名,符合ODbL许可。
Aitishiku.com