Как обнаружить мобильное местоположение с помощью GPRS? - PullRequest
2 голосов
/ 14 января 2012

Как вы знаете, программа Google Maps для мобильных телефонов имеет возможность находить пользователей по местоположению (сервис My Location). Я хочу знать, как Google Maps может определять местоположение пользователей с помощью интернет-мобильного телефона, GPRS (не GPS)? и можно ли написать программу на PHP или других веб-языках, которая может определять местоположение пользователей при открытии этой страницы? Я могу догадаться, что Google не использует IP-адреса пользователей для определения их местоположения, потому что, когда я пытался угадать свое местоположение, используя мой IP-адрес для мобильного Интернета, получалось неправильное местоположение.

Ответы [ 3 ]

6 голосов
/ 16 января 2012

Посмотрите на API геокодирования Google и W3 Спецификация API геолокации .Тогда это может быть полезно для вас, чтобы найти ответы.

4 голосов
/ 22 января 2012

В отсутствие фиксированного местоположения GPS обычным способом определения местоположения является обратный поиск идентификатора обслуживающей соты или обнаруженного MAC-адреса Wi-Fi. Существует серверная база данных, которая обеспечивает геолокацию всех известных сотовых сайтов, которые однозначно идентифицируются по их сотовому идентификатору или, точнее, по их глобальному сотовому идентификатору (CGI), а также по местоположению всех известных точек доступа Wi-Fi. Таким образом, зная CGI или MAC, можно определить приблизительное («грубое») местоположение, окунувшись в базу данных при сборе данных сотовой связи, таких как GPRS. Так работают коммерческие сервисы, такие как SkyHook (который Apple использовала, но больше не использует).

Это грубое положение можно сделать несколько более точным с помощью дополнительных входов, таких как уровень сигнала или цифровые карты.

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

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

1 голос
/ 22 января 2012

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

<!DOCTYPE html>
<html>
<head>
<title>Google Maps JavaScript API v3 Example: Map Geolocation</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css"
  rel="stylesheet" type="text/css">
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>

<script type="text/javascript">
  var map;

  function initialize() {
    var myOptions = {
      zoom: 6,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map_canvas'),
        myOptions);

    //this is the piece of code you are interested in!!
    if(navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = new google.maps.LatLng(position.coords.latitude,
                                         position.coords.longitude);

        var infowindow = new google.maps.InfoWindow({
          map: map,
          position: pos,
          content: 'Location found using HTML5.'
        });

        map.setCenter(pos);
      }, function() {
        handleNoGeolocation(true);
      });
    } else {
      handleNoGeolocation(false);
    }
  }

  function handleNoGeolocation(errorFlag) {
    if (errorFlag) {
      var content = 'Error: The Geolocation service failed.';
    } else {
      var content = 'Error: Your browser doesn\'t support geolocation.';
    }

    var options = {
      map: map,
      position: new google.maps.LatLng(60, 105),
      content: content
    };

    var infowindow = new google.maps.InfoWindow(options);
    map.setCenter(options.position);
  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>

Обратитесь к справочнику API Google Maps здесь , чтобы узнать, как вы можете это использовать. Кроме того, ссылка на источник не заканчивается на "sensor = true". Важно, чтобы вы указали для этого значения значение true в своем источнике, если вы используете геолокацию.

...