4

緯度を度単位で指定して、メルカトル図法を使用してマップ上の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を含む)を試しましたが、どれもうまくいきませんでした。私はおそらく愚かなことをしているのですが、何がわからないのです。誰かが私の正気を救うことができますか?

4

1 に答える 1

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

mapHeightでスケール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);
}

詳細については:

ウィキペディア

同じ質問

同じ質問2

于 2009-10-10T19:13:21.670 に答える