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
|
## TEST JSON ###########################################################
This is the testing framework that uses JSON formated files that tests
PROJ.4 using Geospatial Integrity of Geoscience Sofware (GIGS) calculations.
This could be used as a framework for testing projections from other
sources.
For more information about the Geospatial Integrity of Geoscience Software
(GIGS) at
http://www.iogp.org/Geomatics#2521115-gigs
## Geospatial Integrity of Geoscience Software License #################
The disclaimer and copyright **only** applies to JSON files that originate
from GIGS tests, which is a reformatting material provided by the
International Association of Oil & Gas Producers.
**Disclaimer**
Whilst every effort has been made to ensure the accuracy of the information contained in this publication,
neither the OGP nor any of its members past present or future warrants its accuracy or will, regardless
of its or their negligence, assume liability for any foreseeable or unforeseeable use made thereof, which
liability is hereby excluded. Consequently, such use is at the recipient’s own risk on the basis that any use
by the recipient constitutes agreement to the terms of this disclaimer. The recipient is obliged to inform
any subsequent recipient of such terms.
This document may provide guidance supplemental to the requirements of local legislation. Nothing
herein, however, is intended to replace, amend, supersede or otherwise depart from such requirements. In
the event of any conflict or contradiction between the provisions of this document and local legislation,
applicable laws shall prevail.
**Copyright notice**
The contents of these pages are © The International Association of Oil & Gas Producers. Permission
is given to reproduce this report in whole or in part provided (i) that the copyright of OGP and (ii)
the source are acknowledged. All other rights are reserved.” Any other use requires the prior written
permission of the OGP.
These Terms and Conditions shall be governed by and construed in accordance with the laws of
England and Wales. Disputes arising here from shall be exclusively subject to the jurisdiction of the
courts of England and Wales.
## INSTALLING ##########################################################
* Requires: Python 2.7 or 3.3+
* pyproj (optional but highly recommended), this speeds up tests, makes
results more precise but has the trade-off of making installation a
little more complicated.
### Installing pyproj ##################################################
1) Install `pip` (usually `pip3`) if not installed, should already be installed on new Python
versions (Python 3 >=3.4) or if using a virtual environment for python.
see https://pip.pypa.io/en/stable/installing/
* **Note**: if you have Python 2.x and 3.x installed, `pip3` is for Python 3.x.
`pip` could be an alias for either one.
2) Upgrade `pip` (possibly not needed)
https://pip.pypa.io/en/stable/installing/#upgrading-pip
3) Install pyproj
* requires a C/C++ compiler be usuable by python
* repository version requires Cython to be installed, releases do not require this
```
$ pip install cython
```
* install latest release
* set PROJ_DIR environment variable to an installed version of PROJ4
library. This should have the directories include/ lib/ &
share/proj/ underneath it.
* installing on Linux (default ./configure settings for PROJ.4)
```
$ PROJ_DIR=/usr/local pip install pyproj
```
## Running Tests #######################################################
When calling test_json.py it defaults to using pyproj driver.
```
$ python test_json.py 5*.json
```
There is a driver to directly use cs2cs instead of installing pyproj, but
it is much slower and not recommended.
Here is how you run the cs2cs driver:
```
$ python test_json.py -d cs2cs -e path/to/repo/bin/cs2cs 5201.json
```
## GIGS Test ###########################################################
Tests that were meant to test for out of grid errors were removed from
testing. PROJ.4 cs2cs provides coordinates seemingly without warnings
or errors.
### Drastic Tolerance Errors ###########################################
These are errors that might indicate the wrong projection is being used,
wrong parameters are being used in the projection, or problems with the
projection itself. It could point to problems with the provided model.
* 5101 part 4 - Transverse Mercator
- EPSG code will need to be redefined to make sure that etmerc version
is used, should be done before next release (4.9.3 / 4.10.0 ?)
- Temporarily use test "5101.4-jhs-etmerc.json", perhaps remove file
when etmerc/tmerc aliasing issue has been fixed.
* 5102 part 2 - Lambert Conic Conformal (1SP)
- This one seems to have some problems.
* 5105 part 1 - Oblique Mercator (variant B)
- There are some drastically different answers.
### Slight Tolerance Errors ############################################
These tests have results with rounding errors that are slightly out of
tolerance. This could be due to a lack of precision in the JSON file
or due to the formula's precision. Most of these tests fail with some
point in testing 1,000 round trip coordinate conversions. A few of these
might require a little bit of tuning with cs2cs. There are some rather
concerning differences between Python 2.7 and Python 3.4 in testing, which
needs to be pinpointed.
* 5101 part 1 - Transverse Mercator
- roundtrip tests fail with very slight tolerance issues
* 5104 - Oblique stereographic
- roundtrip tests fail with very slight tolerance issues
* 5105 part 2 - Oblique Mercator (variant B)
- roundtrip tests fail with tolerance issues
* 5106 - Hotline Oblique Mercator (variant A)
- roundtrip tests fail with very slight tolerance issues
* 5108 - Cassini-Soldner
- roundtrip tests seem to accumulate errors
* 5110 - Lambert Azimuthal Equal Area
- roundtrip tests have some slight errors
* 5111 part 1 - Mercator (variant A)
- roundtrip tests fail with very slight tolerance issues
* 5111 part 2 - Mercator (variant A)
* 5203 part 1 - Position Vector 7-parameter transformation
- most seem to be rounding errors. Some results cross longitude
line 180/-180
* 5204 part 1 - Coordinate Frame 7-parameter transformation
- most seem to be rounding errors. Some results cross longitude
line 180/-180
* 5205 part 1 - Molodensky-Badekas 10-parameter transformation
- most seem to be rounding errors. Some results cross longitude
line 180/-180
* 5206 - NADCON transformation
* 5207 parts 1 & 2 - NTv2 transformation
### Other Issues with Tests ############################################
* 5201 - Geographic Geocentric conversions
- EPSG code 4979, does not exist in PROJ.4 substituted EPGS code 4326.
- The test passes.
* 5206 and 5207 parts 1 & 2 - NADCON Transformation and NTv2 Transformation
- These tests have cases that are out of grid, which have been omitted.
The GIGS tests expectations, "[n]ote 1: This location is out of
transformation grid area - the attempted transformation should fail
and application notify user."
## Passing Tests #######################################################
* 5101 part 2 - Transverse Mercator
* 5101 part 3 - Transverse Mercator
* 5102 part 1 - Lambert Conic Conformal (1SP)
* 5103 part 1 - Lambert Conic Conformal (2SP)
* 5103 part 2 - Lambert Conic Conformal (2SP)
* 5103 part 3 - Lambert Conic Conformal (2SP)
* 5107 - American Polyconic
* 5109 - Albers Equal Area
* 5112 - Mercator (variant B)
* 5113 - Transverse Mercator (South Oriented)
* 5208 - Longitude Rotation
## Benchmarks ##########################################################
Benchmarks were made using Micah Cochran's circa 2008 Desktop computer
using LXLE Ubuntu Linux 14.04. The pattern "5*.json" was used for testing.
This is the computer time used for the process, not the actual run time.
* pyproj driver testing 5 seconds
* cs2cs driver testing - using Python 2.7.6 - 4 min 36 seconds
* cs2cs driver testing - using Python 3.4.3 - 6 min 23 seconds
## Random Notes #######################################################
Roundtrip testing has been fixed, it now checks both resulting coordinates.
Some tests in the 5100/5200 series have not been converted. The most of
the 3d coordinate test in the 5200 series have not been converted.
This is designed to use decimal degrees over Sexagesimal degree or degree
minutes seconds, which is a decision that might need to be revisited.
Decimal degrees were chosen because it was easier interface with the
Python pyproj library. This might be the cause of some testing tolerance
issues.
pyproj and cs2cs drivers do not quite work the same. Different tests
fail depending on the driver.
Other drivers could be written to interface with other code.
There could be some precision issues with cs2cs, perhaps some adjustment
of the "-f format" parameter could help. This could be done based either
on expected output or extra info from the JSON file.
A TODO list is located source code.
Conversion tests the output coordinate, causing 2 test results per
coordinate pair.
Roundtrip tests the input coordinate and the output coordinate of each
pair, causing 4 test results per coordinate pair.
|