0

我正在使用谷歌地图,我正在尝试创建一个侧边栏来启用不同的 KML 覆盖。我已将KML图层放入与按钮ID标签相同的变量中以按下以激活它们,希望将该ID称为变量,然后可以在setMap函数中使用。
不确定这是否真的可行

在这个脚本中,我正在尝试制作它,以便您按下 ID 标记为“kml1”的元素,设置 testvar='kml1',然后能够将 testvar.setMap(the_Map) 代替kml1.setMap(the_Map), as testvar==kml1

jQuery

kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        });
        kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
            preserveViewport: true,
        });

    $(document).ready(function() {
        $('.kml_item').toggle(
                function() {
                    for (i=0; i<50; i++) {
                        testvar = this.id
                        if (testvar == 'kml' + i) {
                            testvar.setMap(the_Map);
                            break;
                        }
                    }
                },
                function() {
                    for (i=0; i<50; i++) {
                        testvar = this.id
                        if (testvar == 'kml' + i) {
                            testvar.setMap(null);
                            break;
                        }
                    }
            );
    })

关联的 HTML

<div id="kml1" class="kml_item">KML 1</div>
            <div id="kml2" class="kml_item">KML 2</div>
4

3 回答 3

0

尝试一个.click()功能

   $('#kml1').click(function(){
      new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        });
    });
于 2012-09-14T22:42:05.453 回答
0

我想你可以通过一些调整得到你想要的。

// These kml objects will be attached to the global window object at
// window.kml1
// or
// window['kml1']
var kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
        preserveViewport: true,
    });
var kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
        preserveViewport: true,
    });

$(document).ready(function() {
    $('.kml_item').click(function() {
        // Access the various kml objects and set the_Map
        var kml = window[this.id]
        if(kml.getMap()) {
            kml.setMap(null);
        }
        else {
            kml.setMap(the_Map);
        }
    });
});
于 2012-09-14T22:43:48.793 回答
0

不确定在这个网站上回答你自己的问题是否真的是犹太教,但我想出了另一种方法,尽管我确实相信我最初使用 ID 标签作为变量的问题在我处理它的方式上是无法解决的。我没有将每个 KML 层放在一个单独的变量中,而是将它们放在一个数组中。为可点击的 div 提供一个标题标签编号,允许该函数进行计数,直到数组项与 div 的标题编号匹配,并将该项从数组中放置到地图上。

KML 数组

kml_arr = [
            new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        }),
            new google.maps.KmlLayer("http://www.domain.com/map_overlay2.txt", {
            preserveViewport: true,
        })
        ]

jQuery

$(document).ready(function() {
        $('.kml_item').toggle(
                function() {
                    $(this).animate({backgroundColor: '#ffffff'}, 200);
                    for (i=0; i<50; i++) {
                        if (i == this.title) {
                            kml_arr[i].setMap(the_Map);
                            break;
                        }
                    }
                },
                function() {
                    $(this).animate({backgroundColor: '#d0d0d0'}, 200);
                    for (i=0; i<50; i++) {
                        if (i == this.title) {
                            kml_arr[i].setMap(null);
                            break;
                        }
                    }
                }
            );
    })

关联的 HTML

                <div title="0" id="kml1" class="kml_item">KML 1</div>
            <div title="1" id="kml2" class="kml_item">KML 2</div>
于 2012-09-15T00:02:47.603 回答