Como posso medir a área a partir de coordenadas geográficas?

12

Se eu tenho polígonos em coordenadas geográficas (WGS84), como faço para medir a área total que cada um ocupa na superfície da Terra, levando em consideração a curvatura da Terra?

scw
fonte

Respostas:

7

O PostGIS 1.5 introduziu um novo tipo de GEOGRAFIA . O GEOGRAPHYtipo permite que coordenadas não projetadas em um esferóide sejam armazenadas em uma tabela PostGIS e que algumas funções de análise sejam executadas sobre elas.

ST_Area consultas podem ser realizadas nos polígonos do tipo GEOGRAFIA para calcular sua área em metros quadrados.

A consulta a seguir gera a área de todos os polígonos usando o esferóide (atualmente apenas o WGS-84esferóide é suportado), supondo que eles sejam armazenados usando o GEOGRAPHYtipo:

SELECT ST_Area(the_geom) FROM table_of_polygons;

O algoritmo usado para calcular a área em um esferóide pode ser derivado do código-fonte .

fmark
fonte
Legal. Obrigado pela informação. Vou ter que tentar isso.
Glennon
O que o PostGIS faz sob o capô?
Mwalker #
@mwalker Eu não tenham tomado a tempo para aprender, mas eu adicionei um link para o código-fonte se você gostaria de :)
fmark
pelo meu olho destreinado, o PostGIS está usando uma soma, esculpindo a área em tiras e adicionando todas elas.
mwalker
10

Aqui está um link para algum código que produzirá a área de um polígono simples (originalmente do World Wind Forum): http://forum.worldwindcentral.com/showthread.php?t=20724 . Isso resolve o problema em uma esfera, aproximadamente com base no relacionamento:

texto alternativo

S = área do polígono; teta é a soma dos ângulos interiores em radianos; n é o número de vértices; r é o raio da esfera.

Consulte também (fonte da imagem da fórmula): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Eu ficaria encantado em ver links e / ou código da área de polígono em um esferóide oblato.

Glennon
fonte
1
@glennon O código para a área de um polígono geodésico em um esferóide está disponível em GeographicLib . O código contém um link para o artigo em que o algoritmo é derivado.
Cffk
Esse método, baseado na fórmula de Gauss-Bonnet, é de grande interesse matemático, mas é quase inútil para pequenas figuras da Terra: há um enorme cancelamento para encontrar o minúsculo "excesso" entre parênteses, geralmente levando a uma perda catastrófica de precisão-- é fácil perder quase toda a precisão completamente, mesmo quando se trabalha com aritmética de dupla precisão. Para cálculos de rotina GIS, simplesmente não funciona.
whuber
7

Aqui está a fonte do cálculo simplificado que fazemos nos OpenLayers. Este método vem de "Algoritmos para polígonos em uma esfera" (Robert. G. Chamberlain e William H. Duquette, Publicação JPL da NASA 07-03). O código vinculado acima é para determinar a área de um anel linear (com coordenadas geográficas). As áreas para polígonos e multi-polígonos são resumidas a partir dos anéis.

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;
}

Os componentes de anel são duas matrizes de elementos das cordas x, y (lon, lat) no código acima. O método OpenLayers.Util.rad apenas converte graus em radianos (deg * PI / 180).

Tim Schaub
fonte
1
O raio que você está usando, 6378137,0 m, corresponde ao raio equatorial da Terra. Existe uma razão para isso? Usar um raio médio não seria mais preciso?
FredB
Math.radians = função (graus) {retornar graus * Math.PI / 180.0; }; x = latitude, y = longitude
Stefan Steiger
4

Você precisará converter suas coordenadas geográficas em uma projeção que possui um sistema de coordenadas que permite usar a matemática cartesiana para calcular a área.

Acredito que UTM é a projeção padrão aceita, pois é muito simples selecionar uma zona com base em sua latitude e longitude, e também a distorção é mínima, mesmo entre zonas. Portanto, se você tiver um polígono do tamanho do Texas, poderá usar a Zona 14 N do UTM e ele ainda será bastante preciso.

Se seus polígonos estão sobre o polo norte ou sul, você deve usar o UPS , pois as projeções UTM são menos precisas sobre os pólos e você as atravessará rapidamente à medida que os limites diminuem (uma vez que seguem as linhas de longitude)

Quando seus pontos estiverem em um sistema de coordenadas compatível com Cartesiano, você poderá tratá-los como polígonos em uma grade e calcular a área.

mwalker
fonte
3

Uma classe PolygonArea foi adicionada ao GeographicLib em 2011-07. Isso calcula a verdadeira área elipsoidal de um polígono cujas bordas são geodésicas. Ao contrário do PostGIS, o método não implica integração numérica. Para documentação (e um link para o artigo em que as fórmulas são derivadas), consulte

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

(Link corrigido para refletir a generalização de PolygonArea para uma classe de modelo.)

cffk
fonte