위도, 경도 (epsg : 4326)를 EPSG : 3857로 변환 하시겠습니까?


11

주어진 위도와 경도를 10 진수로 EPSG : 3857로 변환하는 방법을 알아보기 위해 관련된 수학을 연구하려고합니다. 수학을 확인하기위한 좋은 참조 또는 가능한 Ppython / C / C ++ / Java 라이브러리 소스 코드를 가리킬 수 있습니까?


pyproj에서 lool 은 GIS SE에서 매우 자주 사용됨
유전자

답변:


5
from pyproj import Proj, transform

P3857 = Proj(init='epsg:3857')
P4326 = Proj(init='epsg:4326')

x,y = transform(P4326, P3857, lon, lat)

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 답변에 대한 후속 조치. 오늘은 R에서 wgs84 (epsg : 4326) 좌표를 wgs84 / pseudo mercator (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.