InfoWindow&的GeoCoder

时间:2012-12-22 09:44:18

标签: javascript jquery google-maps-api-3 google-geocoder

我有一个问题,即对经度和纬度值进行地理编码,然后在信息窗口中显示相关地址。我尝试了多种方法但没有成功,但我必须承认我对javascript并不熟悉。我不断回归价值:“未定义”。

以下是我的代码片段,其中显示了主要组件:

var position = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); var geocoder = new google.maps.Geocoder(); var address;

if (geocoder) {
    geocoder.geocode({ 'latLng': position }, function (results, status) {       
       if (status == google.maps.GeocoderStatus.OK) {
            address = (results[0].formatted_address);
       } else { 
            address = (position.coords.latitude + ', ' +  position.coords.longitude);
       }           
    }); 
}

var info = 
          ('<span class="txt_bld">Location:</span> '         + address                      + '<br />' +
          '<span class="txt_bld">Accuracy:</span> '          + position.coords.accuracy     + '<br />' +
          '<span class="txt_bld">Time:</span> '              +  position.timestamp);

if (geocoder) { geocoder.geocode({ 'latLng': position }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { address = (results[0].formatted_address); } else { address = (position.coords.latitude + ', ' + position.coords.longitude); } }); } var info = ('<span class="txt_bld">Location:</span> ' + address + '<br />' + '<span class="txt_bld">Accuracy:</span> ' + position.coords.accuracy + '<br />' + '<span class="txt_bld">Time:</span> ' + position.timestamp);

任何人都可以告诉我如何将lat / lng的位置转换为地址,以便在我的infowindow中显示它们吗?

修改

更新代码:

var position = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); var geocoder = new google.maps.Geocoder(); var infowindow = new google.maps.InfoWindow(); var address;

if (geocoder) {
    geocoder.geocode({ 'latLng': position }, function (results, status) {       
       if (status == google.maps.GeocoderStatus.OK) {
            address == (results[0].formatted_address);
       } else { 
            address == (position.coords.latitude + ', ' +  position.coords.longitude);
       }    
       var info = 
          ('<span class="txt_bld">Location:</span> '         + address                      + '<br />' +
          '<span class="txt_bld">Accuracy:</span> '          + position.coords.accuracy     + '<br />' +
          '<span class="txt_bld">Time:</span> '              + position.timestamp); 

        if(!infowindow){
            infowindow = new google.maps.InfoWindow({
                content: info
            });
        }else{
            infowindow.setContent(info);
        }

        google.maps.event.addListener(marker, 'click', function() {
          infowindow.open(map,marker);    
          setTimeout(function () { 
            infowindow.close(); 
          }, 5000);
        });            
    }); 
}

if (geocoder) { geocoder.geocode({ 'latLng': position }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { address == (results[0].formatted_address); } else { address == (position.coords.latitude + ', ' + position.coords.longitude); } var info = ('<span class="txt_bld">Location:</span> ' + address + '<br />' + '<span class="txt_bld">Accuracy:</span> ' + position.coords.accuracy + '<br />' + '<span class="txt_bld">Time:</span> ' + position.timestamp); if(!infowindow){ infowindow = new google.maps.InfoWindow({ content: info }); }else{ infowindow.setContent(info); } google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); setTimeout(function () { infowindow.close(); }, 5000); }); }); }

2 个答案:

答案 0 :(得分:1)

地理编码器是异步的。您需要使用它在回调函数中返回的数据。这样的事情(未经测试):

var position = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();
var address;

if (geocoder) {
  geocoder.geocode({ 'latLng': position }, function (results, status) {       
   if (status == google.maps.GeocoderStatus.OK) {
        address = (results[0].formatted_address);
   } else { 
        address = (position.coords.latitude + ', ' +  position.coords.longitude);
   }           
   var info = 
      ('<span class="txt_bld">Location:</span> '         + address
       + '<br />' +
      '<span class="txt_bld">Accuracy:</span> '          + position.coords.accuracy
      + '<br />' +
      '<span class="txt_bld">Time:</span> '              +  position.timestamp);
    infowindow.setContent(info);
    infowindow.setPosition(position);
    infowindow.open(map);
  }); 
}

Working example

答案 1 :(得分:0)

我们正在使用地理编码器按地址获取经纬度,因为我们没有经纬度,因此我们需要通过地理编码器找到经纬度。如果我们有经纬度坐标,那么我们可以使用直接

 var position = new google.maps.LatLng(markers[i][1], markers[i][2]);
            bounds.extend(position);
            marker = new google.maps.Marker({
                position: position,
                map: map,
                title: markers[i][0]
            });