Як можна виміряти площу за географічними координатами?


12

Якщо у мене є багатокутники в географічних координатах (WGS84), як я вимірюю загальну площу, яку кожен займає на поверхні землі, враховуючи кривизну землі?

Відповіді:


7

PostGIS 1.5 представив новий тип GEOGRAPHY . GEOGRAPHYТипу дозволяє unprojected координат на сфероид , щоб бути збережені у вигляді таблиці PostGIS, і деякі функції аналізу повинні бути виконані на них.

ST_Area запити можуть виконуватися на полігонах типу GEOGRAPHY, щоб обчислити їхню площу в квадратних метрах.

Наступний запит виводить область всіх полігонів, що використовують сфероїд (на даний момент підтримується лише WGS-84сфероїд), припускаючи, що вони зберігаються за GEOGRAPHYтипом:

SELECT ST_Area(the_geom) FROM table_of_polygons;

Алгоритм, що використовується для обчислення площі сфероїда, може бути отриманий з вихідного коду .


Класно. Дякую за інформацію. Мені доведеться це спробувати.
glennon

Що робить PostGIS під кришкою?
mwalker

@mwalker Я не витрачав час на навчання, але я додав посилання на вихідний код, якщо ви хочете :)
fmark

моїм непідготовленим оком, PostGIS використовує підсумки, вирізаючи область на смужки і додаючи їх.
mwalker

10

Ось посилання на якийсь код, який дасть площу простого багатокутника (спочатку від Всесвітнього форуму вітру): http://forum.worldwindcentral.com/showthread.php?t=20724 . Це вирішує проблему у сфері, орієнтовно на основі взаємозв'язку:

alt текст

S = площа багатокутника; тета - сума внутрішніх кутів у радіанах; n - кількість вершин; r - радіус сфери.

Дивіться також (джерело зображення формули): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Я був би радий побачити посилання та / або код для полігонової області на сплетеному сфероїді.


1
@glennon Код для області геодезичного багатокутника на сфероїді доступний у GeographicLib . Код містить посилання на папір, звідки походить алгоритм.
cffk

Цей метод, заснований на формулі Гаусса-Бонне, представляє великий математичний інтерес, але майже непридатний для невеликих фігур на землі: існує величезна відміна, щоб знайти мінусовий "надлишок" в дужках, що часто призводить до катастрофічної втрати точності ... легко втратити майже всю точність цілком, навіть працюючи в арифметиці подвійної точності. Для звичайних розрахунків ГІС він просто не працює.
whuber

7

Ось джерело для спрощеного розрахунку, яке ми робимо у OpenLayers. Цей метод походить від "Деякі алгоритми для полігонів на сфері" (Роберт Г. Чемберлен та Вільям Х. Дюкет, публікація NASA JPL 07-03). Код, зв'язаний вище, призначений для визначення площі лінійного кільця (з географічними координатами). Площі для полігонів та мультиполігонів підсумовуються з кілець.

var area = 0.0;
var len = ring.components && ring.components.length;
if (len > 2) {
    var p1, p2;
    for (var i=0; i<len-1; i++) {
        p1 = ring.components[i];
        p2 = ring.components[i+1];
        area += OpenLayers.Util.rad(p2.x - p1.x) *
            (2 + Math.sin(OpenLayers.Util.rad(p1.y)) +
            Math.sin(OpenLayers.Util.rad(p2.y)));
    }
    area = area * 6378137.0 * 6378137.0 / 2.0;
}

Компоненти кільця - це два масиви елементів з x, y (lon, lat) -коордів у наведеному вище коді. Метод OpenLayers.Util.rad просто перетворює градуси в радіани (град * PI / 180).


1
Радіус, який ви використовуєте, 6378137,0 м відповідає екваторіальному радіусу Землі. Чи є причина в цьому? Не вдалося б використовувати середній радіус більш точним?
ФредБ

Math.radians = функція (градуси) {градусні градуси * Math.PI / 180.0; }; x = широта, y = довгота
Стефан Штайгер

4

Вам потрібно буде перетворити географічні координати в проекцію, яка має систему координат, яка дозволяє використовувати декартову математику для обчислення площі.

Я вважаю, що UTM є прийнятою стандартною проекцією, оскільки дуже просто вибрати зону виходячи з вашої широти та довготи, а також спотворення є мінімальним, навіть у різних зонах. Отже, якщо у вас багатокутник розміром Техасу, ви можете використовувати UTM Zone 14 N, і він все ще буде досить точним.

Якщо ваші багатокутники знаходяться над північним або південним полюсом, тоді вам слід використовувати UPS , оскільки проекції UTM менш точні над полюсами, і ви швидко пройдете їх, оскільки межі стануть меншими (оскільки вони слідують лініям довготи)

Після того, як ваші точки знаходяться в декартовій системі, яка відповідає системі координат, ви можете ставитися до них як до багатокутників на сітці та обчислювати площу.


3

Клас PolygonArea був доданий до GeographicLib у 2011-07 роках. Тут обчислюється справжня еліпсоїдальна площа багатокутника, краї якого геодезичні. На відміну від PostGIS, метод не передбачає чисельної інтеграції. Про документування (та посилання на папір, з якої виведені формули) див

http://geographiclib.sf.net/html/classGeographicLib_1_1PolygonAreaT.html

(Посилання зафіксовано для відображення узагальнення PolygonArea до шаблонного класу.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.