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?

¿Fue útil?

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:

Wikipedia

La misma pregunta

La misma pregunta 2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top