2009-03-04 11 views
7

Soy ingeniería inversa una aplicación de visualización de transporte. Necesito averiguar la latitud para el origen de su feed de datos. Específicamente lo que XY 0,0 es Las únicas fórmulas que he encontrado calculan la distancia entre dos puntos o la ubicación de un rumbo/distancia.¿Cómo convierto las coordenadas a latitud y longitud?

Utilizan el XY para mostrar un mapa en una aplicación muy antigua. El XY está en PIES.

que tienen estas coordenadas:

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 

tengo que averiguar cuál es la latitud y longitud de x=0, y=0 y cuál es la fórmula sería para averiguar esto.

Tienen dos fuentes de datos, una es más actual que la otra. El feed con la información más actual NO incluye latitud, longitud, sino solo XY. Estoy tratando de extrapolar en base a su información de datos menos actual, pero más informativa (incluye lat, lon) lo que 0,0 es así que puedo simplemente convertir sus coordenadas XY de alimentación de datos (más actual) a latitud y longitud.

+0

por qué sus valores de x no son negativos cuando se tiene la longitud negativa? –

+0

Esta es una pregunta muy confusa. ¿Las distancias X e Y son al norte y al sur del punto lat/lon dado? – slacy

+0

... o son las coordenadas lat/long del mapa, y x/y son coordenadas en algún mapa de bits enorme? – Jaanus

Respuesta

5

preguntarles qué sistema de coordenadas que están usando! (o si obtuviste el conjunto de datos de alguna base de datos, mira los metadatos del conjunto de datos y debería decírtelo. De lo contrario, sería escéptico de su valor)

Es muy probable que este sea uno de los state plane coordinate systems. Son para áreas localizadas de la tierra (algo así como UTM), y se utilizan con frecuencia para la topografía.

Puede utilizar CORPSCON (u otros programas de SIG; ExpertGPS va a hacer esto si tiene Option Pack SIG pero no es libre, me olvido de si GPSBabel hace la conversión.) Para convertir entre latitud/longitud y cualquiera de los Estatal de Coordenadas Planas sistemas. También necesitarás saber en qué datum están las coordenadas. WGS84 y NAD83 están muy cerca, pero NAD27 es diferente.

+0

+1 por ser específico de los EE. UU., Ya que el OP dio una duración de un mes en Seattle. La respuesta más general más votada sigue siendo buena ya que algunos de nosotros vivimos en otra parte;) – MarkJ

6

Hay muchos sistemas de coordenadas diferentes. Necesita averiguar cuáles son los sistemas de coordenadas para el lat/lon (por ejemplo, WGS84, etc.) y x/y, el primero (por ejemplo, algún tipo de sistema proyectado, probablemente).

Una vez que tenga esa información, hay varias herramientas que puede usar para realizar conversiones y manipulaciones. Un ejemplo (de una biblioteca de codificación de fuente abierta gratuita) es proj4.

+2

+1. Vale la pena mencionar que proj4 es fuente abierta gratuita. – MarkJ

+0

Buen punto - hecho. – luapyad

+0

Utilicé Proj.4 para algo como esto, muy recomendable. –

9

Si nos fijamos en las 2 primeras líneas de datos, y restar la latitud

47.7044 - 47.7741 = -0.06972 degrees 

Hay 60 millas náuticas por grado de latitud, y 6076 pies por milla marina.

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

restan valores de los dos 'Y':

260662 - 286031 = 25,409 ft 

Así que en efecto, que parece demostrar los valores X e Y son en pies.

Si toma cualquiera de los valores de Y, y convertir de nuevo a grados, por ejemplo

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

Así restando los valores de las latitudes de (47.70 y 47.77) le da muy cerca de exactamente 47 grados, que debería ser tu punto y = 0.

Para la longitud, un grado es de 60 millas náuticas en el ecuador y 0 millas en los polos. Entonces el número de millas por grado tiene que ser multiplicado por el coseno de la latitud, por lo que aproximadamente cos (47 grados) o .68. Entonces en vez de 6076 nm por grado, es aproximadamente 4145 nm.

Así que para los valores X,

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

Estos aumentan X los números a medida que aumenta la latitud (menos negativo), por lo que creo que debería añadir 5,1 grados, lo que significa el punto base x es aproximadamente

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

Esta es, aproximadamente, la posición de Spokane WA.

Así dado X = 1.280.532, Y = 211374

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

que es aproximadamente equivalente a los datos dados 47.57 y -122,29

La varianza puede ser debido a diferentes proyecciones - el X, el sistema Y puede ser una proyección "aplanada" en oposición a lat/long que se aplica a una proyección esférica? Por lo que es exacta aún puede necesitar matemáticas más avanzada o que la biblioteca de código abierto :)

Esta pregunta también puede ser útil, que contiene código para calcular grandes distancias sobre el arco:

Calculate distance between two latitude-longitude points? (Haversine formula)

+0

Esta función de devolución de la envolvente estará bien si el dominio no es muy grande y no necesita una precisión muy alta – MarkJ

+0

Sí, por ahora solo intento dar sentido a los datos. Se trata de matemática bastante básica, calculando distancias de círculo grandes. – MikeW

+2

Realmente no recomendaría este enfoque, es realmente sorprendente lo grandes que son los errores en el terreno si no se utiliza el cálculo adecuado. – Cruachan

0

Over here, I said this:

En Java, me gustaría utilizar la OpenMap converter por la expresión de un punto en el UTM a uno usando Latitud y longitud (suponiendo un elipsoide WGS-84 que se utiliza más comúnmente en GPS).

OpenMap es de código abierto y yo publicaría un enlace a su página de descarga, pero tienen una secuencia de comandos de licencia corta en el camino. Entonces, para evitar ser grosero, no tendré un vínculo profundo. En su lugar, vaya a their homepage y click Downloads.

Eso debería resolver su problema directamente o al menos apuntarle hacia un algoritmo útil.

0

He usado Brenor Brophey's gPoint PHP class para hacer esto en un par de ocasiones. Resultados sólidos, código GPL, y fácil de implementar. Recomendado.

1

Ya tiene buenos consejos sobre los sistemas de coordenadas, así que me limitaré a utilizar la biblioteca que he utilizado con gran éxito en el pasado.

Geotrans está aprobado para su uso por el Departamento de Defensa de los EE. UU., Por lo que puede estar seguro de que está bien probado. Se puede agarrar de aquí:

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

que podría no ser el enlace de la derecha como la página habla acerca de la aplicación, no la biblioteca. Espero que la biblioteca esté en el paquete de Desarrolladores. Los términos de licencia fueron muy liberales de memoria, pero asegúrese de revisar los términos antes de usarlos comercialmente.

Editar:

un interesante debate sobre la concesión de licencias Geotrans se puede encontrar aquí:

http://www.mail-archive.com/[email protected]/msg39263.html 
Cuestiones relacionadas