La trasformazione in una nuova proiezione, quindi indietro, influisce sulla precisione dei dati?


13

Ho una classe di caratteristiche (contee della Carolina del Sud, quindi un'area geografica abbastanza ampia) nell'aereo di stato SC NAD83. Deve essere trasformato in una seconda proiezione (NAD83 UTM 17), per poi tornare all'originale. Per farlo, userò lo strumento Progetto Esri .

Questa doppia trasformazione può causare uno spostamento nella posizione delle coordinate dei poligoni e di quanti centimetri, metri, chilometri?


A causa di: risoluzione della trasformazione, coordinate delle differenze di risoluzione del sistema e risoluzione e tolleranza della memoria della geometria. Ognuna di queste "variabili" sono diverse. Quindi devi andare a leggere la documentazione per ciascuno.
GISI,

... e se stai usando ArcGIS ci sono potenzialmente centinaia di equazioni di trasformazione elencate in ordine di trasformazioni di massima risoluzione per il dominio spaziale dei tuoi dati.
GISI,

1
Il solito risultato di A -> B -> A 'è A ~ = A', ma l'aggiunta della trasformazione di riferimento al mix potrebbe davvero rovinare le cose se lo fai in modo sbagliato. Molto dipende da come vengono definiti i riferimenti alle coordinate (e quindi dal troncamento nelle unità della mappa di ciascun sistema di coordinate).
Vince il

Risposte:


19

Non so quale motore di proiezione utilizza ArcGis, ma una domanda molto interessante anche per proj.4. Quindi provo a testare il motore di proiezione proj.4 all'interno dell'ambiente GNU-R. Uso gli angoli NAD 83 - UTM 17 e EPSG 26917 e lo riproiettano 10000 e 1000000 volte ricorsivamente e calcolo la differenza con i valori iniziali.

Ecco i risultati:

Sembra che l'errore di "riproiezione" sia entro un raggio di centimetro per 10000 loop.

"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

E diventa un errore nel raggio di un metro se esegui il loop 1000000 volte.

"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

Ecco la sceneggiatura.

# 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)

Ulteriori test in un ambiente statistico dovrebbero essere facili. Gli script e la spiegazione del codice per un ambiente Linux sono disponibili su github.com/bigopensky .


Questo è ancora più approfondito di quanto sperassi e molto incoraggiante. Grazie per il test e per lo script di esempio per replicarlo con i miei dati!
Erica,

Puoi includere cosa intendi per angoli NAD83 UTM? Se si trovano agli estremi della zona (latitudine elevata, ad esempio), l'uso di punti negli Stati Uniti probabilmente darà risultati ancora migliori.
mkennedy,

Suppongo che i limiti del WGS84 spediti con EPSG 26917 su spatialreference.org/ref/epsg/nad83-utm-zone-17n .. WGS84 Bounds: -84.0000, 24.0000, -78.0000, 83.0000sia la giusta regione di interesse. Ho fatto un errore?
huckfinn,

@huckfinn Duh, avrei dovuto vedere i valori nel codice! Scusami per la domanda stupida. Grandi valori per una risposta generalizzata su UTM.
mkennedy,

7

Esri ha il suo motore di proiezione.

La maggior parte delle proiezioni e dei metodi di trasformazione geografica / di riferimento sono ben educati se utilizzati in un'area di interesse appropriata. Se ci si allontana troppo da una zona UTM, il Mercatore trasversale non sempre 'inversa' (converti in latitudine-longitudine) esattamente. Le proiezioni utilizzate per il mondo intero possono presentare alcuni problemi ai poli o intorno ai o al meridiano +/- 180 o "anti-meridiano" (il meridiano che si trova di fronte al centro del sistema di riferimento di coordinate proiettato).

Ho corso 4 punti che cadono fuori dalla Carolina del Sud attraverso il motore di proiezione Esri. Per uno stress test di 1k o 10k o 1M punti, dovrò codificare qualcosa poiché il mio test simile esistente fa solo un "round-trip" - proiettato da geografico a proiettato. 32133 è NAD 1983 State Plane South Carolina (metri). 26917 è NAD 1983 UTM zona 17 North.

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

Quindi puoi vedere che abbiamo avuto due punti che sono tornati alle 10e-09.

La gestione in ArcGIS è complicata dal fatto che esiste un riferimento spaziale. Il riferimento spaziale include il sistema di coordinate più alcuni valori di archiviazione e analisi. Per impostazione predefinita, i sistemi di coordinate che utilizzano i contatori vengono archiviati con una precisione di un decimo di millimetro, 0,0001.

Divulgazione: lavoro per Esri.


5

Penso che questo sia un caso in cui è necessario testare il flusso di lavoro proposto rispetto ad alcune funzionalità del punto di prova, a cui è facile aggiungere campi di coordinate XY.

Confronta i valori XY dei tuoi punti iniziali con quelli che hai proiettato / trasformato (comunque molte volte) e avrai quantificato la differenza.


1
Essere d'accordo. Inoltre, tenere presente che ArcGIS visualizza per impostazione predefinita 6 posizioni decimali di un tipo di dati Double nella vista tabella. È possibile modificare le proprietà del campo per visualizzare 12 cifre decimali, nella vista tabella. I valori xy geografici sono in genere 9 decimali circa, doppia precisione.
Klewis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.