获取绘制点的半径大小(以米为单位)

时间:2011-05-17 22:36:41

标签: javascript openlayers point

我在OpenLayers的地图上绘制点,如下例所示:http://dev.openlayers.org/examples/draw-feature.html

现在我想知道,这样一个绘制的点覆盖了哪个区域(以米为单位)。我知道,这取决于缩放级别。这也是我的计划:我想用不同的尺寸绘制我的点 - 取决于缩放级别。如果缩放级别最大,则该点应该很大。如果缩放级别较低,则应将该点绘制得非常小。

有没有人知道,如何计算从像素到米的磅值?

3 个答案:

答案 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;

在这里阅读:

  

http://openlayers.org/en/v3.1.1/apidoc/proj.js.html