Google Maps API KMZ文件在点击事件中显示错误数据

时间:2018-08-17 13:41:55

标签: javascript file maps kml kmz

我有一个KMZ文件,我通过使用javascript的链接将其加载到我的Google Maps应用程序中。该文件可在Google Earth中完美运行。问题出在我的应用程序中,当我单击多个元素(区域)之一时:返回的描述数据始终仅来自其中一个元素,而不显示实际单击的正确元素。这是我尝试过的:

  1. 通过将标记放在点击位置来检查地图中的点击事件是否正确。

  2. 使用Google地球将数据转换为KML,将其公开放置在我的google驱动器中,并在我的应用程序中使用来自google驱动器的直接下载链接。它显示了数据,但错误仍然存​​在。

  3. 仅使用该图层创建了最基本/空白的应用程序,以确保其他应用程序中的其他内容没有受到干扰。也没用。

该文件位于以下网站中:https://www.voanaboa.pt/codigo-drone,名为“ Regulamento RPA_ver_5.0.kmz”

这是唯一使用kmz文件创建基本应用程序的文件,出于安全考虑,我删除了我的API密钥。

toArray()

1 个答案:

答案 0 :(得分:0)

大多数(但不是全部)地标具有相同的ID“ ID_00000”)。如果我将其更改为唯一,则多边形的描述将变为唯一:

example with unique ids

每个KML reference都没有必须唯一(它是一个“ stanard XML ID”,但我猜渲染代码假设是这样。

具有更新的kmz文件的代码段:

/* Always set the map height explicitly to define the size of the div
       * element that contains the map. */

#map {
  height: 100%;
}


/* Optional: Makes the sample page fill the window. */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script>
  var map;

  function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      center: {
        lat: -34.397,
        lng: 150.644
      },
      zoom: 8
    });

    var kmlLayer = new google.maps.KmlLayer();
    var src = 'http://www.geocodezip.com/geoxml3_test/kmz/Regulamento-RPA-ver-5.0a.kmz';
    var kmlLayer = new google.maps.KmlLayer(src, {
      //suppressInfoWindows: true,
      preserveViewport: false,
      map: map
    });
  }
</script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry&callback=initMap" async defer></script>