Страница 1 из 2
Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 09:16
agentbond007
Здравствуйте!
Подскажите пожалуйста, есть ли в MapBasic`e функции для получения информации о полигоне?
Дано: Полигон
Найти:
Длины сторон и внутренние углы между ними?
Координаты вершин я нашёл при помощи комманд ObjectNodeX, ObjectNodeY, но как получить все остальное незнаю.

Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 09:26
reasonat
Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 10:00
agentbond007
Спасибо за формулы, но там нахождение координаты точки B, а у меня все координаты известны.
Реальные длины сторон моего полигона не больше 2 км.
Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 10:03
reasonat
Обратная геодезическая задача - это вычисление дирекционного угла α и длины S линии, соединяющей два пункта с известными координатами X1, Y1 и X2, Y2
α одной стороны - α другой стороны = внутренний угол (перед вычислениями определиться с направлением цифрования каждого полигона, а то получится в одних случаях внутренний угол, в других внешний)
Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 10:15
agentbond007
Спасибо что разъяснили, иду обратно по ссылке и внимательно читаю!

Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 11:09
agentbond007
Координаты
A = 102.562|56.7276
B = 102.58|56.7323
Переписал формулы:
dX := (BLat-ALat);
dY := (BLng-ALng);
AB := sqrt(dX*dX+dY*dY);
Результат:
AB = 111.432860637067
Расчёт не верный =((, подскажите что не так делаю?
Re: Как получить информацию о полигоне?
Добавлено: 09 июн 2011, 11:27
Максим Дубинин
даже не обращая внимания на то, что у вас градусы, хочу обратить внимание, что по вашим же формулам посчитали вы неверно
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 02:12
agentbond007
Максим Дубинин писал(а):даже не обращая внимания на то, что у вас градусы, хочу обратить внимание, что по вашим же формулам посчитали вы неверно
Я так понимаю для координат земли эти формулы не подходят?
Градусы сконвертировал в проекцию Гауса - Крюгера
теперь они выглядят так:
|18348292.07|6293607.82|
|18348789.22|6293612.05|
|18348780.75|6292666.43|
|18348632.67|6292700.28|
Но длины сторон все равно не получается получить, расчитываются однотипного вида:
21954206.5166644
21954615.0393914
21955045.8959673
21954814.105304
Хрень какаето =((((
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 05:27
asgs
Попробуйте сделать вывод на печать промежуточных результатов dX и dY, возможно, станет яснее, где ошибка. Пока сильно похоже на опечатку, например, где-то вместо dX стоИт dY или наоборот.
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 05:47
SergS
agentbond007 писал(а):
|18348292.07|6293607.82|
|18348789.22|6293612.05|
|18348780.75|6292666.43|
|18348632.67|6292700.28|
Но длины сторон все равно не получается получить, расчитываются однотипного вида:
21954206.5166644
21954615.0393914
21955045.8959673
21954814.105304
Хрень какаето =((((
странно, по вашим же данным в excel-е получаются такие длины:
497.17
945.66
151.90
969.35
проверьте код
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 07:32
agentbond007
Спасибо за совет проверить код, ошибка именно там, координата X2 постоянно равнялась = 1, исправил! Всё получилось! Всем спасибо

Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 11:08
agentbond007
Выявил разницу в длинах, может подскажите в чем дело?
В MapInfo наношу, например длину стороны полигона 100.0, а после построения моя программа показывает 100.2
Привожу скрин шот расчётов моей программы и значений MapInfo при построении:
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 11:43
SergS
по координатам сразу видно, что длина первой линии = именно 100.18, а второй - 100.34
если вы заносили координаты в рассчете на получение длины 100, то неудача скорее всего объясняется системой координат таблицы (или установленной в программе)
в данном случае получилось, что 100 м целиком не укладываются во внутреннюю сетку хранения координат для таблицы. И MI берет ближайший узел, а его координаты могут и не совпадать с заданными (не намного, как раз на размер ячейки такой сетки).
а еще мерять в MI вы можете на сфере, в то время как для расчета используете плоскость - не проверял на таких расстояниях, мож и есть отличие, но там по-моему разница в другую сторону должна быть.
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 13:41
Boris
Присоединяюсь к
SergS с небольшим уточнением:
при проблемах с точностью посмотрите здесь
viewtopic.php?f=17&t=4708&hilit=%D1%82% ... %8C#p21653
но поскольку речь идет о погрешности около 0.5 (м?), то для внутренней структуры сетки координат такая погрешность будет при шаге самой сетки в 0.5, что для сетки в 2 миллиарда ячеек даст 0,5 * 2*10^9 = 10^9 метров = 1 млн. км. А есть ли столько на Земле?
Хотя известны случаи когда в план-схеме задавали границы в 1 млн. км, хотя мыслили метрами.
Если это не тот случай, то надо смотреть разницу между измерениями на плоскости и на сфере.
Re: Как получить информацию о полигоне?
Добавлено: 10 июн 2011, 14:13
SergS
дополню немножко:
при создании таблицы в СК 42 (в данном случае 18 зона?) без дополнительных ухищрений получаем:
Bounds (10250718.461, -10002137.4978) (26749281.539, 10002137.4978)
что дает размер сетки dx=0.008249282 и dy=0.010002137 (м)
т.е. примерно 1 сантиметровая точность, но именно что примерно. практически никогда не удается создать точку с координатами точно сантиметр в сантиметр - всегда туда сюда гулять будет.
PS цифры не причесывал, как MI с excel посчитали, так и выдал