如何通过PHP使用Namingm API检索纬度和经度?
下面是我当前正在使用的代码,其中我向函数传递了一个地址,并且Namingm API应该返回一个JSON,我可以从中检索地址的纬度和经度如何通过PHP使用Namingm API检索纬度和经度?,php,json,geocoding,latitude-longitude,nominatim,Php,Json,Geocoding,Latitude Longitude,Nominatim,下面是我当前正在使用的代码,其中我向函数传递了一个地址,并且Namingm API应该返回一个JSON,我可以从中检索地址的纬度和经度 function geocode($address){ // url encode the address $address = urlencode($address); $url = 'http://nominatim.openstreetmap.org/?format=json&addressdetails=1&q
function geocode($address){
// url encode the address
$address = urlencode($address);
$url = 'http://nominatim.openstreetmap.org/?format=json&addressdetails=1&q={$address}&format=json&limit=1';
// get the json response
$resp_json = file_get_contents($url);
// decode the json
$resp = json_decode($resp_json, true);
// get the important data
$lati = $resp['lat'];
$longi = $resp['lon'];
// put the data in the array
$data_arr = array();
array_push(
$data_arr,
$lati,
$longi
);
return $data_arr;
}
问题是,我总是以一个内部服务器错误告终。我已经检查了日志,并且不断重复:
[[DATE]美国/纽约]PHP通知:未定义索引:第[…]行[…]中的标题
[[DATE]America/New_York]PHP注意:未定义变量:第[…]行上[…]PHP]中的区域。
这里可能有什么问题?这是因为纽约的
吗?我尝试使用str\u replace
将其与+
交换,但这似乎不起作用,仍然返回相同的错误
此外,URL工作正常,因为我已经通过JavaScript和手动测试了它(尽管{$address}
被替换为实际地址)
非常感谢您的帮助,谢谢
编辑
这个问题现在已经解决了。问题似乎在于,由于变量title
和area
不存在,因此Namination无法拾取某些值,因此返回一个错误,因此您提到的错误似乎与您发布的代码无关。我可以为您发布的geocode
功能提供一些帮助
主要问题是,$url
字符串周围有单引号-这意味着$address
不会被注入字符串,请求的是“$address”的lat/long。使用双引号可以解决此问题:
$url = "http://nominatim.openstreetmap.org/?format=json&addressdetails=1&q={$address}&format=json&limit=1";
其次,响应包含一个数组(如果不是针对limit
参数,则可能会出现多个结果)。因此,当从响应中获取详细信息时,请查看$resp[0]
,而不仅仅是$resp
// get the important data
$lati = $resp[0]['lat'];
$longi = $resp[0]['lon'];
总而言之,为了简单起见,在末尾添加了阵列构建的缩写:
function geocode($address){
// url encode the address
$address = urlencode($address);
$url = "http://nominatim.openstreetmap.org/?format=json&addressdetails=1&q={$address}&format=json&limit=1";
// get the json response
$resp_json = file_get_contents($url);
// decode the json
$resp = json_decode($resp_json, true);
return array($resp[0]['lat'], $resp[0]['lon']);
}
一旦您满意它的工作原理,我建议为http请求和响应的解码/返回添加一些错误处理。感谢您的响应!出于某种原因,我仍然收到服务器错误,错误日志也显示了相同的内容。文件本身工作正常,因为它可以在没有函数的情况下执行。@OsmanAmerican/New_York
部分是日志时间戳的时区。你能在哪里发布你使用的标题
和区域
?我已经更新了问题的详细信息,我正在使用Slack API检索关于用户团队的数据。代码在我使用Google的Geocoder时起作用,但错误发生在切换到NagnitmRight时,因此这些错误可能不相关。试着看看你是否能把实际的问题表现出来。好吧,这似乎是提名本身的问题。我已经在[上]测试了地址,它们不返回值。它与谷歌地图地理编码器配合使用效果很好