मुझे नहीं पता कि कौन सा प्रोजेक्शन इंजन आर्कगिस का उपयोग करता है, लेकिन एक बहुत ही दिलचस्प सवाल भी proj.4 के लिए। तो मैं इसे GNU-R वातावरण में proj.4 प्रोजेक्शन इंजन का परीक्षण करने का प्रयास करता हूं। मैं एनएडी 83 - यूटीएम 17 कोनों और ईपीएसजी 26917 का उपयोग करता हूं और इसे 10000 और 1000000 बार पुनरावृत्ति करता हूं और शुरुआती मूल्यों के अंतर की गणना करता हूं।
यहाँ परिणाम हैं:
ऐसा लगता है कि "अस्वीकृति" त्रुटि 10000 छोरों के लिए एक सेंटीमीटर सीमा के भीतर है।
"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
और अगर आप 1000000 बार लूप चलाते हैं, तो मीटर रेंज में एक त्रुटि हो जाती है।
"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
यहाँ स्क्रिप्ट है।
# 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)
सांख्यिकीय वातावरण में आगे के परीक्षण आसान होने चाहिए। लिनक्स वातावरण के लिए स्क्रिप्ट और कोड स्पष्टीकरण github.com/bigopensky पर उपलब्ध हैं ।