Fast estimation of distance/area from geodetic coordinates

Dado un par de coordenadas (lon, lat) en grados, obtenemos las coordenadas en Mercator Esférico con: Given the pair of coordinates (lon, lat) in degrees, we can get the Spherical Mercator coordinates with:
DEGREES_PER_RADIAN = 180.0 / Math.PI;
MERCATOR_EARTH_RADIUS = 6378137.0;
METERS_PER_EQUATOR_DEGREE = Math.PI * MERCATOR_EARTH_RADIUS / 180.0;

rlat = lat / DEGREES_PER_RADIAN;
y = 0.5 * Math.log((1 + Math.sin(rlat)) / (1 - Math.sin(rlat)));
merx = METERS_PER_EQUATOR_DEGREE * lon;
mery = METERS_PER_EQUATOR_DEGREE * DEGREES_PER_RADIAN * y;
Como es sabido, la proyección esférica de Mercator usada por Google (llamada EPSG:900913 o EPSG:3857) conserva ángulos y proporciones localmente, y todos los paralelos miden lo mismo: As we know, the Spherical Mercator projection known as EPSG:900913 and also EPSG:3857 is conformal (keeps angles and shapes locally) and all parallels have the same length E:
R = 6378137 m
E = 2 * pi * R = 40075016.686 m
Pero sabemos que realmente cada paralelo mide aproximadamente P = E * cos(lat) así que al medir distancias o perímetros directamente en esta proyección, es necesario normalizar el resultado, multiplicándolo por un factor f = cos(lat). En el caso de Estocolmo (Suecia) por ejemplo: But we know that the true length of each parallel is approximately P = E * cos(lat), so if one wishes to measure distances, perimeters or paths directly on a map in EPSG:3857, it’s necessary to multiply the result by a factor f = cos(lat). In the case of Stockholm (Sweden), for example, we have:
lat = 60
f = 0.5
Esto es una piscina olímpica en Barcelona en Google Maps. Su latitud es 41.36573: This is an olympic swimming pool in Barcelona on Google Maps. Latitude is 41.36573:
Si medimos su longitud directamente en esa proyección: If we measure its length directly in that projection:
Longitud verdadera: True length:
L = 66.57 * cos(41.36573) = 49.96 m
En el caso de áreas, podemos imaginar un polígono arbitrario (por ejemplo el perfil de la cara de un hombre) dividido en infinidad de pequeños cuadritos. Si reducimos la imagen con un factor de 0.6, el área de cada cuadrito resultante será 0.36 veces el del cuadrito original: For areas, we can think of an arbitrary polygon (for example, the outline of a man's face) divided into little squares. If we scale down the image by a factor of 0.6, each resulting little square is 0.36 times the size of the original square:
Por tanto, si la magnitud unidimensional (longitud) se escala en un factor f, la magnitud bidimensional (área) queda escalada en un factor f^2. Esto quiere decir que un área calculada usando coordenadas de Mercator esférico debe ser normalizada con el factor [cos(lat)]^2. So if the 1-dimensional magnitude (length) is scaled by f, then the 2-dimensional magnitude (area) gets scaled by f^2. This means that the area computed using Spherical Mercator coordinates must be normalized by a factor of [cos(lat)]^2.

Enviar un comentario nuevo

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <span> <img>
  • Saltos automáticos de líneas y de párrafos.
  • Each email address will be obfuscated in a human readble fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

Más información sobre opciones de formato

Distribuir contenido