曾经注意到当你去maps.google.com并进行搜索(比如洗车)时,它会产生很多结果(用小圆圈表示)和一些突出的结果(看作普通尺寸的针脚) )?
请注意它的速度有多快?
从我在Firebug中对此进行分析可以看出,大部分内容都是在服务器上生成的,并作为静态图像发送给客户端。
然而,它仍然是动态的。您仍然可以放大和缩小,或者单击结果并查看呈现的动态InfoWindow。
谷歌使用静态图像使地图快速流畅,同时仍然保持灵活性。
有没有办法用我自己的Google地图(使用Google Maps API实现)进行这种“预加载”?
答案 0 :(得分:1)
maps.google.com使用的技术类似于GLayer中使用的技术。服务器动态构建磁贴和“热点”信息。 GLayer切片也是动态构建的(并且可能是高速缓存的),即使底层数据是相当静态的。从客户端来看,搜索点技术与Wikipedia或Panoramio GLayer相同。唯一的新技巧是点信息是在Google的大型快速服务器上动态生成的。
API(尚未)提供用于创建自定义GLayers的任何工具。如果你想自己做同样的事情,使用你自己的位置数据库,你需要编写三个步骤:
创建自己的自定义tileserver 在您的数据库中搜索 tile区域中的项目并使用a 图形库,如gd或 imagemagic将点放在上面 瓦。使用这些瓷砖创建一个 客户端上的GTileLayerOverlay。
当用户点击地图时 将该点击的位置发送给 第二台服务器该服务器应该 检查你的数据库并返回 infowindow文本为点 位置,如果有的话。从tileserver成像的所有点返回所有infowindow内容将会慢得令人无法接受,因此您必须根据需要逐个获取它们。
鼠标时更改光标 超过一点是更棘手的。什么是谷歌 do返回热点列表 每个点上所有点的坐标 瓦。每当鼠标移动时, API确定哪个图块 指针结束并使用四叉树 查看指针是否为算法 在一个热点,并改变 光标如有必要。如果你只是 每个人拥有适度数量的热点 瓦片,然后线性搜索会 可能是可以接受的快。如果每个图块可能有数千个点,那么您可能需要编写自己的四叉树算法。 Google四叉树代码未公开,因此您无法使用它。
这是a page,其中有人已经完成了所有这些。在这种情况下,通过比较距中心点的距离,热点计算为圆圈,即使点是方形的。在maps.google.com上,热点通过使用GBounds.containsPoint()计算为矩形,即使这些点是圆的。
答案 1 :(得分:0)
我正在做类似的事情 - 但是使用图块层,我只是在视图发生变化时将服务器集群标记发送到浏览器。如果您的数据是静态的,您可以预先对您的标记进行聚类,并且数万个标记的速度非常快。
我们的网站无法使用预聚类,因为可以搜索和过滤标记,但它仍然可以快速达到大约20,000个标记。还在努力......