Точность рассчетов GEOGRAPHY

Ответить
turlicht
Новоприбывший
Сообщения: 2
Зарегистрирован: 12 авг 2013, 15:37
Репутация: 0

Точность рассчетов GEOGRAPHY

Сообщение turlicht » 12 авг 2013, 16:01

Добрый день!

PostgreSQL 9.2
PostGIS 2.0

Во такой запрос для примера:
SELECT
ST_Distance('POINT(48.710317 44.523394)'::geography, 'POINT(48.779722 44.369657)'::geography) / 1000.0 AS postgis,
111.2*SQRT(POW(48.710317-48.779722, 2) + POW(44.523394-44.369657, 2)*POW(COS(48.710317*PI()/180), 2)) AS distance;

PostGIS показывает расстояние 17.954551725226
Расчет по формуле в запросе и по Google Earth показывает около 13 км.

Или для расстояния Москва-Питер:
SELECT
ST_Distance('POINT(55.738265 37.600223)'::geography, 'POINT(59.861631 30.342213)'::geography) / 1000.0 AS postgis,
111.2*SQRT(POW(55.738265-59.861631, 2) + POW(37.600223-30.342213, 2)*POW(COS(55.738265*PI()/180), 2)) AS distance ;

PostGIS: 890.437517891946
Google: 630 км

Подскажите, почему может быть такой разброс, как можно добиться большей точности?

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Точность рассчетов GEOGRAPHY

Сообщение trir » 12 авг 2013, 16:27

Сферическая_геометрия

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

len_km = st_length_spheroid(the_geom, ’SPHEROID["WGS84",6378137,298.25728]’)/1000.0
st_length_spheroid

turlicht
Новоприбывший
Сообщения: 2
Зарегистрирован: 12 авг 2013, 15:37
Репутация: 0

Re: Точность рассчетов GEOGRAPHY

Сообщение turlicht » 14 авг 2013, 12:16

Спасибо!

Главное не перепутать lon и lat, а также указывать в рассчетах расстояния, что речь идет именно о GEOGRAPHIC,
вот примеры рассчетов расстония от Москвы до Питера:

SELECT
ST_Distance('POINT(37.600223 55.738265)'::geography, 'POINT(30.342213 59.861631)'::geography) / 1000.0 AS st_distance,
ST_Distance(ST_GeographyFromText('POINT(37.600223 55.738265)'), ST_GeographyFromText('POINT(30.342213 59.861631)')) / 1000.0 AS st_distance2,
ST_Length_Spheroid('LINESTRING(37.600223 55.738265, 30.342213 59.861631)', 'SPHEROID["WGS84",6378137,298.25728]') /1000.0 AS st_length_spheroid,
ST_Length_Spheroid('LINESTRING(37.600223 55.738265, 30.342213 59.861631)', 'SPHEROID["GRS_1980",6378137,298.257222101]') /1000.0 AS st_length_spheroid,
111.2*SQRT(POW(55.738265-59.861631, 2) + POW(37.600223-30.342213, 2)*POW(COS(55.738265*PI()/180), 2)) AS distance
;

И хорошая статья по теме:
workshops.opengeo.org/postgis-intro/geography.html

Ответить

Вернуться в «PostGIS/PostgreSQL»

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

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