Рассчитать положение Y по широте в градусах в проекции Меркатора
-
20-09-2019 - |
Вопрос
Я пытаюсь вычислить положение Y на карте с проекцией Меркатора, учитывая широту в градусах.Вот что мне нужно:
//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 ???;
}
Я пробовал все, что нашел в Интернете (включая Википедию и stackoverflow), но ничего из этого мне не помогло.Наверное, я делаю что-то глупое, но не могу понять что.Сможет ли кто-нибудь спасти мое здравомыслие?
Решение
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
Не помните масштаб y с помощью mapHeight (вы должны знать максимальное и минимальное значение latitudeInDegrees для этого)
Цитата из Википедии:
При широтах выше 70 ° северного или юга проекция Mercator практически не используется.
Вы должны написать такой код:
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);
}
Для дополнительной информации:
Не связан с StackOverflow