Страница 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);	
}