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?

Était-ce utile?

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:

Wikipedia

Même question

Même question 2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top