Http Geocoder(谷歌)准确度

时间:2010-06-05 00:33:28

标签: geocoding google-geocoder

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

我按照方式调用geocder api http://maps.google.com/maps/geo?q= {地址}&安培;输出= CSV&安培;传感器=假安培;键= 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。)
  4. 从上面可以明显看出,当街道名称附加了前提/场地时,谷歌服务器没有返回最佳准确度。

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

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

2 个答案:

答案 0 :(得分:0)

这很简单,只需要做一个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

答案 1 :(得分:0)

今天当我检查地址“Key Arena,305 Harrison Street,Seattle,WA 98109”确实将准确性恢复为9.所以我假设有一些地理编码服务的故障或谷歌改变了他们的算法..