4 votos

¿Cuáles son las opciones correctas para convertir de plano de estado nad83 zona NNNN a lat lon en proj4/cs2cs?

Necesito construir un convertidor de lotes de línea de comandos para leer en los datos de un archivo que incluye coordenadas en el plano de estado x,y en pies, el sistema de coordenadas utilizado y la zona.

Por ejemplo:

cs: nad83
zone: 402
x: 6929072.797
y: 2040185.208

Si voy a un conversor en línea como éste http://www.earthpoint.us/StatePlane.aspx Observo que me hace introducir la zona como 4 dígitos 0402, pero aparte de eso me devuelve la longitud y latitud decimales (entre otras muchas) como era de esperar.

He instalado la utilidad proj4 (en mi Mac utilizando brew install proj ) que parece tener un script de conveniencia cs2cs .

He revisado la documentación y he buscado ejemplos en Internet, pero aún no tengo claro cuál es la sintaxis correcta de la línea de comandos para replicar la misma entrada/salida que en el ejemplo de línea de comandos en línea anterior. From: nad803 zone 402 x & y To: lat lon decimal.

Veo muchos ejemplos que implican la conversión de utm utilizando un dato de nad83 pero las zonas son siempre de un sistema diferente de identificadores de zona. Veo ejemplos de zonas de 10, pero ninguno como los valores de zona de 3 o 4 dígitos que estoy viendo.

¿Acepta proj4 / cs2cs como entrada el identificador de zona nad83 de 4 dígitos del plano de estado?

Mi conjetura inicial es que no lo hace y en su lugar debo determinar la serie de opciones que constituyen los parámetros para esa zona en lugar de que la herramienta sepa buscar cuál debe ser.

Entonces, veo aquí https://github.com/OSGeo/proj.4/blob/master/nad/nad83 que hay una lista de lo que parecen parámetros de entrada para cada zona nad83. Estupendo, pensé. Tratando de hacer uso de los valores en este no producen nada útil en la forma en que puedo pensar para usarlos.

Por ejemplo, utilizando los mismos valores anteriores, navego hasta la entrada de la zona 402 aquí https://github.com/OSGeo/proj.4/blob/master/nad/nad83#L61 proporciona

# 402: california ii: nad83
<402> proj=lcc  datum=NAD83
lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40
x_0=2000000 y_0=500000
no_defs <>

Así que, pensando que he encontrado lo que necesito, pruebo lo siguiente:

Como no sé cómo decirle a cs2cs que utilice pies y para simplificar mi prueba, convierto mis valores de arriba a metros, de modo que se convierten en 2111981.3885256 621848.4513984

cs2cs +proj=lcc  +a=6378137 +es=.0066943800229 +lon_0=-122 +lat_1=39d50 +lat_2=38d20 +lat_0=37d40 +x_0=2000000 +y_0=500000 +no_defs +to +proj=latlong 2111981.3885256 621848.4513984

y obtendrá los siguientes resultados

Rel. 4.9.3, 15 August 2016
<cs2cs>: 
Sys errno: 2: <system mess. texts unavail.>
2119738.500672
Rel. 4.9.3, 15 August 2016
<cs2cs>: 
Sys errno: 2: <system mess. texts unavail.>
626276.927784

¿Qué estoy haciendo mal aquí para mi prueba manual de una línea de comandos equivalente a la conversión de la herramienta en línea utilizando el ejemplo anterior de valores de entrada conocidos y la salida deseada de latlón decimal?

¿Existe alguna forma más sencilla de proporcionar el valor de zona del plano de estado nad83 (es decir, la zona 402) a cs2cs y hacer que conozca las opciones correctas que debe utilizar?

Actualización:

De acuerdo. Minutos después de publicar esto me di cuenta de que tenía que introducir las coordenadas de entrada en lugar de proporcionarlas como argumentos y que las unidades de entrada de pies ya estaban incluidas por lo que no necesitaba convertir a metros.

Así que...

echo 6929072.797 2040185.208 | cs2cs +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +datum=NAD83 +units=us-ft +no_defs +to +proj=latlong

produce

120d42'41.461 "O 38d45'25.942 "N 0.000

Que parecen ser los valores correctos aunque están invertidos y no en latlón decimal.

Sigo buscando como obtener los valores en el orden esperado y como obtenerlos en el formato decimal correcto y no deg min seg....

Además, me queda una duda importante... ¿hay alguna forma más sencilla y directa de proporcionar el valor de la zona nad83 a cs2cs y que sepa utilizar las opciones definidas aquí? https://github.com/OSGeo/proj.4/blob/master/nad/nad83 en lugar de tener que crear esa lógica de búsqueda en mi secuencia de comandos por lotes? Preferiría no reinventar la rueda.

Actualización:

Me di cuenta de que fusioné dos fuentes de mi investigación en una y los valores de entrada que utilicé anteriormente eran en realidad de una fuente diferente y no de la https://github.com/OSGeo/proj.4/blob/master/nad/nad83 zona. Para que la vida de este post para los futuros lectores es exacta, la entrada que se encuentra en ese archivo para la zona 402 en la línea de comandos cs2cs que he encontrado hasta ahora es

echo 6929072.797 2040185.208 | cs2cs +proj=lcc  +a=6378137 +es=.0066943800229 +lon_0=-122 +lat_1=39d50 +lat_2=38d20 +lat_0=37d40 +x_0=2000000 +y_0=500000 +units=us-ft +no_defs +to +proj=latlong

Pero las preguntas de mi anterior actualización siguen en pie.

Actualización:

Replantear aquí la pregunta pendiente del diálogo anterior para que quede más claro:

  1. ¿Existe un conjunto abreviado de opción(es) cuando se utiliza cs: nad83 zona:NNNN que puede utilizarse para cs2cs que equivale a mismas opciones definidas en https://github.com/OSGeo/proj.4/blob/master/nad/nad83 para la zona apropiada NNNN en lugar de tener que tener un script haga la búsqueda y extraiga las opciones de ese archivo.

  2. ¿Qué opción se puede utilizar para producir los valores de salida lat lon en decimal y en el orden "lat" "lon" preferido?

Actualización:

Basándome en la respuesta aceptada a continuación, la pieza que me faltaba es utilizar +init=nad83:NNNN y hará la búsqueda de las opciones correctas utilizando la zona de 3 o 4 dígitos.

Además, el formato y el orden de salida se controlan con la función -f y -s por lo que mi línea de comandos de prueba de entrada única final es

echo 6929072.797 2040185.208 | cs2cs +init=nad83:402 +units=us-ft +to -s -f '%.9f%' +proj=latlong

2voto

SpliFF Puntos 214

A mí me funciona así:

Coloca las coordenadas en un archivo llamado spcs-in.txt :

6929072.797 2040185.208

Ponga la línea de comandos en un archivo por lotes spcs2nad83.bat :

echo nad83:402 >out.txt
cs2cs +init=nad83:402 +units=us-ft +to +init=epsg:4269 -f "%%.9f" spcs-in.txt >>out.txt
echo epsg:2226>>out.txt
cs2cs +init=epsg:2226 +to +init=epsg:4269 -f "%%.9f" spcs-in.txt >>out.txt

Ejecutarlo en un OSGEO4W Shell o SDKshell de gisinternals para obtener resultados idénticos:

nad83:402 
-120.711517001  38.757206000 0.000000000
epsg:2226
-120.711517002  38.757205999 0.000000000

lon-lat es el orden preferido en Proj.4, así que no hay solución para eso pero se puede anular con -s .

0 votos

Muchas gracias. - que +init=nad83:402 ¡parte era exactamente lo que estaba buscando! Ahora puedo hacerlo dinámico basado en la zona y no tener que saber de antemano manualmente cuál es la zona. Además, acabo de encontrar en la página de manual que el -s se puede utilizar para invertir el orden de la salida para obtener lat,lon. Todo ha quedado muy bien. Gracias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X