我使用Google Maps API在地图上显示我的多边形数据。存在的数据采用geoJson格式,文件大小为2Mb。这就是我将数据添加到图层
的方式var parcelLayer = new google.maps.Data();
parcelLayer.addGeoJson(geoJsonObject);
一切正常。
但我面临的问题是;数据文件大小足够大,大约2Mb,在地图上渲染需要5-10秒,所以我需要在数据在地图上渲染时添加一个加载器。
我无法找到在地图数据完成渲染后触发的此类事件或在此情况下可能有用的任何技巧。我在谷歌搜索了很多,并检查了这个网站的相关链接,但没有运气
被修改
我已尝试addfeature
事件如下
count=0;
parcelLayer.addListener('addfeature', function() {
count+=1;
if (count==geoJsonObject.features.length){
console.log('all rendered');
}
});
但是console
在图层完成渲染之前响应很远。
答案 0 :(得分:1)
我遇到了同样的问题,并且能够成功地遵循@ AniV的建议。
但我想提出一个额外的细节,这是我困惑的根源。 Google Maps API允许您以两种方式之一加载GeoJSON数据:
1)loadGeoJson
:这会将URL路径作为参数,并通过GET请求将JSON拉入该URL。假设它遵循正确的GeoJSON格式,服务器的JSON响应将被添加到地图中。
2)addGeoJson
:这就是你上面使用的。它将JSON本身作为参数并将其添加到地图中。
在这里我被绊倒:我最近从使用loadGeoJson
切换到使用addGeoJson
,事实上,事件监听器addfeature
执行了不对两种方法都以相同的方式工作。
对于loadGeoJson
,在我看来,服务器返回的所有功能都会立即添加,这样事件监听器addfeature
会在**所有*标记添加后触发。但是对于addGeoJson
,这些功能似乎一次只添加一个,这样addfeature
侦听器会在添加所有标记之前触发(或者根本不添加?我无法分辨哪个是这样的)因此代码块不会被执行。
为了解决这个问题,我成功使用了@ AniV的答案。但是,如果有人从loadGeoJson
切换到addGeoJson
遇到与我相同的问题,我想提供这些附加信息。
答案 1 :(得分:0)
为什么不使用
google.maps.event.addListenerOnce(map, 'idle', function(){
// you can put your layer code for data is present is in geoJson format here
});
"空闲"当地图完全加载意味着它处于空闲状态时触发事件。