Difference between revisions of "Proj4"
From SCECpedia
Jump to navigationJump to search| (16 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 | + | == 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 |
| − | + | <pre> | |
| − | + | -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 | ||
| + | </pre> | ||
| − | == Online | + | == Online Implementation == |
*[https://mygeodata.cloud/cs2cs/ CS2CS Online] | *[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 == | ||
| + | * 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 == | == 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