メルカトル図法上度の自由度から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));
}
(あなたはtahtためlatitudeInDegreesの最大値と最小値を知っている必要があります)mapHeightでスケールyを覚えていない。
ウィキペディアからの引用:
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);
}
詳細についてます:
同じ質問2 の
所属していません StackOverflow