Неверный адрес, возвращенный API геокодера Google

#google-maps #google-maps-api-3

#google-карты #google-maps-api-3

Вопрос:

Я использую API геокодера для получения компонентов адреса для геолокации. В приведенном ниже примере lat/long 39.35703, -81.30830 возвращает адрес «WV-2, St Marys, WV 26170, USA» из API геокодера. Однако этот адрес неверен. Когда я ищу в Google Maps 39.35703, -81.30830, я получаю правильный адрес 1 Heilman Ave, Belmont, WV 26134.

Я создал проблему в системе отслеживания проблем Google, и они направили меня сюда.

JSFiddle: https://jsfiddle.net/hoas9602 /

В примере демонстрируется получение широты / длины для 1 Heilman Ave, Belmont, WV 26134, а затем возврат к получению компонентов адреса. Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию или прояснить проблему.

 var address = "1 Heilman Ave, Belmont, WV 26134";

$(document).ready(function() {
		getPosition();
});

function getPosition() {
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({ 'address': address }, function (results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
      	var location = results[0].geometry.location;
      	$(".output-lat-long").html(location.lat()   " "   location.lng())
        getGeocodedAddress(location, false);
      } else {
        $(".output-lat-long").html("Geocode was not successful for the following reason: "   status);
      }
    });
}

function getGeocodedAddress(position) {
  var address = {
    streetNumber: null,
    streetName: null,
    city: null,
    state: null,
    stateAbbreviation: null,
    zip: null,
    county: null,
    country: null
  }

  var geocoder = new google.maps.Geocoder();
  geocoder.geocode({ 'location': position }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
    	$(".output-geocoded-formatted-address").html(results[0].formatted_address);
      for (var i = 0; i < results[0].address_components.length; i  ) {
        for (var k = 0; k < results[0].address_components[i].types.length; k  ) {
          if (results[0].address_components[i].types[k] == "street_number") {
            address.streetNumber = results[0].address_components[i].long_name;
          }
          else if (results[0].address_components[i].types[k] == "route") {
            address.streetName = results[0].address_components[i].short_name;
          }
          else if (results[0].address_components[i].types[k] == "locality") {
            address.city = results[0].address_components[i].long_name;
          }
          else if (results[0].address_components[i].types[k] == "administrative_area_level_1") {
            address.state = results[0].address_components[i].long_name;
            address.stateAbbreviation = results[0].address_components[i].short_name;
          }
          else if (results[0].address_components[i].types[k] == "postal_code") {
            address.zip = results[0].address_components[i].long_name;
          }
          else if (results[0].address_components[i].types[k] == "administrative_area_level_2") {
            address.county = results[0].address_components[i].long_name;
          }
          else if (results[0].address_components[i].types[k] == "country") {
            address.country = results[0].address_components[i].short_name;
          }
        }
      }
    }
    if (address.country == 'US') {
      address.country = 'USA';
    }
    displayAddress(address);
  });
}

function displayAddress(address) {
	$(".output-street").html(address.streetNumber   " "   address.streetName);
  $(".output-city").html(address.city);
  $(".output-state").html(address.state);
  $(".output-zip").html(address.zip);
  $(".output-county").html(address.county);
  $(".output-country").html(address.country);
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[KEY]"></script>

<div class="output-lat-long"></div>
<div class="output-geocoded-formatted-address"></div>
<div class="output-street"></div>
<div class="output-city"></div>
<div class="output-state"></div>
<div class="output-zip"></div>
<div class="output-county"></div>
<div class="output-country"></div>  

Комментарии:

1. [Ссылка для отслеживания проблем] ( issuetracker.google.com/128820283 )

2. Похоже, этот адрес не отображается на карте (пока). Мне кажется, что проблема с данными карты, и о ней следует сообщать в Google Maps с помощью опции «сообщить о проблеме с данными» (хотя это просто выглядит как старые данные, которые, вероятно, будут обновлены в какой-то момент, и вам нужно будет обойти это до тех пор). Как они сказали в своем ответе, вы должны иметь возможность использовать данные в ответе на геокодер, а не в ответе на запрос обратного геокода.

3. Хорошо, это имеет смысл. Пока я буду работать над этим и надеюсь, что данные будут исправлены в ближайшем будущем (хотя обойти это может быть сложно, поскольку бывают случаи, когда рассматриваемое решение зависит исключительно от обратного поиска геокода для получения компонентов адреса — однако мы заставим его работать). Спасибо за вашу помощь!