Http Geocoder (Google) Уровень точности - PullRequest
0 голосов
/ 05 июня 2010

Я геокодирую большое количество введенных пользователем адресов и заинтересован в возвращаемых уровнях точности. Моя цель - получить ЛУЧШУЮ ТОЧНОСТЬ для данного адреса.

Я называю Geocder API следующим образом http://maps.google.com/maps/geo?q={address}&output=csv&sensor=false&key=xx

теперь уровни точности возвращаются для одного и того же адреса с / без названия помещения

  1. q = Key Arena, 305 Harrison Street, Сиэтл, Вашингтон 98109 (точность 5)
  2. q = 305 Harrison Street Seattle, WA 98109 (Точность 8)
  3. q = Key Arena, Сиэтл, штат Вашингтон 98109 (точность 9).

Из вышесказанного очевидно, что серверы Google не дают наилучшей точности, когда к названию улицы добавляется помещение / место проведения.

вопрос :) есть ли способ передать полный адрес (с названием помещения / т. е. случай 1) и получить максимальную точность. (или как сообщить серверу Google, что адрес передается с названием помещения / здания и улицы)

(если вы думаете, почему бы просто не использовать вариант 3, ответ таков: Пользователь вводил адреса, они могли ввести «дом моей мамы» для помещения, с точным адресом улицы. в этом случае я хочу, чтобы точность была 8, а не 5)

Ответы [ 2 ]

0 голосов
/ 01 июля 2010

Что ж, сегодня, когда я проверил адрес "Key Arena, 305 Harrison Street, Seattle, WA 98109", он возвращает точность как 9. Поэтому я предполагаю, что либо был какой-то сбой с сервисом геокодирования, либо Google изменил их алгоритм ..

0 голосов
/ 11 июня 2010

Это довольно легко, просто сделайте оператор if, чтобы проверить и увидеть, какова точность. Если оно слишком низкое, попробуйте ввести код без указания названия помещения. В моем случае ниже, я пытаюсь 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

См. Адреса геокодирования с PHP / MySQL для получения более подробной информации о том, что я делаю в format_address () и geocode_address ().

...