Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP使用Namingm API检索纬度和经度?_Php_Json_Geocoding_Latitude Longitude_Nominatim - Fatal编程技术网

如何通过PHP使用Namingm API检索纬度和经度?

如何通过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

下面是我当前正在使用的代码,其中我向函数传递了一个地址,并且Namingm API应该返回一个JSON,我可以从中检索地址的纬度和经度

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请求和响应的解码/返回添加一些错误处理。

感谢您的响应!出于某种原因,我仍然收到服务器错误,错误日志也显示了相同的内容。文件本身工作正常,因为它可以在没有函数的情况下执行。@Osman
American/New_York
部分是日志时间戳的时区。你能在哪里发布你使用的
标题
区域
?我已经更新了问题的详细信息,我正在使用Slack API检索关于用户团队的数据。代码在我使用Google的Geocoder时起作用,但错误发生在切换到NagnitmRight时,因此这些错误可能不相关。试着看看你是否能把实际的问题表现出来。好吧,这似乎是提名本身的问题。我已经在[上]测试了地址,它们不返回值。它与谷歌地图地理编码器配合使用效果很好