我的应用程序执行以下操作:
- 生成大量标记
- 将它们放入kml文件中,每个文件带有20k个标记
- 将文件导出到服务器
- 将每个文件作为kmllayer打开,并将图层设置为贴图对象
我的问题是:
在API改变之前(一个月前),我可以在同一张地图上显示超过10万个标记,没有任何问题。IE会慢得多,但大部分时间仍然能正确加载点。
现在(我这边没有修改代码)IE甚至不会画一个带有10k标记的单层。铬可以达到约20k,但不会超过这个数字。如果点的数量太大,地图就不会画一个标记。
你们知道限制有什么变化吗?有什么变通办法吗?
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>KML Layers</title>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script type="text/javascript" src="htmlConfig.js" ></script>
<script>
var map;
function initialize()
{
var chicago = new google.maps.LatLng(-47.19105,-22.857302);
var mapOptions =
{
zoom: 6,
center: chicago
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for(i = 0; i < _files; i++)
{
foo = (_url+'/'+(i)+'.kml');
var ctaLayer = new google.maps.KmlLayer({url: foo});
ctaLayer.setMap(map);
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
url是到服务器的路径,_files是每个名为0.kml、1.kml的文件数,依此类推
KML有限制,在本文档中有描述,主要限制是KML的大小,而不是元素的数量
刚刚在家测试了软件,它正常工作。所以我发现问题出在安装了网络过滤器的IT部门。不知怎的,它扰乱了与公共服务器或谷歌服务器中的kml文件的通信。我想在这种情况下没什么可做的。。。
参考文档中的URL长度限制:
在单个谷歌地图上可以显示的KML层的数量是有限制的。如果超过此限制,则不会显示任何图层。该限制基于传递给KMLLayer类的所有URL的总长度,因此会因应用程序而异;平均来说,你应该能够在不达到极限的情况下装载10到20层。
该限制可能已经基于API的改变而改变。
尝试使用"URL缩短器"(如tinyurl)来缩短KML文件的URL长度。