Получить размер радиуса в метрах нарисованной точки

Я рисую точки на карте с помощью OpenLayers, как в этом примере: http://dev.openlayers.org/examples/draw-feature.html

Теперь я хочу знать, какую площадь (в метрах) занимает такая нарисованная точка. Я знаю, это зависит от уровня масштабирования. И это тоже мой план: я хочу рисовать свои точки с разным размером - в зависимости от уровня масштабирования. Если уровень масштабирования максимальный, точка должна быть большой. Если уровень масштабирования низкий, точка должна быть нарисована очень маленькой.

Кто-нибудь знает, как рассчитать размер точки от пикселя до метра?


person Mike    schedule 17.05.2011    source источник
comment
Ссылка, которую вы предоставляете, больше не работает   -  person eMarine    schedule 04.09.2015


Ответы (3)


Вы можете использовать разрешение карты, которое определяется как единицы карты на пиксель. Таким образом, если единицы измерения карты – метры, требуемый размер в пикселях будет следующим:
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();
        }}  
    })
});
person aviaron    schedule 18.05.2011
comment
Связан ли этот ответ с версией OpenLayer? Я пытался применить его, и он не работает должным образом, по крайней мере, в OpenLayer v2. - person eMarine; 04.09.2015

Возможно, вы можете использовать обычный многоугольник (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

ХТХ,

person tonio    schedule 18.05.2011
comment
тонио, спасибо! Я воспользуюсь вашей подсказкой с полигонами по-другому :-) - person Mike; 26.05.2011

вы можете использовать этот постоянный объект для управления своими конверсиями:

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

person Alexandre Mélard    schedule 03.02.2015