Come posso misurare l'area dalle coordinate geografiche?


12

Se ho poligoni in coordinate geografiche (WGS84), come posso misurare l'area totale che ciascuno prende sulla superficie della terra, tenendo conto della curvatura della terra?

Risposte:


7

PostGIS 1.5 ha introdotto un nuovo tipo di GEOGRAFIA . Il GEOGRAPHYtipo consente di memorizzare coordinate non proiettate su uno sferoide in una tabella PostGIS e di eseguire alcune funzioni di analisi su di esse.

ST_Area le query possono essere eseguite su poligoni di tipo GEOGRAFIA al fine di calcolare la loro area in metri quadrati.

La query seguente genera l'area di tutti i poligoni usando lo sferoide (attualmente WGS-84è supportato solo lo sferoide), supponendo che siano memorizzati usando il GEOGRAPHYtipo:

SELECT ST_Area(the_geom) FROM table_of_polygons;

L'algoritmo utilizzato per calcolare l'area su uno sferoide può essere derivato dal codice sorgente .


Freddo. Grazie per le informazioni. Dovrò provarlo.
Glennon,

Cosa fa PostGIS sotto il cofano?
mwalker,

@mwalker Non ho avuto il tempo di imparare, ma ho aggiunto un link al codice sorgente se vuoi :)
fmark

dal mio occhio non allenato, PostGIS sta usando una somma, intagliando l'area in strisce e aggiungendole tutte.
mwalker,

10

Ecco un link ad alcuni codici che daranno l'area di un semplice poligono (originariamente dal World Wind Forum): http://forum.worldwindcentral.com/showthread.php?t=20724 . Questo risolve il problema su una sfera, approssimativamente basata sulla relazione:

testo alternativo

S = area del poligono; theta è la somma degli angoli interni in radianti; n è il numero di vertici; r è il raggio della sfera.

Vedi anche (fonte dell'immagine della formula): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Sarei felice di vedere collegamenti e / o codici per l'area poligonale su uno sferoide oblato.


1
Il codice @glennon per l'area di un poligono geodetico su uno sferoide è disponibile in GeographicLib . Il codice contiene un collegamento al documento da cui deriva l'algoritmo.
Cffk,

Questo metodo, basato sulla formula di Gauss-Bonnet, è di grande interesse matematico ma è quasi inutile per le piccole figure sulla terra: c'è un enorme annullamento per trovare il minuscolo "eccesso" tra parentesi, che spesso porta a una catastrofica perdita di precisione - è facile perdere quasi del tutto la precisione, anche quando si lavora in aritmetica a doppia precisione. Per i calcoli GIS di routine, semplicemente non funziona.
whuber

7

Ecco la fonte per il calcolo semplificato che eseguiamo in OpenLayers. Questo metodo deriva da "Alcuni algoritmi per poligoni su una sfera" (Robert. G. Chamberlain e William H. Duquette, Pubblicazione JPL della NASA 07-03). Il codice collegato sopra serve per determinare l'area di un anello lineare (con coordinate geografiche). Le aree per poligoni e poligoni sono riassunte dagli anelli.

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

I componenti dell'anello sono due array di elementi di x, y (lon, lat) nel codice sopra. Il metodo OpenLayers.Util.rad converte i gradi in radianti (deg * PI / 180).


1
Il raggio che stai utilizzando, 6378137,0 m corrisponde al raggio equatoriale della Terra. C'è una ragione per questo? L'uso di un raggio medio non sarebbe più preciso?
FredB,

Math.radians = funzione (gradi) {gradi di ritorno * Math.PI / 180.0; }; x = latitudine, y = longitudine
Stefan Steiger,

4

Dovrai convertire le tue coordinate geografiche in una proiezione che ha un sistema di coordinate che ti consente di usare la matematica cartesiana per calcolare l'area.

Credo che UTM sia la proiezione standard accettata, in quanto è molto semplice selezionare una zona in base alla latitudine e alla longitudine, e anche la distorsione è minima, anche attraverso le zone. Quindi, se hai un poligono delle dimensioni del Texas, puoi usare UTM Zone 14 N e sarà comunque abbastanza preciso.

Se i tuoi poligoni si trovano sopra il polo nord o sud, dovresti invece utilizzare UPS , poiché le proiezioni UTM sono meno precise sui poli e li attraverserai rapidamente man mano che i confini si restringono (poiché seguono linee di longitudine)

Una volta che i tuoi punti si trovano in un sistema di coordinate amico delle cartesiane, puoi trattarli come poligoni su una griglia e calcolare l'area.


3

Una classe PolygonArea è stata aggiunta a GeographicLib nel 2011-07. Questo calcola la vera area ellissoidale di un poligono i cui bordi sono geodetici. A differenza di PostGIS, il metodo non implica l'integrazione numerica. Per la documentazione (e un collegamento al documento da cui derivano le formule), vedere

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

(Collegamento corretto per riflettere la generalizzazione di PolygonArea a una classe modello.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.