2012-01-11 40 views
1

我正在使用地理定位功能,通過查找經度和緯度並將結果返回到我的網頁以供我的數據庫使用,從而獲取我的谷歌地圖API上的地址。如何在信息窗口中顯示我的地理編碼的地址?谷歌地圖API

我一直無法在我的地圖中的infowindow中顯示這些結果。

如何使用下面的代碼在我的infowindow中包含地址。目前,它顯示的長和LAT用下面的代碼:

infowindow.setContent('<div><strong>' + marker.getPosition()+ '</strong><br>'); 
infowindow.open(map, marker); 

功能geocodePosition查找座標的地址,並將其添加到我的表格的HTML輸入。

我該如何適應它來更新infowindow。我現在嘗試了很多方法,但都沒有成功。有任何想法嗎??

<script type="text/javascript"> 
var geocoder = new google.maps.Geocoder(); 

function geocodePosition(pos) { 
    geocoder.geocode({ 
    latLng: pos 
    }, function(responses) { 
    if (responses && responses.length > 0) { 
     updateMarkerAddress(responses[0].formatted_address); 

    } else { 
     updateMarkerAddress('Cannot determine address at this location.'); 
    } 
    }); 
} 

function updateMarkerStatus(str) { 
    document.getElementById('markerStatus').value = str; 
} 

function updateMarkerPosition(latLng) { 
    document.getElementById('info').value = [ 
    latLng.lat(), 
    latLng.lng() 
    ].join(', '); 
} 

function updateMarkerAddress(str) { 
    document.getElementById('address').value = str; 
} 


function initialize() { 

    var latLng = new google.maps.LatLng(-34.397, 150.644); 
    var map = new google.maps.Map(document.getElementById('mapCanvas'), { 
    zoom: 8, 
    center: latLng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 


    var marker = new google.maps.Marker({ 
    position: latLng, 
    title: 'Property location marker', 
    map: map, 
    draggable: true 
    }); 

     var input = document.getElementById('searchTextField'); 
     var autocomplete = new google.maps.places.Autocomplete(input); 
     var infowindow = new google.maps.InfoWindow(); 

     autocomplete.bindTo('bounds', map); 

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    var place = autocomplete.getPlace(); 
    if (place.geometry.viewport) { 
    map.fitBounds(place.geometry.viewport); 
    } else { 
    map.setCenter(place.geometry.location); 
    map.setZoom(17); 
    } 
    var image = new google.maps.MarkerImage(
     place.icon, new google.maps.Size(71, 71), 
     new google.maps.Point(0, 0), new google.maps.Point(17, 34), 
     new google.maps.Size(35, 35)); 
    marker.setIcon(image); 
    marker.setPosition(place.geometry.location); 

    infowindow.setContent('<div><strong>' + marker.getPosition()+ '</strong><br>'); 
    infowindow.open(map, marker); 

}); 

    // Update current position info. 
    updateMarkerPosition(latLng); 
    geocodePosition(latLng); 

    infowindow.setContent('<div><strong>' + marker.getPosition()+ '</strong><br>'); 
    infowindow.open(map, marker); 

    // Add dragging event listeners. 
    google.maps.event.addListener(marker, 'dragstart', function() { 
    updateMarkerAddress('Dragging...'); 
    }); 

    google.maps.event.addListener(marker, 'drag', function() { 
    updateMarkerStatus('Dragging...'); 
    updateMarkerPosition(marker.getPosition()); 
    }); 

    google.maps.event.addListener(marker, 'dragend', function() { 
    updateMarkerStatus('Drag ended'); 
    geocodePosition(marker.getPosition()); 

     //Show property address in window 
    infowindow.setContent('<div><strong>' + marker.getPosition()+ '</strong><br>'); 
    infowindow.open(map, marker); 
    }); 
} 

// Onload handler to fire off the app. 
google.maps.event.addDomListener(window, 'load', initialize); 
</script> 

回答

4

marker.getPosition()不會提供街道地址。鑑於當前的代碼,最好的辦法是將:

infowindow.setContent('<div><strong>' + marker.getPosition()+ '</strong><br>'); 

geocodePosition()函數,然後傳遞infowindow對象作爲第二個參數給該功能。

因此,在您initialize()功能則可以通過將包括第二個參數修改來電geocodePosition

function initialize() { 

... 

    geocodePosition(marker.getPosition(), infowindow); 

} 

然後在你的geocodePosition()功能,你會接受第二個參數,並與responses[0].formatted_address value更新。我添加了變量,以便更容易傳遞地址和消息的值。

function geocodePosition(pos, infowindow) { 
    geocoder.geocode({ 
    latLng: pos 
    }, function(responses) { 
    if (responses && responses.length > 0) { 
     var address = responses[0].formatted_address;  
     updateMarkerAddress(address); 
     infowindow.setContent('<div><strong>' + address + '</strong><br>'); 

    } else { 
     var msg = 'Cannot determine address at this location.';  
     updateMarkerAddress(msg); 
     infowindow.setContent('<div><strong>' + msg + '</strong><br>'); 
    } 
    }); 
}