如何返回Geocoder请求的单个结果?

时间:2015-07-16 13:42:58

标签: php

我按照此处的说明安装了Geocoder:https://github.com/geocoder-php/Geocoder

然后我尝试运行这个例子:

require __DIR__.'/vendor/autoload.php';
$bingApikey = 'xxxxxxxxxxxxxxxxxxxxxxx';
$curl     = new \Ivory\HttpAdapter\CurlHttpAdapter();
$geocoder = new \Geocoder\Provider\BingMaps($curl,$bingApikey);
$result =  $geocoder->geocode('Μπουμπουλίνας 1, 155 62 Χολαργός Αττικής');

当我尝试var_dump $ result时,我收到一个错误:

<b>Catchable fatal error</b>:  Object of class Geocoder\Model\AddressCollection could not be converted to string in <b>C:\MAMP\htdocs\Wind\geocoding\geocodeCheck.php</b> on line <b>21</b><br />

我做错了什么?

2 个答案:

答案 0 :(得分:4)

这个文档非常糟糕..要以我可以使用的格式获取数据,我必须使用转储器调用以及json解码器。源中包含各种翻斗车,你需要确保当你打电话给他们时,你的呼叫是区分大小写的(看看你下载的源代码是否有正确的翻斗车名称和作者提供的例子,如果你只是切并粘贴)。

这是我如何让事情发挥作用:

require 'vendor/autoload.php';

$curl     = new \Ivory\HttpAdapter\CurlHttpAdapter();
$geocoder = new \Geocoder\Provider\GoogleMaps($curl);

$data = $geocoder->geocode("1600 Pennsylvania Ave Washington DC")->first();

$dumper = new \Geocoder\Dumper\GeoJson();
$jsondata = $dumper->dump($data);

$decoded = json_decode($jsondata);

print_r ($decoded->{'geometry'}->{'coordinates'});

json数组的最终结果给出了lat和long

Array
(
    [0] => -76.9818437
    [1] => 38.8791981
)

如果您打印出整个解码后的阵列,您将得到以下所有内容。

stdClass Object
(
    [type] => Feature
    [geometry] => stdClass Object
        (
            [type] => Point
            [coordinates] => Array
                (
                    [0] => -76.9818437
                    [1] => 38.8791981
                )

        )

    [properties] => stdClass Object
        (
            [streetNumber] => 1600
            [streetName] => Pennsylvania Avenue Southeast
            [postalCode] => 20003
            [locality] => Washington
            [adminLevels] => stdClass Object
                (
                    [1] => stdClass Object
                        (
                            [name] => District of Columbia
                            [code] => DC
                        )

                )

            [country] => United States
            [countryCode] => US
        )

    [bounds] => stdClass Object
        (
            [south] => 38.8791981
            [west] => -76.9818437
            [north] => 38.8791981
            [east] => -76.9818437
        )
)

希望这会有所帮助

答案 1 :(得分:1)

来自文档:

  

geocode()和reverse()方法都返回一个Address对象集合

     

first()检索第一个Address;

https://github.com/geocoder-php/Geocoder#address--addresscollection

尝试

$result =  $geocoder->geocode('Μπουμπουλίνας 1, 155 62 Χολαργός Αττικής')->first();

仅基于文档(因此有限),还有其他尝试:

$result = $geocoder->geocode('Μπουμπουλίνας 1, 155 62 Χολαργός Αττικής');
if($result->count() > 0) {
    echo $result->first();
}
else {
   echo 'no result';
}

我还假设你可以这样做:

$result = $geocoder->geocode('Μπουμπουλίνας 1, 155 62 Χολαργός Αττικής');
for($i=0; $i<$result->count(); ++$i) {
   echo $result->get($i);
}

这是所有猜测,因为文档缺乏细节,我没有安装此软件包来测试它。