我试图用墨卡托投影计算地图上的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));
}
不记得用mapeheight缩放y(您应该知道taht的latitudeindegrees的最大值和最小值)
引自维基百科:
在北纬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