Domanda

Sto eseguendo il reverse engineering di un'app di visualizzazione dei trasporti. Devo scoprire la latitudine per l'origine del loro feed di dati. In particolare, cos'è XY 0,0. Le uniche formule che ho trovato calcolano la distanza tra due punti o la posizione di un rilevamento / distanza.

Usano l'XY per visualizzare una mappa in un'applicazione molto legacy. La XY è in PIEDI.

Ho queste coordinate:

47.70446615506108, -122.34469839507263: x=1268314, y=260622
47.774182540800616,-122.3412994737105:  x=1269649, y=286031
47.60024792289405, -122.32767331735774: x=1271767, y=222532
47.57012494413499, -122.29129609983679: x=1280532, y=211374

Devo scoprire qual è la latitudine e la longitudine di x = 0, y = 0 e quale sarebbe la formula per scoprirlo.

Hanno due feed di dati, uno è più attuale dell'altro. Il feed con i dati più recenti NON include latitudine, longitudine, ma solo XY. Sto cercando di estrapolare in base al loro feed di dati meno attuale, ma più informativo (include lat, lon) ciò che è 0,0, quindi posso semplicemente convertire le coordinate XY del loro feed di dati (più corrente) in latitudine e longitudine.

È stato utile?

Soluzione

Chiedi loro quale sistema di coordinate stanno usando! (o se hai ottenuto il set di dati da qualche database, guarda i metadati per il set di dati e dovrebbe dirti. Altrimenti sarei scettico sul suo valore)

Molto probabilmente questo è uno dei sistemi di coordinate del piano di stato . Sono per aree localizzate della terra (un po 'come UTM ) e sono spesso utilizzate per rilevamento.

Puoi utilizzare CORPSCON (o altri programmi GIS; ExpertGPS lo farà se si dispone del pacchetto opzionale GIS ma non è gratuito. Dimentico se GPSBabel esegue la conversione) per convertire tra lat / long e uno qualsiasi dei sistemi di coordinate del piano di stato. Dovrai anche sapere in quali datum sono presenti le coordinate. WGS84 e NAD83 sono molto vicino ma NAD27 è diverso.

Altri suggerimenti

Se guardi le prime 2 righe di dati e sottrai la latitudine

47.7044 - 47.7741 = -0.06972 degrees

Esistono 60 miglia nautiche per grado di latitudine e 6076 piedi per miglia nautiche.

-.06972 * 60 * 6076 = 25,415 ft

Sottraendo i due valori "Y":

260662 - 286031 = 25,409 ft

Quindi, in effetti, ciò sembra dimostrare che i valori X e Y sono in piedi.

Se prendi uno qualsiasi dei valori Y e lo converti in gradi, ad esempio

260622 ft / ( 6076 ft/nm ) / ( 60 nm/degree ) = .71
286031 ft / 6076 / 60 = .78

Sottrarre quei valori dalle latitudini di (47,70 e 47,77) ti dà molto vicino a esattamente 47 gradi, che dovrebbe essere il tuo punto y = 0.

Per la longitudine, un grado è di 60 miglia nautiche all'equatore e 0 miglia ai poli. Quindi il numero di miglia per grado deve essere moltiplicato per il coseno della latitudine, quindi circa cos (47 gradi), o .68. Quindi, invece di 6076 nm per grado, è di circa 4145 nm.

Quindi per i valori X,

1268314 ft / ( 4145 ft/nm ) / ( 60 nm/degree ) = 5.10 degrees
1269649 ft / 4145 / 60 = 5.10 degrees

Questi numeri X aumentano all'aumentare della latitudine (meno negativo), quindi credo che dovresti aggiungere 5,1 gradi, il che significa che il punto base X è circa

-122.3 + 5.1 = 117.2 West longitude for your x=0 point.

Questa è approssimativamente la posizione di Spokane WA.

Quindi dato X = 1280532, Y = 211374

Lat = 47 + ( 211374 / 6096 / 60 ) = 47.58
Lon = -117.2 - ( 1280532 / ( 6096 * cos(47.58)) / 60 ) = -122.35

Che è approssimativamente equivalente ai dati dati 47,57 e -122,29

La varianza può essere dovuta a diverse proiezioni - il sistema X, Y può essere un "appiattito" proiezione al contrario di lat / long che si applicano a una proiezione sferica? Quindi, per essere precisi, potresti aver bisogno di matematica più avanzata o di quella libreria open source :)

Questa domanda può anche essere utile, contiene codice per il calcolo di grandi distanze circolari:

Calcola distanza tra due latitudini -punti di longitudine? (Formula Haversine)

Esistono molti diversi sistemi di coordinate. Devi scoprire quali sono i sistemi di coordinate sia per il lat / lon (ad es. WGS84 ecc.) Sia per il primo / x (ad esempio una sorta di sistema proiettato probabilmente).

Una volta che hai queste informazioni ci sono diversi strumenti che puoi usare per fare conversioni e manipolazioni. Un esempio (di una libreria di codifica open source gratuita) è proj4 .

Hai già dei buoni consigli sui sistemi di coordinate, quindi entrerò nella libreria che ho usato con grande successo in passato.

Geotrans è approvato per l'uso dal Dipartimento della Difesa degli Stati Uniti, quindi puoi essere sicuro che sia ben testato. Puoi prenderlo da qui:

http://earth-info.nga.mil/GandG/geotrans/index.html

Potrebbe non essere il collegamento giusto in quanto quella pagina parla dell'applicazione, non della libreria. Mi aspetto che la libreria sia nel pacchetto Developers. I termini di licenza erano molto liberali dalla memoria, ma assicurati di rivederli prima di usarli commercialmente.

Modifica:

Una discussione interessante sulle licenze Geotrans è disponibile qui:

http://www.mail-archive.com/debian-legal@lists.debian.org/msg39263.html

Qui ho detto questo:

In Java, userei convertitore OpenMap da un'espressione di un punto in UTM a una che usa Latitudine e Longitudine (supponendo un ellissoide WGS-84 che è più comunemente usato nel GPS).

OpenMap è open source e vorrei pubblicare un link alla loro pagina di download, ma hanno un breve script di licenza sulla strada. Quindi, per evitare di essere scortese, non mi collegherò profondamente. Invece, vai a la loro homepage e fai clic su Download .

Ciò dovrebbe risolvere direttamente il tuo problema o almeno indirizzarti verso un utile algoritmo.

Ho usato classe PHP di gPoint di Brenor Brophey per fare questo un paio di occasioni. Risultati solidi, codice GPL e facile implementazione. Consigliato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top