BazingaGeocoderBundle,Google Maps Geocoding API,网址无法使用地理编码器,但直接在浏览器

时间:2015-12-17 22:12:15

标签: symfony curl google-geocoder

我想使用BazingaGeocoderBundle从邮政编码中检索long和lat  https://github.com/geocoder-php/BazingaGeocoderBundle/blob/master/README.md

当我在没有API_KEY的情况下使用它时,它正在工作,但当然很快停止抱怨超额配额。

1)当我注册“Google Maps Geocoding API”时,将API_KEY添加到: C:\ Bitnami \ wampstack-5.5.30-0 \ sym_prog \ proj2_27 \厂商\ willdurand \地址解析器\ SRC \地址解析器\提供商\ GoogleMapsProvider.php

const ENDPOINT_URL_SSL = 'https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=key';
const ENDPOINT_URL = 'https://maps.googleapis.com/maps/api/geocode/json?address=%s&key='; // just in case there is something wrong with private $useSsl = true; setting

如果我在浏览器中尝试网址 - 我会得到所有坐标的结果:

如果我尝试使用之前完美运行的bazinga.geocoder(当然如果我尝试在没有密钥的情况下使用它,我现在会收到超额配额错误。):

 $addArr = $this->container
                ->get('bazinga_geocoder.geocoder')
                ->using('google_maps')
                ->geocode($addrArr[$random_addr_index]);

我现在收到错误:

 [Geocoder\Exception\NoResultException]
 Could not execute query http://maps.googleapis.com/maps/api/geocode/json?ad
 dress=E16%201BH&key=AIzaSyB01WnF2o3M3GzUqn5UWZ_dVffssRrVXaQ

如果我将网址复制到浏览器 - 它会列出结果。

根据文档,Geocoder默认附带egeloen / http-adapter库:https://github.com/geocoder-php/Geocoder#http-adapters

2) 如果我在配置和服务中配置适配器, 我收到错误:Invalid type for path " bazinga_geocoder.adapter ". Expected array, but got string

C:\ Bitnami \ wampstack-5.5.30-0 \ sym_prog \ proj2_27 \应用\配置\ config.yml

bazinga_geocoder:     
    providers:
        google_maps: ~
    adapter: geocoder_adapter

C:\ Bitnami \ wampstack-5.5.30-0 \ sym_prog \ proj2_27 \应用\配置\ services.yml

services:
    geocoder_adapter:
        class: Geocoder\HttpAdapter\CurlHttpAdapter
        public: false

我的错误在哪里?适配器在这里重要吗?还有什么我必须在vendor \ willdurand \ geocoder \ src \ Geocoder \ Provider \ GoogleMapsProvider.php中更改?

3)如何正确配置使用其他建议的适配器?

* `BuzzHttpAdapter` to use [Buzz](https://github.com/kriswallsmith/Buzz), a lightweight PHP 5.3 library for issuing HTTP requests;
* `GuzzleHttpAdapter` to use [Guzzle](https://github.com/guzzle/guzzle), PHP 5.3+ HTTP client and framework for building RESTful web service clients;
* `SocketHttpAdapter` to use a [socket](http://www.php.net/manual/function.fsockopen.php);
* `ZendHttpAdapter` to use [Zend Http Client](http://framework.zend.com/manual/2.0/en/modules/zend.http.client.html).

1 个答案:

答案 0 :(得分:1)

这是您的地址信息无效的时候。

在您的情况下,您的地址信息:

http://maps.googleapis.com/maps/api/geocode/json?address=E16%201BH

“address = E16%201BH”在哪里是URL编码字符串的实际地址。 如您所见,这不是一个有效的地址。

它应该是这样的:

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway%2C+Mountain+View%2C+CA

为了使您的代码更具未来性,您应该尝试捕获编码函数。

try {
    $addArr = $this->container
                ->get('bazinga_geocoder.geocoder')
                ->using('google_maps')
                ->geocode($addrArr[$random_addr_index]);
} catch (Exception $exception) {
     $addArr = false;
}