Нахождение координат точки на линии
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Нахождение координат точки на линии
Добрый вечер коллеги!
Изучал форум, но ответа на свой вопрос не нашел.
Подскажите пожалуйста ответ на мою проблему:
Есть отрезок(дорога) длиной Х км, я знаю координаты концов отрезка в системе WGS84 lat/long. Мне нужно от конца отрезка отступить L км вдоль отрезка и узнать координаты этой точки. Простым среднеарифметическим получаются неверные цифры.
Подскажите пожалуйста как это сделать?
Я пишу свою программу с использованием MapX. карты в формате shape взял с вашего сайта.
Заранее благодарен за ответы.
Изучал форум, но ответа на свой вопрос не нашел.
Подскажите пожалуйста ответ на мою проблему:
Есть отрезок(дорога) длиной Х км, я знаю координаты концов отрезка в системе WGS84 lat/long. Мне нужно от конца отрезка отступить L км вдоль отрезка и узнать координаты этой точки. Простым среднеарифметическим получаются неверные цифры.
Подскажите пожалуйста как это сделать?
Я пишу свою программу с использованием MapX. карты в формате shape взял с вашего сайта.
Заранее благодарен за ответы.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Нахождение координат точки на линии
отступить в какую сторону? вперед - за пределы линии или назад на линию?
если назад, то чем это отличается от найти "точку отстоящую на M км от начала"?
если назад, то чем это отличается от найти "точку отстоящую на M км от начала"?
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
не за пределы линии, точку необходимо найти вдоль линии.
т.е. от начала отрезка отступить несколько км по линии и найти точку на ней
как реализовать найти "точку отстоящую на M км от начала"?
Извините за такие вопросы, просто я совсем новичок в этом.
т.е. от начала отрезка отступить несколько км по линии и найти точку на ней
как реализовать найти "точку отстоящую на M км от начала"?
Извините за такие вопросы, просто я совсем новичок в этом.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
неужели никто не подскажет математические формулы?
Пожалуйста
Пожалуйста
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Нахождение координат точки на линии
что-то вроде этого?
http://www.gamedev.net/community/forums ... _id=488998
http://www.gamedev.net/community/forums ... _id=488998
пристегивайтесь, турбулентность прямо по курсу
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Нахождение координат точки на линии
может, поможет код на C с похожим функционалом?
модуль GRASS GIS v.segment
код: http://trac.osgeo.org/grass/browser/gra ... ent/main.c
модуль GRASS GIS v.segment
код: http://trac.osgeo.org/grass/browser/gra ... ent/main.c
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Нахождение координат точки на линии
Совершенно не понятно, что вы хотите от нас. По крайней мере я, не понимаю, что вы умеете и от какого продукта язык MapX?
Что в этой задаче сложного?
Для начала определитесь с терминами - у вас дорога или линия? Т.к. дорога - это полилиния. Она состоит из отдельных сегментов, суммарная длона которых и задает длину полилинии.
Или у вас всего 2 точки в вашей линии и она идет по большой дуге - кратчайшему расстоянию на шаре между двумя точками?
Что в этой задаче сложного?
Для начала определитесь с терминами - у вас дорога или линия? Т.к. дорога - это полилиния. Она состоит из отдельных сегментов, суммарная длона которых и задает длину полилинии.
Или у вас всего 2 точки в вашей линии и она идет по большой дуге - кратчайшему расстоянию на шаре между двумя точками?
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
Спасибо за желание помочь! Простите, это мой первый опыт в ГИС, поэтому путаюсь с терминами.
MapX это компонент для разработки ГИС приложений от того же производителя что и MapInfo.
Приложение я пишу на Delphi.
Подробнее о задаче:
Все правильно, у меня дорога, которая представляет собой полилинию, состоящую из сегментов. Мне нужно на этой дороге нарисовать точку на определенном километре. Мне известны координаты начала и конца каждого сегмента, длина сегмента и общая длина дороги. Я вычисляю на каком сегменте полилинии находится данный километр, зная длины всех предыдущих сегментов я определяю сколько мне нужно отступить в киллометрах от начала найденного сегмента дороги.
Поэтому я пытался кратко сформулировать вопрос. После всех этих манипуляций у меня есть координаты широта/долгота начала и конца сегмента и расстояние, которое нужно отступить, но простыми формулами типа
х1+(х2-х1)*l/L и y1+(у2-у1)*l/L, где l-расстояние отступа, L-длина сегмента
у меня получаются неверные цифры, точка не попадает на дорогу. Я подозреваю, что нужно использовать формулы сферической геометрии.
Поэтому и прошу подсказать правильные формулы.
Еще раз спасибо. Надеюсь на Вашу помощь!
MapX это компонент для разработки ГИС приложений от того же производителя что и MapInfo.
Приложение я пишу на Delphi.
Подробнее о задаче:
Все правильно, у меня дорога, которая представляет собой полилинию, состоящую из сегментов. Мне нужно на этой дороге нарисовать точку на определенном километре. Мне известны координаты начала и конца каждого сегмента, длина сегмента и общая длина дороги. Я вычисляю на каком сегменте полилинии находится данный километр, зная длины всех предыдущих сегментов я определяю сколько мне нужно отступить в киллометрах от начала найденного сегмента дороги.
Поэтому я пытался кратко сформулировать вопрос. После всех этих манипуляций у меня есть координаты широта/долгота начала и конца сегмента и расстояние, которое нужно отступить, но простыми формулами типа
х1+(х2-х1)*l/L и y1+(у2-у1)*l/L, где l-расстояние отступа, L-длина сегмента
у меня получаются неверные цифры, точка не попадает на дорогу. Я подозреваю, что нужно использовать формулы сферической геометрии.
Поэтому и прошу подсказать правильные формулы.
Еще раз спасибо. Надеюсь на Вашу помощь!
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
а случайно формулы не должны работать с углами? По этим формулам я как раз и считал, только не получается корректный результатsim писал(а):что-то вроде этого?
http://www.gamedev.net/community/forums ... _id=488998
-
- Участник
- Сообщения: 61
- Зарегистрирован: 25 дек 2009, 15:44
- Репутация: 3
- Откуда: Казань
Re: Нахождение координат точки на линии
Решение данной задачи помоему возможно 2 способами:
1. действительно использовать формулы для вычислений на сфере. Тогда вы должны сделать следующее:
- решить обратную геодезическую задачу (ОГЗ) на сфере для точек начала и конца сегмента (т.е. по координатам найти азимут)
- затем решаем прямую геодезическую задачу (ПГЗ) относительно точки начала сегмента (т.е. по известным значениям координат начала, азимута и отстояния получить координаты искомой точки).
Единственная проблема, что при использования формул на сфере вычисления получаются довольно громоздкими, поэтому если длина сегментов незначительна, в пределах сотен км, то проще решать задачу на плоскости.
По следующему алгоритму:
- выполнить переход из сферической СК к плоской прямоугольной СК
- решить ОГЗ на плоскости
- решить ПГЗ на плоскости
- выполнить переход из плоской СК к сферической СК
По поводу формул: для перехода между СК воспользуйтесь ГОСТ Р 51794-2008 , он есть на этом сайте в разделе
Нормативная документация. Решение ОГЗ и ПГЗ поищете в просторах инета.
1. действительно использовать формулы для вычислений на сфере. Тогда вы должны сделать следующее:
- решить обратную геодезическую задачу (ОГЗ) на сфере для точек начала и конца сегмента (т.е. по координатам найти азимут)
- затем решаем прямую геодезическую задачу (ПГЗ) относительно точки начала сегмента (т.е. по известным значениям координат начала, азимута и отстояния получить координаты искомой точки).
Единственная проблема, что при использования формул на сфере вычисления получаются довольно громоздкими, поэтому если длина сегментов незначительна, в пределах сотен км, то проще решать задачу на плоскости.
По следующему алгоритму:
- выполнить переход из сферической СК к плоской прямоугольной СК
- решить ОГЗ на плоскости
- решить ПГЗ на плоскости
- выполнить переход из плоской СК к сферической СК
По поводу формул: для перехода между СК воспользуйтесь ГОСТ Р 51794-2008 , он есть на этом сайте в разделе
Нормативная документация. Решение ОГЗ и ПГЗ поищете в просторах инета.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Нахождение координат точки на линии
вот здесь лежит программа для MapInfo viewtopic.php?f=17&t=4728 , которая решает вашу задачу.
раз уж вы пользуетесь основой от MapInfo, то не стоит использовать свои функции вычисления расстояния - в Mapinfo есть уже встроенные.
для плоских координат задача имеет единственное решение, для сферических оно расчетное и приблизительное - зависит от точности перехода и от того, что именно принимается за расстояние в последнем сегменте.
кроме того, полученная точка практически ВСЕГДА будет лежать ЗА ПРЕДЕЛАМИ сегмента. это связано с тем, что в реальности координаты в Mapinfo представлены целочисленным числом с некоторым множителем. Из-за этого координаты могут принимать только дискретные значения, которые не совпадают с непрерывно изменяющимися координатами сегмента, который отображается на экране.
раз уж вы пользуетесь основой от MapInfo, то не стоит использовать свои функции вычисления расстояния - в Mapinfo есть уже встроенные.
для плоских координат задача имеет единственное решение, для сферических оно расчетное и приблизительное - зависит от точности перехода и от того, что именно принимается за расстояние в последнем сегменте.
кроме того, полученная точка практически ВСЕГДА будет лежать ЗА ПРЕДЕЛАМИ сегмента. это связано с тем, что в реальности координаты в Mapinfo представлены целочисленным числом с некоторым множителем. Из-за этого координаты могут принимать только дискретные значения, которые не совпадают с непрерывно изменяющимися координатами сегмента, который отображается на экране.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
Спасибо за помощь! А нельзя ли решать эту задачу на сфере, без проецирования на плоскость? Ведь есть всего две точки, а расстояние вычислять по дуге между этими точками. Конечно если две точки находятся на разных полюсах земли, то таких дуг бесконечное количество, но такого случая у меня не будет, я работаю только в рамках территории РФ. Или переход к плоскости обязателен?
-
- Участник
- Сообщения: 61
- Зарегистрирован: 25 дек 2009, 15:44
- Репутация: 3
- Откуда: Казань
Re: Нахождение координат точки на линии
Конечно же, эта задача решается и на сфере, но формулы уж больно громоздкие. Посмотрите для примера "Курс высшей геодезии". Закатова, он есть в разделе Документация-Мат.основа. На плоскости все гораздо проще. Это при условии, что хотите сами реализовать алгоритм.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 24 июн 2010, 18:30
- Репутация: 0
Re: Нахождение координат точки на линии
Еще раз спасибо!
Можно еще вопросик? может реализацию процедуры получится упростить....
Как будет выглядеть уравнение дуги на сфере между двумя точками?
Или там тоже сложные и громоздкие формулы?
Можно еще вопросик? может реализацию процедуры получится упростить....
Как будет выглядеть уравнение дуги на сфере между двумя точками?
Или там тоже сложные и громоздкие формулы?
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Нахождение координат точки на линии
Если вы пишете на MapX, то там должна присутствовать функцияgAs писал(а):Еще раз спасибо!
Можно еще вопросик? может реализацию процедуры получится упростить....
Как будет выглядеть уравнение дуги на сфере между двумя точками?
Или там тоже сложные и громоздкие формулы?
Код: Выделить всё
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 гость