Calculer la position Y de latitude en degrés sur la projection de Mercator
-
20-09-2019 - |
Question
Je suis en train de calculer la position Y sur une carte avec la projection de mercator compte tenu de la latitude en degrés. Voici ce que j'ai besoin:
//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 ???;
}
J'ai essayé toutes sortes de choses que j'ai trouvé en ligne (y compris wikipedia et stackoverflow), mais rien de tout cela a fonctionné pour moi. Je suis sans doute faire quelque chose de stupide, mais je ne peux pas comprendre ce que. Quelqu'un peut-il sauver ma santé mentale?
La solution
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
Ne me souviens pas avec l'échelle y mapHeight (vous devez connaître les valeurs max et min de latitudeInDegrees pour TAHT)
Citation de Wikipedia:
Aux latitudes supérieures à 70 ° au nord ou sud, la projection Mercator est pratiquement inutilisable.
Vous devez écrire un code comme ceci:
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);
}
Pour plus d'informations: