質問

私は度緯度所与メルカトル図法で地図上の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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top