Страница 1 из 1
Расчет географических координат в Proj.4
Добавлено: 28 июн 2012, 13:54
sergeym2008
Здравствуйте, подскажите пожалуйста как при помощи библиотеки Proj.4 рассчитать географическую координату по точке (широта, долгота) и расстоянию в км.
Например к 10 гр. с.ш. и 0 гр. в.д прибавить 6600 км по широте и 6000 км по долготе и получить географическую координату.
Re: Расчет географических координат в Proj.4
Добавлено: 29 июн 2012, 08:20
drug
Честно, я сам новичок, но очень близкой к Вашей задаче является прямая геодезическая задача - вычисление геодезических координат - широты и долготы некоторой точки, лежащей на земном эллипсоиде, по координатам другой точки и по известным длине и дирекционному углу данного направления, соединяющей эти точки.
Посмотреть можно тут
http://trac.osgeo.org/proj/wiki/man_geod
Re: Расчет географических координат в Proj.4
Добавлено: 30 июн 2012, 01:07
Александр Мурый
Поигрался с
geod. Дирекционные углы (84.85453 и 0) подбирались вручную по здравому смыслу (направления на восток и на север).
1) 6000 км по долготе:
Код: Выделить всё
echo "10dN 0dE 84.85453 6000" | geod +ellps=WGS84 +units=km
10dN 54d47'38.321"E
2) 6600 км по широте:
Код: Выделить всё
echo "10dN 54d47'38.321\"E 0 6600" | geod +ellps=WGS84 +units=km
69d26'2.922"N 54d47'38.321"E
Итого: координаты в DMS --
69d26'2.922"N, 54d47'38.321"E, в DD --
69.434145, 54.793978
Если я наврал, поправьте, пож-та, граждане понимающие

Re: Расчет географических координат в Proj.4
Добавлено: 27 июл 2012, 08:28
sergeym2008
Спасибо за ответы, которые напривили на решение, позже напишу результат
Re: Расчет географических координат в Proj.4
Добавлено: 06 авг 2012, 19:54
sergeym2008
Обещанный результат)
вызывать GetShiftedCoordDegree нужно обязательно после GeodSetup
Код: Выделить всё
// longitude долгота в градусах
// latitude широта в градусах
// x смещение по долготе в метрах
// y смещение по широте в метрах
// result_longitude долгота результат
// result_latitude широта результат
//void GetShiftedCoordDegree(double longitude, double latitude, double x, double y, double *result_longitude, double *result_latitude, int *error);
#include "projects.h"
#include "geocent.h"
#define DEG2RAD(x) x * PI / 180.
double deg2rad(double degree)
{
while (degree > 180)
degree -= 180;
while (degree < -180)
degree += 180;
return DEG2RAD(degree);
}
#define RAD2DEG(x) x * 180. / PI;
double rad2deg(double radian)
{
while (radian > PI)
radian -= PI;
while (radian < -PI)
radian += PI;
return RAD2DEG(radian);
}
// настраиваем geod, установка проекции, эллипса и т.п.
void GeodSetup(int argc, char **argv)
{
geod_set(argc, argv); /* setup projection */
}
void GetShiftedCoordDegree(double longitude, double latitude, double x, double y, double *result_longitude, double *result_latitude, int *error)
{
// process - функция в geod.c
process(deg2rad(latitude), deg2rad(longitude), deg2rad(90), x, result_latitude, result_longitude);
process(*result_latitude, *result_longitude, deg2rad(0), y, result_latitude, result_longitude);
*result_longitude = rad2deg(*result_longitude);
*result_latitude = rad2deg(*result_latitude);
}