La conversione delle coordinate X, Y in lat / long usando pyproj e Proj.4 restituisce le coordinate errate


10

Sto scrivendo uno script Python che legge più file XML contenenti coordinate xey e li combina in un unico file CSV. La latitudine e la longitudine sono campi obbligatori nel CSV, ma ho difficoltà a convertire le coordinate x, y nel piano di stato nord dell'Ohio usFt in WGS84.

>>> p = Proj(r'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs') #Nad83 State Plane Ohio North US Feet Proj object using parameters
>>> p(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)
>>> p1 = Proj(init="epsg:3734") #Nad83 State Plane Ohio North US Feet Proj object using EPSG code
>>> p1(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)

Entrambi i metodi sopra riportati restituiscono lo stesso risultato, tuttavia questo lungo lat è da qualche parte nella baia di Hudson. Quando tracciamo le coordinate in ArcMap, il lat long corretto è: -81.142311,41.688205.

* Si noti che tutti i long long sono forniti long, lat poiché questo è l'ordine utilizzato da Proj

Qualcuno sa perché dovrei ottenere le coordinate sbagliate da Proj.4 e pyproj?

Risposte:


8

Ottengo gli stessi risultati di @geographika quando corro gdaltransforme lo strumento proj.4 cs2cs:

$ gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
739400.9 2339327.3             
-87.3195485720169 45.9860670658218 0

cs2cs +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs +to +proj=lonlat +datum=WGS84
739400.9 2339327.3
87d19'10.375"W 45d59'9.841"N 0.000

L'inversione delle coordinate xey del tuo punto dà comunque il risultato che stai vedendo in ArcMap:

gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
2339327.3 739400.9
-81.1423086719059 41.6882035384526 0

Quindi dovrai fare un controllo visivo per assicurarti di avere le tue coordinate x e y nel modo giusto. È un problema che ho avuto in passato quando si ottengono due risultati abbastanza simili che si riduce all'errore di arrotondamento o qualcosa del genere.


19

PyProj presuppone che le tue coordinate siano in metri. Immagino che qualcosa che riguarda i piedi / metri sia la causa del problema.

Chiamando un'istanza della classe Proj con gli argomenti lon, lat convertirà lon / lat (in gradi) in coordinate di proiezione della mappa nativa x / y (in metri)

Se la parola chiave opzionale 'preserv_units' è True, le unità nelle coordinate di proiezione della mappa non sono obbligate ad essere metri.

http://pyproj.googlecode.com/svn/trunk/docs/pyproj.Proj-class.html

Le tue coordinate iniziali sono in piedi? Quando si caricano i dati in ArcMap quali unità utilizza la mappa?

Questo avvicina un po 'le coordinate:

p1 = Proj(init="epsg:3734")
#1 foot = 0.3048 meters
conv = 0.3048
print p1(739400.91 * conv,2339327.3 * conv,inverse=True)
(-87.3195533069909, 45.98605408134072)

Un problema simile può essere trovato qui .


Grazie mille. L'argomento preserv_units ha sicuramente risolto il problema, ma le coordinate sono ancora errate. @MerseyViking Questa risposta mi ha dato le coordinate corrette. Vorrei poter contrassegnare entrambe le risposte come risposta perché entrambe hanno aiutato.
Brian,

Bene, se la gente vota la risposta di @ geographika più della mia, andrà tutto bene :) Lieto che tutto abbia funzionato.
MerseyViking,

poiché il collegamento è interrotto, potrebbe essere utile mostrare che puoi scrivere:p1 = Proj( init="epsg:3734", preserve_units=True )
BenjaminGolder

4

In realtà stavo cercando di fare la stessa cosa, tranne con la griglia dell'aereo dello stato sud dell'OH e ho trovato la tua domanda. Stavo ottenendo risultati errati con 3735, ora ottengo risultati corretti con 3729. Mi aspetto che se passi da 3734 a 3728, otterrai i risultati corretti.

EPSG: 3728: NAD83 (NSRS2007) / Ohio North (ftUS) EPSG: 3729: NAD83 (NSRS2007) / Ohio South (ftUS) EPSG: 3734: NAD83 / Ohio North (ftUS) EPSG: 3735: NAD83 / Ohio South (ftUS)

Ho usato il tuo lat fornito, lungo e me ne vado di meno di un piede.

p2 = pyproj.Proj (init = "epsg: 3728", preserv_units = True)

p2 (-81.142311,41.688205)

(2339326.6558868014, 739401.4226131936)

vs 2339327.3, 739400.91

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.