Отримайте розташування GPS через веб-браузер


164

Я розробляю веб-сайт для мобільних пристроїв, там я інтегрував Карти Google, мені потрібно динамічно заповнювати поле "Від" Карт Google.

Чи можливо отримати місцезнаходження GPS через веб-браузер і динамічно заповнити його в полі "Від" на карті Google?


2
Які мобільні телефони ви плануєте підтримувати?
Rowland Shaw

Я хочу підтримувати всі мобільні браузери, але пріоритет у i-телефоні
Ганеш,

Можливо, вам буде краще писати нативну програму, оскільки це дозволить тісніше інтегруватись із обладнанням, де воно доступне
Rowland Shaw

16
якщо потреба стосується лише місця розташування, то рідне додаток дуже непосильне. iOS - не єдиний мобільний телефон, він просто пріоритетний.
Гонсало Вейга

Відповіді:


194

Якщо ви використовуєте API геолокації , це буде так само просто, як і використання наступного коду.

navigator.geolocation.getCurrentPosition(function(location) {
  console.log(location.coords.latitude);
  console.log(location.coords.longitude);
  console.log(location.coords.accuracy);
});

Можливо, ви також зможете використовувати API розташування клієнтів Google .

Цю проблему обговорювали в розділі " Чи можливо виявити місцезнаходження GPS мобільного браузера?" і Отримати дані про позиції з мобільного браузера . Ви можете знайти більше інформації там.


Чи все ще згадується API розташування клієнта Google? Надане посилання переходить до Google Loader
Shane N

1
Я не бачу його на цій сторінці як одного з доступних API. - Ви можете використовувати API Latitude Google: code.google.com/apis/latitude - За допомогою цього можна отримати поточне місцезнаходження клієнта: code.google.com/apis/latitude/v1/…
dochoffiday

1
Для майбутніх читачів точність вимірюється в метрах .
johnnyRose

Хей, чи можемо ми ввімкнути місце спільного доступу автоматично шляхом кодування
містер Томар

2
Це вимагає використання вашого місцезнаходження?
Джек

21

Щоб дати трохи більш конкретну відповідь. HTML5 дозволяє отримати геокоординати, і це робить досить пристойну роботу. В цілому підтримка браузера для геолокації є досить хорошою, всі основні браузери, крім ie7 та ie8 (і opera mini). IE9 виконує цю роботу, але є найгіршим показником. Оформити замовлення caniuse.com:

http://caniuse.com/#search=geol

Також потрібне схвалення вашого користувача для доступу до їх місцезнаходження, тому переконайтеся, що ви це перевірите, і дайте кілька пристойних інструкцій на випадок, якщо його вимкнено. Особливо для дозволів на ввімкнення Iphone для Safari трохи громіздко.


dotnetcurry.com/aspnet-mvc/782/… - це корисна довідка для впровадження у середовищі asp.net mvc
Walter de Jong,

13

Використовуйте це, і всю інформацію ви знайдете на веб- сайті http://www.w3schools.com/html/html5_geolocation.asp

<script>
var x = document.getElementById("demo");
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}
function showPosition(position) {
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
}
</script>

1
Лише зауваження: getCurrentPosition () та watchPosition () більше не працюють у небезпечних джерелах. Щоб скористатися цією функцією, слід розглянути можливість переключення програми на захищене джерело, наприклад, HTTPS.
користувач2589273

4

Існує API GeoLocation , але підтримка веб-переглядача наразі досить тонка. Більшість сайтів, які цікавляться подібними речами, використовують базу даних GeoIP (зі звичайними умовами щодо неточності такої системи). Ви також можете ознайомитись із сторонніми послугами, які потребують співпраці користувачів, таких як FireEagle .


1
дякую за швидку відповідь. якщо можливо, ви можете надати мені ще кілька порад ...
Ганеш,

2

Спостерігається

/*
  function geo_success(position) {
    do_something(position.coords.latitude, position.coords.longitude);
  }

  function geo_error() {
    alert("Sorry, no position available.");
  }

  var geo_options = {
    enableHighAccuracy: true,
    maximumAge        : 30000,
    timeout           : 27000
  };

  var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, geo_options);
  */
  getLocation(): Observable<Position> {
    return Observable.create((observer) => {
      const watchID = navigator.geolocation.watchPosition((position: Position) => {
        observer.next(position);
      });
      return () => {
        navigator.geolocation.clearWatch(watchID);
      };
    });
  }

  ngOnDestroy() {
    this.sub.unsubscribe();
  }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.