2012-05-16 3 views
5

geolocation 코드를 사용하는 웹 사이트를 구축 중이며, mapCanvas를로드하고 사용자가 "Finde Me!"를 클릭 한 것으로 가정합니다. 버튼은 자신의 위치를 ​​파악하고 사용자 위치를 기반으로지도의 중심을 설정합니다. 그것은 파이어 폭스, 크롬, 사파리, 정상적인 PC 및 iPhone에서 테스트 한 장치로는 작동하지 않습니다. 안드로이드를 탑재 한 모든 휴대 전화에서만 작동합니다. 코드는 다음과 같습니다.안드로이드 브라우저가 geolocation에서 작동하지 않습니다.

<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

나는 당신 앞에서 힘든 고풍스런 디버그를하고 있습니다. 내 접근 방식은 코드의 다양한 중요 지점 (예 : 이 호출되기 전과 후에 showMap의 시작 부분에 표시되는 출력)에 가시적 인 출력을 추가하고 오류가 발생한 위치에서 범위를 좁히는 것입니다. 실패한 것이 무엇인지 알게되면 왜 그런지 아이디어를 개발할 수 있지만 어둠 속에서 허우적 거리는 것을 알기 전까지는.

는 (나는 경우에 당신이 어떤 확신을 필요로하므로, 귀하의 상황에 대해 본질적으로 불가능 아무것도 없다, 안드로이드에서 지원하는 위치 정보 기반의 모바일 웹 애플리케이션에 근무했습니다.) 답변

+0

들으 내가 (경고를 추가했습니다 'Success!') navigator 직전 .geolocation.getCurrentPosition (showMap); 그리고 그 쇼 내 성공! 즉이 함수 findLoc가 트리거되었음을 의미합니다. showMap funtion에는 문제가 있지만 무엇을 모르겠습니다. –

+0

@TomLiland : Right. 이제 코드의 어떤 부분이 실제로 실패했는지 알 때까지 계속 진행합니다. 첫째,'showMap'의 시작 부분에있는 경고는 그 함수가 실제로 호출되는지 여부를 알려줍니다. 등등; 일반적인 원칙은 지금까지 분명해야합니다. – chaos

+0

navigator.geolocation.getCurrentPosition (showMap)에 문제가있는 것 같습니다. 이것은 findLock 함수가 시작된 후에 호출되지 않았습니다. 내비게이터와 메시지가 나타나지 않은 직후에 경고를했습니다. iPhone에서 나는 모든 메시지를 받았습니다. 이상한 작은 것 :( –

관련 문제