Calcule a posição y a partir da latitude em graus na projeção Mercator
-
20-09-2019 - |
Pergunta
Estou tentando calcular a posição Y em um mapa com projeção Mercator, dada a latitude em graus. Aqui está o que eu preciso:
//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 ???;
}
Eu tentei todos os tipos de coisas que encontrei online (incluindo a Wikipedia e o Stackoverflow), mas nada disso funcionou para mim. Provavelmente estou fazendo algo estúpido, mas não consigo descobrir o quê. Alguém pode salvar minha sanidade?
Solução
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
Não lembre -se da escala y com o MaphEight (você deve conhecer o valor máximo e min de latitudeinderes para taht)
Citação da Wikipedia:
Em latitudes superiores a 70 ° norte ou sul, a projeção Mercator é praticamente inutilizável.
Você deve escrever código assim:
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 maiores informações:
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow