Javascript 在KML中查找放置的多边形

Javascript 在KML中查找放置的多边形,javascript,google-maps-api-3,kml,Javascript,Google Maps Api 3,Kml,注意:请确保阅读底部的我的更新 我有一个KML文件,我把它加载到谷歌地图上;我还有一个搜索框,用户可以在其中搜索城市。当城市被发现时,我放置了一个标记,在大多数情况下(如果不是全部的话),它应该落在KML中定义的一个多边形中 我可以点击一个多边形,它会显示一个带有该区域区号的信息弹出窗口;但是:当放置标记时,我希望自动显示此信息弹出窗口(以及放置标记之前显示的其他信息) 我看了这本书,但什么也没找到。这可能吗 您可以在处查看项目,可以在处找到源 相关(代码片段)为: 另外,作为一个附带问题:a

注意:请确保阅读底部的我的更新


我有一个KML文件,我把它加载到谷歌地图上;我还有一个搜索框,用户可以在其中搜索城市。当城市被发现时,我放置了一个标记,在大多数情况下(如果不是全部的话),它应该落在KML中定义的一个多边形中

我可以点击一个多边形,它会显示一个带有该区域区号的信息弹出窗口;但是:当放置标记时,我希望自动显示此信息弹出窗口(以及放置标记之前显示的其他信息)

我看了这本书,但什么也没找到。这可能吗

您可以在处查看项目,可以在处找到源

相关(代码片段)为:

另外,作为一个附带问题:
autocomplete.getPlace()总是返回一个对象;确定该对象是否为实际(有用)场所的最佳方法是什么?例如,当我搜索
xxxx
时,
getPlace()
返回
Object{name:“xxxx”}
,实际结果(如搜索
Amsterdam
)返回
Object{address\u components:Array[4],adr\u address:“Amsterdam,Nederland”,}
。我目前使用
if(!place.geometry)
来确定该位置是否有用/是否是实际位置;然而,我想有更好的方法(“最佳实践”)来做到这一点



编辑1:刚刚偶然发现。目前正在调查。然而,我可能应该注意到,KML由第三方托管,并由第三方随意更新;由于我使用静态站点托管,我不希望有一个单独的过程从KML文件的多边形中提取坐标。我更喜欢直接“阅读”KML(in)


编辑2:我移动到。我现在可以“高亮”该位置所在的多边形。现在,我(仍然)需要的是一种方法来找出如何显示它的信息窗口。我明天会调查的;似乎我需要(再次)查询并以这种方式获取标签信息



编辑3

我现在应该已经在床上了(见和),但是嘿。。。我只是不想那么容易就放手

以下是我所做的:

  • ()
  • 获取特定区域()所需的数据
  • 并显示信息窗口
  • ! 我特意将上述链接链接到特定版本的特定差异或文件,以便以后的更改/更新不会影响此答案。在这篇文章中发布所有细节有点太多了,但我希望这能帮助一些人


    可以看到最终结果。

    您的意思是类似的,或者两个示例似乎都没有使用KML数据?还是我错了?“由第三方托管并随意更新”将是我之前评论中两个示例的问题。第一个示例使用KML文件(扩展名为.xml,但为KML),第二个示例使用导入到FusionTables中的KML。geoxml3受相同的域限制,因此KML必须通过代理进行访问(这是“静态站点托管”帐户的问题)。虽然不确定您计划如何处理来自第三方站点的KML文件,但您的站点上没有活动内容。geoXML3解决方案会导致(预期)
    XMLHttpRequest无法加载“https://…”。请求的资源上不存在“Access Control Allow Origin”标题。
    。我可以在自己的主机上托管KML(并保留一份最新副本)。我们将在明天进行调查;该睡觉了:-)谢谢你的帮助!
    google.maps.event.addListener(autocomplete, 'place_changed', function () {
        var place = autocomplete.getPlace();
        if (!place.geometry)
            return;
    
        // Remove any existing markers
        for (var i = 0, marker; marker = markers[i]; i++)
            marker.setMap(null);
        markers = [];
    
        // Create a marker for place.
        var marker = new google.maps.Marker({
            map: map,
            icon: image,
            title: place.name,
            position: place.geometry.location
        });
        markers.push(marker);
    
        // ... Here I should figure out in which polygon the marker is positioned
        // ... and preferrably open/display the info-window which is shown when a
        // ... polygon is clicked.
    
        // Scroll (pan) to marker
        map.panTo(place.geometry.location);
    });