2012-05-16 62 views
5

我正在建立一個使用地理位置代碼的網站,它假設加載mapCanvas並在用戶點擊「Finde Me!」後按鈕獲取他的位置並根據用戶位置設置地圖的中心。它與Firefox,Chrome,Safari一起工作正常,在普通PC和iPhone上測試,唯一的設備不適用於任何帶有Android的手機。這是一個代碼:Android瀏覽器不能使用地理位置

<script src="http://maps.google.com/maps?file=api&v=3&key=YourKey" 
     type="text/javascript"></script> 
<script type="text/javascript"> 
    //<![CDATA[ 

    var iconBlue = new GIcon(); 
    iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png'; 
    iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconBlue.iconSize = new GSize(17, 25); 
    iconBlue.shadowSize = new GSize(1, 1); 
    iconBlue.iconAnchor = new GPoint(6, 20); 
    iconBlue.infoWindowAnchor = new GPoint(5, 1); 

    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png'; 
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconRed.iconSize = new GSize(17, 25); 
    iconRed.shadowSize = new GSize(1, 1); 
    iconRed.iconAnchor = new GPoint(6, 20); 
    iconRed.infoWindowAnchor = new GPoint(5, 1); 

    var customIcons = []; 
    customIcons["restaurant"] = iconBlue; 
    customIcons["bar"] = iconRed; 

    function load() { 
     if (GBrowserIsCompatible()) { 
     var map = new GMap2(document.getElementById("map_canvas")); 
     map.setCenter(new GLatLng(50.061795,19.936924), 16); 

     // Change this depending on the name of your PHP file 
     GDownloadUrl("Your_xml.php", function(data) { 
      var xml = GXml.parse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))); 
      var marker = createMarker(point, name, address, type); 
      map.addOverlay(marker); 
      } 
     }); 
     } 
    } 

    function createMarker(point, name, address, type) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     GEvent.addListener(marker, 'click', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     return marker; 
    } 
    //]]> 


function findLoc(){ 
if (!navigator.geolocation) { 
alert('Sorry, your browser does not support Geo Services'); 
} 
else { 
// Get the current location  
navigator.geolocation.getCurrentPosition(showMap); 
} 
} 
function showMap(position){ 
var lat = position.coords.latitude; 
var lon = position.coords.longitude; 
var myPoint = new GLatLng(lat, lon); 
var map = new GMap2(document.getElementById("map_canvas")); 
map.setCenter(myPoint, 15); 
GDownloadUrl("Your_xml.php", function(data) { 
      var xml = GXml.parse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))); 
      var marker = createMarker(point, name, address, type); 
      map.addOverlay(marker); 

} 
     }); 

function createMarker(point, name, address, type) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     GEvent.addListener(marker, 'click', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     return marker; 
    } 
} 

我找不到任何解決方案使其工作。 PS 沒有錯誤或陳述給出任何提示使其更容易理解。 設備已啓用GPS。 請求幫助我一直在想辦法解決2周

回答

3

恐怕你只是在你面前有一個艱苦的老式調試。我的方法是在代碼中的各個重要點添加可見輸出(例如在調用getCurrentPosition之前和之後,例如在showMap的開始處),並從那裏發生故障的地方縮小範圍。一旦你知道什麼是失敗的,你可以開發一個爲什麼的想法,但直到你知道你在黑暗中徘徊。

(我對Android的支持,所以如果你需要任何安慰,還有你的情況沒有什麼本質上不可能一個基於地理位置的移動Web應用程序的工作。)

+0

THX的答案我添加警報( '成功!')在navigator.geolocation.getCurrentPosition(showMap)之前;它向我展示了我的成功!這意味着這個函數findLoc被觸發了showMap函數,但我不知道什麼 –

+0

@TomLiland:對。現在你繼續這樣做,直到你發現哪部分代碼實際上失敗了。首先,'showMap'開頭的提示告訴你這個函數是否真的被調用。等等;總的原則現在應該清楚了。 – chaos

+0

似乎navigator.geolocation.getCurrentPosition(showMap)有問題,在findLock函數啓動後沒有調用它。我在導航器之後立即發出警報,並且沒有顯示消息。在iPhone上我收到了所有的消息。奇怪的小東西:( –

相關問題