Расчет географических координат в Proj.4

Кроме QGIS
Ответить
sergeym2008
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 июн 2012, 13:24
Репутация: 0

Расчет географических координат в Proj.4

Сообщение sergeym2008 » 28 июн 2012, 13:54

Здравствуйте, подскажите пожалуйста как при помощи библиотеки Proj.4 рассчитать географическую координату по точке (широта, долгота) и расстоянию в км.
Например к 10 гр. с.ш. и 0 гр. в.д прибавить 6600 км по широте и 6000 км по долготе и получить географическую координату.

drug
Участник
Сообщения: 99
Зарегистрирован: 17 июн 2012, 11:11
Репутация: 1
Откуда: Новосибирск
Контактная информация:

Re: Расчет географических координат в Proj.4

Сообщение drug » 29 июн 2012, 08:20

Честно, я сам новичок, но очень близкой к Вашей задаче является прямая геодезическая задача - вычисление геодезических координат - широты и долготы некоторой точки, лежащей на земном эллипсоиде, по координатам другой точки и по известным длине и дирекционному углу данного направления, соединяющей эти точки.
Посмотреть можно тут http://trac.osgeo.org/proj/wiki/man_geod

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

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

Если я наврал, поправьте, пож-та, граждане понимающие :)
Редактор материалов, модератор форума

sergeym2008
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 июн 2012, 13:24
Репутация: 0

Re: Расчет географических координат в Proj.4

Сообщение sergeym2008 » 27 июл 2012, 08:28

Спасибо за ответы, которые напривили на решение, позже напишу результат

sergeym2008
Новоприбывший
Сообщения: 3
Зарегистрирован: 28 июн 2012, 13:24
Репутация: 0

Re: Расчет географических координат в Proj.4

Сообщение sergeym2008 » 06 авг 2012, 19:54

Обещанный результат)

вызывать 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);	
}
Последний раз редактировалось Voltron 06 авг 2012, 20:37, всего редактировалось 1 раз.
Причина: Не забываем про теги [code]

Ответить

Вернуться в «Свободные, бесплатные, открытые ГИС»

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

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