确定何时在Google Maps API中完成Geojson的绘制

时间:2017-10-03 13:48:35

标签: google-maps events google-maps-api-3 listener geojson

在Google Maps API中使用print(" " + str(i)) 方法完成所有功能的绘制后是否会触发事件?

我读到你可以监听地图的“空闲”状态,但是当负载完成时,但在绘制特征之前,似乎地图被认为是空闲的。 看下面的小提琴: https://jsfiddle.net/z3tu0epb/

loadGeoJson()

我也知道在将任何功能添加到地图时会被触发的var map; function initMap() { map = new google.maps.Map(document.getElementById('map'), { zoom: 12, center: new google.maps.LatLng(40.755690, -73.975938) }); // Load GeoJSON. map.data.loadGeoJson( 'https://services5.arcgis.com/GfwWNkhOj9bNBqoJ/arcgis/rest/services/nybb/FeatureServer/0/query?where=1=1&outFields=*&geometryPrecision=8&outSR=4326&f=geojson'); google.maps.event.addListenerOnce(map, 'idle', function() { alert("map is idle"); }); } 侦听器,但我需要在将所有功能添加到地图后运行addFeature()

谢谢,

1 个答案:

答案 0 :(得分:1)

我担心没有可行的方法来捕获“绘制所有功能”事件后的数据层。如果数据层暴露了内部使用的Drawing Manager实例,则可能是这样。在这种情况下,您可以收听overlaycomplete事件

https://developers.google.com/maps/documentation/javascript/reference#OverlayCompleteEvent

但是数据层不会公开公开其Drawing Manager实例,因此您无法添加侦听器。

https://developers.google.com/maps/documentation/javascript/reference#Data

您可以做的独特之处在于弄清楚所有功能何时被加载(添加到集合中)。在这种情况下,您可以使用loadGeoJson(url:string, options?:Data.GeoJsonOptions, callback?:function(Array<Data.Feature>))

的回调函数

var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: new google.maps.LatLng(40.755690, -73.975938)
  });

  // Load GeoJSON.
  map.data.loadGeoJson(
    'https://services5.arcgis.com/GfwWNkhOj9bNBqoJ/arcgis/rest/services/nybb/FeatureServer/0/query?where=1=1&outFields=*&geometryPrecision=8&outSR=4326&f=geojson',
    {},
    function(features) {
        alert("Loaded " + features.length + " features");
    });

  google.maps.event.addListenerOnce(map, 'idle', function() {
    alert("map is idle");
  });
  
  

}
#map {
  height: 100%;
}


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

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initMap">


</script>

另外,请随意在Google issue tracker

中提交此类事件的功能请求