2012-01-13 10 views
2

如您所知,谷歌手機地圖程序有能力找到用戶的位置(我的位置服務)。 我想知道Google地圖如何使用互聯網手機,GPRS(非GPS)檢測用戶的位置? 是否可以使用PHP或其他基於Web的語言編寫程序,以便在用戶打開該頁面時檢測用戶的位置? 我可以猜測Google不會使用用戶IP來確定他們的位置,因爲當我嘗試使用我的移動互聯網IP來猜測我的位置時,獲得了錯誤的位置。如何使用GPRS檢測移動位置?

回答

6

看看Google Geocoding API和W3 Geolocation API Specification。然後this可能有助於您找到答案。

+1

感謝您的回答。它也幫助我。你是一個拯救生命的人。 :) – 2012-01-16 12:07:03

+0

@ Sajib Mahmood:謝謝,但這些方法可以在簡單的手機瀏覽器上工作嗎? – 2012-01-16 21:31:31

+1

@ImanHejazi:Apple iPhone和Android手機擁有Google Maps JS API支持。我無法向您確認其他手機瀏覽器。 – 2012-01-17 06:54:26

3

在沒有GPS定位的情況下,定位的常用方法是對服務小區ID或檢測到的Wi-Fi MAC地址進行反向查找。存在一個基於服務器的數據庫,它給出了所有已知蜂窩站點的地理位置 - 這些站點由它們的小區ID或更確切地說它們的小區全球ID(CGI)以及所有已知Wi-Fi AP的位置唯一標識。因此,通過了解CGI或MAC,可以通過在GPRS等蜂窩數據集中浸入數據庫來確定一個人的近似(「粗略」)位置。這種商業服務如SkyHook(Apple曾經使用但不再使用)的工作方式。

通過使用其他輸入,如信號強度或數字地圖,可以使這種粗略的位置更加精確。

某些設備(如iPhone)將此數據庫緩存在設備上,以便更快地進行粗分辨率定位。蘋果在幾個月前因此陷入困境,並改變了這種運作方式。

爲了讓網頁知道設備的位置,設備必須調用適當的(設備特定的)定位API,然後將其提交給Web服務器,這顯然需要一些設備端代碼(不是隻是一個瀏覽器)。

+0

謝謝,但你知道我怎麼找到這個代碼?我的手機操作系統是UIQ3,GoogleMaps的MyLocation功能正常工作。我如何編寫程序來確定用戶位置,如GoogleMaps?你有想法嗎? – 2012-01-22 09:07:44

+0

這聽起來像您的瀏覽器支持HTML5,它允許服務器請求瀏覽器的位置。 (瀏覽器本身包含訪問特定於操作系統的位置API的功能。)您可以在此檢查瀏覽器的HTML5支持:http://www.html5test.com。 – boettger1 2012-01-22 12:47:19

1

它的工作原理是這樣的。根據Google地圖瀏覽器(或使用谷歌地圖代碼的程序)是否支持並實施地理定位界面,Google地圖會詢問用戶是否願意分享他們的位置,您可以瞭解更多關於here的信息。如果用戶同意分享他們的位置,則關於本地無線接入點的信息被傳遞,以便谷歌地圖(或其他服務)可以估計用戶的位置。可以在您的程序或網頁中實現此功能。關於在程序中使用谷歌地圖,我不知道很多,但對於網頁,這裏是一個用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參考here看到在其中您可以使用此方式的數量。另外,不是源參考在「傳感器=真」中結束。如果您正在使用地理位置,請務必在源中將此值設置爲true。