Saya tidak tahu mesin proyeksi mana yang digunakan ArcGis, tetapi pertanyaan yang sangat menarik juga untuk proj.4. Jadi saya mencobanya untuk menguji mesin proyeksi proj.4 dalam lingkungan GNU-R. Saya menggunakan sudut NAD 83 - UTM 17 dan EPSG 26917 dan memproyeksikan ulang 10000 dan 1000000 kali secara berulang dan menghitung perbedaannya dengan nilai awal.
Inilah hasilnya:
Tampaknya kesalahan "proyeksi ulang" berada dalam kisaran sentimeter untuk 10.000 putaran.
"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
Dan berkembang menjadi kesalahan dalam rentang meter jika Anda menjalankan loop 1000000 kali.
"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
Ini skripnya.
# 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)
Tes lebih lanjut dalam lingkungan statistik harus mudah. Penjelasan skrip dan kode untuk lingkungan linux tersedia di github.com/bigopensky .