在KML中查找位置的多边形

时间:2015-07-01 21:20:24

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

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

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

我可以单击一个多边形,它会显示一个信息弹出窗口,其中包含该区域的areacode;但是:当放置一个标记时,我想让这个信息弹出窗口自动显示(以及可能在隐藏标记之前显示的其他信息)。

我已查看Maps V3 documentation但无法找到任何内容。这可能吗?

您可以在http://netnummer.robiii.me查看该项目,该来源位于https://github.com/RobThree/NetnummersNL

相关(代码片段)代码为:

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

另外,作为一个副问题:autocomplete.getPlace();总是返回一个对象;找出对象是否是实际(有用)位置的最佳方法是什么?例如,当我搜索xxxx时,getPlace()会返回Object {name: "xxxx"},实际结果(如搜索Amsterdam)会返回Object {address_components: Array[4], adr_address: "<span class="locality">Amsterdam</span>, <span class="country-name">Nederland</span>", …}。我目前使用if (!place.geometry)来确定这个地方是否有用/实际地点;但是我觉得有更好的方法(&#39;最佳实践&#39;?)这样做?

编辑1 :偶然发现了With Google Maps API V3, determine if a marker is inside a KML Layer boundary。目前正在调查中。但是,我可能注意到KML由第三方托管并由他们随意更新;因为我使用静态站点托管,我不希望有一个单独的进程从KML文件中提取多边形的坐标。我更喜欢&#34;阅读&#34; KML(in)直接。

修改2 :我已将from (direct) KML移至a FusionTables based solution。我现在可以&#34;突出显示&#34;这个地方所在的多边形。现在我所有(仍然)需要的是一种方法来弄清楚如何展示它的InfoWindow。我明天会看一看;似乎我需要再次查询into a DataTable or something并以此方式获取标签信息。

编辑3 Solved

1 个答案:

答案 0 :(得分:0)

我现在应该一直在床上(见editscomments)但是嘿......我只是不容易放手......

所以这就是我所做的:

  1. Move from (direct) KML to Fusion TablesResulting html
  2. Fire off an extra query using Google Visualization's datatables获取特定区域所需的数据(Resulting html
  3. Use the place variable I already had for lat/lng and name并显示infowindow
  4. ...
  5. Profit <!/ LI>

    我故意将上述链接链接到特定版本的特定差异或文件,以便稍后更改/更新不会弄乱此答案。在这篇文章中发布所有细节有点太多了,但我希望这对某人有帮助。

    最终结果可见here