緯度、経度(epsg:4326)をEPSG:3857に変換していますか?


10

特定の緯度と経度を10進度でEPSG:3857に変換する方法を確認するために、関連する数学を調べたいと思っています。誰かが数学をチェックするための優れたリファレンスまたは可能なPpython / C / C ++ / Javaライブラリのソースコードを指すことができますか?


GIS SEで非常に頻繁に使用されるpyprojでのlool
遺伝子

回答:


4

このコードスニペットはC#であり、頂点と呼ばれる配列を使用して[x、y]を保持します

double smRadius = 6378136.98;
double smRange = smRadius * Math.PI * 2.0;
double smLonToX = smRange / 360.0;
double smRadiansOverDegrees = Math.PI / 180.0;

...

// compute x-map-unit
vertex[0] *= smLonToX;

double y = vertex[1];

// compute y-map-unit
if (y > 86.0)
{
    vertex[1] = smRange;
}
else if (y < -86.0)
{
    vertex[1] = -smRange;
}
else
{
    y *= smRadiansOverDegrees;
    y = Math.Log(Math.Tan(y) + (1.0 / Math.Cos(y)), Math.E);
    vertex[1] = y * smRadius; 
}


0

ICSで@Russelの回答をフォローアップします。今日私は彼のコードを書き直して、wgs84(epsg:4326)座標をRのwgs84 /疑似メルカトル(epsg:3857)に変換しました:

vertex = list(x_coordinate, y_coordinate)
smRadius = 6378136.98
smRange = smRadius * pi * 2.0
smLonToX = smRange / 360.0
smRadiansOverDegrees = pi / 180.0

vertex[[1]] = vertex[[1]] *smLonToX

y = vertex[[2]]

if (y > 86.0){
  vertex[[2]] = smRange
} else if (y < -86.0){
  vertex[[2]] = -smRange
} else {
  y = y * smRadiansOverDegrees
  y = log(tan(y) + (1.0 / cos(y)), base = exp(1))
  vertex[[2]] = y * smRadius
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.