Как я могу измерить площадь по географическим координатам?

12

Если у меня есть полигоны в географических координатах (WGS84), как мне измерить общую площадь, занимаемую каждым из них на поверхности Земли, с учетом кривизны Земли?

SCW
источник

Ответы:

7

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

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

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

SELECT ST_Area(the_geom) FROM table_of_polygons;

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

fmark
источник
Здорово. Спасибо за информацию. Я должен попробовать это.
Гленнон
Что делает PostGIS под капотом?
mwalker
@mwalker Я не потратил время на изучение, но я добавил ссылку на исходный код, если хотите :)
fmark
моим неподготовленным глазом PostGIS использует суммирование, разбивая область на полосы и складывая их все.
mwalker
10

Вот ссылка на некоторый код, который даст область простого многоугольника (первоначально с World Wind Forum): http://forum.worldwindcentral.com/showthread.php?t=20724 . Это решает проблему в сфере, примерно на основе отношений:

альтернативный текст

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

См. Также (источник изображения формулы): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html.

Я был бы рад видеть ссылки и / или код для области многоугольника на сжатом сфероиде.

Гленнон
источник
1
@glennon Код области геодезического многоугольника на сфероиде доступен в GeographicLib . Код содержит ссылку на статью, где выведен алгоритм.
cffk
Этот метод, основанный на формуле Гаусса-Бонне, представляет большой математический интерес, но он практически бесполезен для маленьких фигурок на земле: существует огромное сокращение, чтобы найти крошечный «избыток» в скобках, что часто приводит к катастрофической потере точности - легко потерять почти всю точность целиком, даже работая с арифметикой двойной точности. Для обычных ГИС-вычислений это просто не работает.
whuber
7

Вот источник для упрощенного расчета, который мы делаем в OpenLayers. Этот метод взят из «Некоторые алгоритмы для многоугольников на сфере» (Роберт Г. Чемберлен и Уильям Х. Дюкетт, публикация НАСА 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 просто конвертирует градусы в радианы (deg * PI / 180).

Тим Шауб
источник
1
Радиус, который вы используете, 6378137,0 м соответствует экваториальному радиусу Земли. Есть ли причина для этого? Не будет ли использование среднего радиуса более точным?
FredB
Math.radians = функция (градусы) {возвращаемые градусы * Math.PI / 180.0; }; x = широта, y = долгота
Стефан Штайгер
4

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

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

Если ваши полигоны находятся над северным или южным полюсом, вам следует вместо этого использовать ИБП , поскольку проекции UTM менее точны по полюсам, и вы будете быстро пересекать их по мере того, как границы будут уменьшаться (поскольку они следуют по линиям долготы)

Как только ваши точки окажутся в дружественной декартовой системе координат, вы можете рассматривать их как многоугольники на сетке и вычислять площадь.

mwalker
источник
3

Класс PolygonArea был добавлен в GeographicLib в 2011-07 году. Это вычисляет истинную эллипсоидальную площадь многоугольника, ребра которого являются геодезическими. В отличие от PostGIS, метод не предполагает численного интегрирования. Для документирования (и ссылки на документ, где формулы получены), см.

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

(Ссылка исправлена, чтобы отразить обобщение PolygonArea для класса шаблона.)

cffk
источник