2015-01-24 2 views
3

Я создал приложение с и как часть сбора данных, я хотел бы захватить текущее местоположение пользователя, когда они получают доступ к приложению и веб-сайту, используя php.Как получить текущее местоположение пользователя с помощью Google Geocode API и PHP

В идеале, я хочу сделать это максимально простым. В настоящее время, у меня есть следующий сценарий, но он имеет адрес по умолчанию в нем:

$fullurl = "http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true"; 
echo $json; 
$string .= file_get_contents($fullurl); // get json content 
$json_a = json_decode($string, true); //json decoder 

echo $json_a['results'][0]['geometry']['location']['lat']; // get lat for json 
echo $json_a['results'][0]['geometry']['location']['lng']; // get ing for json 

Я хотел бы текущее местоположение пользователя, чтобы занять место 1600 Amphitheatre Parkway, Mountain View, CA.

Любая помощь чрезвычайно ценится.

+0

вы пытаетесь получить текущее местоположение пользователя ? т.е.: координаты? если да, то какую другую информацию вы хотите сохранить о местоположении. т.е.: город, штат, почтовый индекс и т. д. –

+0

Yoel, большое спасибо за подробную проверку. Было бы здорово получить все эти данные для хранения в базе данных - координаты, город, штат и почтовый индекс. –

ответ

7

Невозможно получить местоположение пользователя с помощью PHP, поскольку он работает на стороне сервера. Вы можете получить местоположение пользователя, используя javascript через браузер.

Вот пример. В этом примере я разделил код на два файла. Один для обработки и хранения информации с использованием PHP (geocoordinates.php) и другой (HTML) для сбора информации геокодирования (index.html), index.html.

Вы можете комбинировать оба файла в index.php, но я буду хранить их отдельно для простоты.

geocoordinates.php

<?php 

if(isset($_POST['lat'], $_POST['lng'])) { 
    $lat = $_POST['lat']; 
    $lng = $_POST['lng']; 

    $url = sprintf("https://maps.googleapis.com/maps/api/geocode/json?latlng=%s,%s", $lat, $lng); 

    $content = file_get_contents($url); // get json content 

    $metadata = json_decode($content, true); //json decoder 

    if(count($metadata['results']) > 0) { 
     // for format example look at url 
     // https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452 
     $result = $metadata['results'][0]; 

     // save it in db for further use 
     echo $result['formatted_address']; 

    } 
    else { 
     // no results returned 
    } 
} 

?> 

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Geocoding Page</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script> 
    function getLocation() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(savePosition, positionError, {timeout:10000}); 
     } else { 
      //Geolocation is not supported by this browser 
     } 
    } 

    // handle the error here 
    function positionError(error) { 
     var errorCode = error.code; 
     var message = error.message; 

     alert(message); 
    } 

    function savePosition(position) { 
      $.post("geocoordinates.php", {lat: position.coords.latitude, lng: position.coords.longitude}); 
    } 
    </script> 
</head> 
<body> 
    <button onclick="getLocation();">Get My Location</button> 
</body> 
</html> 

Имейте в виду, что в этом примере, когда пользователь нажимает кнопку "Получить My Location" браузер побудит чтобы разрешить геолокацию. Можно также вызвать getLocation функцию раз при загрузке страницы, но браузер всегда будет спрашивать разрешения пользователя

Вы можете узнать больше о геолокации в http://www.w3schools.com/htmL/html5_geolocation.asp

+2

Yoel, браузер указывает, что он отслеживает мое местоположение, но я не могу повторить результаты всего местоположения или переменные $ lng или $ lat отдельно. Вы знаете, что случилось? –

+0

@pol_guy Я только что попробовал и испытал ту же проблему. Я обновил ответ с помощью обратного вызова ошибки, если он не смог получить вашу позицию. Видимо, это проблема с информацией, посмотрите http://stackoverflow.com/a/3885172/4114033 –

+0

Красиво сделано +1. Быстро и довольно надежно. Выезд на 2 дома в моем тесте. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^