Tôi không biết ArcGis sử dụng công cụ chiếu nào, nhưng cũng là một câu hỏi rất thú vị cho proj.4. Vì vậy, tôi cho nó thử kiểm tra công cụ chiếu proj.4 trong môi trường GNU-R. Tôi sử dụng các góc NAD 83 - UTM 17 và EPSG 26917 và định nghĩa lại nó 10000 và 1000000 lần một cách đệ quy và tính toán sự khác biệt cho các giá trị bắt đầu.
Đây là kết quả:
Có vẻ như lỗi "từ chối" nằm trong phạm vi centimet cho 10000 vòng.
"LON/LAT differences after 10000 loops"
DLON DLAT
1 -2.441464e-07 -1.341807e-07
2 2.441129e-07 -1.341807e-07
3 1.852679e-07 -1.691737e-08
4 -1.853157e-07 -1.691819e-08
"X/Y differences after 10000 loops"
DX DY
1 -0.025169783 -0.014338141
2 0.025166375 -0.014338208
3 0.002419045 -0.002016762
4 -0.002419690 -0.002016889
Và phát triển thành một lỗi trong phạm vi mét nếu bạn chạy vòng lặp 1000000 lần.
"LON/LAT differences after 1000000 loops"
DLON DLAT
1 -2.441464e-05 -1.341845e-05
2 2.441128e-05 -1.341846e-05
3 1.852621e-05 -1.691837e-06
4 -1.853105e-05 -1.691828e-06
"X/Y differences after 1000000 loops"
DX DY
1 -2.5172288 -1.4339977
2 2.5168869 -1.4340064
3 0.2419201 -0.2017070
4 -0.2419859 -0.2017094
Đây là kịch bản.
# load the package
require('proj4')
# the LON/LAT frame of NAD83 UTM 17
lon = c(-84.00, -78.00, -84.00, -78.00 )
lat = c( 24.00, 24.00, 83.00, 83.00)
# build the projection conform object
ll0 = matrix(c(lon,lat),nrow=4,ncol=2)
xy0 = project(ll0,"+init=epsg:26917",ellps.default='GRS80')
# make a copy
ll1 = ll0
xy1 = xy0
# number of iterations
num = 1000000
# reproject the stuff num times
for(i in 1:num) {
# project forward
xy1 = project(ll1,"+init=epsg:26917", ellps.default='GRS80')
# project backward
ll1 = project(xy1,"+init=epsg:26917", inverse=T, ellps.default='GRS80')
}
# build difference table ll
dll = as.data.frame(ll1-ll0)
names(dll) = c('DLON','DLAT')
# print results LON/LAT
print(paste("LON/LAT differences after ", num," loops"))
print(dll)
# build difference table xy
dxy = as.data.frame(xy1-xy0)
names(dxy) = c('DX','DY')
# print results X/Y
print(paste("X/Y differences after ", num," loops"))
print(dxy)
Kiểm tra thêm trong một môi trường thống kê nên dễ dàng. Các tập lệnh và giải thích mã cho môi trường linux có sẵn tại github.com/bigopensky .