【问题标题】:Find polygon for place in KML在 KML 中查找位置的多边形
【发布时间】:2015-09-19 05:38:13
【问题描述】:

注意:请务必阅读我在底部的更新!!


我有一个 KML 文件,我将其加载到 Google 地图上;我还有一个搜索框,用户可以在其中搜索城市。找到城市后,我会放置一个标记,在大多数(如果不是全部)情况下,该标记应位于 KML 中定义的多边形之一中。

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

我查看了Maps V3 documentation,但找不到任何东西。这可能吗?

您可以在http://netnummer.robiii.me查看项目,源代码可以在https://github.com/RobThree/NetnummersNL找到

相关(sn-p of)代码为:

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) 来确定这个地方是否有用/一个实际的地方;但是我想有更好的方法(“最佳实践”?)来做到这一点?


编辑 1:刚刚偶然发现With Google Maps API V3, determine if a marker is inside a KML Layer boundary。目前正在调查它。但是,我应该可能注意到 KML 由第 3 方托管并由他们随意更新;当我使用静态站点托管时,我不希望有一个单独的过程来从 KML 文件中的多边形中提取坐标。我更喜欢直接“读取”KML(输入)。


编辑 2:我将 from (direct) KML 移至 a FusionTables based solution。我现在可以“突出显示”该位置所在的多边形。现在我(仍然)需要的是一种方法来弄清楚如何显示它的 InfoWindow。明天我会调查的;看来我需要(再次)查询into a DataTable or something 并以这种方式获取标签信息。


编辑 3Solved!

【问题讨论】:

  • 这两个例子似乎都没有使用 KML 数据?还是我弄错了?
  • “由第 3 方托管并随意更新”将是我之前评论中的两个示例的问题。第一个示例使用 KML 文件(扩展名为 .xml,但为 KML),第二个示例使用导入 FusionTables 的 KML。 geoxml3 受到相同的域限制,因此必须通过代理访问 KML(“静态站点托管”帐户存在问题)。虽然不确定您打算如何处理来自第三方网站的 KML 文件,但您的网站上没有活动内容。
  • geoXML3 解决方案导致(预期的)XMLHttpRequest cannot load 'https://…'. No 'Access-Control-Allow-Origin' header is present on the requested resource.。我可以在自己的主机上托管 KML(并保持副本保持最新)。明天会调查;该睡觉了 :-) 感谢您到目前为止的帮助!

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


【解决方案1】:

我现在应该已经在床上了(见 editscomments)但是嘿...我就是不会那么轻易放手...

这就是我所做的:

  1. Move from (direct) KML to Fusion Tables (Resulting 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 并显示信息窗口
  4. ...
  5. Profit!

我特意将上面的链接链接到特定版本的特定差异或文件,因此以后的更改/更新不会与此答案混淆。在这篇文章中发布所有细节有点过分,但我希望这对某人有所帮助。

最终结果可见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多