我想使用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).
答案 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;
}