¿Cómo puedo medir el área desde coordenadas geográficas?


12

Si tengo polígonos en coordenadas geográficas (WGS84), ¿cómo mido el área total que cada uno ocupa la superficie de la tierra, teniendo en cuenta la curvatura de la tierra?

Respuestas:


7

PostGIS 1.5 introdujo un nuevo tipo de GEOGRAFÍA . El GEOGRAPHYtipo permite que las coordenadas no proyectadas en un esferoide se almacenen en una tabla PostGIS, y que se realicen algunas funciones de análisis sobre ellas.

ST_Area Se pueden realizar consultas sobre polígonos de tipo GEOGRAFÍA para calcular su área en metros cuadrados.

La siguiente consulta genera el área de todos los polígonos que usan el esferoide (actualmente solo WGS-84se admite el esferoide), suponiendo que se almacenen usando el GEOGRAPHYtipo:

SELECT ST_Area(the_geom) FROM table_of_polygons;

El algoritmo utilizado para calcular el área en un esferoide puede derivarse del código fuente .


Frio. Gracias por la info. Tendré que probar esto.
Glennon

¿Qué hace PostGIS debajo del capó?
mwalker

@mwalker No me he tomado el tiempo para aprender, pero he agregado un enlace al código fuente si quieres :)
fmark

según mi ojo inexperto, PostGIS está usando una suma, tallando el área en tiras y sumándolas todas.
mwalker

10

Aquí hay un enlace a algún código que generará el área de un polígono simple (originalmente del Foro Mundial del Viento): http://forum.worldwindcentral.com/showthread.php?t=20724 . Esto resuelve el problema en una esfera, basada aproximadamente en la relación:

texto alternativo

S = área del polígono; theta es la suma de los ángulos interiores en radianes; n es el número de vértices; r es el radio de la esfera.

Ver también (fuente de la imagen de la fórmula): http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node59.html

Me encantaría ver enlaces y / o códigos para el área de polígonos en un esferoide achatado.


1
@glennon El código para el área de un polígono geodésico en un esferoide está disponible en GeographicLib . El código contiene un enlace al documento donde se deriva el algoritmo.
cffk

Este método, basado en la fórmula de Gauss-Bonnet, es de gran interés matemático pero es casi inútil para pequeñas figuras en la tierra: existe una enorme cancelación para encontrar el minúsculo "exceso" entre paréntesis, lo que a menudo conduce a una pérdida catastrófica de precisión. Es fácil perder casi toda la precisión por completo, incluso cuando se trabaja en aritmética de doble precisión. Para los cálculos rutinarios de SIG, simplemente no funciona.
whuber

7

Aquí está la fuente del cálculo simplificado que hacemos en OpenLayers. Este método proviene de "Algunos algoritmos para polígonos en una esfera" (Robert. G. Chamberlain y William H. Duquette, NASA JPL Publication 07-03). El código vinculado a lo anterior es para determinar el área de un anillo lineal (con coordenadas geográficas). Las áreas para polígonos y polígonos múltiples se resumen a partir de los anillos.

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

Los componentes de anillo son conjuntos de dos elementos de coordenadas x, y (lon, lat) en el código anterior. El método OpenLayers.Util.rad solo convierte grados a radianes (deg * PI / 180).


1
El radio que está utilizando, 6378137.0 m corresponde al radio ecuatorial de la Tierra. ¿Hay alguna razón para eso? ¿No sería más preciso usar un radio medio?
FredB

Math.radians = función (grados) {grados de retorno * Math.PI / 180.0; }; x = latitud, y = longitud
Stefan Steiger

4

Deberá convertir sus coordenadas geográficas en una proyección que tenga un sistema de coordenadas que le permita usar las matemáticas cartesianas para calcular el área.

Creo que UTM es la proyección estándar aceptada, ya que es muy simple seleccionar una zona en función de su latitud y longitud, y también la distorsión es mínima, incluso en todas las zonas. Entonces, si tiene un polígono del tamaño de Texas, puede usar UTM Zone 14 N y aún será bastante preciso.

Si sus polígonos están sobre el polo norte o sur, entonces debería usar UPS en su lugar, ya que las proyecciones UTM son menos precisas sobre los polos, y los atravesará rápidamente a medida que los límites se hagan más pequeños (ya que siguen líneas de longitud)

Una vez que sus puntos están en un sistema de coordenadas amigable con los cartesianos, puede tratarlos como polígonos en una cuadrícula y calcular el área.


3

Se agregó una clase PolygonArea a GeographicLib en 2011-07. Esto calcula el área elipsoidal verdadera de un polígono cuyos bordes son geodésicos. A diferencia de PostGIS, el método no implica integración numérica. Para obtener documentación (y un enlace al documento donde se derivan las fórmulas), vea

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

(Enlace arreglado para reflejar la generalización de PolygonArea a una clase de plantilla).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.