Страница 1 из 1

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

Добавлено: 21 авг 2013, 03:05
agentbond007
Здравствуйте!
Проекция Долгота/Широта (WGS84)
Измеряю расстояние м/у 2мя точками функцией Distance() - значения получаются с ошибкой, как побороть? Хотя в проекции Гаусса Крюггера всё точно.

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

Добавлено: 21 авг 2013, 03:47
Донецков
А что "линейка" показывает?

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

Добавлено: 21 авг 2013, 03:59
agentbond007
Линейкой и измеряю =) В WGS - больше показывает, а в Гаусе точно.

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

Добавлено: 21 авг 2013, 04:34
dab
agentbond007, я думаю, что Вам лучше файл с примером данных приложить к своему сообщению.
Получите ответ быстрее, потому что, мне так даже непонятно как именно Вы измеряете расстояние - функцией Distance() (запросы, mapbasic) или инструментом "линейка"(интерактивно).

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

Добавлено: 21 авг 2013, 05:26
agentbond007
В своей программе(Delphi) измеряю функцией Distance() при помощи запроса MapBasic, а в MapInfo проверяю линейкой. На картинках измеряю расстояние между вершинами 1-2 линейка показывает 450 м в обоих проекциях, а при помощи функции в проекции WGS = 422.8, а в проекции GK = 448.2 один и тот же объект. Почему расхождение на 25,4 м не могу понять?

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

Добавлено: 21 авг 2013, 06:22
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")

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

Добавлено: 21 авг 2013, 09:04
agentbond007
Скорей всего Вы правы насчёт округлённых координат WGS, при использовании функций ObjectNodeX() и ObjectNodeY() получаю координаты с 4-мя знаками после запятой, а нужно больше. А как эта точность настраивается программно?

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

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