Difference between revisions of "Proj4"
From SCECpedia
Jump to navigationJump to search(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Coordinate system conversions are needed for several SCEC projects. | Coordinate system conversions are needed for several SCEC projects. | ||
− | == Example Conversions == | + | == Example Conversion from UTM to X/Y/Z Coordinates == |
+ | * Define origin point for X/Y/Z coordinates | ||
+ | * translate UTM to X/Y/Z | ||
+ | |||
+ | == Example Conversions Lat/Lon to UTM == | ||
Converting WGS84 to UTM Zone 11 using cs2cs | Converting WGS84 to UTM Zone 11 using cs2cs | ||
Line 19: | Line 23: | ||
407650.40 3762606.66 0.00 | 407650.40 3762606.66 0.00 | ||
</pre> | </pre> | ||
+ | |||
+ | == Online Implementation == | ||
+ | *[https://mygeodata.cloud/cs2cs/ CS2CS Online] | ||
+ | |||
+ | == Example Python Code == | ||
+ | |||
+ | <pre> | ||
+ | -bash-4.2$ more test_pyproj.py | ||
+ | #!/usr/bin/env python | ||
+ | # | ||
+ | # Name: test_pyproj | ||
+ | # Usage: | ||
+ | # Simple example showing how to use pyproj to convert from lat/lon to UTM zone 11 | ||
+ | # | ||
+ | import pyproj | ||
+ | |||
+ | #define a projection with Proj4 Notation | ||
+ | latlon_string="+proj=latlong +datum=WGS84 +ellps=WGS84" | ||
+ | utm_string="+proj=utm +zone=11 +datum=WGS84 +ellps=WGS84" | ||
+ | |||
+ | latlon= pyproj.Proj(latlon_string) | ||
+ | utm_s= pyproj.Proj(utm_string) | ||
+ | |||
+ | vals=[-118.0,34.0] | ||
+ | x,y= pyproj.transform(latlon,utm_s,vals[0],vals[1]) | ||
+ | print "UTM E: ", x | ||
+ | print "UTM N: ", y | ||
+ | </pre> | ||
+ | |||
+ | == Example C Code and Makefile == | ||
+ | |||
+ | <pre> | ||
+ | #include <proj_api.h> | ||
+ | |||
+ | main(int argc, char **argv) { | ||
+ | projPJ pj_merc, pj_latlong; | ||
+ | double x, y; | ||
+ | int p; | ||
+ | |||
+ | if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) ) | ||
+ | exit(1); | ||
+ | if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) ) | ||
+ | exit(1); | ||
+ | while (scanf("%lf %lf", &x, &y) == 2) { | ||
+ | x *= DEG_TO_RAD; | ||
+ | y *= DEG_TO_RAD; | ||
+ | p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL ); | ||
+ | printf("%.2f\t%.2f\n", x, y); | ||
+ | } | ||
+ | exit(0); | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | test_proj4.o: test_proj4.c | ||
+ | gcc -o test_proj4 -lproj -L/home/scec-00/maechlin/workspace/proj4/lib -I/home/scec-00/maechlin/workspace/proj4/include test_ | ||
+ | proj4.c | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == FAQ == | ||
+ | *[http://proj.maptools.org/faq.html Online FAQ] | ||
+ | * what is the third return parameter in UTM values | ||
+ | **input lat/long can include elevation. Third returned UTM param is elevation. When no lat/lon elevation used, utm return elev is 0.0 | ||
+ | * What is the +no_defs parameters? | ||
+ | **"The "no_defs" item ensures that no defaults are read from the defaults files. Sometimes they cause suprising problems." http://lists.osgeo.org/pipermail/mapserver-users/2003-November/046863.html | ||
== Building Proj4 == | == Building Proj4 == | ||
− | + | * Proj4 built on Centos using the ./configure make, make install. Since we are building on a shared cluster, we needed to ./configure --prefix=/user/scec-00/maechlin/workspace/proj4 (installation path to local directory) | |
− | Since we are building on a shared cluster, we needed to ./configure -- | + | *Installation of proj4 on Mac (high sierra) failed. |
− | + | *Installation of current proj4 on USC HPC succeeded. | |
− | + | *Didn't try installing pyproj on Mac. It can use either installed proj4, or try to build its own | |
− | * | + | *Used conda install pyproj on Anaconda 2 instance on USC HPC |
== Online Documentation == | == Online Documentation == | ||
+ | *[http://gmt.soest.hawaii.edu/projects/gmt/wiki/PROJ4 Proj4 and GMT] | ||
*[http://hypocenter.usc.edu/research/ucvm/17.3.0/docs/developers_api_data_structures.html UCVM-P Example Strings] | *[http://hypocenter.usc.edu/research/ucvm/17.3.0/docs/developers_api_data_structures.html UCVM-P Example Strings] | ||
*[https://en.wikibooks.org/wiki/PROJ.4 Proj4 wikibooks] | *[https://en.wikibooks.org/wiki/PROJ.4 Proj4 wikibooks] | ||
*[http://www.spatialguru.com/converting-decimal-degree-coordinates/ Defines return paramater elevation] | *[http://www.spatialguru.com/converting-decimal-degree-coordinates/ Defines return paramater elevation] | ||
− | *[http://all-geo.org/volcan01010/2012/11/change-coordinates-with-pyproj/ | + | *[http://all-geo.org/volcan01010/2012/11/change-coordinates-with-pyproj/ Python Examples] |
+ | *[http://geoinformaticstutorial.blogspot.com/2014/06/converting-coordinates-between-map.html More Python Examples] | ||
*[https://stackoverflow.com/questions/24950614/abnormal-output-when-using-proj4-to-transform-latlong-to-utm C example] | *[https://stackoverflow.com/questions/24950614/abnormal-output-when-using-proj4-to-transform-latlong-to-utm C example] | ||
+ | *[http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026 More C Examples] | ||
+ | *[http://tagis.dep.wv.gov/convert/ UTM Discussion] | ||
== Downloads and Documentation == | == Downloads and Documentation == |
Latest revision as of 18:30, 9 October 2017
Coordinate system conversions are needed for several SCEC projects.
Contents
Example Conversion from UTM to X/Y/Z Coordinates
- Define origin point for X/Y/Z coordinates
- translate UTM to X/Y/Z
Example Conversions Lat/Lon to UTM
Converting WGS84 to UTM Zone 11 using cs2cs
- cs2cs -v +proj=latlong +datum=WGS84 +to +proj=utm +zone=11 +datum=WGS84
-bash-4.2$ cs2cs -v +proj=latlong +datum=WGS84 +to +proj=utm +zone=11 +datum=WGS84 # ---- From Coordinate System ---- #Lat/long (Geodetic alias) # # +proj=latlong +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 # ---- To Coordinate System ---- #Universal Transverse Mercator (UTM) # Cyl, Sph # zone= south # +proj=utm +zone=11 +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 -118.00 34.00 407650.40 3762606.66 0.00
Online Implementation
Example Python Code
-bash-4.2$ more test_pyproj.py #!/usr/bin/env python # # Name: test_pyproj # Usage: # Simple example showing how to use pyproj to convert from lat/lon to UTM zone 11 # import pyproj #define a projection with Proj4 Notation latlon_string="+proj=latlong +datum=WGS84 +ellps=WGS84" utm_string="+proj=utm +zone=11 +datum=WGS84 +ellps=WGS84" latlon= pyproj.Proj(latlon_string) utm_s= pyproj.Proj(utm_string) vals=[-118.0,34.0] x,y= pyproj.transform(latlon,utm_s,vals[0],vals[1]) print "UTM E: ", x print "UTM N: ", y
Example C Code and Makefile
#include <proj_api.h> main(int argc, char **argv) { projPJ pj_merc, pj_latlong; double x, y; int p; if (!(pj_merc = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33")) ) exit(1); if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=clrk66")) ) exit(1); while (scanf("%lf %lf", &x, &y) == 2) { x *= DEG_TO_RAD; y *= DEG_TO_RAD; p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL ); printf("%.2f\t%.2f\n", x, y); } exit(0); }
test_proj4.o: test_proj4.c gcc -o test_proj4 -lproj -L/home/scec-00/maechlin/workspace/proj4/lib -I/home/scec-00/maechlin/workspace/proj4/include test_ proj4.c
FAQ
- Online FAQ
- what is the third return parameter in UTM values
- input lat/long can include elevation. Third returned UTM param is elevation. When no lat/lon elevation used, utm return elev is 0.0
- What is the +no_defs parameters?
- "The "no_defs" item ensures that no defaults are read from the defaults files. Sometimes they cause suprising problems." http://lists.osgeo.org/pipermail/mapserver-users/2003-November/046863.html
Building Proj4
- Proj4 built on Centos using the ./configure make, make install. Since we are building on a shared cluster, we needed to ./configure --prefix=/user/scec-00/maechlin/workspace/proj4 (installation path to local directory)
- Installation of proj4 on Mac (high sierra) failed.
- Installation of current proj4 on USC HPC succeeded.
- Didn't try installing pyproj on Mac. It can use either installed proj4, or try to build its own
- Used conda install pyproj on Anaconda 2 instance on USC HPC
Online Documentation
- Proj4 and GMT
- UCVM-P Example Strings
- Proj4 wikibooks
- Defines return paramater elevation
- Python Examples
- More Python Examples
- C example
- More C Examples
- UTM Discussion