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:
-
¿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. -
¿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