我正在使用OpenLayers来显示OpenStreetMap地图。 (虽然,我认为这应该足够通用,适用于任何地图产品......)
我正在显示一些非常复杂的矢量叠加层,我从服务器通过GeoJSON返回到叠加层的功能的数量和分辨率已经证明对许多计算机来说太多了。
我现在要做的只是发送符合当前缩放分辨率的数据。使用getResolution
对象上的calculateBounds
和Map
方法相对容易做到这一点。 calculateBounds
返回一个Bounds对象,然后可以在地图投影和显示投影之间进行转换。
如何将分辨率转换为我想要的投影(本例中为4326)?是否有内置的方法来执行此操作,还是必须针对已知公式运行解决方案?
答案 0 :(得分:2)
您可以使用Proj4js转换客户端上的坐标系。
答案 1 :(得分:1)
如何限制GeoJSON矢量图层绘制的比例?
http://dev.openlayers.org/docs/files/OpenLayers/Layer-js.html#OpenLayers.Layer.maxScale
然后,对服务器的OpenLayers AJAX请求应该只触发超出此范围。选择与要显示矢量图层时对应的OpenSteetMaps比例/缩放级别,并相应地设置maxScale。
请求应自动将当前地图显示的边界发送到您的服务器以获取相关功能。
我可能误解了你的困境。如果您需要解决方案公式,本文将介绍它们:
http://msdn.microsoft.com/en-us/library/aa940990.aspx
<强>更新强>
您可以在OpenLayers中实施群集策略。我认为这应该减少渲染时间,尽管我假设从数据库返回相同数量的数据。
点击此处的示例:
http://openlayers.org/dev/examples/strategy-cluster.html
为避免使用不同大小的点,您可以将pointRadius:“$ {radius}”设置为常量。
最后,另一种方法是使用WMS服务而不是GeoJSON,服务器只会返回固定大小的图像。