새로운 투영으로 변환 한 다음 다시 데이터 정확도에 영향을 줍니까?


13

NAD83 SC State Plane에 피쳐 클래스 (사우스 캐롤라이나 카운티, 상당히 넓은 지역)가 있습니다. 두 번째 투영 (NAD83 UTM 17)으로 변환 한 다음 다시 원래 투영으로 변환해야합니다. Esri의 Project 도구 를 사용하여이 작업을 수행하겠습니다.

이 이중 변환으로 다각형 좌표의 위치와 센티미터, 미터, 킬로미터가 이동합니까?


변환 분해능, 좌표계 분해능 차이, 기하 저장 영역 분해능 및 공차 때문입니다. 이 "변수"는 각각 다릅니다. 따라서 각 설명서를 읽어야합니다.
GISI

... 그리고 ArcGIS를 사용하는 경우 데이터의 공간 도메인에 대한 최고 해상도 변환 순서로 수백 개의 변환 방정식이 나열 될 수 있습니다.
GISI

1
A-> B-> A '의 일반적인 결과는 A ~ = A'이지만 믹스에 데이텀 변환을 추가하면 잘못하면 실제로 파울 수 있습니다. 좌표 참조가 정의되는 방법 (따라서 각 좌표계의 맵 단위에서 잘림)에 따라 달라집니다.
Vince

답변:


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)

통계 환경 내에서의 추가 테스트는 쉬워야합니다. Linux 환경에 대한 스크립트 및 코드 설명은 github.com/bigopensky 에서 볼 수 있습니다 .


이것은 내가 기대했던 것보다 훨씬 철저하고 매우 고무적입니다. 테스트 스크립트를 내 데이터로 복제하는 예제 스크립트에 감사드립니다 !
Erica

NAD83 UTM 코너의 의미를 포함시킬 수 있습니까? 만약 그들이 그 지역의 극단에 있다면 (예를 들어 높은 위도), 미국 내에서 포인트를 사용하면 더 나은 결과를 얻을 수있을 것입니다.
mkennedy

나는에서 EPSG 26917과 함께 제공되는 WGS84 경계 것으로, 가정 spatialreference.org/ref/epsg/nad83-utm-zone-17n는 .. WGS84 Bounds: -84.0000, 24.0000, -78.0000, 83.0000관심의 오른쪽 지역이다. 내가 실수 했어?
huckfinn

@ huckfinn Duh, 코드의 값을 보았을 것입니다! 바보 같은 질문에 대해 죄송합니다. UTM에 대한 일반화 된 답변을위한 훌륭한 가치.
mkennedy 2019

7

Esri에는 자체 프로젝션 엔진이 있습니다.

대부분의 투영 및 지리적 / 데이터 변환 방법은 적절한 관심 영역에서 사용될 때 잘 작동합니다. UTM 영역에서 너무 멀리 떨어져 있으면 횡 메르카토르가 항상 정확하게 '역'하지는 않습니다 (위도-경도로 변환). 전 세계에 사용되는 프로젝션은 기둥 또는 +/- 180 자오선 또는 '반 자오선'(투명 좌표계의 중앙에 반대되는 자오선)에 또는 주위에 문제가있을 수 있습니다.

Esri 프로젝션 엔진을 통해 사우스 캐롤라이나 외부에있는 4 개의 포인트를 실행했습니다. 1k 또는 10k 또는 1M 포인트의 스트레스 테스트를 위해 기존의 유사한 테스트가 지리적으로 투영 된 '왕복'을 수행하는 것처럼 무언가를 코딩해야합니다. 32133은 NAD 1983 State Plane South Carolina (미터)입니다. 26917은 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에서의 처리는 공간 참조가 있기 때문에 복잡합니다. 공간 참조에는 좌표계와 일부 저장 및 분석 값이 포함됩니다. 기본적으로 미터를 사용하는 좌표계는 10 분의 1 밀리미터 (0.0001)의 정밀도로 저장됩니다.

공개 : 저는 Esri에서 일합니다.


5

XY 좌표 필드를 쉽게 추가 할 수있는 일부 테스트 포인트 기능에 대해 제안 된 워크 플로우를 테스트 해야하는 경우라고 생각합니다.

초기 지점의 XY 값을 투영 / 변환 한 값과 여러 번 비교하면 차이를 수량화 할 수 있습니다.


1
동의하다. 또한 ArcGIS는 테이블보기에서 기본적으로 소수점 6 자리의 Double 데이터 유형을 표시합니다. 테이블보기에서 소수점 이하 12 자리를 표시하도록 필드 특성을 변경할 수 있습니다. 지리적 xy 값은 일반적으로 소수점 이하 9 자리 정도의 배정도입니다.
klewis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.