Calcular la posición Y de la latitud en grados en proyección de Mercator
-
20-09-2019 - |
Pregunta
Estoy tratando de calcular la posición Y en un mapa con la proyección de Mercator, dada la latitud en grados. Esto es lo que necesito:
//mapHeight might be 600 (pixels), for example
//latitudeInDegrees ranges from -90 to 90
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
//what on earth do I do here to calculate the Y offset on the map?
return ???;
}
He intentado todo tipo de cosas que he encontrado en Internet (y Wikipedia y stackoverflow), pero nada de esto ha funcionado para mí. Probablemente estoy haciendo algo estúpido, pero no puedo averiguar qué. ¿Puede alguien salvar mi cordura?
Solución
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
No recuerdo escala y con mapHeight (que debe saber el valor máximo y el mínimo de latitudeInDegrees para taht)
Cita de Wikipedia:
A latitudes más altas que 70 ° norte o al sur, la proyección de Mercator es prácticamente inutilizable.
Usted debe escribir código como el siguiente:
private double CalculateYRelative(double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
...
minY = CalculateYRelative(MinLatitudeInDegrees);
maxY = CalculateYRelative(MaxLatitudeInDegrees);
...
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return mapHeight*
(CalculateYRelative(latitudeInDegrees) - minY) / (maxY - minY);
}
Para más información:
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow