I need to build a command line batch converter to read in data from a file that includes coordinates in state plane x,y in feet, the coordinate system used and the zone.
For example:
cs: nad83
zone: 402
x: 6929072.797
y: 2040185.208
If I go to an online converter like this one http://www.earthpoint.us/StatePlane.aspx I notice it makes me enter the zone as 4 digits 0402, but other than that it returns the decimal longitude and latitude (among many others) as I would expect.
I've installed the proj4 utility (on my Mac using brew install proj
) which seems to have a convenience script cs2cs
.
I've reviewed the documentation and searched online for examples but it is still not clear to me what the correct command line syntax is for replicating the same input/output as the online command line example above. From: nad803 zone 402 x & y To: lat lon decimal.
I see many examples that involve converting from utm, using a datum of nad83 but the zones are always from a different system of zone identifiers. I see zone examples of 10, but none like the 3 or 4 digit zone values I am seeing.
Does proj4 / cs2cs accept as an input the 4 digit state plane nad83 zone identifier?
My initial guess is that it does not and instead I must determine the series of options that constitute the parameters for that zone instead of the tool knowing how to look up what that should be.
So, I see here https://github.com/OSGeo/proj.4/blob/master/nad/nad83 that there is a list of what looks like input parameters for each nad83 zone. Terrific, I thought. Trying to make use of the values in this don't produce anything useful in the way I can think to use them.
For instance, using the same values above, I navigate to the entry for zone 402 here https://github.com/OSGeo/proj.4/blob/master/nad/nad83#L61 it provides
# 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 <>
So, thinking I've found what I need I try the following:
Not knowing how to tell cs2cs to use feet and to keep my test simple, I convert my values from above to meters so they become 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
and get the following results
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
What am I doing wrong here for my manual test of a command line equivalent to the online tool's conversion using the example above of known input values and desired output of decimal latlon?
Is there a simpler straight forward way to provide the nad83 state plane zone value (i.e. zone 402) to cs2cs and have it know the correct options to use?
Update:
Ok. Minutes after I posted this I realized that I need to pipe in the input coordinates instead of providing them as arguments and that the input units of feet were already included so I didn't need to convert to meters.
So...
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
yields
120d42'41.461"W 38d45'25.942"N 0.000
Which appear to be the correct values although they are reversed and not in decimal latlon.
I am still looking for how to get the values in the expected order and how to get them in the correct decimal format and not deg min sec...
Also, a significant question still remains for me... is there a simpler, more straight forward to provide the nad83 zone value to cs2cs and have it know to use the options defined here https://github.com/OSGeo/proj.4/blob/master/nad/nad83 instead of needing to build that lookup logic in my batch script? I'd prefer not to reinvent the wheel.
Update:
I realized that I merged two sources of my research into one and the input values I used above were actually from a different source and not the https://github.com/OSGeo/proj.4/blob/master/nad/nad83 zone. So that the life of this post for future readers is accurate, the entry found in that file for zone 402 at the cs2cs command line I've found so far is
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
But the questions in my previous update still remain.
Update:
To restate the pending question here from the above dialog so it is more clear:
Is there an abbreviated set of option(s) when using cs: nad83 zone:NNNN that can be used for
cs2cs
that is the equivalent to same options defined in https://github.com/OSGeo/proj.4/blob/master/nad/nad83 for the appropriate zone NNNN instead of needing to have a separate home grown script do the lookup and extract the options from that file.What option can be used to produce the lat lon output values in decimal format and in the preferred "lat" "lon" order?
Update:
Based on the accepted answer below, the missing piece I was looking for is to use +init=nad83:NNNN
and it will do the lookup for the correct options using the 3 or 4 digit zone.
Also, the output formatting and order are controlled with the -f
and -s
options so my final single entry test command line is
echo 6929072.797 2040185.208 | cs2cs +init=nad83:402 +units=us-ft +to -s -f '%.9f%' +proj=latlong