Нахождение координат точки на линии

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Нахождение координат точки на линии

Сообщение gAs » 24 июн 2010, 18:39

Добрый вечер коллеги!
Изучал форум, но ответа на свой вопрос не нашел.
Подскажите пожалуйста ответ на мою проблему:
Есть отрезок(дорога) длиной Х км, я знаю координаты концов отрезка в системе WGS84 lat/long. Мне нужно от конца отрезка отступить L км вдоль отрезка и узнать координаты этой точки. Простым среднеарифметическим получаются неверные цифры.
Подскажите пожалуйста как это сделать?
Я пишу свою программу с использованием MapX. карты в формате shape взял с вашего сайта.
Заранее благодарен за ответы.

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

Re: Нахождение координат точки на линии

Сообщение Boris » 25 июн 2010, 00:55

отступить в какую сторону? вперед - за пределы линии или назад на линию?
если назад, то чем это отличается от найти "точку отстоящую на M км от начала"?

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 25 июн 2010, 05:22

не за пределы линии, точку необходимо найти вдоль линии.
т.е. от начала отрезка отступить несколько км по линии и найти точку на ней
как реализовать найти "точку отстоящую на M км от начала"?
Извините за такие вопросы, просто я совсем новичок в этом.

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 25 июн 2010, 17:19

неужели никто не подскажет математические формулы?
Пожалуйста

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

Re: Нахождение координат точки на линии

Сообщение Максим Дубинин » 25 июн 2010, 18:33

пристегивайтесь, турбулентность прямо по курсу

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Нахождение координат точки на линии

Сообщение Александр Мурый » 25 июн 2010, 18:53

может, поможет код на C с похожим функционалом?
модуль GRASS GIS v.segment

код: http://trac.osgeo.org/grass/browser/gra ... ent/main.c
Редактор материалов, модератор форума

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

Re: Нахождение координат точки на линии

Сообщение Boris » 25 июн 2010, 20:04

Совершенно не понятно, что вы хотите от нас. По крайней мере я, не понимаю, что вы умеете и от какого продукта язык MapX?
Что в этой задаче сложного?
Для начала определитесь с терминами - у вас дорога или линия? Т.к. дорога - это полилиния. Она состоит из отдельных сегментов, суммарная длона которых и задает длину полилинии.
Или у вас всего 2 точки в вашей линии и она идет по большой дуге - кратчайшему расстоянию на шаре между двумя точками?

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 25 июн 2010, 20:29

Спасибо за желание помочь! Простите, это мой первый опыт в ГИС, поэтому путаюсь с терминами.
MapX это компонент для разработки ГИС приложений от того же производителя что и MapInfo.
Приложение я пишу на Delphi.
Подробнее о задаче:
Все правильно, у меня дорога, которая представляет собой полилинию, состоящую из сегментов. Мне нужно на этой дороге нарисовать точку на определенном километре. Мне известны координаты начала и конца каждого сегмента, длина сегмента и общая длина дороги. Я вычисляю на каком сегменте полилинии находится данный километр, зная длины всех предыдущих сегментов я определяю сколько мне нужно отступить в киллометрах от начала найденного сегмента дороги.
Поэтому я пытался кратко сформулировать вопрос. После всех этих манипуляций у меня есть координаты широта/долгота начала и конца сегмента и расстояние, которое нужно отступить, но простыми формулами типа
х1+(х2-х1)*l/L и y1+(у2-у1)*l/L, где l-расстояние отступа, L-длина сегмента
у меня получаются неверные цифры, точка не попадает на дорогу. Я подозреваю, что нужно использовать формулы сферической геометрии.
Поэтому и прошу подсказать правильные формулы.
Еще раз спасибо. Надеюсь на Вашу помощь!

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 25 июн 2010, 20:49

sim писал(а):что-то вроде этого?
http://www.gamedev.net/community/forums ... _id=488998
а случайно формулы не должны работать с углами? По этим формулам я как раз и считал, только не получается корректный результат

rnazarov
Участник
Сообщения: 61
Зарегистрирован: 25 дек 2009, 15:44
Репутация: 3
Откуда: Казань

Re: Нахождение координат точки на линии

Сообщение rnazarov » 26 июн 2010, 09:15

Решение данной задачи помоему возможно 2 способами:
1. действительно использовать формулы для вычислений на сфере. Тогда вы должны сделать следующее:
- решить обратную геодезическую задачу (ОГЗ) на сфере для точек начала и конца сегмента (т.е. по координатам найти азимут)
- затем решаем прямую геодезическую задачу (ПГЗ) относительно точки начала сегмента (т.е. по известным значениям координат начала, азимута и отстояния получить координаты искомой точки).
Единственная проблема, что при использования формул на сфере вычисления получаются довольно громоздкими, поэтому если длина сегментов незначительна, в пределах сотен км, то проще решать задачу на плоскости.
По следующему алгоритму:
- выполнить переход из сферической СК к плоской прямоугольной СК
- решить ОГЗ на плоскости
- решить ПГЗ на плоскости
- выполнить переход из плоской СК к сферической СК

По поводу формул: для перехода между СК воспользуйтесь ГОСТ Р 51794-2008 , он есть на этом сайте в разделе
Нормативная документация. Решение ОГЗ и ПГЗ поищете в просторах инета.

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

Re: Нахождение координат точки на линии

Сообщение Boris » 27 июн 2010, 00:18

вот здесь лежит программа для MapInfo viewtopic.php?f=17&t=4728 , которая решает вашу задачу.
раз уж вы пользуетесь основой от MapInfo, то не стоит использовать свои функции вычисления расстояния - в Mapinfo есть уже встроенные.
для плоских координат задача имеет единственное решение, для сферических оно расчетное и приблизительное - зависит от точности перехода и от того, что именно принимается за расстояние в последнем сегменте.
кроме того, полученная точка практически ВСЕГДА будет лежать ЗА ПРЕДЕЛАМИ сегмента. это связано с тем, что в реальности координаты в Mapinfo представлены целочисленным числом с некоторым множителем. Из-за этого координаты могут принимать только дискретные значения, которые не совпадают с непрерывно изменяющимися координатами сегмента, который отображается на экране.

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 27 июн 2010, 09:00

Спасибо за помощь! А нельзя ли решать эту задачу на сфере, без проецирования на плоскость? Ведь есть всего две точки, а расстояние вычислять по дуге между этими точками. Конечно если две точки находятся на разных полюсах земли, то таких дуг бесконечное количество, но такого случая у меня не будет, я работаю только в рамках территории РФ. Или переход к плоскости обязателен?

rnazarov
Участник
Сообщения: 61
Зарегистрирован: 25 дек 2009, 15:44
Репутация: 3
Откуда: Казань

Re: Нахождение координат точки на линии

Сообщение rnazarov » 27 июн 2010, 20:25

Конечно же, эта задача решается и на сфере, но формулы уж больно громоздкие. Посмотрите для примера "Курс высшей геодезии". Закатова, он есть в разделе Документация-Мат.основа. На плоскости все гораздо проще. Это при условии, что хотите сами реализовать алгоритм.

gAs
Новоприбывший
Сообщения: 7
Зарегистрирован: 24 июн 2010, 18:30
Репутация: 0

Re: Нахождение координат точки на линии

Сообщение gAs » 28 июн 2010, 09:57

Еще раз спасибо!
Можно еще вопросик? может реализацию процедуры получится упростить....
Как будет выглядеть уравнение дуги на сфере между двумя точками?
Или там тоже сложные и громоздкие формулы?

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

Re: Нахождение координат точки на линии

Сообщение Boris » 28 июн 2010, 14:04

gAs писал(а):Еще раз спасибо!
Можно еще вопросик? может реализацию процедуры получится упростить....
Как будет выглядеть уравнение дуги на сфере между двумя точками?
Или там тоже сложные и громоздкие формулы?
Если вы пишете на MapX, то там должна присутствовать функция

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

Distance( ) function 
Purpose 
Returns the distance between two locations. 

Syntax 
Distance ( x1, y1, x2, y2, unit_name ) 
x1 and x2 are x-coordinates (for example, longitude). 

y1 and y2 are y-coordinates (for example, latitude). 

unit_name is a string representing the name of a distance unit (for example, "km"). 

Return Value 
Float 

Но что вам даст длина дуги? Надо ведь еще линейную координату на этой дуге превратить в координаты на плоскости или на сфере.

Ответить

Вернуться в «Общие вопросы»

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

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