【问题标题】:google map marker manager谷歌地图标记管理器
【发布时间】:2012-01-19 09:11:10
【问题描述】:

我在显示 2 个不同的标记时遇到了一些问题,具体取决于缩放级别。例如,如果缩放级别小于 10,则显示图标 a,如果缩放级别大于 10,则显示图标 2。我一直在查看标记管理器,但有点迷路了。这是我的代码:

var url = "json.api";

function initialize() {

    var myLatlng = new google.maps.LatLng(0, 0);
    var myOptions = {
        maxZoom: 16,
        zoomControl: true,
        disableDefaultUI: true,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

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

    downloadUrl(url, function(data) {

        var j = eval('(' + response + ')');
        var jlength = j.data.hotels.length;

        var bounds = new google.maps.LatLngBounds();

        for(i=0; i < jlength; i++) {

            var x = parseFloat(j.data.hotels[i].lat);
            var y = parseFloat(j.data.hotels[i].lon);
            var z = new google.maps.LatLng(x,y);
            var title = j.data.hotels[i].title;
            var hotel_id = j.data.hotels[i].id;
            var address = j.data.hotels[i].address;
            var star = j.data.hotels[i].star;
            var thumbnail = j.data.hotels[i].thumbnail;

            var contentstring = 'some html';

            var marker = createMarker();

            var infowindow = new google.maps.InfoWindow({
                content: contentstring
            }); 

            bounds.extend(z);

            map.fitBounds(bounds);

            //NOT SURE IF THESE ARE NEEDED  
            //  zoomChangeBoundsListener = google.maps.event.addListener(map, 'bounds_changed', function(event) {
            //  google.maps.event.removeListener(zoomChangeBoundsListener);
            //  });
            //  google.maps.event.addListener(map, 'zoom_changed', function() {  
            //  });
        };

        if (map.getZoom() == 21) {map.setZoom(16);}

        if (map.getZoom() < 12) {map.setZoom(map.getZoom()+1);}

        //alert(map.getZoom())

        function createMarker(){

            var marker = new google.maps.Marker({
                position: z,
                map: map,
                title: title,
                html: contentstring,
                icon: 'icona.png'
            });

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

如您所见,我有一个 json 文件,我循环获取 lat 和 lng(以及其他位),然后创建一个标记,显示我的 json 文件中的所有内容,并带有一个信息窗口等......我不能只需创建第二个标记函数,即 createMarker2 和一些如何调用,如果缩放大于 10?...任何帮助将不胜感激。我在网上查看了一些示例,但感到困惑。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    建议您通过 http://www.jslint.com/ 运行您的代码 - 有几个语法错误(大部分是尾随 ;,不需要在那里)。

    response 来自哪里?这是代码中唯一引用它的地方:

    var j = eval('(' + response + ')');
    

    不要将 createMarker 函数嵌套在初始化函数中。使其独立,并将创建标记及其信息窗口所需的数据作为参数传递给该函数。

    【讨论】:

    • @duncan- apologise,我试图减少代码供您查看,但遗漏了一点...var response = date.responseText;,请检查我的语法并尝试您的建议。谢谢
    【解决方案2】:

    您有一个重要的部分被注释掉了。您需要监听 zoom_changed 事件。检查 map.getZoom() 不会完成任何事情,除非它在这个事件处理程序中。

    google.maps.event.addListener(map, 'zoom_changed', function() {
        // your zoom logic goes here
        var zoom = map.getZoom();
        if (zoom < 10) {
          // do something  
        } else {
          // do something else
        }
    });
    

    我将把剩下的练习留给您 - 但您可能需要将每个标记添加到一组标记中,并迭代这些标记以有条件地打开/关闭。给您的一个提示 - 您实际上可以向标记对象添加其他属性,以便在循环时进行检查。例如,您可以添加一个标记。LessThan10 = true;到标记对象。然后,在循环时,您可以在上面查找此属性并调用 marker.setVisible();视情况而定。

    【讨论】:

    • 谢谢,我试试看告诉你
    猜你喜欢
    • 2011-12-10
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多