我在OpenLayers的地图上绘制点,如下例所示:http://dev.openlayers.org/examples/draw-feature.html
现在我想知道,这样一个绘制的点覆盖了哪个区域(以米为单位)。我知道,这取决于缩放级别。这也是我的计划:我想用不同的尺寸绘制我的点 - 取决于缩放级别。如果缩放级别最大,则该点应该很大。如果缩放级别较低,则应将该点绘制得非常小。
有没有人知道,如何计算从像素到米的磅值?
答案 0 :(得分:6)
您可以使用地图的分辨率,该分辨率定义为每像素的地图单位。
因此,假设您的地图单位是米,则所需的像素大小为:
size_in_meters / map_resolution
。
您可以在样式图中使用上述计算,以便在地图分辨率更改时动态更改点的大小:
styleMap = new OpenLayers.StyleMap({
'default': new OpenLayers.Style({
pointRadius: "${getSize}"
},
{ context: {
getSize: function(feature) {
return size_in_meters / feature.layer.map.getResolution();
}}
})
});
答案 1 :(得分:1)
也许您可以使用正多边形(1)代替点,其半径取决于缩放级别。 然后,您可以在获得的几何体上调用getArea(2)。 如果您将投影单位映射为米,则可以获得它。
1 - http://www.openlayers.org/dev/examples/regular-polygons.html
2 - http://dev.openlayers.org/docs/files/OpenLayers/Geometry-js.html#OpenLayers.Geometry.getArea
HTH,
答案 2 :(得分:1)
您可以使用该常量对象来管理转化:
ol.proj.METERS_PER_UNIT
/**
* Meters per unit lookup table.
* @const
* @type {Object.<ol.proj.Units, number>}
* @api stable
*/
ol.proj.METERS_PER_UNIT = {};
ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] =
2 * Math.PI * ol.sphere.NORMAL.radius / 360;
ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048;
ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1;
在这里阅读: