A transformação para uma nova projeção e a volta afetam a precisão dos dados?

13

Eu tenho uma classe de recurso (municípios da Carolina do Sul, portanto, uma área geográfica bastante grande) no NAD83 SC State Plane. Ele precisa ser transformado em uma segunda projeção (NAD83 UTM 17) e depois transformado de volta ao original. Eu usarei a ferramenta Projeto da Esri para fazer isso.

Essa transformação dupla pode causar uma mudança na localização das coordenadas dos polígonos e em quanto - centímetros, metros, quilômetros?

Érica
fonte
Devido a: resolução de transformação, diferenças de resolução do sistema de coordenadas e resolução e tolerância de armazenamento da geometria. Cada uma dessas "variáveis" é diferente. Então, você precisa ler a documentação de cada um.
GISI
... e se você estiver usando o ArcGIS, há potencialmente centenas de equações de transformação listadas na ordem das transformações de maior resolução para o domínio espacial dos seus dados.
GISI
1
O resultado usual de A -> B -> A 'é A ~ = A', mas adicionar transformação de dados à mistura pode realmente atrapalhar as coisas se você fizer errado. Depende muito de como as referências de coordenadas são definidas (e, portanto, do truncamento nas unidades de mapa de cada sistema de coordenadas).
Vince

Respostas:

19

Não sei qual mecanismo de projeção o ArcGis usa, mas uma pergunta muito interessante também para o proj.4. Então, tentei testar o mecanismo de projeção proj.4 no ambiente GNU-R. Uso os cantos do NAD 83 - UTM 17 e o EPSG 26917 e o reprojeto 10000 e 1000000 vezes recursivamente e calculo a diferença para os valores iniciais.

Aqui estão os resultados:

Parece que o erro "reprojeção" está dentro de um intervalo de centímetros para 10000 loops.

"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 chegue a um erro no intervalo de medidores se você executar o loop 1000000 vezes.

"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

Aqui está o script.

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

Testes adicionais em um ambiente estatístico devem ser fáceis. Os scripts e a explicação do código para um ambiente Linux estão disponíveis em github.com/bigopensky .

huckfinn
fonte
Isso é ainda mais completo do que eu esperava, e muito encorajador. Obrigado pelo teste e pelo exemplo de script para replicá-lo com meus próprios dados!
Erica
Você pode incluir o que quer dizer com os cantos do NAD83 UTM? Se estiverem nos extremos da zona (alta latitude, por exemplo), o uso de pontos nos EUA provavelmente dará resultados ainda melhores.
Mcknedy #
Suponho que os limites do WGS84 enviados com o EPSG 26917 em spatialreference.org/ref/epsg/nad83-utm-zone-17n .. WGS84 Bounds: -84.0000, 24.0000, -78.0000, 83.0000é a região de interesse certa. Eu cometi um erro?
21136 huckfinn
@ huckfinn Duh, eu deveria ter visto os valores no código! Desculpe pela pergunta estúpida. Grandes valores para uma resposta generalizada sobre UTM.
Mcknedy
7

A Esri tem seu próprio mecanismo de projeção.

A maioria das projeções e métodos de transformações geográficas / de dados são bem-comportados quando usados ​​em uma área de interesse apropriada. Se você ficar muito longe fora de uma zona UTM, o Mercator transversal nem sempre é 'inverso' (converte em latitude-longitude) exatamente. As projeções usadas para o mundo inteiro podem ter alguns problemas nos pólos ou ao redor ou no meridiano +/- 180 ou no 'anti-meridiano' (o meridiano que fica do lado oposto ao centro do sistema de referência de coordenadas projetado).

Fiz 4 pontos fora da Carolina do Sul através do mecanismo de projeção Esri. Para um teste de estresse de 1k ou 10k ou 1M pontos, terei que codificar algo, já que meu teste semelhante existente faz apenas uma 'ida e volta' - projetada para geográfica ou projetada. 32133 é o NAD 1983 State Plane South Carolina (metros). 26917 é NAD 1983 UTM zona 17 Norte.

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

Então você pode ver que tivemos dois pontos que voltaram às 10e-09.

A manipulação no ArcGIS é complicada pelo fato de haver uma referência espacial. A referência espacial inclui o sistema de coordenadas mais alguns valores de armazenamento e análise. Por padrão, os sistemas de coordenadas que usam medidores são armazenados com uma precisão de um décimo de milímetro, 0,0001.

Divulgação: Eu trabalho para Esri.

mkennedy
fonte
5

Acho que esse é um caso em que você precisa testar o fluxo de trabalho proposto em relação a alguns recursos do ponto de teste, que são fáceis de adicionar aos campos de coordenadas XY.

Compare os valores XY dos seus pontos iniciais com os que você projetou / transformou (quantas vezes), e você terá quantificado a diferença.

PolyGeo
fonte
1
Aceita. Além disso, esteja ciente de que o ArcGIS exibe 6 casas decimais de um tipo de dados Double por padrão na Visualização de tabela. Você pode alterar as propriedades do campo para exibir 12 casas decimais, na exibição de tabela. Os valores geográficos xy são tipicamente 9 casas decimais, aproximadamente, precisão dupla.
22416 klewis