1

我正在使用 OpenLayers 来显示 OpenStreetMap 地图。(不过,我认为这应该足以适用于任何地图产品......)

我正在显示一些非常复杂的矢量叠加,并且我通过 GeoJSON 从服务器返回到叠加的特征的数量和分辨率对于许多计算机来说已经证明太多了。

我现在想做的是只发送适合当前缩放分辨率的数据。getResolution使用对象上的andcalculateBounds方法应该相对容易做到这一点MapcalculateBounds返回一个 Bounds 对象,然后可以在地图投影和显示投影之间进行转换。

如何将分辨率转换为我想要的投影(在这种情况下为 4326)?是否有这样做的内置方法,或者我是否必须根据已知公式运行分辨率?

4

2 回答 2

2

您可以使用Proj4js在客户端转换坐标系。

于 2010-03-29T00:26:13.590 回答
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://dev.openlayers.org/releases/OpenLayers-2.7/doc/apidocs/files/OpenLayers/Strategy/Cluster-js.html

在此处查看示例:

http://openlayers.org/dev/examples/strategy-cluster.html

为了避免有不同大小的点,您应该将 pointRadius: "${radius}" 设置为常数。

最后一种替代方法是使用 WMS 服务而不是 GeoJSON,然后服务器将只返回固定大小的图像。

于 2010-03-09T08:47:46.397 回答