GOOGLE MAP API v3,需要路径的多边形

时间:2014-06-13 17:29:52

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

我正在使用谷歌地图v3,我的问题是我在一张地图上有200多个多边形,它们都是可编辑的,我需要在事件监听器中进行ajax调用,以便使用路径代替用于检测变化的多边形。

所以在回调函数this = polygon.getPath()中,我怎样才能得到它所属的多边形。在多边形中,我使用set来设置ajax调用所需的信息。

    poly1.set('name', 'poly1');
    poly1.set('id', 1);

    google.maps.event.addListener(poly1, 'dragend', setNewArea);
    google.maps.event.addListener(poly1.getPath(), 'insert_at', setNewArea);
    google.maps.event.addListener(poly1.getPath(), 'remove_at', setNewArea);
    google.maps.event.addListener(poly1.getPath(), 'set_at', setNewArea);

所以在setNewArea中,我可以很容易地检查它,看它是多边形还是路径,但是如果它是路径我无法获得它的父多边形。我不希望有200个自定义回调只是为了对poly进行硬编码,必须有另一种更清洁的方式。

2 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是将poly1的对象引用添加到指定的回调中。下面是我使用maps API编写的一些代码,它为打开信息窗口的特定标记上的click事件添加了一个监听器。

var latLng = new google.maps.LatLng(lat,lng);

var marker = new google.maps.Marker({
    position: latLng,
    map: window.map,
    title: pinName
});

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

google.maps.event.addListener(marker, 'click', function() {
    infoWindow.open(window.map, marker);
});

因此,对于您的示例,您可能希望执行类似下面的操作。这将确保您的回调函数获取对多边形对象的引用,即使触发事件与路径相关。

poly1.set('name', 'poly1');
poly1.set('id', 1);

google.maps.event.addListener(poly1, 'dragend', function() { 
    setNewArea(poly1); 
});
google.maps.event.addListener(poly1.getPath(), 'insert_at', function() { 
    setNewArea(poly1); 
});

答案 1 :(得分:1)

您可以在对象之间进行循环引用。

var thePath = poly1.getPath();
thePath.parent = poly1;

google.maps.event.addListener(thePath, 'set_at', function () {
    console.log('My parent is the polygon', this.parent);
}.bind(this);