点击操作不适用于Google地图中的以下代码

时间:2013-10-11 17:14:22

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

有人可以告诉我这段代码有什么问题吗?地图加载但用户的点击操作不会打开info_window或将地图重新​​定位到点击的点。

每当用户点击地图时,我都希望将地址的地址弹出为info_window。

<!DOCTYPE html>
<html>
  <head>
    <title>Accessing arguments in UI events</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
      #map-canvas {
        height: 60%; width: 60%
      }
    </style>

    <script src="https://maps.googleapis.com/maps/api/js?v=3&libraries=geometry&key=MY_KEY&sensor=true">
    </script>

    <script type="text/javascript">
            var geocoder;
            var map;
            var info_win;
            var pos;
            var marker;
        function initialize() 
        {
            google.maps.visualRefresh = true;
            geocoder = new google.maps.Geocoder();
            var latlng = new google.maps.LatLng(-34.397, 150.644);
            var mapOptions = {
            zoom: 8,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
            }
            map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

            google.maps.event.addListener(map, 'click', function(evt) {
                pos = evt.latLng;
                map.setCenter(pos);
            geocoder.geocode({'location': pos}, function(results, status)
                    {
                        if(status == google.maps.GeocoderStatus.OK)
                            {
                                marker = new google.maps.Marker
                                ({
                                    map: map,
                                    position: pos
                                });

                                info_win = new google.maps.InfoWindow
                                ({
                                    content: results[0].formatted_address,
                                });
                                info_win.open(map,marker);  
                            }
                        else
                            {
                            alert("Could not load");
                            }
                    });
            });
         }

  </script>

</head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>

1 个答案:

答案 0 :(得分:1)

第一个问题:您正在将click侦听器添加到初始化函数之外的地图中,因此在初始化地图之前添加它:

    <script type="text/javascript">
            var geocoder;
            var map;
            var info_win;
            var pos;
            var marker;
        function initialize() 
        {
            google.maps.visualRefresh = true;
            geocoder = new google.maps.Geocoder();
            var latlng = new google.maps.LatLng(-34.397, 150.644);
            var mapOptions = {
            zoom: 8,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
            }
            map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

        google.maps.event.addListener(map, 'click', function() {
            pos = map.getPosition();
            map.setCenter(pos);
            geocoder.geocode({'location': pos}, function(results, status)
                    {
                        marker = new google.maps.Marker
                        ({
                            map: map,
                            position: pos
                        });
                        info_win = new google.maps.InfoWindow
                        ({
                            content: results[0].formatted_address,
                        });
                    infowindow.open(map,marker);    
                    });
            });
         }

  </script>

之后你会发现google.maps.Map对象没有getPosition方法。它有一个getCenter方法,但你可能想使用latLng property of the click event instead

    google.maps.event.addListener(map, 'click', function(evt) {
        pos = evt.latLng;
        map.setCenter(pos);

修复打开info_win的代码,打开您创建的google.maps.InfoWindow:

    info_win = new google.maps.InfoWindow
        ({
          content: results[0].formatted_address,
        });
    info_win.open(map,marker);