На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Расчёт радиуса при выделении области

Поиск  Пользователи  Правила  Войти
Форум » Серверные приложения » GIS WebToolKit
Страницы: 1
RSS
Расчёт радиуса при выделении области
 
Доброго времени суток.
При использовании компонента  Обработчик выбора фрагмента карты в радиусе от точки  src\components\GwtkSearchArea\actions\SelectMapCircleAction.ts
Как я вижу радиус неправильно считается

   private getCircle( point: PixelPoint ) {

    ...

           const pointXY = this.mapWindow.getMap().pixelToPlane( point.clone() );
           let centerPlane = this.mapWindow.getMap().pixelToPlane( this.circleCenter );
           let radius = this.circleCenter.distanceTo( point ) || 0;
           let radius_meter = centerPlane.distanceTo( pointXY ) || 0;
  ...
           this.showLabel(point.x, point.y, radius_meter);


   ....

После выделения радиусом отображается значение похожее на диаметр, а не радиус(radius_meter )
А если использовать radius, то значение схоже только при определенном масштабе.

Проверял выделением области в Москве в координате 55.75196229849823, 37.618813645946986 и ограничивал радиус по Садовому кольцу. Приложение отображает радиус около 4.39, а если вымерять радиус. Но судя по другим ГИС это практически диаметр Садового кольца
 
 
Здравствуйте, Михаил!

Благодарим за информацию.

Вы совершенно правы, метод distanceTo считает расстояние в проекции карты, которая в данном случае не является измерительной. Это и приводит к разнице в результатах при использовании компонента измерений и другими ГИС.

Компонент поправим. В следующей версии будет добавлен метод realDistanceTo, возвращающий расстояние между точками в измерительной системе координат.

P.S. Значение переменной radius - это расстояние в экранных координатах (в пикселах)
 
Цитата
Виктор Тазин написал:
Здравствуйте, Михаил!

Благодарим за информацию.

Вы совершенно правы, метод distanceTo считает расстояние в проекции карты, которая в данном случае не является измерительной. Это и приводит к разнице в результатах при использовании компонента измерений и другими ГИС.

Компонент поправим. В следующей версии будет добавлен метод realDistanceTo, возвращающий расстояние между точками в измерительной системе координат.

P.S. Значение переменной radius - это расстояние в экранных координатах (в пикселах)
А есть ли какой то способ в текущий реализации подсчитать радиус в метрах в методе getCircle пока не добавился метод realDistanceTo ?  
 
Как вариант - отправить запрос на получение длины (но делать это на каждое перемещение курсора - весьма затратно).

Для этого создать объект и добавить в него 2 точки (центр и точку на окружности), после чего и вызвать асинхронный метод подсчета длины объекта.
Код
const radiusPoint = this.circleObject.getPoint( { positionNumber: 0 } );
if ( radiusPoint ) {
    const mapObject = new MapObject( this.circleObject.vectorLayer );
    mapObject.addPoint( centerPlane );
    mapObject.addPoint( radiusPoint );
    mapObject.calcLength().then( result => {
        if ( result ) {
            console.log( result.perimeter );
        }
    } );
}
 
Начиная с версии 6.12.0 у класса MapPoint добавлен метод realDistanceTo(mapPoint), возвращающий расстояние между точками в измерительной системе координат
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2025

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности