Как я могу получить только название города из геокодера? - PullRequest
0 голосов
/ 14 июня 2019

Я очень, очень, очень новичок в JavaScript.Я создаю приложение и решил реализовать некоторые функции геолокации, главная из которых - показать пользователю его текущее местоположение.Я сделал это, но моя функция возвращает полный адрес (например, улица, номер, район, город, почтовый индекс и страна). Это то, что сделано до сих пор ...

/* CURRENT LOCATION */
function geolocationSuccess(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;

  var geocoder = new google.maps.Geocoder();
  var latlng = {lat: latitude, lng: longitude};

  geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === google.maps.GeocoderStatus.OK) {
      if (results[0]){
        var user_address = results[0].formatted_address;
        document.getElementById("current_location").innerHTML = user_address;
      }else {
        console.log('No results found for these coords.');
      }
    }else {
      console.log('Geocoder failed due to: ' + status);
    }
  });
}

function geolocationError() {
  console.log("please enable location for this feature to work!");
}

$(document).ready(function() {
  if ("geolocation" in navigator) {
    navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError);
  } else {
    alert("Geolocation not supported!");
  }
});

Как я могу получить ипоказать только город?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Результат имеет свойство address_components.И он содержит город, почтовый индекс и т.д ...

Например, в официальной документации это содержание address_components:

[
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Pkwy",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ]

Если вы хотите получить locality дляНапример, просто сделайте

 result[0].address_components.filter(address => address.types.includes('locality'))[0].long_name
1 голос
/ 14 июня 2019

Поскольку вы возвращаете полный адрес:

var user_address = results[0].formatted_address;

, вместо этого вам нужно перебрать компоненты адреса и найти locality:

var user_city = results[0].address_components.filter(ac=>~ac.types.indexOf('locality'))[0].long_name

Структура данныхпоказано здесь: https://developers.google.com/maps/documentation/geocoding/intro

...