Mike
Mike

Reputation: 315

Get radius size in meters of a drawn point

I'm drawing points on a map with OpenLayers like in this example: http://dev.openlayers.org/examples/draw-feature.html

Now I want to know, which area (in meters) is covered by such a drawn point. I know, this depends on the zoom level. And this is also my plan: I want to draw my points with a different size - depending on the zoom level. If the zoom level is maximum, the point should be big. If the zoom level is low, the point should be drawn very small.

Has anyone an idea, how to calculate the point size from pixel to meter?

Upvotes: 3

Views: 8027

Answers (3)

Alexandre Mélard
Alexandre Mélard

Reputation: 12649

you can use that constant object to manage your conversions:

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;

And read about it here:

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

Upvotes: 1

aviaron
aviaron

Reputation: 640

You could use the map's resolution, which is defined as map units per pixel. So, assuming your map units are meters, the required pixel size would be:
size_in_meters / map_resolution.

You can use the above calculation in a style map to have points' sizes change dynamically as map resolution changes:

styleMap = new OpenLayers.StyleMap({
    'default': new OpenLayers.Style({
        pointRadius: "${getSize}"
    },
    { context: {
        getSize: function(feature) {
            return size_in_meters / feature.layer.map.getResolution();
        }}  
    })
});

Upvotes: 7

tonio
tonio

Reputation: 2376

Maybe you can use a regular polygon (1) instead of the point, with its radius depending on zoom levels. Then you can call getArea(2) on the obtained geometry. If you map projection unit is meter, you get it.

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,

Upvotes: 1

Related Questions