Есть ли способ узнать местоположение пользователей, не устанавливая Google Gears? - PullRequest
7 голосов
/ 24 ноября 2008

Я не хочу, чтобы пользователь устанавливал Google Gears, чтобы я мог показать ему его предполагаемое местоположение. Есть ли способ получить местоположение без использования Google Gears?

Я нашел http://www.wipmania.com/de/blog/google-geolocation-api/, но он не дает пример.

Ответы [ 6 ]

10 голосов
/ 24 ноября 2008

Google предоставляет способ получить местоположение пользователя с помощью AJAX API loader . Это будет работать даже без установленных Gears. Просто включите тег сценария, указывающий на JsAPI:

<script type="text/javascript" 
   src="http://www.google.com/jsapi?key=ABCDEFG">
</script>

Когда приложение использует загрузчик AJAX API, загрузчик пытается определить местоположение клиента на основе его IP-адреса. Если этот процесс завершается успешно, местоположение клиента, ограниченное уровнем метро, ​​становится доступным в свойстве google.loader.ClientLocation. Если процессу не удается найти соответствие, это свойство имеет значение null.

if (google.loader.ClientLocation){
  var center = new google.maps.LatLng(
    google.loader.ClientLocation.latitude,
    google.loader.ClientLocation.longitude
  );
  map.setCenter(center);
}

При заполнении объект google.loader.ClientLocation заполняется следующими свойствами гранулярности уровня метро:

  • ClientLocation.latitude - предоставляет широту низкого разрешения, связанную с IP-адресом клиента
  • ClientLocation.longitude - предоставляет долготу низкого разрешения, связанную с IP-адресом клиента
  • ClientLocation.address.city - указывается название города, связанного с IP-адресом клиента
  • ClientLocation.address.country - указывается название страны, связанной с IP-адресом клиента
  • ClientLocation.address.country_code - указывается название кода страны ISO 3166-1, связанного с IP-адресом клиента
  • ClientLocation.address.region - указывается название региона для конкретной страны, связанное с IP-адресом клиента
9 голосов
/ 24 ноября 2008

Обычно это называется IP-геолокацией.

Пример: здесь .

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

В PHP это работает довольно хорошо:

<?php
 if(isset($_GET["ip"])){
   echo geolocate($_GET["ip"]);
 }

 function geolocate($ip){
   $raw_html = file_get_contents("http://www.geody.com/geoip.php?ip=$ip");
   if(preg_match('/Location:(.*)/',$raw_html,$matches)){
     $location_raw = $matches[1];

     //Get rid of pesky HTML tags
     $location = preg_replace("/<[^>]*>/","",$location_raw);
     return $location;
   }else{
     return "ERROR";
   }
 }
5 голосов
/ 24 ноября 2008

С гео-сервисом или библиотекой следует обращать внимание на то, что они никогда не будут на 100% точными. Мы используем один, IP2Location , и он действительно является постоянным источником жалоб в наш отдел обслуживания клиентов. Мы ищем способы изменить поведение сайта и учитываем факторы его полного удаления.

Проблема заключается в том, что бремя ассоциирования IP с пользователем лежит на интернет-провайдере пользователей. У них есть большие блоки диапазонов IP-адресов, и они регистрируют, какие блоки принадлежат определенному местоположению. Проблема в том, что интернет-провайдеры часто не обновляют эту информацию, когда они перемещают блоки или блоки покрывают слишком большую площадь.

Например, я живу примерно в шестидесяти милях к северу от Манхэттена, но мой IP-адрес часто показывает, что я нахожусь в Чикаго с большинством средств поиска. У меня есть FIOS, и я разговаривал с парой других людей, которые подтвердили то же поведение.

3 голосов
/ 09 июля 2012

Вы можете использовать HTML5 для этой цели. Это довольно просто. Здесь является примером.

1 голос
/ 19 октября 2012

Вы можете геокодировать IP-адрес с помощью этого простого кода. Работает отлично. Попробуйте это:

function functionname(Your IP Here)
{

    $ip = $ClientIP;

    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");

    $json = json_decode($json,true);

    return $json;
}
1 голос
/ 13 апреля 2009

Если ваши пользователи на мобильном телефоне, Xitfy также является бесплатной опцией. У них есть небольшой клиент, который после того, как пользователь соглашается, может быть легко установлен на их телефон. Затем вы можете вызвать API на основе REST, чтобы получить их точный широту / долготу от gps / wifi или сотовой вышки.

Они поддерживают Android, Windows Mobile, BlackBerry и Symbian, которые охватывают почти все смартфоны.

...