0


我已经解决了与我的问题相关的所有可能问题,并尝试了许多解决方案,但似乎没有任何帮助。我正在使用 Google 的 Map API,并且地图没有以正确的 lat long 对为中心。它指向位于南太平洋中部的 (0,0)。在对我的 Lat Long 对进行地理定位后,它会给出正确的地址。
这是我的代码:

 $(document).ready(function(){
    var loc = {lat:0,long:0};
    if (navigator.geolocation){
    navigator.geolocation.getCurrentPosition(showPosition);
    }else{
    alert("Geolocation is not supported by this browser.");
    }
    console.log(loc);
    function showPosition(position){ 
    loc.lat=position.coords.latitude;
    loc.long=position.coords.longitude;
    var geocoder = new google.maps.Geocoder();
    var latLng = new google.maps.LatLng(loc.lat, loc.long);
    console.log(latLng);
    if (geocoder) {
        geocoder.geocode({ 'latLng': latLng}, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          console.log(results[0].formatted_address); 
          alert('Address:'+results[0].formatted_address);
        }else {
            console.log("Geocoding failed: " + status);
        }
       }); //geocoder.geocode()
    } 
    }
    var latLong = new google.maps.LatLng(loc.lat, loc.long);
    var mapOptions = {
    center: latLong,
    useCurrentLocation : true,
    zoom: 14,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var mapMsg = new google.maps.Map(document.getElementById("local_map"), mapOptions);
    google.maps.event.addDomListener(window, 'load');
    var markerOptions = new google.maps.Marker({
    clickable: true,
    flat: true,
    map: mapMsg,
    position: latLong,
    title: "You are here",
    visible:true,
    icon:'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
    });
});


这是 Firefox 控制台的屏幕截图,显示了正确的位置地址和纬度。

火狐控制台

控制台中的前两行是坐标,第三行是地理编码位置。
请告诉我哪里错了。我知道这将是一个愚蠢的错误,但我是新手。

问候

4

2 回答 2

1

这是因为navigator.geolocation.getCurrentPosition是异步的。因此,当你这样做时var latLong = new google.maps.LatLng(loc.lat, loc.long);loc.lat仍然是'0',就像loc.long.

所以你需要在你的函数中包含 dos 行showPosition

于 2013-10-22T12:29:24.533 回答
1

您永远不会从地理编码器结果中获取位置,也不会设置标记 - 执行顺序是颠倒的(但不会失败)

改为这样做:

...
if (status == google.maps.GeocoderStatus.OK) {
  var markerOptions = new google.maps.Marker({
     clickable: true,
     flat: true,
     map: mapMsg,
     position: results[0].geometry.location,
     title: "You are here",
     visible:true,
     icon:'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
   });
   var marker = new google.maps.Marker(markerOptions);
   mapMsg.setCenter(results[0].geometry.location);
   } else {
     console.log("Geocoding failed: " + status);
   }
   ...

这是您的代码http://jsfiddle.net/zqeCX/以某种方式清理/工作的版本, 但您应该真正考虑使用谷歌地图示例之一作为起点,以获得正确的执行流程。

于 2013-10-22T12:48:05.630 回答