Как получить информацию о полигоне?

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

Как получить информацию о полигоне?

Сообщение agentbond007 » 09 июн 2011, 09:16

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

reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Как получить информацию о полигоне?

Сообщение reasonat » 09 июн 2011, 09:26

функций нет, можно получить по формулам.
http://geostart.ru/phpBB/viewtopic.php? ... 6bf11a80e1

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 09 июн 2011, 10:00

Спасибо за формулы, но там нахождение координаты точки B, а у меня все координаты известны.
Реальные длины сторон моего полигона не больше 2 км.

reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Как получить информацию о полигоне?

Сообщение reasonat » 09 июн 2011, 10:03

Обратная геодезическая задача - это вычисление дирекционного угла α и длины S линии, соединяющей два пункта с известными координатами X1, Y1 и X2, Y2
α одной стороны - α другой стороны = внутренний угол (перед вычислениями определиться с направлением цифрования каждого полигона, а то получится в одних случаях внутренний угол, в других внешний)

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 09 июн 2011, 10:15

Спасибо что разъяснили, иду обратно по ссылке и внимательно читаю! :lol:

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 09 июн 2011, 11:09

Координаты
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
Расчёт не верный =((, подскажите что не так делаю?

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Как получить информацию о полигоне?

Сообщение Максим Дубинин » 09 июн 2011, 11:27

даже не обращая внимания на то, что у вас градусы, хочу обратить внимание, что по вашим же формулам посчитали вы неверно
пристегивайтесь, турбулентность прямо по курсу

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 10 июн 2011, 02:12

Максим Дубинин писал(а):даже не обращая внимания на то, что у вас градусы, хочу обратить внимание, что по вашим же формулам посчитали вы неверно
Я так понимаю для координат земли эти формулы не подходят?
Градусы сконвертировал в проекцию Гауса - Крюгера
теперь они выглядят так:
|18348292.07|6293607.82|
|18348789.22|6293612.05|
|18348780.75|6292666.43|
|18348632.67|6292700.28|
Но длины сторон все равно не получается получить, расчитываются однотипного вида:
21954206.5166644
21954615.0393914
21955045.8959673
21954814.105304
Хрень какаето =((((

Аватара пользователя
asgs
Участник
Сообщения: 89
Зарегистрирован: 04 авг 2010, 06:35
Репутация: 1
Контактная информация:

Re: Как получить информацию о полигоне?

Сообщение asgs » 10 июн 2011, 05:27

Попробуйте сделать вывод на печать промежуточных результатов dX и dY, возможно, станет яснее, где ошибка. Пока сильно похоже на опечатку, например, где-то вместо dX стоИт dY или наоборот.
Злобный йожег

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Как получить информацию о полигоне?

Сообщение SergS » 10 июн 2011, 05:47

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

проверьте код

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 10 июн 2011, 07:32

Спасибо за совет проверить код, ошибка именно там, координата X2 постоянно равнялась = 1, исправил! Всё получилось! Всем спасибо :D

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

Re: Как получить информацию о полигоне?

Сообщение agentbond007 » 10 июн 2011, 11:08

Выявил разницу в длинах, может подскажите в чем дело?
В MapInfo наношу, например длину стороны полигона 100.0, а после построения моя программа показывает 100.2
Привожу скрин шот расчётов моей программы и значений MapInfo при построении:
Вложения
Координаты.JPG
Координаты.JPG (30.58 КБ) 13488 просмотров

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Как получить информацию о полигоне?

Сообщение SergS » 10 июн 2011, 11:43

по координатам сразу видно, что длина первой линии = именно 100.18, а второй - 100.34
если вы заносили координаты в рассчете на получение длины 100, то неудача скорее всего объясняется системой координат таблицы (или установленной в программе)
в данном случае получилось, что 100 м целиком не укладываются во внутреннюю сетку хранения координат для таблицы. И MI берет ближайший узел, а его координаты могут и не совпадать с заданными (не намного, как раз на размер ячейки такой сетки).
а еще мерять в MI вы можете на сфере, в то время как для расчета используете плоскость - не проверял на таких расстояниях, мож и есть отличие, но там по-моему разница в другую сторону должна быть.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Как получить информацию о полигоне?

Сообщение Boris » 10 июн 2011, 13:41

Присоединяюсь к 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 млн. км, хотя мыслили метрами.
Если это не тот случай, то надо смотреть разницу между измерениями на плоскости и на сфере.

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Как получить информацию о полигоне?

Сообщение SergS » 10 июн 2011, 14:13

дополню немножко:
при создании таблицы в СК 42 (в данном случае 18 зона?) без дополнительных ухищрений получаем:
Bounds (10250718.461, -10002137.4978) (26749281.539, 10002137.4978)
что дает размер сетки dx=0.008249282 и dy=0.010002137 (м)
т.е. примерно 1 сантиметровая точность, но именно что примерно. практически никогда не удается создать точку с координатами точно сантиметр в сантиметр - всегда туда сюда гулять будет.
PS цифры не причесывал, как MI с excel посчитали, так и выдал

Ответить

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

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

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