OpenLayers. Ошибка масштабной линейки
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
OpenLayers. Ошибка масштабной линейки
Добрый день.
Создаю карту
и заметил что неправильно отображается масштабная линейка и расстояние измеряется неверно
На примере:
Рабочий код и пример
две метки, между ними 1 км (можно проверить по картам яндекса и гугла)
OpenLayers выдает совершенно другие данные
как справить косяк?
(видимо ошибка в резолюции картографии)
Создаю карту
и заметил что неправильно отображается масштабная линейка и расстояние измеряется неверно
На примере:
Рабочий код и пример
две метки, между ними 1 км (можно проверить по картам яндекса и гугла)
OpenLayers выдает совершенно другие данные
как справить косяк?
(видимо ошибка в резолюции картографии)
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers. Ошибка масштабной линейки
Получается большее значение? Попробуйте умножить на косинус широты, так похоже на правду?
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers. Ошибка масштабной линейки
Короче вам нужно использовать свойство контрола geodesic:true.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. Ошибка масштабной линейки
Тут даже "ошибка" "настройки" слоя картографии
т.к. даже стандартный элемент (масштабная линейка) выдает неправильно информацию
и стандартный элемент измерений
тут
между двумя маркерами 1 км, а OSM (OpenLayesr) выдет ~1.8
т.к. даже стандартный элемент (масштабная линейка) выдает неправильно информацию
и стандартный элемент измерений
тут

между двумя маркерами 1 км, а OSM (OpenLayesr) выдет ~1.8
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. Ошибка масштабной линейки
Не помогаетDenis Rykov писал(а):Короче вам нужно использовать свойство контрола geodesic:true.
[ Сообщение с мобильного устройства ]
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. Ошибка масштабной линейки
Что значит не помогает? Вот только что поменял в вашем примере false на true - линейка удлинилась.morli писал(а):Не помогаетDenis Rykov писал(а):Короче вам нужно использовать свойство контрола geodesic:true.
http://jsfiddle.net/7J5uu/1/
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. Ошибка масштабной линейки
вернее помогает для "правильного" отображения линейки масштабаmorli писал(а):Не помогаетDenis Rykov писал(а):Короче вам нужно использовать свойство контрола geodesic:true.
[ Сообщение с мобильного устройства ]

но для элемента измерений расстояния (OpenLayers.Control.Measure) и перевода расстояния в пиксели (pix = metrs / map.getResolution() )
не помогает, по прежнему ошибочные результаты
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers. Ошибка масштабной линейки
У этого контрола тоже есть свойство geodesic.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. Ошибка масштабной линейки
morli писал(а):... для элемента измерений расстояния (OpenLayers.Control.Measure) ...Denis Rykov писал(а):Короче вам нужно использовать свойство контрола geodesic:true.
Код: Выделить всё
measureControl = new OpenLayers.Control.Measure(
OpenLayers.Handler.Path,
{ immediate: true, persist: true, geodesic: true});
а вот с
PS ранее для карты
Код: Выделить всё
var options = { units: "m",
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls: [ new OpenLayers.Control.Navigation(),
new OpenLayers.Control.ScaleLine({geodesic: true, bottomInUnits: 'km', topInUnits: 'm' })
]};
map = new OpenLayers.Map('map',options);
не удается перевести расстояние в "правильные" пиксели
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. Ошибка масштабной линейки
И не поможет. Дело в том, что getResolution использует единицы выбранной проекции. У сферического меркатора, который у вас используется, это "ненастоящие метры", т.к. зависят от широты. Чтобы получить из них настоящие метры нужно величину домножить на cos от широты в градусах. Но это будет верно только для малых длин, для больших расстояний линейные формулы не годятся, надо использовать соответствующие сферические, учитывающие кривизну Земли.morli писал(а):перевода расстояния в пиксели (pix = metrs / map.getResolution() ) не помогает, по прежнему ошибочные результаты
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 08 окт 2013, 16:35
- Репутация: 0
Re: OpenLayers. Ошибка масштабной линейки
Sergey Astakhov писал(а): метры нужно величину домножить на cos от широты в градусах.
Код: Выделить всё
metrs / this.map.getResolution() / Math.cos(lat * (Math.PI/180));
Код: Выделить всё
new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Polygon.createRegularPolygon(
point,
radius / Math.cos(lat * (Math.PI/180)),
...,
...),
{ ... },
{ ... });
а где их можно взять? что-то не смог сходу найтиSergey Astakhov писал(а): надо использовать соответствующие сферические, учитывающие кривизну Земли.
-
- Активный участник
- Сообщения: 218
- Зарегистрирован: 21 дек 2012, 01:57
- Репутация: 52
- Откуда: Питер
Re: OpenLayers. Ошибка масштабной линейки
Классика жанра: http://williams.best.vwh.net/avform.htmmorli писал(а):а где их можно взять? что-то не смог сходу найтиSergey Astakhov писал(а): надо использовать соответствующие сферические, учитывающие кривизну Земли.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: OpenLayers. Ошибка масштабной линейки
пристегивайтесь, турбулентность прямо по курсу
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя