谷歌地图v3按地址或latlng对多个自定义标记进行地理编码

时间:2013-04-20 08:02:14

标签: google-maps-api-3

我需要使用MapsV3 api通过地址或纬度/经度绘制多个自定义地图标记。我把下面的代码放在一起对lon / lat有效,但是如果数据包含地址,那么地理编码器什么也不返回。关于如何解决这个问题的任何想法。

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

     function initialize() {
        var centerMap = new google.maps.LatLng(-27.0,133.0);

        var options = {
            panControl: false,
            zoomControl: true,
            scaleControl: false,
            mapTypeControl: false,
            streetViewControl: false,
            zoom: 3,
            center: centerMap,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

        var map = new google.maps.Map(document.getElementById("map"), options);




                  var data = [
                    {
                    'title':'F C Building Construction ...',
                    'address':'', 
                    'zindex':20,
                    'lat':'-33.797847', 
                    'lon':'151.259928', 
                    'marker_number':1,
                    'marker_html':' html content...',
                    'image': {
                        url:'//localhost/assets/images/markers/marker_1.png', 
                        size: new google.maps.Size(24, 29), 
                        origin: new google.maps.Point(0,0), 
                        anchor: new google.maps.Point(10, 29)
                    }
                    }];

            setMarkers(map, data);

                    var infowindow = new google.maps.InfoWindow();

    }

    function showMapPin(i) { } 

    function setMarkers(map,data) {         
        var bounds = new google.maps.LatLngBounds();
        for (var i = 0; i < data.length; i++) {
            setMarker(map, data[i], bounds);
        }
        map.fitBounds(bounds);
    }

    function setMarker(map, m, bounds) {

        if(m["address"]!="") {
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode( { "address": m["address"] }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    var siteLatLng = results[0].geometry.location;
                } 
            });


        } else {
            var siteLatLng = new google.maps.LatLng(m["lat"], m["lon"]);
        }

        if(siteLatLng) {

            var marker = new google.maps.Marker({
                position: siteLatLng,
                map: map,
                //shadow: shadow,
                icon: m["image"],
                title: m["title"],
                zIndex: m["zindex"],
                html: m["marker_html"]
            });

            bounds.extend(siteLatLng);

            google.maps.event.addListener(marker, "click", function() {
                infowindow.setContent(this.html);
                infowindow.open(map, this);
            });

        } // if latlng  
    }//]]>

1 个答案:

答案 0 :(得分:0)

回顾代码后,我发现变量siteLatLng在地理编码函数范围内,因此它永远不会被传递,也无法返回。在此功能中设置标记有效。