2011-08-30 49 views
1

向您展示我正在嘗試使用工作版本所做的工作的最簡單方法:http://jsfiddle.net/t8Brm/11/具有GEO位置支持的所需現代瀏覽器。從navigator.geolocation.getCurrentPosition內部調用此工具

在JS代碼中,我已經註釋掉了導致問題的代碼,以便您可以先看到它的工作原理。

的問題是: 我怎麼能取消下面的代碼使用地理位置添加標記,並在地圖中心,沒有得到Error: position.coords is undefined

$(this).trigger("gMap.addMarker", { 
    latitude: latitude, 
    longitude: longitude, 
    content: "You Are Here" 
}); 
$(this).trigger("gMap.centerAt", { 
    latitude: latitude, 
    longitude: longitude 
}); 

這是原來的插件:http://github.com/marioestrada/jQuery-gMap我有增加了GEO位置的額外功能。如下圖所示:

function generateDirections(from, to, directionHtml){ 
      var directionsDisplay; 
      var directionsService = new google.maps.DirectionsService(); 

      $('#'+directionHtml).html(''); 

      var request = { 
       origin: from, 
       destination: to, 
       travelMode: google.maps.DirectionsTravelMode.DRIVING 
      }; 

      directionsDisplay = new google.maps.DirectionsRenderer(); 
      directionsDisplay.setMap($gmap); 
      directionsDisplay.setPanel(document.getElementById(directionHtml)); 
      directionsService.route(request, function(response, status){ 
       if(status == google.maps.DirectionsStatus.OK){ 
        directionsDisplay.setDirections(response); 
        if($("#gmaps_from").val().length === 0) 
         $("#gmaps_from").val(response.routes[0].legs[0].start_address); 
       } 
      }); 

      setTimeout(function(){ 
       $("#"+directionHtml).slideDown("slow"); 
      },1000); 
     } 

     //make this available to the click element 
     $.data($('#gmaps_getdirections')[0], 'inst', this); 

     $('#gmaps_getdirections').click(function(e) { 
      e.preventDefault(); 

      var from = $('#gmaps_from').val(); 
      if(opts.address){ 
       var to = opts.address; 
      } else { 
       var to = parseFloat(opts.latitude) + ", " + parseFloat(opts.longitude); 
      } 

      generateDirections(from, to, "gmaps_directions"); 

      //open the google window 
      //window.open("http://maps.google.com/maps?saddr=" + from + "&daddr=" + to, "GoogleWin", "menubar=1,resizable=1,scrollbars=1,width=750,height=500,left=10,top=10"); 
     }); 

     if(opts.geolocation && navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position){ 
       var latitude = position.coords.latitude; 
       var longitude = position.coords.longitude; 

       var from = parseFloat(latitude) + ", " + parseFloat(longitude); 

       if(opts.address){ 
        var to = opts.address; 
       } else { 
        var to = parseFloat(opts.latitude) + ", " + parseFloat(opts.longitude); 
       } 

       /*$(this).trigger("gMap.addMarker", { 
        latitude: latitude, 
        longitude: longitude, 
        content: "You Are Here" 
       }); 
       $(this).trigger("gMap.centerAt", { 
        latitude: latitude, 
        longitude: longitude 
       });*/ 

       generateDirections(from, to, "gmaps_directions");      
      }); 
     } 
+0

你能將你的帖子形成一個問題嗎?在jsFiddle鏈接之後沒有更多的啓發... – Matt

+0

「在JS代碼中,我已經註釋了導致問題的代碼:」毫無疑問,因爲我知道是什麼導致了問題。 –

+1

那你爲什麼把它發佈到SO? – Matt

回答

0

你可以執行像這樣的等價的JavaScript API V3代碼:

new google.maps.Marker({position:new google.maps.LatLng(latitude,longitude), 
    map:$gmap, 
    title:"You Are Here"}); 
$gmap.setCenter(new google.maps.LatLng(latitude,longitude)); 

中的jsfiddle與此更換您的註釋掉的代碼都會在地圖上的標記並一度集中在你的位置在地圖上。

看起來,其他位置的中心在此之後在某個點被觸發。 (我假設你可以照顧關閉它,但如果沒有,只是在評論中這樣說,我或其他人將毫無疑問地看起來更多。)

0

確定 - 在FF測試 - 這裏有一個我發現了什麼 - $(this).trigger("gMap.addMarker", {...使你的函數進行再次評估。第一次找到lat/long,但在觸發器調用後,再次調用同一個函數,並再次指向該函數。

我不熟悉插件,但我試圖觸發元素(#google_maps):http://jsfiddle.net/t8Brm/18

這修復了遞歸調用問題,但引發了另一個異常指定了無效或非法的字符串。

希望這點能指引您朝着正確的方向發展。