Страница 1 из 1
OpenLayers. отрисовка линии, толщина которой задана в метрах
Добавлено: 09 окт 2013, 16:13
morli
Добрый день.
Как отрисовать линию (полигон), толщина которой задана в метрах
Причем отображение на любом масштабе карты была бы "правдаподобным"?
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 10 окт 2013, 01:52
Sergey Astakhov
morli писал(а):отображение на любом масштабе карты была бы "правдаподобным"?
А что вы понимаете под "правдаподобным"? Если на данном масштабе эти метры занимают доли пиксела - линия так и должна рисоваться толщиной в эти доли пиксела?

Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 10 окт 2013, 08:45
morli
доли пикселя - при округлении дают 0 - не выводим
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 10 окт 2013, 12:30
Sergey Astakhov
Возможные варианты:
* рисовать линию и задать strokeWidth для каждого зума
* по ширине из линии формировать прямоугольник и рисовать его, задав максимальный зум вывода
* сделать свой рендерер (модификацией существующих), который будет рисовать то что нужно
Последний вариант самый сложный в реализации, но зато самый простой в дальнейшем использовании и самый быстрый по производительности. По поводу первых, смотрите документацию по стилям (
http://docs.openlayers.org/library/feature_styling.html) и примеры (
http://openlayers.org/dev/examples/)
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 10 окт 2013, 13:50
morli
если рассматривать стили, то допустим фильтр или ловим событие изменения масштаба
и меняем свойство strokeWidth
но как высчитать значение strokeWidth ??
(и pointRadius от масштаба)?
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 10 окт 2013, 15:23
Denis Rykov
Разделить ширину линии на
разрешение данного масштабного уровня (аналогично с радиусом).
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 14 окт 2013, 15:54
morli
спасибо
разобрался
отлавливаю событие изменения масштаба и высчитываю нужное значение
Код: Выделить всё
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();
}
Re: OpenLayers. отрисовка линии, толщина которой задана в ме
Добавлено: 14 окт 2013, 21:49
Sergey Astakhov
Только учтите, что этот resolution в единицах карты (map units per pixel), интерпретация которых зависит от используемой проекции. К примеру, у сферического меркатора, чтобы получить реальные метры надо ещё как минимум домножить на косинус широты. Иначе у вас на широте Питера отображаемая ширина линии будет в 2 раза отличаться от реальной.