You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何部分地址调用Nominatim.openstreetmap.org时返回错误?

问题分析

你的问题出在地址字符串的URL编码不完整:只手动替换了空格为+,但像Brasília里的í、São Paulo里的ã这类非ASCII字符没有做URL编码,直接传入请求URL会导致Nominatim服务器识别为无效HTTP请求。官网能正常查询是因为浏览器自动完成了完整的URL编码,而你的代码没做这一步。

修复方案

不要手动替换空格,改用PHP的urlencode()函数对整个地址字符串做编码,确保所有特殊字符都符合URL规范。修改后的代码如下:

$addr = 'Brasília/DF, Brasil';
// 用urlencode处理完整地址,自动编码所有特殊字符和空格
$url = 'https://nominatim.openstreetmap.org/search?q=' . urlencode($addr) . '&format=jsonv2&polygon=0&addressdetails=0';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = [
    'Accept: text/html,application/xhtml+xml,application/xml',
    'Accept-Language: en-US,en,pt-BR',
    'Content-Type: text/html;charset=utf-8',
    'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0',
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec($ch);
curl_close($ch);
var_export($server_output);
补充说明
  • urlencode()会把空格转换成+,同时编码所有非ASCII字符和特殊符号,完全符合URL规范。
  • 如果你用R语言的download.file或geocode_OSM,同样需要确保地址参数做了完整的URL编码,比如R里用URLencode()函数处理地址字符串后再传入请求。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:22:05