【问题标题】:PHP Real Estate Google Geocoder update V2 to V3PHP Real Estate Google Geocoder 更新 V2 到 V3
【发布时间】: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


    【解决方案1】:

    $geocode = !(...bunch of stuff...); 说“取那一堆东西并将其评估为布尔值(即真或假)。然后否定它(即,如果它是真的,让它成为假;如果它是假的,让它成为真的) 。”查看the documentation 了解有关逻辑运算符的更多信息。

    所以你需要从括号中的内容开始:

    $listing  // does the listing object exist?
    && $listing->getAddress1() == $commonFieldValues['address_1']   // and does "address1" equal this other thing
    && $listing->getAddress2() == $commonFieldValues['address_2']   // and does "address2" equal this other thing 
    && $listing->getCity() == $commonFieldValues['city']   // and does "city" equal this other thing
    && $listing->getState() == $commonFieldValues['state']   // you get the picture...
    && $listing->getZipCode() == $commonFieldValues['zip_code']
    

    如果这一切都是真的,那么$geocode 将会是假的(因为! 运算符)并且只有当$geocode 为真时才会进行地理编码。

    我对你的代码了解不多,但我会这样理解

    如果我有一个列表并且地址匹配或城市匹配或州匹配或者邮政编码匹配,那么我需要对其进行地理编码。

    那么看看你的$listing 对象(它存在吗?)和你的$commonFieldValues 数组(这些值是什么,它们是你期望的吗?)。

    【讨论】:

    • 首先感谢您对 = ! 的回答,我到处寻找可能意味着什么但找不到。这是有道理的,我们不想过度查询 Ggl 地理编码。我看到发生了什么,RETS 提要运行并将提要保存到 CSV 文件,然后运行此 php 脚本,根据需要将其组织到我们的数据库更新或创建新的数据库中,它不会对数据库的更新进行地理编码。由于当我运行它以获取地理编码时所有内容都已经在数据库中,所以它应该只在新列表上运行,希望我会清空数据库并在本周末有时间的时候尝试一下。
    • 再次感谢您的解释,因为仅此一项就有帮助,我已经阅读这段代码几天了,只是想了解它的作用。我可以编写人们告诉我的代码,但我通常也喜欢知道如果我在做这些事情的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多