【问题标题】:Http Geocoder (Google) Accuracy levelHttp Geocoder (Google) 准确度级别
【发布时间】:2010-06-05 00:33:27
【问题描述】:

我正在对大量用户输入的地址进行地理编码,并对返回的准确度级别感兴趣。我的目标是获得给定地址的最佳可能准确度分数。

我按照以下方式调用 geocder api http://maps.google.com/maps/geo?q={address}&output=csv&sensor=false&key=xx

现在返回具有/不具有前提名称的相同地址的准确度级别

  1. q = Key Arena, 305 Harrison Street, Seattle, WA 98109(精度为 5)
  2. q = 305 Harrison Street Seattle, WA 98109(精度为 8)
  3. q = Key Arena, Seattle, WA 98109(精度为 9。)

从上面可以明显看出,当街道名称附加有前提/地点时,谷歌服务器不会返回最佳准确度。

问题是:) 有没有办法传递完整的地址(带有前提名称/即案例1) 并获得最大精度。 (或者如何告诉谷歌服务器地址与前提/建筑物名称和街道名称一起传递)

(如果你在想为什么不只使用案例 3,答案是这些是 用户输入地址,他们可以输入“我妈妈的房子”作为前提,并提供准确的街道地址。在这种情况下,我希望准确度为 8 而不是 5)

【问题讨论】:

    标签: geocoding google-geocoder


    【解决方案1】:

    这很简单,只需执行一个 if 语句来检查并查看准确性。如果它太低,请尝试在没有您的前提名称的情况下使用 goecode。在下面的例子中,我尝试 addr_2 然后 addr_3 来解决用户在 addr_1 上输入名称的情况。

    $addr_1 = urlencode($row["addr_line1"]);
    $addr_2 = urlencode($row["addr_line2"]);
    $addr_3 = urlencode($row["addr_line3"]);
    $city = urlencode($row['addr_city']);
    $state = urlencode($row['addr_state']);
    $postal = urlencode($row['addr_postalcode']);
    $country = urlencode($row['addr_country']);
    
    $address = format_address($addr_1, $city, $state, $postal, $country);
    $base_url = "http://" . MAPS_HOST . "/maps/geo?output=json&key=" . KEY;
    
    $request_url = $base_url . "&q=" . $address;
    $geocode = geocode_address($request_url);
    
    // check geocode accuracy and try again with different data if needed
    if ($geocode['accuracy'] < 6) {
          // bad geocode, try addr_2
          $address2 = format_address($addr_2, $city, $state, $postal, $country);
          $request_url2 = $base_url . "&q=" . $address2;
          $geocode = geocode_address($request_url2);
    
          if ($geocode['accuracy'] < 6) {
            // bad geocode, try addr_3
            $address3 = format_address($addr_3, $city, $state, $postal, $country);
            $request_url3 = $base_url . "&q=" . $address3;
            $geocode = geocode_address($request_url3);
          }
    }
    // process results in $geocode below
    

    有关我在 format_address() 和 geocode_address() 中所做工作的更多详细信息,请参阅 Geocoding Addresses with PHP/MySQL

    【讨论】:

    • 问题中的“大量用户输入地址”意味着我有超过 300 万个地址,估计 85% 的地址名称无效/无法识别。因此,我们试图减少对地理编码服务的调用次数。你说得对,我别无选择,只能打多个电话。
    • 今天当我检查地址“Key Arena, 305 Harrison Street, Seattle, WA 98109”确实返回准确度为 9。所以我假设地理编码服务或谷歌改变了他们算法..
    【解决方案2】:

    今天,当我检查地址“Key Arena, 305 Harrison Street, Seattle, WA 98109”时,确实返回了 9 的准确度。所以我假设地理编码服务出现了一些故障,或者谷歌改变了他们的算法..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多