Как измерить расстояние между 2-мя точками

MapInfo, MapBasic
Ответить
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Как измерить расстояние между 2-мя точками

Сообщение agentbond007 »

Здравствуйте!
Проекция Долгота/Широта (WGS84)
Измеряю расстояние м/у 2мя точками функцией Distance() - значения получаются с ошибкой, как побороть? Хотя в проекции Гаусса Крюггера всё точно.
Донецков
Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Как измерить расстояние между 2-мя точками

Сообщение Донецков »

А что "линейка" показывает?
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Как измерить расстояние между 2-мя точками

Сообщение agentbond007 »

Линейкой и измеряю =) В WGS - больше показывает, а в Гаусе точно.
Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Как измерить расстояние между 2-мя точками

Сообщение dab »

agentbond007, я думаю, что Вам лучше файл с примером данных приложить к своему сообщению.
Получите ответ быстрее, потому что, мне так даже непонятно как именно Вы измеряете расстояние - функцией Distance() (запросы, mapbasic) или инструментом "линейка"(интерактивно).
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Как измерить расстояние между 2-мя точками

Сообщение agentbond007 »

В своей программе(Delphi) измеряю функцией Distance() при помощи запроса MapBasic, а в MapInfo проверяю линейкой. На картинках измеряю расстояние между вершинами 1-2 линейка показывает 450 м в обоих проекциях, а при помощи функции в проекции WGS = 422.8, а в проекции GK = 448.2 один и тот же объект. Почему расхождение на 25,4 м не могу понять?
Вложения
Distance.rar
Слой Мапинфо в разных проекциях
(2.35 КБ) 390 скачиваний
WGS
WGS
Distance 1-2 WGS.jpg (52.54 КБ) 10479 просмотров
Gauss Kruger
Gauss Kruger
Distance 1-2 GK.jpg (55.65 КБ) 10479 просмотров
Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Как измерить расстояние между 2-мя точками

Сообщение dab »

Я так понимаю ситуацию.
1. так как инструмент "линейка" имеет свойство округлять измеряемые расстояния, для ясности ситуации, создайте линейный объект от точки 1 до точки 2, а далее уже будем измерять его длину.
2. если измерения на сфере (Меню / Карта / Режимы / Измерения проводятся) - тогда и в GK и в WGS получаем 448.2 метра
3. создаю два точечных объекта, совпадающие с точками 1 и 2, в карте WGS
интерактивно в окне Mapbasic ввожу команды

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

dim o1 as object
dim o2 as object
' выбираю на карте первую точку 
o1 = selection.obj
' выбираю на карте вторую точку 
o2 = selection.obj
dim start_x as float
dim start_y as float
dim end_x as float
dim end_y as float
start_x = CentroidX(o1)
start_y = CentroidY(o1)
end_x = CentroidX(o2)
end_y = CentroidY(o2)
dim dist as float
dist = Distance(start_x,start_y,end_x,end_y,"m")
print dist
' результат 448.2
Откуда у Вас 422.8 - не знаю, смотрите свой код. Возможно, значения координат в WGS грубо округлены.

В Mapbasic я обычно явно указываю систему координат для измерений. Например так:

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

sCoorSys = TableInfo(sTableName, TAB_INFO_COORDSYS_CLAUSE) 
Run Command "Set " + sCoorSys
oPolygon = Selection.obj
fAreaFact = CartesianArea(oPolygon,"sq m")
Аватара пользователя
agentbond007
Активный участник
Сообщения: 100
Зарегистрирован: 14 дек 2010, 15:14
Репутация: 0

Re: Как измерить расстояние между 2-мя точками

Сообщение agentbond007 »

Скорей всего Вы правы насчёт округлённых координат WGS, при использовании функций ObjectNodeX() и ObjectNodeY() получаю координаты с 4-мя знаками после запятой, а нужно больше. А как эта точность настраивается программно?
Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Как измерить расстояние между 2-мя точками

Сообщение dab »

agentbond007 писал(а):Скорей всего Вы правы насчёт округлённых координат WGS, при использовании функций ObjectNodeX() и ObjectNodeY() получаю координаты с 4-мя знаками после запятой, а нужно больше. А как эта точность настраивается программно?
Быть может проблема не в ObjectNodeX()?
Переключитесь на соответствующую району работ зону UTM или СК-42, получите координаты с сантиметровой точностью. Считайте длину на плоскости через CartesianDistance() или на сфере через Distance().
Зачем Вам WGS-84?
Ответить

Вернуться в «MapInfo»

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

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