在墨卡托投影上以纬度为单位计算Y位置

时间:2009-10-10 19:06:36

标签: c# .net mapping latitude-longitude

我正在尝试计算地图上的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),但它们都没有对我有用。我可能做了一些愚蠢的事情,但我无法弄清楚是什么。谁能救我的理智?

1 个答案:

答案 0 :(得分:4)

public double CalculateY(double mapHeight, double latitudeInDegrees)
{
    return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}

不记得使用mapHeight缩放y(你应该知道latitudeInDegrees对于taht的最大值和最小值)

来自维基百科的引用:

  

北纬70°以上   南方,墨卡托投影是   实际上无法使用。

您应该编写如下代码:

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);
}

了解更多信息:

Wikipedia

Same question

Same question 2