Получить размер радиуса в метрах нарисованной точки - PullRequest
3 голосов
/ 18 мая 2011

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

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

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

Ответы [ 3 ]

6 голосов
/ 18 мая 2011

Вы можете использовать разрешение карты, которое определяется как единица карты на пиксель. Итак, при условии, что ваши единицы измерения карты - метры, требуемый размер пикселя будет:
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 голос
/ 03 февраля 2015

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

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

1 голос
/ 18 мая 2011

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

...