【发布时间】:2014-04-25 17:26:16
【问题描述】:
我有以下代码(我最初没有对这个网站进行编程),但不确定它会做什么,因为每次运行它都会抛出 google 错误 610 以及为什么我们需要更新到 V3,但现在它跳到“跳过地理编码”的 else 语句。这是 Google Goecoding v2 的程序,我正在尝试将其更新到 v3。就像我说的其他人做了它然后离开了,我是那个试图修复它的人,现在它已经坏了。
$geocode = !($listing
&& $listing->getAddress1() == $commonFieldValues['address_1']
&& $listing->getAddress2() == $commonFieldValues['address_2']
&& $listing->getCity() == $commonFieldValues['city']
&& $listing->getState() == $commonFieldValues['state']
&& $listing->getZipCode() == $commonFieldValues['zip_code']
);
if($geocode) {
$baseUrl = 'http://maps.google.com/maps/geo?output=xml&key=' . OurMLS_Constants::getGoogleMapsApiKey();
$url = $baseUrl . '&q=' . urlencode(join(', ', $listing->getAddressLines(true, true)));
$xml = simplexml_load_file($url);
if($xml !== false) {
// Curious what the status codes mean see...
// http://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode
$status = $xml->Response->Status->code;
if($status != '200') {
print "Google Maps geocode request returned with status code '$status'\n";
} else {
$coordinates = $xml->Response->Placemark->Point->coordinates;
$coordinatesSplit = split(",", $coordinates);
$latitude = (float) $coordinatesSplit[1];
$longitude = (float) $coordinatesSplit[0];
$listing->setLatitude($latitude);
$listing->setLongitude($longitude);
}
}
} else {
print ', Geocoding skipped';
}
我已将其更新为我认为在 V3 中可以获得相同结果的内容(因为网站的其余部分和映射工作,只要我们可以将纬度和经度拉入数据库)(触摸不支付的内容' t坏了)
$geocode = !($listing
&& $listing->getAddress1() == $commonFieldValues['address_1']
&& $listing->getAddress2() == $commonFieldValues['address_2']
&& $listing->getCity() == $commonFieldValues['city']
&& $listing->getState() == $commonFieldValues['state']
&& $listing->getZipCode() == $commonFieldValues['zip_code']
);
if($geocode) {
$baseUrl = 'http://maps.googleapis.com/maps/api/geocode/xml';
$url = $baseUrl . "?address=" . urlencode(join(', ', $listing->getAddressLines(true, true))) . "&sensor=false" ;
$xml = simplexml_load_file($url);
if($xml !== false) {
$status = $xml->GeocodeResponse->status;
if($status != 'OK') {
print "Google Maps geocode request returned with status code '$status'\n";
} else {
$latitude = $xml->GeocodeResponse->geometry->location->lat;
$longitude = $xml->GeocodeResponse->geometry->location->lng;
$listing->setLatitude($latitude);
$listing->setLongitude($longitude);
}
}
} else {
print ', Geocoding skipped';
}
任何帮助将不胜感激,这是一项 cron 作业,用于提取 RETS 提要并保存到数据库中,因为它将信息保存到本地数据库,它应该对数据库中的地址进行地理编码,以便在显示列表时它们有谷歌地图。
我真的不确定 "$geocode = !(" 是做什么的。这个循环会针对它提取的每个地址运行,并且除了地理编码之外一切正常。
我不确定它为什么会拉取状态码,但现在它只是跳过它
这是两个xml文件 http://maps.google.com/maps/geo?output=xml&q=1600%pennsylvania%20ave%20washington%20dc http://maps.googleapis.com/maps/api/geocode/xml?address=1600%pennsylvania%20ave%20washington%20dc&sensor=false
【问题讨论】:
标签: php xml google-maps google-maps-api-3 google-geocoder