Google maps 将地理编码结果附加到Infowindow内容

Google maps 将地理编码结果附加到Infowindow内容,google-maps,jquery,google-maps-api-3,Google Maps,Jquery,Google Maps Api 3,我想问一下如何将地理编码结果附加/显示到infowindow内容中。在这种情况下,我有多个标记。我尝试在infowindow内容上使用div,并在获得地理代码结果后更新div内容(使用回调),但它不起作用。如何解决这个问题 <html> <head> <title>Reverse Geocoding v3 Example</title> <script type="text/javascript" src="http://maps.googl

我想问一下如何将地理编码结果附加/显示到infowindow内容中。在这种情况下,我有多个标记。我尝试在infowindow内容上使用div,并在获得地理代码结果后更新div内容(使用回调),但它不起作用。如何解决这个问题

<html>
<head>
<title>Reverse Geocoding v3 Example</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="markerwithlabel.js"></script>   
<script type="text/javascript">
    var locations = [
        {"name":"A","lat":"25.113787","lon":"-102.233276"}, {"name":"B","lat":"25.798243","lon":"-102.96936"}, {"name":"C","lat":"27.033032","lon":"-103.974609"}, {"name":"D","lat":"26.370545","lon":"-103.112183"},
        {"name":"E","lat":"26.636002","lon":"-100.794067"}, {"name":"F","lat":"25.699288","lon":"-98.827515"}, {"name":"G","lat":"24.805019","lon":"-100.332642"}, {"name":"H","lat":"24.285358","lon":"-101.705933"}
    ];
    var geocoder;
    var map;
    var marker;
    var lat_longs = new Array();
    var infoWindow = null;
    var markers = new Array();
    var poi = new Array();
    var fitMap = 0;
    var timer = null;
    totUpdateOld = new Array();
    streetLocation = new Array();
    ident = 0;
    function initialize() {
        geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(26.291773,-100.914917);
        var mapOptions = {
            zoom: 8,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        infoWindow = new google.maps.InfoWindow();
        updatetimer(function() {
            fitMapToBounds();
        });
    }       
    var updatetimer = function showCarPosition(){
        if (markers.length>0){
            ident = 2;
        }
        for (var i = 0; i < locations.length; i++) {
            var coordinate = new google.maps.LatLng(locations[i].lat, locations[i].lon);
            var windowContent =[
                  '<div class="windowcontent"><ul class="nav infowindow nav-pills nav-stacked">',
                    '<li><div id="pos'+i+'"></div><li>'].join('');
            if (ident == 0){
                codeLatLng(function(addr, divid){
                    streetLocation.push(addr);
                    console.log(divid+'-'+addr);
                    $("#"+divid).html(addr);
                }, coordinate, "pos"+i);
                var marker = createMarker({
                    map: map,
                    position: coordinate,
                    labelContent: (locations[i].name),
                    labelAnchor: new google.maps.Point(32, 0),
                    labelClass: "unitlabel",
                    labelStyle: {opacity: 1.0}
                });
                bindInfoWindow(marker, 'click', windowContent);
                google.maps.event.addListener(infoWindow, 'domready', function(){ 
                    $('.viewlog').click(function() {
                        $.history.load($(this).attr('href'));
                        return false;
                    });
                });
            }
        }
        fitMapToBounds();
    };

    function codeLatLng(callback, coordinate, divid) {
        if (geocoder) {
            geocoder.geocode({'latLng': coordinate}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    if (results[1]) {
                        callback(results[1].formatted_address, divid);
                    }else {
                        callback("unknown", divid);
                    }
                }else {
                    return "Geocoder failed due to: " + status;
                }
            });
        }
    }       
    function createMarker(markerOptions) {
        var marker = new MarkerWithLabel(markerOptions);
        markers.push(marker);
        lat_longs.push(marker.getPosition());
        return marker;
    }
    function updateMarker(markerOptions,id) {
        var marker = new MarkerWithLabel(markerOptions);
        markers[id] = marker;
        lat_longs[id] = marker.getPosition();
        return marker;
    }       
    function fitMapToBounds() {
        var bounds = new google.maps.LatLngBounds();
        if (fitMap == 0){
            if (lat_longs.length>0) {
                for (var i=0; i<lat_longs.length; i++) {
                    bounds.extend(lat_longs[i]);
                }
                map.fitBounds(bounds);
                fitMap = 1;
            }
        }
    }

    function bindInfoWindow(marker, event, windowContent) {
        google.maps.event.addListener(marker, event, function() {
            infoWindow.setContent(windowContent);
            infoWindow.open(map, marker);
        });
    }       
    function loadScript() {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.googleapis.com/maps/api/js?key=AIzaSyDAT9KcSpQ7RNfg5iQHsivb4-72lNLanH0&sensor=false&callback=initialize";
        document.body.appendChild(script);
    }

    $(document).ready(function() {
        initialize();
    });

</script>
</head>
<body>
<div id="map_canvas" style="height:400px; border:1px 00f solid;"></div>
</body>
</html>

反向地理编码v3示例
变量位置=[
{“名称”:“A”,“lat”:“25.113787”,“lon”:“-102.233276”},{“名称”:“B”,“lat”:“25.798243”,“lon”:“-102.96936”},{“名称”:“C”,“lat”:“27.033032”,“lon”:“-103.974609”},{“名称”:“D”,“lat 26.370545”,“lon”:“-103.112183”},
{“名称”:“E”,“lat”:“26.636002”,“lon”:“-100.794067”},{“名称”:“F”,“lat”:“25.699288”,“lon”:“-98.827515”},{“名称”:“G”,“lat”:“24.805019”,“lon”:“-100.332642”},{“名称”:“H”,“lat”:“24.285358”,“lon”:“-101.705933”}
];
var地理编码器;
var映射;
var标记;
var lat_longs=新数组();
var infoWindow=null;
var markers=新数组();
var poi=新数组();
var-fitMap=0;
var定时器=null;
TotUpdateLod=新数组();
streetLocation=新数组();
ident=0;
函数初始化(){
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(26.291773,-100.914917);
变量映射选项={
缩放:8,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
infoWindow=new google.maps.infoWindow();
updatetimer(函数(){
fitMapToBounds();
});
}       
var updatetimer=函数showCarPosition(){
如果(标记长度>0){
ident=2;
}
对于(变量i=0;i”,
“
  • ”]。加入(“”); if(ident==0){ codeLatLng(功能(地址、分区ID){ 街道定位。推送(addr); console.log(divid+'-'+addr); $(“#”+divid).html(addr); },坐标,“pos”+i); var marker=createMarker({ 地图:地图, 位置:坐标, 标签内容:(位置[i]。名称), 新的google.maps.Point(32,0), labelClass:“unitlabel”, 标签样式:{不透明度:1.0} }); bindInfoWindow(标记“单击”,windowContent); google.maps.event.addListener(infoWindow,'domready',function(){ $('.viewlog')。单击(函数(){ $.history.load($(this.attr('href')); 返回false; }); }); } } fitMapToBounds(); }; 函数codeLatLng(回调、坐标、divid){ if(地理编码器){ geocoder.geocode({'latLng':坐标},函数(结果,状态){ if(status==google.maps.GeocoderStatus.OK){ 如果(结果[1]){ 回调(结果[1]。格式化的\u地址,divid); }否则{ 回调(“未知”,divid); } }否则{ return“由于:+状态,地理编码器失败; } }); } } 函数createMarker(markerOptions){ var标记=新标记WithLabel(标记选项); 标记器。推(标记器); lat_longs.push(marker.getPosition()); 返回标记; } 函数更新标记器(标记选项,id){ var标记=新标记WithLabel(标记选项); 标记器[id]=标记器; lat_longs[id]=marker.getPosition(); 返回标记; } 函数fitMapToBounds(){ var bounds=new google.maps.LatLngBounds(); 如果(fitMap==0){ 如果(横向长度>0){
    对于(var i=0;i我只会在点击标记时对点进行反向地理编码,并在从地理编码器返回数据时将其附加到信息窗口中。类似如下:

    function bindInfoWindow(marker, event, windowContent) {
        google.maps.event.addListener(marker, event, function() {
          infoWindow.setContent(windowContent);
          geocoder.geocode({latLng: marker.getPosition()}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
              infoWindow.setContent(infoWindow.getContent()+"<br>"+results[1].formatted_address+"<br>status="+status);
              infoWindow.open(map, marker);
            }
          } else {
            infoWindow.setContent(infoWindow.getContent()+"<br>revere geocode failed:"+status);
        infoWindow.open(map, marker);
          }
        });                       
      });
    }       
    
    函数bindInfoWindow(标记、事件、windowContent){
    google.maps.event.addListener(标记、事件、函数(){
    setContent(windowContent);
    geocoder.geocode({latLng:marker.getPosition()},函数(结果,状态){
    if(status==google.maps.GeocoderStatus.OK){
    如果(结果[1]){
    infoWindow.setContent(infoWindow.getContent()+“
    ”+结果[1]。格式化地址+”
    状态=“+status”); 信息窗口。打开(地图、标记); } }否则{ infoWindow.setContent(infoWindow.getContent()+“
    尊重地理编码失败:“+状态); 信息窗口。打开(地图、标记); } }); }); }


    您可以通过存储反向地理编码的结果来提高效率,如果以前单击过该点,则不必再次对其进行反向地理编码。

    内容(windowContent)不是div(节点),而是字符串。感谢您的回复。我将使用效率更高的内容