【问题标题】:GOOGLE MAP API v3, Need polygon of a pathGOOGLE MAP API v3,需要路径的多边形
【发布时间】:2014-06-13 17:29:51
【问题描述】:

我正在使用谷歌地图 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 进行硬编码,必须有其他更简洁的方式。

【问题讨论】:

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


    【解决方案1】:

    执行此操作的一种方法是将对 poly1 的对象引用添加到分配的回调中。这是我使用地图 API 编写的一些代码,它为打开信息窗口的特定标记上的单击事件添加了侦听器。

    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);
    });
    

    因此,对于您的示例,您可能想要执行以下操作。这将确保您的回调函数获得对 poly 对象的引用,即使触发事件与路径相关。

    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); 
    });
    

    【讨论】:

    • 这一直是我的计划 B,我只是希望有一种方法可以获得路径的父级,这似乎是一件很正常的事情,而且很有用。谢谢。
    【解决方案2】:

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

    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);
    

    【讨论】:

    • 我尝试过这无法使其工作,甚至尝试将其更改为使用 set 和 get,但仍然无法正常工作。
    • 不要为此使用 getter 和 setter。拖动顶点时会发生什么? console.log 有输出吗?
    • 这解决了我的问题。我首先犯了一个愚蠢的错误,将侦听器添加到 poly1.getPath() 而不是我创建的变量并设置我的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多