Cálculo del área del polígono utilizando Latitud y Longitud generadas a partir del espacio cartesiano y un archivo mundial

Dada una serie de pares de coordenadas GPS, necesito calcular el área de un polígono (n-gon). Esto es relativamente pequeño (no más de 50,000 pies cuadrados). Los códigos geográficos se crean aplicando una transformación afín con datos de un archivo mundial.

Intenté utilizar un enfoque de dos pasos al convertir los códigos geográficos en coordenadas cartesianas:

double xPos = (lon-lonAnchor)*( Math.toRadians( 6378137 ) )*Math.cos( latAnchor ); double yPos = (lat-latAnchor)*( Math.toRadians( 6378137 ) ); 

luego uso un cálculo cruzado del producto para determinar el área.

El problema es que los resultados están un poco fuera de precisión (alrededor del 1%). ¿Hay algo que pueda investigar para mejorar esto?

Gracias.

El error del 1% parece un poco alto debido a su aproximación. ¿Estás comparando con mediciones reales o algún cálculo ideal? Recuerde que también hay un error en el GPS que podría estar contribuyendo.

Si desea un método más preciso para hacer esto, hay una buena respuesta a esta pregunta. Si va por un camino más rápido, puede usar el geoide WGS84 en lugar de su esfera de referencia para convertir a coordenadas cartesianas (ECEF). Aquí está el enlace de la wiki para esa conversión.

Estoy modificando un mapa de Google para que un usuario pueda calcular el área de un polígono haciendo clic en los vértices. No estaba dando las áreas correctas hasta que me aseguré de que Math.cos (latAnchor) estuviera en radianes primero

Asi que:

 double xPos = (lon-lonAnchor)*( Math.toRadians( 6378137 ) )*Math.cos( latAnchor ); 

convirtió:

 double xPos = (lon-lonAnchor)*( 6378137*PI/180 ) )*Math.cos( latAnchor*PI/180 ); 

donde lon, lonAnchor y latAnchor están en grados. Funciona como un encanto ahora.

Revisé en Internet varias fórmulas de área de polígono (o código) pero no encontré ninguna buena o fácil de implementar.

Ahora he escrito el fragmento de código para calcular el área de un polígono dibujado en la superficie de la tierra. El polígono puede tener n vértices con cada vértice tiene su propia longitud de latitud.

Pocos puntos importantes

  1. La entrada de matriz a esta función tendrá elementos “n + 1”. El último elemento tendrá los mismos valores que el primero.
  2. Escribí un código de C # muy básico, para que los chicos también puedan adaptarlo en otro idioma.
  3. 6378137 es el valor del radio de tierra en metros.
  4. El área de salida tendrá una unidad de metros cuadrados

     private static double CalculatePolygonArea(IList coordinates) { double area = 0; if (coordinates.Count > 2) { for (var i = 0; i < coordinates.Count - 1; i++) { MapPoint p1 = coordinates[i]; MapPoint p2 = coordinates[i + 1]; area += ConvertToRadian(p2.Longitude - p1.Longitude) * (2 + Math.Sin(ConvertToRadian(p1.Latitude)) + Math.Sin(ConvertToRadian(p2.Latitude))); } area = area * 6378137 * 6378137 / 2; } return Math.Abs(area); } private static double ConvertToRadian(double input) { return input * Math.PI / 180; } 
Intereting Posts