Google maps api 3 如何获取对单击的多边形的引用?(谷歌地图api v3)

Google maps api 3 如何获取对单击的多边形的引用?(谷歌地图api v3),google-maps-api-3,Google Maps Api 3,我设置了一些多边形,在地图上画得很好。我还设法在单击console.log时激发了它们。然而,我该如何继续弄清楚哪个多边形被点击了呢 正如您在我的示例代码中所看到的,我将每个对象存储在集合“lots”中,但是单击它们只会给出单击的长度。我想我可能需要在我的多边形中循环,并检查单击的点是否与它们相交,从而确定它是哪个多边形。。。有更简单的解决办法吗 var lot = new google.maps.Polygon({ paths: me.area, strokeColor: 'b

我设置了一些多边形,在地图上画得很好。我还设法在单击console.log时激发了它们。然而,我该如何继续弄清楚哪个多边形被点击了呢

正如您在我的示例代码中所看到的,我将每个对象存储在集合“lots”中,但是单击它们只会给出单击的长度。我想我可能需要在我的多边形中循环,并检查单击的点是否与它们相交,从而确定它是哪个多边形。。。有更简单的解决办法吗

var lot = new google.maps.Polygon({
    paths: me.area,
    strokeColor: 'black',
    strokeOpacity: 0.35,
    strokeWeight: 1,
    fillColor: fillcol,
    fillOpacity: 0.35
});

lot.setMap(map);
var obj = {
    'id':me.id,
    'rented':me.rented,
    'area':lot
};

google.maps.event.addListener(lot, 'click', function(event) {
    console.log(event);
});

lots.push(lot);
事实证明,getPath()的工作方式很有魅力。我没有意识到我实际上在单击事件中传递了多边形引用,为了将其与存储的“批次”匹配,我只需在存储的批次中循环并将this.getPath与other.getPath进行比较,如果它们匹配,我知道单击了哪个批次,现在可以显示与此特定对象相关的信息

下面是一个代码示例: (其中parking是my parking area对象的数组,其本身具有包含停车场对象的数组)

google.maps.event.addListener(地段,'click',函数(事件){
var myPath=this.getPath();
对于(变量i=0;i
为什么不在创建多边形时为每个多边形指定一些id属性,然后只使用this.myID?实际上,您可以将所需的所有信息挂起到多边形对象上

var lot = new google.maps.Polygon({
        paths: me.area,
        strokeColor: 'black',
        strokeOpacity: 0.35,
        strokeWeight: 1,
        fillColor: fillcol,
        fillOpacity: 0.35
    });

    lot.setMap(map);

    var obj = {
        'id':me.id,
        'rented':me.rented,
        'area':lot
    };
    lot.objInfo = obj;

    google.maps.event.addListener(lot, 'click', function(event) {
        console.log(this.objInfo);
    });

    lots.push(lot);

这将比循环中的路径比较更有效,或者我遗漏了什么吗?:)

如果我能晚一点使用另一种解决方案,我也会遇到同样的问题,并发现可以在多边形上定义自定义特性

我的例子(在美国地图上创建一个州)

在本例中,“map\u state\u id”是自定义属性。我已将其定义为该州的ID(1表示阿拉巴马州,2表示阿拉斯加,等等)

然后,当稍后单击特定状态时,可以将此“映射状态id”传递到事件函数中

google.maps.event.addListener(poly, 'click', function() 
    {
    var map_state_id = this.map_state_id; //retrieve correct state_id

    $.ajax(
        {
        type: "POST",
        url: "http://www...get_state_info.php",
        data: {state_id : map_state_id},
        dataType: "html",
        success: function(data)
            {
            $("#state_info").html(data); //display some info
            }                       
        });
    });

我在

中发现了这个特殊的概念,结果证明getPath()非常有效。我没有意识到我实际上在点击事件中传递了多边形引用,为了将其与我存储的“批次”匹配,我只是在我存储的批次中循环,并将this.getPath与other.getPath进行比较,如果它们匹配,我知道单击了哪个批次,现在可以显示与此特定对象相关的信息。您可能需要等待几个小时,网站才会允许您这样做,但是如果可以的话,你应该把它作为一个答案发布。根据Trotts的建议,我已经在上面发布了我的评论作为一个答案,并提供了一些示例代码-在明天之前我不会把它标记为我的答案tho;)嗯,我不确定,问题是我从来没有真正想过向多边形对象添加我自己的属性,但我想这比比较路径更平滑。是=)@Bisa和javascript存储对对象和数组的引用,而不是副本,在这种情况下内存消耗保持不变。对,这是一个可靠的参数,在我的原始解决方案中,我会复制值并比较它们,而不是比较引用-我会稍微修改一下代码,而不是在事件函数中引用lot.objInfo,我不得不使用this.objInfo-一个更干净(更不用说更快)的解决方案,将此答案更改为我问题的正确答案。感谢您指出使用“this”-这是消除多义词歧义所必需的。
poly = new google.maps.Polygon({
    map_state_id: map_state_id,
    paths: pts,
    fillColor: colour,
    fillOpacity: 0.66,
    strokeWeight: 1,
    clickable:true
    });
google.maps.event.addListener(poly, 'click', function() 
    {
    var map_state_id = this.map_state_id; //retrieve correct state_id

    $.ajax(
        {
        type: "POST",
        url: "http://www...get_state_info.php",
        data: {state_id : map_state_id},
        dataType: "html",
        success: function(data)
            {
            $("#state_info").html(data); //display some info
            }                       
        });
    });