OpenLayers. отрисовка линии, толщина которой задана в метрах

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
morli
Интересующийся
Сообщения: 15
Зарегистрирован: 08 окт 2013, 16:35
Репутация: 0

OpenLayers. отрисовка линии, толщина которой задана в метрах

Сообщение morli » 09 окт 2013, 16:13

Добрый день.
Как отрисовать линию (полигон), толщина которой задана в метрах
Причем отображение на любом масштабе карты была бы "правдаподобным"?

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение Sergey Astakhov » 10 окт 2013, 01:52

morli писал(а):отображение на любом масштабе карты была бы "правдаподобным"?
А что вы понимаете под "правдаподобным"? Если на данном масштабе эти метры занимают доли пиксела - линия так и должна рисоваться толщиной в эти доли пиксела? :roll:

morli
Интересующийся
Сообщения: 15
Зарегистрирован: 08 окт 2013, 16:35
Репутация: 0

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение morli » 10 окт 2013, 08:45

доли пикселя - при округлении дают 0 - не выводим

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение Sergey Astakhov » 10 окт 2013, 12:30

Возможные варианты:
* рисовать линию и задать strokeWidth для каждого зума
* по ширине из линии формировать прямоугольник и рисовать его, задав максимальный зум вывода
* сделать свой рендерер (модификацией существующих), который будет рисовать то что нужно

Последний вариант самый сложный в реализации, но зато самый простой в дальнейшем использовании и самый быстрый по производительности. По поводу первых, смотрите документацию по стилям (http://docs.openlayers.org/library/feature_styling.html) и примеры (http://openlayers.org/dev/examples/)

morli
Интересующийся
Сообщения: 15
Зарегистрирован: 08 окт 2013, 16:35
Репутация: 0

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение morli » 10 окт 2013, 13:50

если рассматривать стили, то допустим фильтр или ловим событие изменения масштаба
и меняем свойство strokeWidth
но как высчитать значение strokeWidth ??
(и pointRadius от масштаба)?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение Denis Rykov » 10 окт 2013, 15:23

Разделить ширину линии на разрешение данного масштабного уровня (аналогично с радиусом).
Spatial is now, more than ever, just another column- The Geometry Column.

morli
Интересующийся
Сообщения: 15
Зарегистрирован: 08 окт 2013, 16:35
Репутация: 0

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение morli » 14 окт 2013, 15:54

спасибо
разобрался

отлавливаю событие изменения масштаба и высчитываю нужное значение

Код: Выделить всё

map = new OpenLayers.Map();
map.events.register('zoomend', map, zoomEvent);
line = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.LineString(pointList),{size_in_meters: width},null);

zoomEvent = function () {
var res = map.getResolution();
var wd = line.attributes.size_in_meters / res;
line.style.strokeWidth = wd;
layer.redraw();
}


Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: OpenLayers. отрисовка линии, толщина которой задана в ме

Сообщение Sergey Astakhov » 14 окт 2013, 21:49

Только учтите, что этот resolution в единицах карты (map units per pixel), интерпретация которых зависит от используемой проекции. К примеру, у сферического меркатора, чтобы получить реальные метры надо ещё как минимум домножить на косинус широты. Иначе у вас на широте Питера отображаемая ширина линии будет в 2 раза отличаться от реальной.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя