aboutsummaryrefslogtreecommitdiff
path: root/docs/source/faq.rst
blob: 929386df727c3cb6ba67f65909cf16befd292ed2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
.. _faq:

******************************************************************************
FAQ
******************************************************************************

.. contents:: Contents
   :depth: 3
   :backlinks: none



Where can I find the list of projections and their arguments?
--------------------------------------------------------------------------------

There is no simple single location to find all the required information. The
!PostScript/PDF documents listed on the [http://trac.osgeo.org/proj/wiki main]
PROJ.4 page under documentation are the authoritative source but projections
and options are spread over several documents in a form more related to their
order of implementation than anything else.

The '''proj''' command itself can report the list of projections using the
'''-lp''' option, the list of ellipsoids with the '''-le''' option, the list of
units with the '''-lu''' option, and the list of built-in datums with the
'''-ld''' option.

The [http://www.remotesensing.org/geotiff/proj_list/ GeoTIFF Projections Pages]
include most of the common PROJ.4 projections, and a definition of the
projection specific options for each.

* How do I do datum shifts between NAD27 and NAD83?

While the '''nad2nad''' program can be used in some cases, the '''cs2cs''' is
now the preferred mechanism.   The following example demonstrates using the
default shift parameters for NAD27 to NAD83:


::

    % cs2cs +proj=latlong +datum=NAD27 +to +proj=latlong +datum=NAD83 -117 30


producing:

::

    117d0'2.901"W   30d0'0.407"N 0.000

In order for datum shifting to work properly the various grid shift files must
be available.  See below.  More details are available in the
[wiki:GenParms#nadgrids-GridBasedDatumAdjustments General Parameters] document.

How do I build/configure PROJ.4 to support datum shifting?
--------------------------------------------------------------------------------

After downloading and unpacking the PROJ.4 source, also download and unpack the
set of datum shift files.  See :ref:`download` for instructions how to fetch
and install these files

On Windows the extra nadshift target must be used.  For instance
``nmake /f makefile.vc nadshift`` in the ``proj/src`` directory.

A default build and install on Unix will normally build knowledge of the
directory where the grid shift files are installed into the PROJ.4 library
(usually /usr/local/share/proj).  On Windows the library is normally built
thinking that C:\PROJ\NAD is the installed directory for the grid shift files.
If the built in concept of the PROJ.4 data directory is incorrect, the ``PROJ_LIB``
environment can be defined with the correct directory.

How do I debug problems with NAD27/NAD83 datum shifting?
--------------------------------------------------------------------------------

1. Verify that you have the binary files (eg. /usr/local/share/proj/conus)
   installed on your system.  If not, see the previous question.
2. Try a datum shifting operation in relative isolation, such as with the cs2cs
   command listed above.  Do you get reasonable results?  If not it is likely
   the grid shift files aren't being found.  Perhaps you need to define
   PROJ_LIB?
3. The cs2cs command and the underlying pj_transform() API know how to do a
   grid shift as part of a more complex coordinate transformation; however, it
   is imperative that both the source and destination coordinate system be
   defined with appropriate datum information.  That means that implicitly or
   explicitly there must be a +datum= clause, a +nadgrids= clause or a
   +towgs84= clause.  For instance
   ``cs2cs +proj=latlong +datum=NAD27 +to +proj=latlong +ellps=WGS84`` won't work because defining the output
   coordinate system as using the ellipse WGS84 isn't the same as defining it
   to use the datum WGS84 (use +datum=WGS84).  If either the input or output
   are not identified as having a datum, the datum shifting (and ellipsoid
   change) step is just quietly skipped!
4. The ``PROJ_DEBUG`` environment can be defined (any value) to force extra output
   from the PROJ.4 library to stderr (the text console normally) with
   information on what data files are being opened and in some cases why a
   transformation fails.

   ::

        export PROJ_DEBUG=ON
        cs2cs ...


   .. note::
        ``PROJ_DEBUG`` support is not yet very mature in the PROJ.4 library.

5. The ``-v`` flag to cs2cs can be useful in establishing more detail on what
   parameters being used internally for a coordinate system.  This will include
   expanding the definition of +datum clause.

How do I use EPSG coordinate system codes with PROJ.4?
--------------------------------------------------------------------------------

There is somewhat imperfect translation between 2d geographic and projected
coordinate system codes and PROJ.4 descriptions of the coordinate system
available in the epsg definition file that normally lives in the proj/nad
directory.  If installed (it is installed by default on Unix), it is possible
to use EPSG numbers like this:

::


    % cs2cs -v +init=epsg:26711
    # ---- From Coordinate System ----
    #Universal Transverse Mercator (UTM)
    #       Cyl, Sph
    #       zone= south
    # +init=epsg:26711 +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m
    # +no_defs +nadgrids=conus,ntv1_can.dat
    #--- following specified but NOT used
    # +ellps=clrk66
    # ---- To Coordinate System ----
    #Lat/long (Geodetic)
    #
    # +proj=latlong +datum=NAD27 +ellps=clrk66 +nadgrids=conus,ntv1_can.dat

The proj/nad/epsg file can be browsed and searched in a text editor for
coordinate systems.  There are known to be problems with some coordinate
systems, and any coordinate systems with odd axes, a non-greenwich prime
meridian or other quirkyness are unlikely to work properly.  Caveat Emptor!

How do I use 3 parameter and 7 parameter datum shifting
--------------------------------------------------------------------------------

Datum shifts can be approximated with 3 and 7 parameter transformations.  Their
use is more fully described in the
[wiki:GenParms#towgs84-DatumtransformationtoWGS84 towgs84] parameter
discussion.

Does PROJ.4 work in different international numeric locales?
--------------------------------------------------------------------------------

No.  PROJ.4 makes extensive use of sprintf() and atof() internally to translate
numeric values.  If a locale is in effect that modifies formatting of numbers,
altering the role of commas and periods in numbers, then PROJ.4 will not work.
This problem is common in some European locales.

On unix-like platforms, this problem can be avoided by forcing the use of the
default numeric locale by setting the LC_NUMERIC environment variable to C.

::

    $ export LC_NUMERIC=C
    $ proj ...

.. note::

    NOTE: Per ticket #49, in PROJ 4.7.0 and later pj_init() operates with locale
    overriden to "C" to avoid most locale specific processing for applications
    using the API.  Command line tools may still have issues.

Changing Ellipsoid / Why can't I convert from WGS84 to Google Earth / Virtual Globe Mercator?
----------------------------------------------------------------------------------------------

The coordinate system definition for Google Earth, and Virtual Globe Mercator
is as follows, which uses a sphere as the earth model for the Mercator
projection.

::

    +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0
         +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs

But, if you do something like:

::

    cs2cs +proj=latlong +datum=WGS84
        +to +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0
                       +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs

to convert between WGS84 and mercator on the sphere there will be substantial
shifts in the Y mercator coordinates.  This is because internally cs2cs is
having to adjust the lat/long coordinates from being on the sphere to being on
the WGS84 datum which has a quite differently shaped ellipsoid.

In this case, and many other cases using spherical projections, the desired
approach is to actually treat the lat/long locations on the sphere as if they
were on WGS84 without any adjustments when using them for converting to other
coordinate systems.  The solution is to "trick" PROJ.4 into applying no change
to the lat/long values when going to (and through) WGS84.  This can be
accomplished by asking PROJ to use a null grid shift file for switching from
your spherical lat/long coordinates to WGS84.

::

    cs2cs +proj=latlong +datum=WGS84 \
        +to +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 \
        +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs

Note the strategic addition of +nadgrids=@null to the spherical projection
definition.

Similar issues apply with many other datasets distributed with projections
based on a spherical earth model - such as many NASA datasets.  This coordinate
system is now known by the EPSG code 3857 and has in the past been known as
EPSG:3785 and EPSG:900913.  When using this coordinate system with GDAL/OGR it
is helpful to include the +wktext so the exact proj.4 string will be preserved
in the WKT representation (otherwise key parameters like `+nadgrids=@null` will
be dropped):

::

    +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0
               +units=m +nadgrids=@null +wktext  +no_defs

Why do I get different results with 4.5.0 and 4.6.0?
--------------------------------------------------------------------------------

The default datum application behavior changed with the 4.6.0 release.  PROJ.4
will now only apply a datum shift if both the source and destination coordinate
system have valid datum shift information.

From the PROJ.4 4.6.0 Release Notes (in NEWS):
 * MAJOR: Rework pj_transform() to avoid applying ellipsoid to ellipsoid
   transformations as a datum shift when no datum info is available.


How do I calculate distances/directions on the surface of the earth?
--------------------------------------------------------------------------------

These are called geodesic calculations. There is a page about it here:
[wiki:GeodesicCalculations]

What is the HEALPix projection and how can I use it?
--------------------------------------------------------------------------------

.. figure::
    ../images/rhealpix.png
    :scale: 40%
    :align: left

The HEALPix projection is area preserving and can be used with a
spherical and ellipsoidal model.  It was initially developed for mapping cosmic
background microwave radiation.  The image below is the graphical
representation of the mapping and consists of eight isomorphic triangular
interrupted map graticules.  The north and south contains four in which
straight meridians converge polewards to a point and unequally spaced
horizontal parallels.  HEALPix provides a mapping in which points of equal
latitude and equally spaced longitude are mapped to points of equal latitude
and equally spaced longitude with the module of the polar interruptions. ||

To run a forward HEALPix projection on a unit sphere model, use the following command:

::

    proj +proj=healpix +lon_0=0 +a=1 -E <<EOF
    0 0
    EOF

Output of the above command.

::

    0 0 0.00 0.00

What is the rHEALPix projection and how can I use it?
--------------------------------------------------------------------------------

.. figure::
    ../images/healpix.png
    :scale: 40%
    :align: left

rHEALPix is a projection based on the HEALPix projection.  The implementation
of rHEALPix uses the HEALPix projection.  The rHEALPix combines the peaks of
the HEALPix into a square.  The square's position can be translated and rotated
across the x-axis which is a noval approach for the rHEALPix projection.  The
initial intention of using rHEALPix in the Spatial Computation Engine Science
Collaboration Environment (SCENZGrid).

To run a inverse rHEALPix projection on a WGS84 ellipsoidal model, use the following command:

::

    proj +proj=rhealpix -f '%.2f' -I +lon_0=0 +a=1 +ellps=WGS84 +npole=0 +spole=0 -E <<EOF
    0 0.7853981633974483
    EOF

Where spole and npole are integers from the range of 0 to 3 inclusive and represent the positions of the north polar and south polar squares.

Output of above command:

::

    0 0.7853981633974483 0.00 41.94

What options does proj.4 allow for the shape of the Earth (geodesy)?
--------------------------------------------------------------------------------

See https://github.com/OSGeo/proj.4/blob/master/src/pj_ellps.c
for possible ellipse options. For example, putting ``+ellps=WGS84`` uses
the ``WGS84`` Earth shape.

What if I want a spherical Earth?
--------------------------------------------------------------------------------

Use ``+ellps=sphere``.  See https://github.com/OSGeo/proj.4/blob/master/src/pj_ellps.c
for the radius used in this case.

How do I change the radius of the Earth?  How do I use proj.4 for work on Mars?
--------------------------------------------------------------------------------

You can supply explicit values for the semi minor and semi major axes instead
of using the symbolic "sphere" value.  Eg, if the radius were 2000000m:

::

     +proj=laea +lon_0=-40.000000 +lat_0=74.000000 +x_0=1000000 +y_0=1700000 +a=2000000 +b=2000000"

How do I do False Eastings and False Northings?
--------------------------------------------------------------------------------

Use ``+x_0`` and ``+y_0`` in the projection string.