【发布时间】: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 并以这种方式获取标签信息。
编辑 3:Solved!
【问题讨论】:
-
这两个例子似乎都没有使用 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