Chuyển đổi vĩ độ, kinh độ (epsg: 4326) thành EPSG: 3857?


10

Tôi đang tìm cách nghiên cứu toán học liên quan để xem làm thế nào một vĩ độ và kinh độ nhất định theo độ thập phân có thể được chuyển đổi thành EPSG: 3857. Bất cứ ai cũng có thể chỉ ra một tài liệu tham khảo tốt hoặc mã nguồn thư viện Ppython / C / C ++ / Java có thể để kiểm tra toán học?


lool tại pyproj rất thường được sử dụng trên GIS SE
gen

đối với mã python với toán học twms.googlecode.com/hg/twms/projections.py
Mapperz

Câu trả lời:


4

Đoạn mã này là C # và sử dụng một mảng được gọi là đỉnh để giữ [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; 
}

4
from pyproj import Proj, transform

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

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

0

Theo dõi câu trả lời của @Russel tại ICS. Hôm nay tôi viết lại mã của anh ấy để chuyển đổi tọa độ wss84 (epsg: 4326) thành bộ chuyển đổi wss84 / pseudo (epsg: 3857) trong R:

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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.