Это довольно легко, просто сделайте оператор 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 ().