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

Работа с локальной системой координат

Добавлено: 31 авг 2012, 21:38
drug
Есть точка с географическими координатами, относительно нее определяются координаты некоторых объектов в локальной полярной системе координат - дальность в метрах, азимут и угол места в градусах. Нужно перевести координаты объектов из данной локальной СК в географическую (программным способом). Нашел как это сделать с помощью [url=http://geographiclib.sourceforge.net/]GeographicLib[/url], вопрос как это можно сделать с помощью proj4? Его все равно gdal использует, и не хочется тащить лишнюю библиотеку. Правильно я понимаю, что нужно копать в сторону функции pj_transform, задавая в качестве исходной свою локальную СК (лучше всего перевести из полярной в декартову), а в качестве получаемой географическую? Как мне тогда задать локальную СК с центром в определенной точке и не пойму как задать направление координатных осей...

Елки-палки, я же могу перевести в геоцентрические координаты, только сейчас сообразил. В принципе, вопрос решен, но если есть в proj4 (более) подходящее решение, чтобы самому математику не трогать, буду признателен за подсказку!

Re: Работа с локальной системой координат

Добавлено: 31 авг 2012, 22:20
Aleksandr Dezhin
В составе proj4 идет утилита geod, она как раз умеет ходить из точки по азимуту. Посмотрите раздел примеров в руководстве. Думаю можно в ее исходниках посмотреть как это делается на чистом C.

На питоне через pyproj (биндинг к proj4), делается так:

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

>>> from pyproj import Geod
>>> geod = Geod(ellps='WGS84')
>>> geod.fwd(0, 0, 0, 10e6)  # 10 тыс км на север от точки 0, 0
(0.0, 89.98240086429514, 180.0) # пришли почти на северный полюс, 180 - обратный азимут

Re: Работа с локальной системой координат

Добавлено: 01 сен 2012, 05:47
drug
Спасибо за ответ. Но как я подозреваю, 10 тыс. км отложены по поверхности эллипсоида? А мне нужно по прямой, т.к. это дальность прямой видимости. Но код сейчас посмотрю.

Re: Работа с локальной системой координат

Добавлено: 01 сен 2012, 23:44
Aleksandr Dezhin
Ага, по поверхности. Видимо я не внимательно прочитал вопрос.