Рассчитать положение Y по широте в градусах в проекции Меркатора

StackOverflow https://stackoverflow.com/questions/1548807

Вопрос

Я пытаюсь вычислить положение 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);
}

Для дополнительной информации:

Википедия

Тот же вопрос

Тот же вопрос 2

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top