转换为新的投影然后再转换会影响数据准确性吗?


13

我在NAD83 SC State Plane中有一个要素类(南卡罗来纳州县,所以地理区域相当大)。需要将其转换为第二个投影(NAD83 UTM 17),然后转换回原始投影。我将使用Esri的Project工具来完成此任务。

这种对偶变换能否引起多边形坐标位置的偏移以及几厘米,几米,几千米的偏移?


因为:转换分辨率,坐标系分辨率差异以及几何图形存储分辨率和公差。这些“变量”中的每一个都不相同。因此,您需要阅读每个文档。
GISI

...如果您使用的是ArcGIS,则可能以数据空间域的最高分辨率转换顺序列出了数百个转换方程式。
GISI

1
A-> B-> A'的通常结果是A〜= A',但是如果您做错了,则将基准转换添加到混合中可能确实使事情搞砸了。很大程度上取决于坐标参考的定义方式(以及每个坐标系的地图单位中的截断)。
文斯

Answers:


19

我不知道ArcGis使用哪种投影引擎,但是proj.4也是一个非常有趣的问题。因此,我尝试在GNU-R环境中测试proj.4投影引擎。我使用NAD 83-UTM 17转角和EPSG 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上获得Linux环境的脚本和代码说明。


这比我所希望的更加彻底,也令人鼓舞。感谢您的测试,感谢示例脚本使用我自己的数据进行复制!
埃里卡(Erica)

您能说明NAD83 UTM角落的含义吗?如果它们位于区域的极端(例如高纬度),则在美国境内使用点可能会带来更好的结果。
mkennedy

我认为EPSG 26917随附的WGS84边界在spacespacereference.org/ref/epsg/nad83-utm-zone-17n .. WGS84 Bounds: -84.0000, 24.0000, -78.0000, 83.0000是正确的关注区域。我做错了吗?
huckfinn

@huckfinn Duh,我应该已经在代码中看到了值!很抱歉这个愚蠢的问题。关于UTM的通用答案的巨大价值。
mkennedy '16

7

Esri有自己的投影引擎。

当在适当的关注区域中使用时,大多数投影和地理/基准转换方法都表现良好。如果您距离UTM区域太远,则横向墨卡托并不总是精确地“逆向”(转换为纬度-经度)。用于整个世界的投影可能在极点或+/- 180子午线或“反子午线”(与投影坐标参考系统中心相对的子午线)处或附近或附近存在一些问题。

我通过Esri投影引擎获得了南卡罗来纳州以外的4分。对于1k或10k或1M点的压力测试,我将不得不编写一些代码,因为我现有的类似测试只是进行“往返”(从地理到投影)。32133是NAD 1983 State Plane South Carolina(米)。29917是NAD 1983 UTM区域17北。

C:\Users\melita>inverse 32133
382000 20000
      -83.40806392522212        31.98974518135408
382000 383000
      -83.50098893136905        35.26180827475587
839100 20000
      -78.57184097446545        31.98934439195045
839100 383000
      -78.47814111839074        35.26139222680582

C:\Users\melita>forward 26917
  -83.40806392522212        31.98974518135408
       272490.5730967618        3541832.738731374
  -83.50098893136905        35.26180827475587
       272485.6257057797         3904944.98998655
  -78.57184097446545        31.98934439195045
       729409.4734382738        3541830.781689366
  -78.47814111839074        35.26139222680582
       729414.4926270114        3904946.919009762

C:\Users\melita>inverse 26917
 272490.5730967618        3541832.738731374
      -83.40806392522212        31.98974518135408
  272485.6257057797         3904944.98998655
      -83.50098893136905        35.26180827475587
  729409.4734382738        3541830.781689366
      -78.57184097446545        31.98934439195045
  729414.4926270114        3904946.919009762
      -78.47814111839074        35.26139222680582
^Z

C:\Users\melita>forward 32133
  -83.40806392522212        31.98974518135408
                382000.0                  20000.0
  -83.50098893136905        35.26180827475587
                382000.0                 383000.0
  -78.57184097446545        31.98934439195045
                839100.0        19999.99999999814
  -78.47814111839074        35.26139222680582
                839100.0        382999.9999999981

因此,您可以看到我们在10e-09时得出了两点。

由于存在空间参考,因此在ArcGIS中的处理变得复杂。空间参考包括坐标系以及一些存储和分析值。默认情况下,使用仪表的坐标系的精度为十分之一毫米(0.0001)。

披露:我为Esri工作。


5

我认为在这种情况下,您需要针对某些测试点功能(很容易添加XY坐标字段)来测试您建议的工作流程。

将初始点的XY值与已投影/变换的XY值进行比较(多次),您将量化出差异。


1
同意。另外,请注意,ArcGIS默认在表视图中显示Double数据类型的6个小数位。您可以在表视图中更改字段的属性以显示12位小数。地理xy值通常为9个小数位左右,即双精度。
klewis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.