Как получить название города из ширины и долготы?

417
30 мая 2017, 01:53

Получил широту и долготу (navigator.geolocation.getCurrentPosition). Можно ли получить название города?

if(navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
              var latitude = position.coords.latitude;
              var longitude = position.coords.longitude;                 
        alert(latitude+' '+longitude);
  });
} else {
    alert("Geolocation API не поддерживается в вашем браузере");
}

И вообще как это выглядит?
1) узнал ширину и долготу,
2) потом эти данные вставляю в запрос к апи яндекса
3) получил город (как раз как его вывести?)

По IP не вариант.

Answer 1

Я решил вашу задачу с использованием yandex api maps: Привожу пример и после него подробно расскажу что и как в нем происходит.

<html> 
    <head> 
        <script charset="utf-8" src="https://api-maps.yandex.ru/1.1/index.xml" type="text/javascript"></script> 
    </head> 
    <body> 
        <script>             
        // Создание обработчика для события window.onLoad 
        YMaps.jQuery(function () { 
            // Создание экземпляра карты и его привязка к созданному контейнеру 
            var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]), 
                 
                // Центр карты 
                center, 
                 
                // Масштаб 
                zoom = 10; 
 
            // Получение информации о местоположении пользователя 
            if (YMaps.location) { 
                center = new YMaps.GeoPoint(YMaps.location.longitude, YMaps.location.latitude); 
 
                if (YMaps.location.zoom) { 
                    zoom = YMaps.location.zoom; 
                } 
 
                map.openBalloon(center, "Место вашего предположительного местоположения:<br/>" 
                    + (YMaps.location.country || "") 
                    + (YMaps.location.region ? ", " + YMaps.location.region : "") 
                    + (YMaps.location.city ? ", " + YMaps.location.city : "") 
                ) 
            }else { 
                center = new YMaps.GeoPoint(37.64, 55.76); 
            } 
 
            // Установка для карты ее центра и масштаба 
            map.setCenter(center, zoom); 
             
            console.log(YMaps.location.country); 
            console.log(YMaps.location.region); 
            console.log(YMaps.location.city); 
        }); 
        </script> 
         
        <div style="width:600px;height:400px" id="YMapsID" class="YMaps YMaps-cursor-grab"></div> 
    </body> 
</html>

Там после инициализации YMaps у нас уже есть координаты пользователя, я решил немного расширить спектор вашего вопроса и сделал карту то же, где обозначено местоположение пользователя.

Если я правильно понял вы хотели взять координаты пользователя и узнать его местонахождение, после того как инициализирована карта у вас в свойствах YMaps есть и город и страна пользователя, которые можно взять вот так:

YMaps.location.country
YMaps.location.city

То есть если вам и не нужна будет карта то вы можете после инициализации YMaps вы просто можете взять и использовать данные под свои нужды без прорисовки карты.

READ ALSO
Передача переменной через AJAX magnificPopup

Передача переменной через AJAX magnificPopup

В окне magnificPopup через AJAX мне необходимо передать переменную, исходя из документации и поиска по интернету достиг следующего кода:

252
Получение данных

Получение данных

Требуется получить данные, введенные пользователем, из динамического количества поля ввода, и добавить их в бд с помощью фреймворка yii2

189
Js реальная высота элемента iframe

Js реальная высота элемента iframe

Как узнать высоту содержимого в iframe? В браузере через дебагер показывает нормальную высотуНо вот как с помощью js эту высоту вернуть? Такие...

406
В мобильной версии сайта скролл не работает

В мобильной версии сайта скролл не работает

Всем приветВ моем сайте в мобильной версии(max-width:480px) не работает скролл вниз

316