#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. Хорошо, это имеет смысл. Пока я буду работать над этим и надеюсь, что данные будут исправлены в ближайшем будущем (хотя обойти это может быть сложно, поскольку бывают случаи, когда рассматриваемое решение зависит исключительно от обратного поиска геокода для получения компонентов адреса — однако мы заставим его работать). Спасибо за вашу помощь!