【问题标题】:Get radius size in meters of a drawn point以米为单位获取绘制点的半径大小
【发布时间】:2015-12-07 16:21:31
【问题描述】:

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

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

有人知道如何计算从像素到米的点大小吗?

【问题讨论】:

  • 您提供的链接失效了

标签: javascript openlayers point


【解决方案1】:

您可以使用地图的分辨率,它定义为每像素的地图单位。 因此,假设您的地图单位为米,则所需的像素大小为:
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();
        }}  
    })
});

【讨论】:

  • 这个答案与 OpenLayer 版本有关吗?我试过应用它,但它不能正常工作,至少在 OpenLayer v2 中
【解决方案2】:

也许您可以使用正多边形 (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,

【讨论】:

  • 托尼奥,谢谢!我将以另一种方式将您的提示与多边形一起使用:-)
【解决方案3】:

您可以使用该常量对象来管理您的转化:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多