OpenLayers. отрисовка линии, толщина которой задана в метрах
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
OpenLayers. отрисовка линии, толщина которой задана в метрах
Добрый день.
Как отрисовать линию (полигон), толщина которой задана в метрах
Причем отображение на любом масштабе карты была бы "правдаподобным"?
Как отрисовать линию (полигон), толщина которой задана в метрах
Причем отображение на любом масштабе карты была бы "правдаподобным"?
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
А что вы понимаете под "правдаподобным"? Если на данном масштабе эти метры занимают доли пиксела - линия так и должна рисоваться толщиной в эти доли пиксела?morli писал(а):отображение на любом масштабе карты была бы "правдаподобным"?

-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
доли пикселя - при округлении дают 0 - не выводим
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Возможные варианты:
* рисовать линию и задать strokeWidth для каждого зума
* по ширине из линии формировать прямоугольник и рисовать его, задав максимальный зум вывода
* сделать свой рендерер (модификацией существующих), который будет рисовать то что нужно
Последний вариант самый сложный в реализации, но зато самый простой в дальнейшем использовании и самый быстрый по производительности. По поводу первых, смотрите документацию по стилям (http://docs.openlayers.org/library/feature_styling.html) и примеры (http://openlayers.org/dev/examples/)
* рисовать линию и задать strokeWidth для каждого зума
* по ширине из линии формировать прямоугольник и рисовать его, задав максимальный зум вывода
* сделать свой рендерер (модификацией существующих), который будет рисовать то что нужно
Последний вариант самый сложный в реализации, но зато самый простой в дальнейшем использовании и самый быстрый по производительности. По поводу первых, смотрите документацию по стилям (http://docs.openlayers.org/library/feature_styling.html) и примеры (http://openlayers.org/dev/examples/)
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
если рассматривать стили, то допустим фильтр или ловим событие изменения масштаба
и меняем свойство strokeWidth
но как высчитать значение strokeWidth ??
(и pointRadius от масштаба)?
и меняем свойство strokeWidth
но как высчитать значение strokeWidth ??
(и pointRadius от масштаба)?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Разделить ширину линии на разрешение данного масштабного уровня (аналогично с радиусом).
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
спасибо
разобрался
отлавливаю событие изменения масштаба и высчитываю нужное значение
разобрался
отлавливаю событие изменения масштаба и высчитываю нужное значение
Код: Выделить всё
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();
}
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Только учтите, что этот resolution в единицах карты (map units per pixel), интерпретация которых зависит от используемой проекции. К примеру, у сферического меркатора, чтобы получить реальные метры надо ещё как минимум домножить на косинус широты. Иначе у вас на широте Питера отображаемая ширина линии будет в 2 раза отличаться от реальной.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя