我按照此处的说明安装了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 />
我做错了什么?
答案 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);
}
这是所有猜测,因为文档缺乏细节,我没有安装此软件包来测试它。