Добрый день!
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 км
Подскажите, почему может быть такой разброс, как можно добиться большей точности?
Точность рассчетов GEOGRAPHY
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 12 авг 2013, 15:37
- Репутация: 0
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Точность рассчетов GEOGRAPHY
Сферическая_геометрия
st_length_spheroid
Код: Выделить всё
len_km = st_length_spheroid(the_geom, ’SPHEROID["WGS84",6378137,298.25728]’)/1000.0
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 12 авг 2013, 15:37
- Репутация: 0
Re: Точность рассчетов GEOGRAPHY
Спасибо!
Главное не перепутать 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
Главное не перепутать 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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 23 гостя