summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron McCarthy <aaron.mccarthy@nokia.com>2011-09-09 15:12:43 +1000
committerAaron McCarthy <aaron.mccarthy@nokia.com>2011-09-09 15:24:34 +1000
commit5f42e961560a54a2d3978b42478cd90bc8c6927d (patch)
treeac23cb069e85786fbae0d1c11731330ea697e321
parent3b55bbd1fbac94def3718133db574823948c3b01 (diff)
downloadqtlocation-5f42e961560a54a2d3978b42478cd90bc8c6927d.tar.gz
Squashed commit of the following:
commit 142bae21d2c938ea29ebfaf8cafd5b1791ae1f6e Merge: 1eac7c4 3b55bbd Author: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri Sep 9 12:41:26 2011 +1000 Merge remote branch 'origin/places' into maps-merge Conflicts: examples/declarative/flickr/qmllocationflickr.cpp examples/declarative/landmarkmap/landmarkmap.pro examples/declarative/landmarkmap/qmllandmarkmap.cpp examples/declarative/mapviewer/mapviewer.pro examples/declarative/mapviewer/qmlmapviewer.cpp examples/examples.pro src/3rdparty/proj.pri src/imports/location/location.cpp src/imports/location/location.pro src/imports/location/qdeclarativegeomapcircleobject.cpp src/imports/location/qdeclarativegeomapcircleobject_p.h src/imports/location/qdeclarativegeomapgroupobject.cpp src/imports/location/qdeclarativegeomapgroupobject_p.h src/imports/location/qdeclarativegeomapmousearea_p.h src/imports/location/qdeclarativegeomapobject.cpp src/imports/location/qdeclarativegeomapobject_p.h src/imports/location/qdeclarativegeomapobjectborder.cpp src/imports/location/qdeclarativegeomappixmapobject.cpp src/imports/location/qdeclarativegeomappixmapobject_p.h src/imports/location/qdeclarativegeomappolygonobject.cpp src/imports/location/qdeclarativegeomappolygonobject_p.h src/imports/location/qdeclarativegeomappolylineobject.cpp src/imports/location/qdeclarativegeomappolylineobject_p.h src/imports/location/qdeclarativegeomaprectangleobject.cpp src/imports/location/qdeclarativegeomaprectangleobject_p.h src/imports/location/qdeclarativegeomaprouteobject.cpp src/imports/location/qdeclarativegeomaprouteobject_p.h src/imports/location/qdeclarativegeomaptextobject.cpp src/imports/location/qdeclarativegeomaptextobject_p.h src/imports/location/qdeclarativegeoserviceprovider_p.h src/imports/location/qdeclarativegraphicsgeomap.cpp src/imports/location/qdeclarativegraphicsgeomap_p.h src/imports/location/qdeclarativelandmarkcategorymodel_p.h src/imports/location/qdeclarativelandmarkfilters_p.h src/imports/location/qdeclarativelandmarkmodel_p.h src/location/location.pro src/location/maps/qgeomapcircleobject.cpp src/location/maps/qgeomapcircleobject.h src/location/maps/qgeomapcircleobject_p.h src/location/maps/qgeomapcustomobject.cpp src/location/maps/qgeomapcustomobject.h src/location/maps/qgeomapcustomobject_p.h src/location/maps/qgeomapdata.cpp src/location/maps/qgeomapdata.h src/location/maps/qgeomapgroupobject.cpp src/location/maps/qgeomapgroupobject.h src/location/maps/qgeomapobject.cpp src/location/maps/qgeomapobject.h src/location/maps/qgeomapobjectengine_p.cpp src/location/maps/qgeomapobjectengine_p.h src/location/maps/qgeomapobjectinfo.cpp src/location/maps/qgeomapoverlay.cpp src/location/maps/qgeomappingmanagerengine.cpp src/location/maps/qgeomappixmapobject.cpp src/location/maps/qgeomappixmapobject.h src/location/maps/qgeomappixmapobject_p.h src/location/maps/qgeomappolygonobject.cpp src/location/maps/qgeomappolygonobject.h src/location/maps/qgeomappolygonobject_p.h src/location/maps/qgeomappolylineobject.cpp src/location/maps/qgeomappolylineobject.h src/location/maps/qgeomappolylineobject_p.h src/location/maps/qgeomaprectangleobject.cpp src/location/maps/qgeomaprectangleobject.h src/location/maps/qgeomaprectangleobject_p.h src/location/maps/qgeomaprouteobject.cpp src/location/maps/qgeomaprouteobject_p.h src/location/maps/qgeomaptextobject.cpp src/location/maps/qgeomaptextobject.h src/location/maps/qgeomaptextobject_p.h src/location/maps/qgraphicsgeomap.cpp src/location/maps/qgraphicsgeomap.h src/location/maps/tiled/makepoly_p.h src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h src/location/maps/tiled/qgeotiledmapdata.cpp src/location/maps/tiled/qgeotiledmapdata.h src/location/maps/tiled/qgeotiledmapdata_p.h src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmapobjectinfo_p.h src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp src/location/maps/tiled/qgeotiledmappingmanagerengine.h src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmaprequest.cpp src/location/maps/tiled/qgeotiledmaprequest_p.h src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp src/location/mapsgl/cameradata.h src/location/mapsgl/map.h src/location/mapsgl/map2d/projection2d_p.h src/location/mapsgl/map3d/map3d_p.h src/location/mapsgl/map3d/spheregeometry_p.h src/location/mapsgl/map3d/viewport.cpp src/location/mapsgl/map3d/viewport_p.h src/location/mapsgl/map3d/viewportcamera_p.h src/location/mapsgl/map3d/viewporttiles_p.h src/location/mapsgl/map3d/viewporttiles_p_p.h src/location/mapsgl/map3d/viewporttilesnew.cpp src/location/mapsgl/map3d/viewporttilesold_p.h src/location/mapsgl/mapitem.h src/location/mapsgl/mapsphere_p.h src/location/mapsgl/projection_p.h src/location/mapsgl/tile.cpp src/location/mapsgl/tile.h src/location/mapsgl/tilecamera.h src/location/mapsgl/tilespec.cpp src/location/mapsgl/tilespec.h src/location/projwrapper_p.cpp src/location/projwrapper_p.h src/plugins/geoservices/nokia/nokia.pro src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp tests/auto/auto.pro tests/auto/qgeocodingmanagerplugins/qgeocodingmanagerplugins.pro tests/auto/testplugin/qgeosearchmanagerplugins.pro tests/auto/testplugin/testplugin.pro tests/declarativetestplugin/location.pro tests/declarativetestplugin/locationtest.cpp tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h tests/tests.pro Change-Id: I23e2a324ad64ea1abe026c72569d578dcc664e75 commit 1eac7c46f40a1007e11841d7b9fc7934da3e3f45 Author: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri Sep 9 10:37:30 2011 +1000 Rename project files. Change-Id: Idc1d7f3fcf4f5fdbf38af3842928cdfada1b7ee8 commit db2d91abf29e52236358e67dabbabbf4568f5d84 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 20:53:35 2011 +1000 Revert "temp check" This reverts commit 82f1370d2d29bfb95663a740d2b566fa22093388. commit 82f1370d2d29bfb95663a740d2b566fa22093388 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 20:40:42 2011 +1000 temp check Change-Id: I1d497a44d9422dd9b08554ccaad80ac80a0b8bae commit 19276939b4b56281e8b5f5f418afa76383ff91b9 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 20:20:51 2011 +1000 clear color more obvious Change-Id: I7609c4218a8d5112d7ff361b4b5515d418770364 commit 4a179d3a08e07ac3e32e0c2f555ddb2eed21b636 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 19:53:55 2011 +1000 more qdebugs Change-Id: If1cede53f8d38e799e7da4ffee92e3dbb93af764 commit 3e63c9f5fe1062294734082ec4fd94c5badf0213 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 19:11:47 2011 +1000 qdebugs more visible Change-Id: Ibd2acc57ce22bdf743b9a440ec77e59a2dc576bd commit 2c1f5c8cb245155e09677f3e3e592ac64a9ffc56 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 18:39:39 2011 +1000 Some qdebugs always needed. Change-Id: I2af97585e7e4a14bf1f2ca9dccc5280e31d453b4 commit 3e1a6a12571ed056b9141475d6214c464a6693f7 Author: juhvu <qt-info@nokia.com> Date: Thu Sep 8 14:41:21 2011 +1000 Check qsgengine availability earlier. Change-Id: I65f3902f1829ff7869831135f574873ea4265374 commit cb71264ee7a573033985cc1eab8452cf29a34c65 Author: David Laing <david.laing@nokia.com> Date: Wed Sep 7 14:59:19 2011 +1000 First pass at improved intersection code. The old code has some dependencies on some QPainter specific code that we might not be able to rely on in the very near future. This could do with some testing. commit 09f101e685f48154c5bede732c147dee027dffd5 Author: David Laing <david.laing@nokia.com> Date: Wed Sep 7 13:54:18 2011 +1000 Removes accidentally added tex files. commit 675fa4c57a0f537ce5f30c06ffcf0f00e56a18ab Author: David Laing <david.laing@nokia.com> Date: Wed Sep 7 13:48:33 2011 +1000 Refactors the code to remove the deprecated parts of Maps. Also changes the new mapping code to make use of the existing maps plugin system. commit f873103da192c1ba5195018bdc8222c148d0c4c8 Author: juhvu <qt-info@nokia.com> Date: Tue Sep 6 14:14:39 2011 +1000 test plugin import fix Change-Id: Ib8f2fec09e38ebef43895a145520399ac470a7b7 commit 29719cdc6ebc62045ae8083836ce418ab21ba11b Author: juhvu <qt-info@nokia.com> Date: Tue Sep 6 11:19:07 2011 +1000 Temp hack to resolve the QML startup assert. Change-Id: I01ba9be3e1c92e032885dc71140a62392dbbfbc4 commit 680954a85ea69ed4146a66b726f8775b03fec311 Author: Xizhi Zhu <xizhi.zhu@nokia.com> Date: Mon Jun 27 16:48:29 2011 +0300 Fix copy2build output path for QML plugin. commit b309375dff7bc23b1759dfed1edcad609b7647f9 Author: David Laing <david.laing@nokia.com> Date: Fri Sep 2 14:14:30 2011 +1000 Cleans up the includes in the C++ code. commit 8b5328e06db5c5799f47feb57fa0ea33a65b9d74 Author: David Laing <david.laing@nokia.com> Date: Fri Sep 2 12:54:33 2011 +1000 Fixes some compile warnings for the new maps code. commit 43c7b2b76e3e634f0066a7cb012ea0eab4c4eb53 Author: David Laing <david.laing@nokia.com> Date: Fri Sep 2 11:42:21 2011 +1000 Further cleans up naming of files. commit ecfd70736d7bf3b7233940024756c81d73487d39 Author: David Laing <david.laing@nokia.com> Date: Thu Sep 1 17:40:48 2011 +1000 Adds licenses and sorts out private/public headers. commit f0a394389c3dc8c51f48e44c78300886f595887e Author: juhvu <qt-info@nokia.com> Date: Thu Sep 1 14:05:25 2011 +1000 Possible to run qml basic map without tweaks to qtdeclarative. Means that no map items or mouseareas will work. Change-Id: I6c6d1013462eb8424b5ec9eeb9e7779bb0cb5f25 commit 383983f2a2b4674332b63bb81da1b17fe11db3fa Author: David Laing <david.laing@nokia.com> Date: Wed Aug 31 16:13:32 2011 +1000 Removes unused debug output. commit 8bf2fc191b172525c3750205d0b0d3fcedf17a78 Merge: fea668d fa36fb7 Author: juhvu <qt-info@nokia.com> Date: Wed Aug 31 16:01:32 2011 +1000 Merge branch 'experimental_scenegraphing2' of scm.dev.nokia.troll.no:qt/dalaings-qtlocation-staging-experimental into experimental_scenegraphing2 commit fea668d9f69ef13ce79029869a9e440b65cb7230 Author: juhvu <qt-info@nokia.com> Date: Wed Aug 31 16:00:23 2011 +1000 Don't wait for texture when creating map item node. Change-Id: Ib5dbee82dbb27ba7bb18ef65df4ba401e8894818 commit fa36fb7905585c80109b262fd718aa71df31e882 Author: David Laing <david.laing@nokia.com> Date: Wed Aug 31 15:57:29 2011 +1000 Modifies the 2D map to take into account the window size. Previously we were setting various values based on the window sizes we were using for testing, which was never going to work in the long term. We might want to try to find out the DPI of the display and take that into account later on as well. commit d2ae0f0bde89b0ddb8278ba9595818fa9e37a004 Author: David Laing <david.laing@nokia.com> Date: Wed Aug 31 14:27:02 2011 +1000 Cleans up some of rendering code that was commented out. commit ba55afb9f39c60f0412f0f0a9a9bed98dcab2e0d Author: juhvu <qt-info@nokia.com> Date: Mon Aug 29 15:52:22 2011 +1000 Added zoomLevel to mapItems (much more joyous thingies now). Change-Id: Icd58b60920a8453fb5f26d0155ff027d86d11b73 commit f43db647753f8fa5ed9fa90c5c5a580d527bf4f1 Author: juhvu <qt-info@nokia.com> Date: Mon Aug 29 14:24:56 2011 +1000 Better working support for adding map items with Q_INVOKABLEs. Change-Id: I3c47a76369bd0968537c8490f9079f880aa54f26 commit d849ff492db227ab96ebca99dbaad9610cdc6130 Author: David Laing <david.laing@nokia.com> Date: Mon Aug 29 13:44:25 2011 +1000 Flips MapItem textures so they're drawn correctly. This was initially written to work with QPixmaps, which have a y-axis that points in the other direction. commit 5b60ed1d15f7fca457d347102d290664481eef0c Author: David Laing <david.laing@nokia.com> Date: Mon Aug 29 11:59:32 2011 +1000 Quick and dirty fix for map item rendering. We now draw the map, disable the depth test, draw the objects, then re-enable the depth dest. It's a bit dirty but it seems to work. Some of the map3d system test was modified to make it easier to check what works and what doesn't while this is played with. It'll probably change back once we've gotten this down. commit bccbfa89a0cab133871e29e735ee2724e88830c0 Author: juhvu <qt-info@nokia.com> Date: Fri Aug 26 16:22:43 2011 +1000 Solved map item threading -related crashes. However refactoring will be needed, this commit pinpointed and workarounded the issues but real solutions will follow shortly. Change-Id: I734ba79f36033f1d290f498f04310400a4074c57 commit 17f72db36f5084973ec470128a3edb1415f601ef Author: David Laing <david.laing@nokia.com> Date: Fri Aug 26 15:41:38 2011 +1000 Compilation fix. Also updates the include path in the map3d example / system test. commit a3fcbf90a599b8973331dab9fb75172027372651 Author: David Laing <david.laing@nokia.com> Date: Fri Aug 26 15:09:21 2011 +1000 Adds a copy of map3d to the system tests. This way the version in examples can be made into a nicely behaving example while the version in system tests can be used for benchmarking and verification. commit 496d8f4fe752c4f2c8899c5be6b34a91a03c01e9 Author: David Laing <david.laing@nokia.com> Date: Fri Aug 26 15:06:05 2011 +1000 Renames the maps3d directory to mapsgl. commit 23cce283c44cc98282150d76930d4e34d2ece683 Author: David Laing <david.laing@nokia.com> Date: Thu Aug 25 16:54:06 2011 +1000 Adds initial support for coordinate - screen conversions. The screen -> coordinate conversion could still be improved. commit 33d688d2b19a7b3fa80c12ff4284bb0efd39d6e6 Author: Cristian Adam <cristian.adam@nokia.com> Date: Wed Aug 24 12:00:51 2011 +0200 Buildfix for MSVC. commit a8490395427b460ada4eda118a6d22f2a067843f Author: David Laing <david.laing@nokia.com> Date: Wed Aug 24 16:10:26 2011 +1000 One last little change for the declarative texture problem. This change trades off correct behaviour for up to twice the memory consumption - once in the texture and once in the image - although we should be able to have both. I need to get my declarative environment up to scratch so I can figure this out properly. commit 3caea5c919bd2aa2c2e652a06270ea638dc82c25 Author: David Laing <david.laing@nokia.com> Date: Wed Aug 24 15:54:33 2011 +1000 Attempts to fix a bug introduced by the last commit. The last commit was a little less rendering-thread aware than it should have been - hopefully this fixes it. commit cc0f1d797097ad27bb537c5638b7e6e46318c423 Author: David Laing <david.laing@nokia.com> Date: Wed Aug 24 15:03:42 2011 +1000 Makes the tile cache eviction rendering-thread-aware. Some things weren't being cleaned up previously because we needed to clean them up in the rendering thread. The MapSphere class had a method for this but TileCache has the information. The cleanup is now done in TileCache, however the interface between the two classes for this task could do with some neatening. commit a7ac61adf978565e8e25adc2474f89e4414fc3a4 Author: David Laing <david.laing@nokia.com> Date: Wed Aug 24 11:01:17 2011 +1000 Refactors the code to separate the 2D and 3D mapping classes. Quite a few optimizations and other fixes are included. Now that this refactoring is done I should be able to make smaller and more frequent commits rather than these monsters... commit 01873d37f8eae15eccf424cc39e7810312d0b412 Author: Cristian Adam <cristian.adam@nokia.com> Date: Tue Aug 23 20:43:56 2011 +0200 Texture display "beautification" commit 87abf218bafaa98e55beaa050a14526427c88152 Author: Cristian Adam <cristian.adam@nokia.com> Date: Mon Aug 22 20:18:15 2011 +0200 Fixed for 2D map. commit f44f8dc61670bf21efa4b6e84fa8fa2291d16f95 Author: Cristian Adam <cristian.adam@nokia.com> Date: Fri Aug 19 19:25:10 2011 +0200 Compilation bugfix and some mouse navigation for map3d. commit bd929f6f11a16ff681d5fc543caf33f494fdbd27 Merge: 024214c ee5cd33 Author: Cristian Adam <cristian.adam@nokia.com> Date: Fri Aug 19 10:01:59 2011 +0200 Merge branch 'experimental_scenegraphing2' of scm.dev.nokia.troll.no:qt/dalaings-qtlocation-staging-experimental into experimental_scenegraphing2 commit ee5cd339b1f72df506905ee815988a65623584c5 Author: juhvu <qt-info@nokia.com> Date: Fri Aug 19 15:00:58 2011 +1000 First success on texturized map objects. Change-Id: Ied9276da69a047e578cee614318e7d6a6a5d4e6d commit 25f7f641787a43f16a7c379c5e0e0735296524a9 Author: juhvu <qt-info@nokia.com> Date: Fri Aug 19 09:37:08 2011 +1000 Interim commit for arbitrary QML map item support. Change-Id: Ica29abb6f9cd74e6c6fbdc028f31cd25957546f9 Conflicts: src/location/maps3d/mapsphere.cpp src/location/maps3d/mapsphere.h commit 6f7aa4e2eec65ee855992a22d019202234de4f9b Author: juhvu <qt-info@nokia.com> Date: Fri Aug 19 09:03:30 2011 +1000 Few changes to get QML Map example running. Change-Id: Iaada49719341b9c48682f2a5a87eb03986d8272d commit 024214cbc524584e719cc6e5baf67cfe68764918 Author: Cristian Adam <cristian.adam@nokia.com> Date: Thu Aug 18 19:23:01 2011 +0200 Bugfixes to build for Windows. commit 0c3b8d7250fcbef3c1ca6a8c538cf7440f6d3dae Author: David Laing <david.laing@nokia.com> Date: Thu Aug 18 17:36:57 2011 +1000 Adds preliminary support for map items. Dummy items at the moment, projected onto the map. - need to look at drawing items in a second pass to avoid rendering glitches - need to handle non-projected objects, which will probably involve yet another pass, possibly with an ortho projection - need to handle the texture stuff from Juha commit 8289b3227873576c9fa32bb117633135d89f5800 Author: David Laing <david.laing@nokia.com> Date: Thu Aug 18 17:31:46 2011 +1000 Improves the behaviour of the tile provider. - Queued connection between the cache and the provider - Provider aborts replies that are no longer going to be used commit 473bef88f86322d575936b1312a976a65ce116df Author: David Laing <david.laing@nokia.com> Date: Thu Aug 18 13:41:09 2011 +1000 Updates some of the rendering mutex related changes. commit 398a37255d09a862fae58760918ac6b3c4ef4ac7 Author: David Laing <david.laing@nokia.com> Date: Tue Aug 16 14:58:06 2011 +1000 Reworked the maps to allow for 2D Map projections There are numerous other changes and optimizations in here. commit 1a8844780b0e02f90e6929c1edaeaef80c288a3f Author: juhvu <qt-info@nokia.com> Date: Tue Aug 9 10:34:23 2011 +1000 Stop timers when stopping too. Change-Id: I0334eea1cfd6a0a9cdcb23bc9120b10a9f90b913 commit a4671b1517d3fc10107dd4b6da70f784a11d5855 Author: juhvu <qt-info@nokia.com> Date: Tue Aug 9 10:30:48 2011 +1000 Took out some asserts in maps. Change-Id: I0dd48f0c30ae9e2f958f1b750a1713315ec1d681 commit e524908c6b977307408d6992a1cb7d5c6c7874c5 Author: juhvu <qt-info@nokia.com> Date: Tue Aug 9 10:15:28 2011 +1000 Map (3D) zoom and flick working at same time. Change-Id: I4862882cfe9b23bcef88873372a7178635dc9485 commit 30aef46a61e8414985533f7b8eaaa7cf5578993f Author: juhvu <qt-info@nokia.com> Date: Mon Aug 8 16:27:03 2011 +1000 Fixed Map (3D) mousewheel (QSGItem event type changed) and flickable. Change-Id: If79463b84630ce8d96525a095fbb0167903a8ca5 commit 037eb28953eb78a628710aba487e78240805ea93 Author: juhvu <qt-info@nokia.com> Date: Fri Aug 5 14:15:36 2011 +1000 Corrected Map flick to work even with very short (<200ms) flicks. Change-Id: Ic6fc294d6f3517090578b3e66d1ddf425df845f5 commit ad28c2c32b1a14093e6a09d4fd3a0c100976366c Author: David Laing <david.laing@nokia.com> Date: Thu Aug 18 11:13:48 2011 +1000 Re-adding the non-revert parts of 6c39b17 commit 9f948f41b19e605e400d3303314a7d844a4a0a8c Author: David Laing <david.laing@nokia.com> Date: Thu Aug 18 11:13:04 2011 +1000 Revert "Revert "Further improvements to the camera / sphere intersect code."" This reverts commit 6c39b175188a8cddf290c3cf2aac2ea61835b109. commit 6c39b175188a8cddf290c3cf2aac2ea61835b109 Author: juhvu <qt-info@nokia.com> Date: Fri Aug 5 13:06:44 2011 +1000 Revert "Further improvements to the camera / sphere intersect code." This reverts commit 78b01bf94e196b3130e1b75d746dcd6a8cbbc8c2. Conflicts: src/location/maps3d/mapsphere.cpp Also improved the example application. Dodgy to do it in revert commit but forgot the thing and ran out of time. Change-Id: I0aaa934b5d93a4a9846304a5553276a0937439e8 commit c5bef97778e635722ee255b0da4366b3606fa44f Author: juhvu <qt-info@nokia.com> Date: Thu Aug 4 15:57:10 2011 +1000 Rough version of Map scene node thread protection. Change-Id: Ida38cd02fbfe42ac8908df54f8aad4ac61da28d4 commit 78b01bf94e196b3130e1b75d746dcd6a8cbbc8c2 Author: David Laing <david.laing@nokia.com> Date: Thu Aug 4 15:09:02 2011 +1000 Further improvements to the camera / sphere intersect code. Increased correctness, added some optimizations. commit 3c78999378e73167dacf72f511b4f75c0ed43b0f Author: juhvu <qt-info@nokia.com> Date: Thu Aug 4 13:26:54 2011 +1000 Added tilt support for Map(3D) pinch area. Change-Id: I17a3ee333f2ef594df3cc4f5d38604a77414ea2a commit 13d57872c57b62ee857a25eab65803552d813497 Author: juhvu <qt-info@nokia.com> Date: Thu Aug 4 10:53:09 2011 +1000 Added gesture option support for map pinch area. Change-Id: I2ca45d48626528f1c000d395d9dadfc3e665f8f2 commit 0a0d98d3f8b67946d601518beb8b15f671cba458 Author: juhvu <qt-info@nokia.com> Date: Thu Aug 4 09:57:43 2011 +1000 Improved the rotation for Map3D. Change-Id: I9f77ee2018cc878fdad56508a2037510ec405746 commit 0002c36d984516ffa2c6aa8e5ac0aa6e637d4b6e Author: juhvu <qt-info@nokia.com> Date: Wed Aug 3 16:08:48 2011 +1000 Radical pinch zooming improvements for Map3D. Change-Id: I402c712d577d5f3737271d6b34c79862cd838c44 commit 0fec6b84da9c9cbc99fa91452f7957b93ca7364a Author: juhvu <qt-info@nokia.com> Date: Tue Aug 2 13:29:53 2011 +1000 Fix for pinching gen - changed qapp->notify to canvas->sendEvent. Change-Id: I8e68b5d120ace5652cef4f4ad0b46b949d2e28bd commit fbbb3016c212214e18afa58452bd96253c0779ee Author: juhvu <qt-info@nokia.com> Date: Tue Aug 2 10:51:51 2011 +1000 Forgot .pro file for the testplugin. Change-Id: Iad18fa5e988b730c54e8deea7b4cea1bcbea3e98 commit c8ae01f629a6a5798bfd187c6c67d9fe31482155 Author: juhvu <qt-info@nokia.com> Date: Tue Aug 2 09:47:24 2011 +1000 Put pinchgenerator into test plugin. Change-Id: Ia401fb7d1ee7bc9bbd4decaa39b446a5dda81693 commit 4767ad9b4f37a1ac90f12b288df73f14469c616e Author: juhvu <qt-info@nokia.com> Date: Mon Aug 1 15:40:05 2011 +1000 First version of pinch generator. Change-Id: I3eff3559b6750e086de914b166545b66742a04c8 commit 2121ca14e5b8d7e0679711bac35cbc79df2f1fb1 Author: David Laing <david.laing@nokia.com> Date: Fri Jul 29 15:14:35 2011 +1000 Improves the sphere / plan intersection code. Now using a much improved algorithm - less code / memory time is needed to get results which are correct in more cases. commit 5e5e88471797a1d2de8c161cc00e26da1528c13c Author: juhvu <qt-info@nokia.com> Date: Fri Jul 29 11:40:06 2011 +1000 Map 3D pinch event support. Change-Id: I2196e59c581b6a17ccb87f2550102bce70e967f2 commit 7135d6717ff225445c7ec99d22a243f577e02b8b Author: juhvu <qt-info@nokia.com> Date: Thu Jul 28 16:15:41 2011 +1000 First version of 3D Map pinching. Change-Id: I834def992b01e6701cbc48cc49c86527033e7e26 commit 8380676866d777bda65d77148869cfb0ef787352 Merge: addf553 b36eae4 Author: juhvu <qt-info@nokia.com> Date: Wed Jul 27 15:41:47 2011 +1000 Merge branch 'experimental_scenegraphing' of scm.dev.nokia.troll.no:qt/dalaings-qtlocation-staging-experimental into experimental_scenegraphing Conflicts: src/location/maps3d/cameradata.cpp Change-Id: Ia822a689a1ea65e2bdadbd5dcf7e606f6091d3dd commit addf5532dc4b267ee7a4a8b26ce3e052c3f9f655 Author: juhvu <qt-info@nokia.com> Date: Wed Jul 27 15:38:30 2011 +1000 Added rough draft of Map 3D flicking. Change-Id: Ia9ed0723a906b52490cc5b05fd11d9569adfc285 commit b36eae47ba5a8f3809a088ddb9bfcdb511a4776e Author: David Laing <david.laing@nokia.com> Date: Tue Jul 26 11:34:39 2011 +1000 Fixes a bug with the relationship between zoom and distance. Was using z^2 instead of 2^z. commit 3fe3c2146615906cb8726d7326213cfc98de5821 Author: David Laing <david.laing@nokia.com> Date: Tue Jul 26 11:34:17 2011 +1000 Adds animation support to the C++ demo. commit 39f26af1d7f7b4bb59bb59b3ecef18f6481fbd51 Author: juhvu <qt-info@nokia.com> Date: Tue Jul 26 09:58:00 2011 +1000 Update Map3D backend. Change-Id: Ie1e3f730fb9505b42fa664f1da5f8af0c3818435 commit ff0bb0b48e27b3f9a9e92c6cc05dbfdd8f6106bf Author: juhvu <qt-info@nokia.com> Date: Mon Jul 25 15:38:18 2011 +1000 QtLocation to compile with qml2 header changes. Change-Id: Ia1724740fdcd6f6a4114737dea47b981658aa71e commit a3c4b9c1550ece97531954073bd0e0063695bf50 Author: David Laing <david.laing@nokia.com> Date: Tue Jul 26 09:34:22 2011 +1000 Switches the viewport-to-tiles backend to the stable version The new and improved version isn't ready quite yet. commit e32743ea59c4df2cd5e7cd67b63364e2cd653019 Author: David Laing <david.laing@nokia.com> Date: Mon Jul 25 16:37:45 2011 +1000 Fixes some camera bugs. The bearing rotation was being applied twice, and the coordinate interpolation was moving in the wrong direction i.e. from the end to the start. Fixed now. commit 62ed7d29e2e739d7ba82c5c280ec599a674ad513 Merge: 358d9ec 685693e Author: David Laing <david.laing@nokia.com> Date: Mon Jul 25 15:27:38 2011 +1000 Merge branch 'experimental_scenegraphing' of scm.dev.nokia.troll.no:qt/dalaings-qtlocation-staging-experimental into experimental_scenegraphing commit 358d9ecbea2b142238ff6696e40eb7012f387510 Author: David Laing <david.laing@nokia.com> Date: Mon Jul 25 15:25:49 2011 +1000 Another bulk update of backend stuff. - Quite a bit of refactoring - Adds scripting for the map example (for testing / profiling) - Adds switchable camera->tiles strategies - Including the start of the new approach - Adds interpolators for the camera commit 685693e68bdfc2d909063a344e5963ea753daf27 Author: juhvu <qt-info@nokia.com> Date: Mon Jul 25 14:20:35 2011 +1000 Small pinch update. Change-Id: I1fe08805200e8391963cf8ea513dc7fb843bcc0d commit 9d8f663ac423efe9d206936b367d84ac270cfdaa Author: juhvu <qt-info@nokia.com> Date: Fri Jul 22 15:38:42 2011 +1000 Simple mouse wheel support for Map 3d. Change-Id: I0d466cd923d62494870b952102ccb447203e7876 commit d3a57442cb921fab1cf1ae50e525308ae37513a5 Author: juhvu <qt-info@nokia.com> Date: Fri Jul 22 14:52:51 2011 +1000 Regular MouseArea integration to 3D Map element. Change-Id: Ib6fd5040a94c0a0dafe33de77254791d695809ea commit 7c7d6efcc3ce0ea3cc77e1523ac238d36b1cf544 Author: juhvu <qt-info@nokia.com> Date: Mon Jul 11 12:54:53 2011 +1000 Intermediate idea commit Map::MouseArea integration. Change-Id: I6f3ce7e15e540943581aa678f421a45418a8d763 commit dc9545e75f3c0dc60fdf60d323f46e5159e8506b Author: juhvu <qt-info@nokia.com> Date: Tue Jul 5 16:13:25 2011 +1000 Added the sphere/map toggle to map3d qml example. commit abbc8d5b33537856e13f0b1787c4202d29d1471d Author: juhvu <qt-info@nokia.com> Date: Tue Jul 5 13:23:30 2011 +1000 Anchors to work with 3d map element. commit 19048b9260b3e51a1fb9aa8c04eb10f32f37ce56 Author: juhvu <qt-info@nokia.com> Date: Tue Jul 5 10:57:11 2011 +1000 Restored gl context defaults after rendering underlay (warnings). commit 220c3feec0aefce34ec73db23d90f853876dfabd Merge: 708b242 1f375c2 Author: juhvu <qt-info@nokia.com> Date: Mon Jul 4 12:01:42 2011 +1000 Merge branch 'experimental_scenegraphing' of scm.dev.nokia.troll.no:qt/dalaings-qtlocation-staging-experimental into experimental_scenegraphing commit 708b2423dc6e4474a77f85cb16dc121d05359d56 Author: juhvu <qt-info@nokia.com> Date: Mon Jul 4 12:01:10 2011 +1000 Simplified QSG rendering for Map element. commit 1f375c2ebbbe66eecbb36f9d0b3bfe2f0506bfb8 Author: David Laing <david.laing@nokia.com> Date: Mon Jul 4 11:45:23 2011 +1000 Massive update to 3D maps code. Still need to rework TileCamera so we have a camera API with user-friendly goodness. commit eeaa93cd262581cadc674daa03267a4b96ca7053 Author: juhvu <qt-info@nokia.com> Date: Fri Jul 1 14:37:08 2011 +1000 Cube tests for QSG underlay. commit 04991ff06f733f554f701e9bf1ae7f1e3a9b1aa0 Author: juhvu <qt-info@nokia.com> Date: Mon Jun 27 15:37:07 2011 +1000 Modified tile camera. commit c39ef64e914ba40929821d7c115bdff9ae73c675 Author: juhvu <qt-info@nokia.com> Date: Tue Jun 21 10:48:17 2011 +1000 Map3D element to run 3d map. commit 049466a6581af6a78bd02ca316ceb379b76fbad9 Author: David Laing <david.laing@nokia.com> Date: Fri Jun 17 16:47:00 2011 +1000 Removing example executable. commit 8de142a35f3f6630cc7114e08e4e5c4234515fce Author: David Laing <david.laing@nokia.com> Date: Fri Jun 17 16:44:59 2011 +1000 Adding initial code dump. commit 2ccd4851439daf76165187c20c1981b305782957 Merge: f9a921e 54c829a Author: David Laing <david.laing@nokia.com> Date: Fri Jun 17 16:11:31 2011 +1000 Merge branch 'master' into experimental_scenegraphing commit f9a921e84f19c52d7ea7452a47f8aa0c0417852b Author: juhvu <qt-info@nokia.com> Date: Tue Jun 14 15:51:19 2011 +1000 Map3D object visible in QML. commit 416fdb11c2649f72a04cfe9c64d5fdc4cc175aa3 Author: juhvu <qt-info@nokia.com> Date: Fri Jun 10 15:47:12 2011 +1000 Some maps scenegraphing drafting. Change-Id: I96b5c5a396f371e7e9acf983441d674a55b44368
-rw-r--r--examples/declarative/declarative.pro3
-rw-r--r--examples/declarative/flickr/flickr.pro2
-rw-r--r--examples/declarative/map3d/Dialog.qml171
-rwxr-xr-xexamples/declarative/map3d/TitleBar.qml76
-rw-r--r--examples/declarative/map3d/blinky.gifbin0 -> 3783 bytes
-rwxr-xr-xexamples/declarative/map3d/common/Button.qml96
-rw-r--r--examples/declarative/map3d/common/Menu.qml109
-rw-r--r--examples/declarative/map3d/common/Slider.qml109
-rwxr-xr-xexamples/declarative/map3d/common/TitleBar.qml86
-rw-r--r--examples/declarative/map3d/map3d.pro18
-rw-r--r--examples/declarative/map3d/map3d.qml600
-rw-r--r--examples/declarative/map3d/map3d.qrc24
-rw-r--r--examples/declarative/map3d/qmlmap3d.cpp81
-rwxr-xr-xexamples/declarative/map3d/quit.pngbin0 -> 2369 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/button.pngbin0 -> 2550 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/button.sci5
-rwxr-xr-xexamples/declarative/map3d/resources/button_hovered.pngbin0 -> 2572 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/button_pressed.pngbin0 -> 2969 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/menuItem.pngbin0 -> 1436 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/menuItem.sci5
-rwxr-xr-xexamples/declarative/map3d/resources/menuItem_hovered.pngbin0 -> 1380 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/menuItem_pressed.pngbin0 -> 1389 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/quit.pngbin0 -> 2369 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/quit_hovered.pngbin0 -> 2224 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/quit_pressed.pngbin0 -> 2448 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/titlebar.pngbin0 -> 1436 bytes
-rwxr-xr-xexamples/declarative/map3d/resources/titlebar.sci5
-rwxr-xr-xexamples/declarative/map3d/titlebar.pngbin0 -> 1436 bytes
-rwxr-xr-xexamples/declarative/map3d/titlebar.sci5
-rw-r--r--examples/declarative/mapviewer/mapviewer.pro2
-rw-r--r--examples/examples.pro3
-rw-r--r--examples/map3d/camerawidget.cpp114
-rw-r--r--examples/map3d/camerawidget.h46
-rw-r--r--examples/map3d/main.cpp45
-rw-r--r--examples/map3d/mainwidget.cpp300
-rw-r--r--examples/map3d/mainwidget.h48
-rw-r--r--examples/map3d/map3d.pro26
-rw-r--r--examples/map3d/tileview.cpp254
-rw-r--r--examples/map3d/tileview.h51
-rw-r--r--src/3rdparty/proj.pri7
-rw-r--r--src/3rdparty/proj.pro158
-rw-r--r--src/3rdparty/proj/PJ_aea.c162
-rw-r--r--src/3rdparty/proj/PJ_aeqd.c271
-rw-r--r--src/3rdparty/proj/PJ_airy.c124
-rw-r--r--src/3rdparty/proj/PJ_aitoff.c76
-rw-r--r--src/3rdparty/proj/PJ_august.c18
-rw-r--r--src/3rdparty/proj/PJ_bacon.c41
-rw-r--r--src/3rdparty/proj/PJ_bipc.c132
-rw-r--r--src/3rdparty/proj/PJ_boggs.c32
-rw-r--r--src/3rdparty/proj/PJ_bonne.c85
-rw-r--r--src/3rdparty/proj/PJ_cass.c79
-rw-r--r--src/3rdparty/proj/PJ_cc.c19
-rw-r--r--src/3rdparty/proj/PJ_cea.c61
-rw-r--r--src/3rdparty/proj/PJ_chamb.c112
-rw-r--r--src/3rdparty/proj/PJ_collg.c29
-rw-r--r--src/3rdparty/proj/PJ_crast.c22
-rw-r--r--src/3rdparty/proj/PJ_denoy.c18
-rw-r--r--src/3rdparty/proj/PJ_eck1.c19
-rw-r--r--src/3rdparty/proj/PJ_eck2.c28
-rw-r--r--src/3rdparty/proj/PJ_eck3.c50
-rw-r--r--src/3rdparty/proj/PJ_eck4.c44
-rw-r--r--src/3rdparty/proj/PJ_eck5.c18
-rw-r--r--src/3rdparty/proj/PJ_eqc.c23
-rw-r--r--src/3rdparty/proj/PJ_eqdc.c85
-rw-r--r--src/3rdparty/proj/PJ_fahey.c17
-rw-r--r--src/3rdparty/proj/PJ_fouc_s.c45
-rw-r--r--src/3rdparty/proj/PJ_gall.c19
-rw-r--r--src/3rdparty/proj/PJ_geos.c142
-rw-r--r--src/3rdparty/proj/PJ_gins8.c17
-rw-r--r--src/3rdparty/proj/PJ_gn_sinu.c100
-rw-r--r--src/3rdparty/proj/PJ_gnom.c105
-rw-r--r--src/3rdparty/proj/PJ_goode.c46
-rw-r--r--src/3rdparty/proj/PJ_gstmerc.c48
-rw-r--r--src/3rdparty/proj/PJ_hammer.c29
-rw-r--r--src/3rdparty/proj/PJ_hatano.c50
-rw-r--r--src/3rdparty/proj/PJ_imw_p.c151
-rw-r--r--src/3rdparty/proj/PJ_krovak.c253
-rw-r--r--src/3rdparty/proj/PJ_labrd.c109
-rw-r--r--src/3rdparty/proj/PJ_laea.c233
-rw-r--r--src/3rdparty/proj/PJ_lagrng.c35
-rw-r--r--src/3rdparty/proj/PJ_larr.c12
-rw-r--r--src/3rdparty/proj/PJ_lask.c26
-rw-r--r--src/3rdparty/proj/PJ_lcc.c105
-rw-r--r--src/3rdparty/proj/PJ_lcca.c72
-rw-r--r--src/3rdparty/proj/PJ_loxim.c41
-rw-r--r--src/3rdparty/proj/PJ_lsat.c171
-rw-r--r--src/3rdparty/proj/PJ_mbt_fps.c38
-rw-r--r--src/3rdparty/proj/PJ_mbtfpp.c32
-rw-r--r--src/3rdparty/proj/PJ_mbtfpq.c47
-rw-r--r--src/3rdparty/proj/PJ_merc.c47
-rw-r--r--src/3rdparty/proj/PJ_mill.c15
-rw-r--r--src/3rdparty/proj/PJ_mod_ster.c211
-rw-r--r--src/3rdparty/proj/PJ_moll.c62
-rw-r--r--src/3rdparty/proj/PJ_nell.c31
-rw-r--r--src/3rdparty/proj/PJ_nell_h.c30
-rw-r--r--src/3rdparty/proj/PJ_nocol.c38
-rw-r--r--src/3rdparty/proj/PJ_nsper.c149
-rw-r--r--src/3rdparty/proj/PJ_nzmg.c107
-rw-r--r--src/3rdparty/proj/PJ_ob_tran.c144
-rw-r--r--src/3rdparty/proj/PJ_ocea.c68
-rw-r--r--src/3rdparty/proj/PJ_oea.c58
-rw-r--r--src/3rdparty/proj/PJ_omerc.c166
-rw-r--r--src/3rdparty/proj/PJ_ortho.c95
-rw-r--r--src/3rdparty/proj/PJ_poly.c99
-rw-r--r--src/3rdparty/proj/PJ_putp2.c40
-rw-r--r--src/3rdparty/proj/PJ_putp3.c26
-rw-r--r--src/3rdparty/proj/PJ_putp4p.c29
-rw-r--r--src/3rdparty/proj/PJ_putp5.c26
-rw-r--r--src/3rdparty/proj/PJ_putp6.c59
-rw-r--r--src/3rdparty/proj/PJ_robin.c105
-rw-r--r--src/3rdparty/proj/PJ_rpoly.c35
-rw-r--r--src/3rdparty/proj/PJ_sconics.c154
-rw-r--r--src/3rdparty/proj/PJ_somerc.c66
-rw-r--r--src/3rdparty/proj/PJ_stere.c241
-rw-r--r--src/3rdparty/proj/PJ_sterea.c82
-rw-r--r--src/3rdparty/proj/PJ_sts.c54
-rw-r--r--src/3rdparty/proj/PJ_tcc.c17
-rw-r--r--src/3rdparty/proj/PJ_tcea.c27
-rw-r--r--src/3rdparty/proj/PJ_tmerc.c175
-rw-r--r--src/3rdparty/proj/PJ_tpeqd.c76
-rw-r--r--src/3rdparty/proj/PJ_urm5.c28
-rw-r--r--src/3rdparty/proj/PJ_urmfps.c40
-rw-r--r--src/3rdparty/proj/PJ_vandg.c78
-rw-r--r--src/3rdparty/proj/PJ_vandg2.c45
-rw-r--r--src/3rdparty/proj/PJ_vandg4.c41
-rw-r--r--src/3rdparty/proj/PJ_wag2.c21
-rw-r--r--src/3rdparty/proj/PJ_wag3.c24
-rw-r--r--src/3rdparty/proj/PJ_wag7.c14
-rw-r--r--src/3rdparty/proj/PJ_wink1.c20
-rw-r--r--src/3rdparty/proj/PJ_wink2.c34
-rw-r--r--src/3rdparty/proj/aasincos.c33
-rw-r--r--src/3rdparty/proj/adjlon.c15
-rw-r--r--src/3rdparty/proj/bch2bps.c140
-rw-r--r--src/3rdparty/proj/bchgen.c58
-rw-r--r--src/3rdparty/proj/biveval.c85
-rw-r--r--src/3rdparty/proj/cs2cs.c417
-rw-r--r--src/3rdparty/proj/data.qrc15
-rw-r--r--src/3rdparty/proj/dmstor.c108
-rw-r--r--src/3rdparty/proj/emess.c57
-rw-r--r--src/3rdparty/proj/emess.h32
-rw-r--r--src/3rdparty/proj/gen_cheb.c71
-rw-r--r--src/3rdparty/proj/geocent.c435
-rw-r--r--src/3rdparty/proj/geocent.h179
-rw-r--r--src/3rdparty/proj/geod.c237
-rw-r--r--src/3rdparty/proj/geod_for.c103
-rw-r--r--src/3rdparty/proj/geod_inv.c56
-rw-r--r--src/3rdparty/proj/geod_set.c74
-rw-r--r--src/3rdparty/proj/geodesic.h51
-rw-r--r--src/3rdparty/proj/include/pj_list.h136
-rw-r--r--src/3rdparty/proj/include/proj_api.h108
-rw-r--r--src/3rdparty/proj/include/projects.h434
-rw-r--r--src/3rdparty/proj/mk_cheby.c161
-rw-r--r--src/3rdparty/proj/nad2bin.c65
-rw-r--r--src/3rdparty/proj/nad2nad.c310
-rw-r--r--src/3rdparty/proj/nad_cvt.c68
-rw-r--r--src/3rdparty/proj/nad_init.c176
-rw-r--r--src/3rdparty/proj/nad_intr.c62
-rw-r--r--src/3rdparty/proj/nad_list.h6
-rw-r--r--src/3rdparty/proj/org_proj4_Projections.h37
-rw-r--r--src/3rdparty/proj/p_series.c39
-rw-r--r--src/3rdparty/proj/pj_apply_gridshift.c151
-rw-r--r--src/3rdparty/proj/pj_auth.c30
-rw-r--r--src/3rdparty/proj/pj_datum_set.c139
-rw-r--r--src/3rdparty/proj/pj_datums.c90
-rw-r--r--src/3rdparty/proj/pj_deriv.c33
-rw-r--r--src/3rdparty/proj/pj_ell_set.c102
-rw-r--r--src/3rdparty/proj/pj_ellps.c56
-rw-r--r--src/3rdparty/proj/pj_errno.c17
-rw-r--r--src/3rdparty/proj/pj_factors.c84
-rw-r--r--src/3rdparty/proj/pj_fwd.c34
-rw-r--r--src/3rdparty/proj/pj_gauss.c94
-rw-r--r--src/3rdparty/proj/pj_geocent.c57
-rw-r--r--src/3rdparty/proj/pj_gridinfo.c686
-rw-r--r--src/3rdparty/proj/pj_gridlist.c266
-rw-r--r--src/3rdparty/proj/pj_init.c416
-rw-r--r--src/3rdparty/proj/pj_initcache.c181
-rw-r--r--src/3rdparty/proj/pj_inv.c29
-rw-r--r--src/3rdparty/proj/pj_latlong.c80
-rw-r--r--src/3rdparty/proj/pj_list.c11
-rw-r--r--src/3rdparty/proj/pj_malloc.c25
-rw-r--r--src/3rdparty/proj/pj_mlfn.c57
-rw-r--r--src/3rdparty/proj/pj_msfn.c7
-rw-r--r--src/3rdparty/proj/pj_mutex.c208
-rw-r--r--src/3rdparty/proj/pj_open_lib_qt.cpp86
-rw-r--r--src/3rdparty/proj/pj_param.c104
-rw-r--r--src/3rdparty/proj/pj_phi2.c25
-rw-r--r--src/3rdparty/proj/pj_pr_list.c91
-rw-r--r--src/3rdparty/proj/pj_qsfn.c16
-rw-r--r--src/3rdparty/proj/pj_release.c11
-rw-r--r--src/3rdparty/proj/pj_strerrno.c82
-rw-r--r--src/3rdparty/proj/pj_transform.c646
-rw-r--r--src/3rdparty/proj/pj_tsfn.c10
-rw-r--r--src/3rdparty/proj/pj_units.c37
-rw-r--r--src/3rdparty/proj/pj_utils.c156
-rw-r--r--src/3rdparty/proj/pj_zpoly1.c46
-rw-r--r--src/3rdparty/proj/proj.c499
-rw-r--r--src/3rdparty/proj/proj.def41
-rw-r--r--src/3rdparty/proj/proj_data/GL2722
-rw-r--r--src/3rdparty/proj/proj_data/IGNF469
-rw-r--r--src/3rdparty/proj/proj_data/epsg7631
-rw-r--r--src/3rdparty/proj/proj_data/esri5937
-rw-r--r--src/3rdparty/proj/proj_data/esri.extra952
-rw-r--r--src/3rdparty/proj/proj_data/nad.lst142
-rw-r--r--src/3rdparty/proj/proj_data/nad27809
-rw-r--r--src/3rdparty/proj/proj_data/nad83744
-rw-r--r--src/3rdparty/proj/proj_data/other.extra49
-rw-r--r--src/3rdparty/proj/proj_data/proj_def.dat17
-rw-r--r--src/3rdparty/proj/proj_data/world212
-rw-r--r--src/3rdparty/proj/proj_mdist.c123
-rw-r--r--src/3rdparty/proj/proj_rouss.c122
-rw-r--r--src/3rdparty/proj/rtodms.c72
-rw-r--r--src/3rdparty/proj/vector1.c29
-rw-r--r--src/imports/location/location.cpp43
-rw-r--r--src/imports/location/location.pro53
-rw-r--r--src/imports/location/qdeclarative3dgraphicsgeomap.cpp1204
-rw-r--r--src/imports/location/qdeclarative3dgraphicsgeomap_p.h290
-rw-r--r--src/imports/location/qdeclarativegeomapcircleobject.cpp252
-rw-r--r--src/imports/location/qdeclarativegeomapcircleobject_p.h113
-rw-r--r--src/imports/location/qdeclarativegeomapflickable.cpp371
-rw-r--r--src/imports/location/qdeclarativegeomapflickable_p.h128
-rw-r--r--src/imports/location/qdeclarativegeomapgroupobject.cpp248
-rw-r--r--src/imports/location/qdeclarativegeomapgroupobject_p.h103
-rw-r--r--src/imports/location/qdeclarativegeomapitem.cpp215
-rw-r--r--src/imports/location/qdeclarativegeomapitem_p.h125
-rw-r--r--src/imports/location/qdeclarativegeomapmousearea_p.h1
-rw-r--r--src/imports/location/qdeclarativegeomapobject.cpp129
-rw-r--r--src/imports/location/qdeclarativegeomapobject_p.h27
-rw-r--r--src/imports/location/qdeclarativegeomapobjectborder_p.h84
-rw-r--r--src/imports/location/qdeclarativegeomappincharea.cpp506
-rw-r--r--src/imports/location/qdeclarativegeomappincharea_p.h267
-rw-r--r--src/imports/location/qdeclarativegeomappixmapobject.cpp359
-rw-r--r--src/imports/location/qdeclarativegeomappixmapobject_p.h117
-rw-r--r--src/imports/location/qdeclarativegeomappolygonobject.cpp337
-rw-r--r--src/imports/location/qdeclarativegeomappolygonobject_p.h110
-rw-r--r--src/imports/location/qdeclarativegeomappolylineobject.cpp310
-rw-r--r--src/imports/location/qdeclarativegeomappolylineobject_p.h103
-rw-r--r--src/imports/location/qdeclarativegeomaprectangleobject.cpp287
-rw-r--r--src/imports/location/qdeclarativegeomaprectangleobject_p.h108
-rw-r--r--src/imports/location/qdeclarativegeomaprouteobject.cpp124
-rw-r--r--src/imports/location/qdeclarativegeomaprouteobject_p.h95
-rw-r--r--src/imports/location/qdeclarativegeomaptextobject.cpp415
-rw-r--r--src/imports/location/qdeclarativegeomaptextobject_p.h130
-rw-r--r--src/imports/location/qdeclarativegraphicsgeomap.cpp603
-rw-r--r--src/imports/location/qdeclarativegraphicsgeomap_p.h66
-rw-r--r--src/imports/location/qdeclarativeposition_p.h2
-rw-r--r--src/imports/qimportbase.pri38
-rw-r--r--src/location/location.pro10
-rw-r--r--src/location/maps/maps.pri49
-rw-r--r--src/location/maps/qgeomapcircleobject.cpp340
-rw-r--r--src/location/maps/qgeomapcircleobject.h110
-rw-r--r--src/location/maps/qgeomapcircleobject_p.h66
-rw-r--r--src/location/maps/qgeomapcustomobject.cpp294
-rw-r--r--src/location/maps/qgeomapcustomobject_p.h65
-rw-r--r--src/location/maps/qgeomapdata.cpp836
-rw-r--r--src/location/maps/qgeomapdata.h171
-rw-r--r--src/location/maps/qgeomapgroupobject.cpp316
-rw-r--r--src/location/maps/qgeomapobject.cpp534
-rw-r--r--src/location/maps/qgeomapobject.h154
-rw-r--r--src/location/maps/qgeomapobjectengine_p.cpp1182
-rw-r--r--src/location/maps/qgeomapobjectengine_p.h175
-rw-r--r--src/location/maps/qgeomapobjectinfo.cpp264
-rw-r--r--src/location/maps/qgeomapoverlay.cpp114
-rw-r--r--src/location/maps/qgeomappingmanager.cpp104
-rw-r--r--src/location/maps/qgeomappingmanager.h33
-rw-r--r--src/location/maps/qgeomappingmanager_p.h4
-rw-r--r--src/location/maps/qgeomappingmanagerengine.cpp257
-rw-r--r--src/location/maps/qgeomappingmanagerengine.h44
-rw-r--r--src/location/maps/qgeomappingmanagerengine_p.h21
-rw-r--r--src/location/maps/qgeomappixmapobject.cpp222
-rw-r--r--src/location/maps/qgeomappixmapobject.h91
-rw-r--r--src/location/maps/qgeomappixmapobject_p.h64
-rw-r--r--src/location/maps/qgeomappolygonobject.cpp212
-rw-r--r--src/location/maps/qgeomappolygonobject_p.h66
-rw-r--r--src/location/maps/qgeomappolylineobject.cpp178
-rw-r--r--src/location/maps/qgeomappolylineobject.h86
-rw-r--r--src/location/maps/qgeomappolylineobject_p.h64
-rw-r--r--src/location/maps/qgeomaprectangleobject.cpp299
-rw-r--r--src/location/maps/qgeomaprectangleobject.h101
-rw-r--r--src/location/maps/qgeomaprectangleobject_p.h65
-rw-r--r--src/location/maps/qgeomaprouteobject.cpp224
-rw-r--r--src/location/maps/qgeomaprouteobject.h92
-rw-r--r--src/location/maps/qgeomaprouteobject_p.h64
-rw-r--r--src/location/maps/qgeomaptextobject.cpp374
-rw-r--r--src/location/maps/qgeomaptextobject.h115
-rw-r--r--src/location/maps/qgeomaptextobject_p.h70
-rw-r--r--src/location/maps/qgeotiledmapreply.cpp (renamed from src/location/maps/tiled/qgeotiledmapreply.cpp)14
-rw-r--r--src/location/maps/qgeotiledmapreply.h (renamed from src/location/maps/tiled/qgeotiledmapreply.h)8
-rw-r--r--src/location/maps/qgeotiledmapreply_p.h (renamed from src/location/maps/tiled/qgeotiledmapreply_p.h)6
-rw-r--r--src/location/maps/qgraphicsgeomap.cpp821
-rw-r--r--src/location/maps/qgraphicsgeomap.h172
-rw-r--r--src/location/maps/tiled/makepoly_p.h138
-rw-r--r--src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp106
-rw-r--r--src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h85
-rw-r--r--src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h85
-rw-r--r--src/location/maps/tiled/qgeotiledmapdata.cpp1431
-rw-r--r--src/location/maps/tiled/qgeotiledmapdata.h115
-rw-r--r--src/location/maps/tiled/qgeotiledmapdata_p.h168
-rw-r--r--src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp137
-rw-r--r--src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h81
-rw-r--r--src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp259
-rw-r--r--src/location/maps/tiled/qgeotiledmapobjectinfo_p.h109
-rw-r--r--src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp188
-rw-r--r--src/location/maps/tiled/qgeotiledmappingmanagerengine.h83
-rw-r--r--src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h84
-rw-r--r--src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp136
-rw-r--r--src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp128
-rw-r--r--src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp147
-rw-r--r--src/location/maps/tiled/qgeotiledmaprequest.cpp266
-rw-r--r--src/location/maps/tiled/qgeotiledmaprequest.h90
-rw-r--r--src/location/maps/tiled/qgeotiledmaprequest_p.h84
-rw-r--r--src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp142
-rw-r--r--src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp169
-rw-r--r--src/location/maps/tiled/tiled.pri40
-rw-r--r--src/location/mapsgl/cameradata.cpp290
-rw-r--r--src/location/mapsgl/cameradata.h (renamed from src/location/maps/qgeomapcustomobject.h)77
-rw-r--r--src/location/mapsgl/frustum.cpp206
-rw-r--r--src/location/mapsgl/frustum_p.h145
-rw-r--r--src/location/mapsgl/map.cpp402
-rw-r--r--src/location/mapsgl/map.h (renamed from src/location/maps/qgeomapobjectinfo.h)88
-rw-r--r--src/location/mapsgl/map2d/map2d.pri11
-rw-r--r--src/location/mapsgl/map2d/map2d_p.cpp660
-rw-r--r--src/location/mapsgl/map2d/map2d_p.h161
-rw-r--r--src/location/mapsgl/map2d/projection2d_p.cpp109
-rw-r--r--src/location/mapsgl/map2d/projection2d_p.h (renamed from src/location/maps/tiled/qgeotiledmappingmanagerengine_p.h)38
-rw-r--r--src/location/mapsgl/map3d/map3d.pri26
-rw-r--r--src/location/mapsgl/map3d/map3d_p.cpp221
-rw-r--r--src/location/mapsgl/map3d/map3d_p.h (renamed from src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.h)48
-rw-r--r--src/location/mapsgl/map3d/projection3d_p.cpp128
-rw-r--r--src/location/mapsgl/map3d/projection3d_p.h (renamed from src/location/maps/qgeomapobjectinfo_p.h)36
-rw-r--r--src/location/mapsgl/map3d/sphere.cpp1234
-rw-r--r--src/location/mapsgl/map3d/sphere_p.h177
-rw-r--r--src/location/mapsgl/map3d/spheregeometry.cpp208
-rw-r--r--src/location/mapsgl/map3d/spheregeometry_p.h (renamed from src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.h)62
-rw-r--r--src/location/mapsgl/map3d/viewport.cpp (renamed from src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp)105
-rw-r--r--src/location/mapsgl/map3d/viewport_p.h (renamed from src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.h)62
-rw-r--r--src/location/mapsgl/map3d/viewportcamera.cpp166
-rw-r--r--src/location/mapsgl/map3d/viewportcamera_p.h111
-rw-r--r--src/location/mapsgl/map3d/viewporttiles.cpp424
-rw-r--r--src/location/mapsgl/map3d/viewporttiles_p.h (renamed from src/location/maps/qgraphicsgeomap_p.h)38
-rw-r--r--src/location/mapsgl/map3d/viewporttiles_p_p.h (renamed from src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.h)57
-rw-r--r--src/location/mapsgl/map3d/viewporttilesnew.cpp (renamed from src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp)95
-rw-r--r--src/location/mapsgl/map3d/viewporttilesnew_p.h (renamed from src/location/maps/qgeomapoverlay_p.h)30
-rw-r--r--src/location/mapsgl/map3d/viewporttilesold.cpp690
-rw-r--r--src/location/mapsgl/map3d/viewporttilesold_p.h (renamed from src/location/projwrapper_p.h)97
-rw-r--r--src/location/mapsgl/map_p.h154
-rw-r--r--src/location/mapsgl/mapitem.cpp167
-rw-r--r--src/location/mapsgl/mapitem.h (renamed from src/location/maps/qgeomapobject_p.h)77
-rw-r--r--src/location/mapsgl/mapsgl.pri33
-rw-r--r--src/location/mapsgl/mapsphere.cpp234
-rw-r--r--src/location/mapsgl/mapsphere_p.h (renamed from src/location/maps/qgeomapdata_p.h)90
-rw-r--r--src/location/mapsgl/projection.cpp117
-rw-r--r--src/location/mapsgl/projection_p.h (renamed from src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.h)47
-rw-r--r--src/location/mapsgl/tile.cpp (renamed from src/imports/location/qdeclarativegeomapobjectborder.cpp)76
-rw-r--r--src/location/mapsgl/tile.h (renamed from src/location/maps/qgeomapoverlay.h)54
-rw-r--r--src/location/mapsgl/tilecache.cpp455
-rw-r--r--src/location/mapsgl/tilecache.h134
-rw-r--r--src/location/mapsgl/tilecamera.cpp261
-rw-r--r--src/location/mapsgl/tilecamera.h (renamed from src/location/maps/qgeomapgroupobject.h)73
-rw-r--r--src/location/mapsgl/tilespec.cpp (renamed from src/location/maps/qgeomappolygonobject.h)112
-rw-r--r--src/location/mapsgl/tilespec.h (renamed from src/location/maps/qgeomapgroupobject_p.h)47
-rw-r--r--src/location/projwrapper_p.cpp267
-rw-r--r--src/plugins/geoservices/nokia/nokia.pro6
-rw-r--r--src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp92
-rw-r--r--src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h16
-rw-r--r--src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp30
-rw-r--r--src/plugins/geoservices/nokia/qgeomapreply_nokia.h3
-rw-r--r--src/src.pro2
-rw-r--r--tests/auto/auto.pro9
-rw-r--r--tests/auto/geotestplugin/qplacemanagerengine_test.h2
-rw-r--r--tests/auto/sphere/sphere.pro8
-rw-r--r--tests/auto/sphere/tst_sphere.cpp1493
-rw-r--r--tests/declarativetestplugin/declarativetestplugin.pro (renamed from tests/declarativetestplugin/location.pro)2
-rw-r--r--tests/declarativetestplugin/locationtest.cpp39
-rw-r--r--tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp97
-rw-r--r--tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h13
-rw-r--r--tests/systemtests/map3d/camerawidget.cpp114
-rw-r--r--tests/systemtests/map3d/camerawidget.h46
-rw-r--r--tests/systemtests/map3d/main.cpp45
-rw-r--r--tests/systemtests/map3d/mainwidget.cpp300
-rw-r--r--tests/systemtests/map3d/mainwidget.h48
-rw-r--r--tests/systemtests/map3d/map3d.pro26
-rw-r--r--tests/systemtests/map3d/tileview.cpp252
-rw-r--r--tests/systemtests/map3d/tileview.h51
-rw-r--r--tests/tests.pro2
384 files changed, 16512 insertions, 49587 deletions
diff --git a/examples/declarative/declarative.pro b/examples/declarative/declarative.pro
index 3d2ee028..4636d378 100644
--- a/examples/declarative/declarative.pro
+++ b/examples/declarative/declarative.pro
@@ -1,4 +1,5 @@
TEMPLATE = subdirs
SUBDIRS += flickr \
mapviewer \
- qmlplaces
+ qmlplaces \
+ map3d
diff --git a/examples/declarative/flickr/flickr.pro b/examples/declarative/flickr/flickr.pro
index 85401ca2..0fe03ca2 100644
--- a/examples/declarative/flickr/flickr.pro
+++ b/examples/declarative/flickr/flickr.pro
@@ -1,7 +1,7 @@
TEMPLATE=app
TARGET = qml_location_flickr
-QT += declarative network location
+QT += declarative network location qtquick1
SOURCES += qmllocationflickr.cpp
symbian {
diff --git a/examples/declarative/map3d/Dialog.qml b/examples/declarative/map3d/Dialog.qml
new file mode 100644
index 00000000..59b5b3b4
--- /dev/null
+++ b/examples/declarative/map3d/Dialog.qml
@@ -0,0 +1,171 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "common" as Common
+
+Item {
+ id: dialog
+ signal goButtonClicked
+ signal cancelButtonClicked
+
+ anchors.fill: parent
+
+ property alias title: titleBar.text
+ property alias dialogModel: dialogModel
+ property alias length: dialogModel.count
+ property int gap: 20
+ property int listItemHeight: 54
+
+ function setModel(objects)
+ {
+ for (var i=0; i< objects.length; i++){
+ dialogModel.append({"label": objects[i][0], "inputText": objects[i][1]})
+ }
+ }
+
+ Rectangle {
+ id: fader
+ anchors.fill: parent
+ opacity: 0.7
+ color: "darkgrey"
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ }
+ }
+
+ Rectangle {
+ id: dialogRectangle
+
+ color: "lightsteelblue"
+ opacity: 1
+ width: parent.width - gap;
+ height: listview.height + titleBar.height + buttonGo.height + gap*2
+
+ anchors {
+ top: parent.top
+ topMargin: 50
+ left: parent.left
+ leftMargin: gap/2
+ }
+
+ border.width: 1
+ border.color: "darkblue"
+ radius: 5
+
+ Common.TitleBar {
+ id: titleBar;
+ width: parent.width; height: 40;
+ anchors.top: parent.top; anchors.left: parent.left;
+ opacity: 0.9; text: dialog.title;
+ onClicked: { dialog.cancelButtonClicked() }
+ }
+
+ ListModel {
+ id: dialogModel
+ }
+
+ Component{
+ id: listDelegate
+ Column {
+ id: column1
+ height: listItemHeight
+ Text { id: fieldTitle; text: label; height: 24;}
+ Rectangle {
+ id: inputRectangle
+ width: dialogRectangle.width - gap; height: 30
+ color: "whitesmoke"
+ border.width: 1
+ radius: 5
+ TextInput {
+ id: inputField
+ text: inputText
+ focus: true
+ width: parent.width - anchors.leftMargin
+
+ anchors {
+ left: parent.left;
+ verticalCenter: parent.verticalCenter;
+ leftMargin: 5
+ }
+ onTextChanged:
+ {
+ dialogModel.set(index, {"inputText": text})
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: inputField.forceActiveFocus();
+ }
+ }
+ }
+ }
+
+ ListView {
+ id: listview
+ anchors {
+ top: titleBar.bottom
+ topMargin: gap
+ left: parent.left
+ leftMargin: gap/2
+ }
+ model: dialogModel
+ delegate: listDelegate
+ spacing: gap
+ interactive: false
+ Component.onCompleted: {
+ height = (listItemHeight + gap)*length
+ }
+ }
+
+ Common.Button {
+ id: buttonGo
+ text: "Go!"
+ anchors.top: listview.bottom
+ width: 80; height: 32
+ anchors.horizontalCenter: parent.horizontalCenter
+ onClicked: {
+ dialog.goButtonClicked ()
+ }
+ }
+ }
+}
+
diff --git a/examples/declarative/map3d/TitleBar.qml b/examples/declarative/map3d/TitleBar.qml
new file mode 100755
index 00000000..0a85802e
--- /dev/null
+++ b/examples/declarative/map3d/TitleBar.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 5.0
+
+Item {
+ id: titleBar
+ BorderImage { source: "titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+
+ Item {
+ id: container
+ width: (parent.width * 2) - 55 ; height: parent.height
+
+ Image {
+ id: quitButton
+ anchors.left: parent.left//; anchors.leftMargin: 0
+ anchors.verticalCenter: parent.verticalCenter
+ source: "quit.png"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: Qt.quit()
+ }
+ }
+
+ Text {
+ id: categoryText
+ anchors {
+ left: quitButton.right; leftMargin: 10; rightMargin: 10
+ verticalCenter: parent.verticalCenter
+ }
+ elide: Text.ElideLeft
+ text: "Mapviewer example"
+ font.bold: true; color: "White"; style: Text.Raised; styleColor: "Black"
+ }
+ }
+ transitions: Transition {
+ NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad }
+ }
+}
diff --git a/examples/declarative/map3d/blinky.gif b/examples/declarative/map3d/blinky.gif
new file mode 100644
index 00000000..f665b527
--- /dev/null
+++ b/examples/declarative/map3d/blinky.gif
Binary files differ
diff --git a/examples/declarative/map3d/common/Button.qml b/examples/declarative/map3d/common/Button.qml
new file mode 100755
index 00000000..a74de923
--- /dev/null
+++ b/examples/declarative/map3d/common/Button.qml
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: container
+
+ signal clicked
+
+ property alias text: buttonText.text
+ property alias color: buttonText.color
+
+ function disable() {
+ container.state = "Disabled";
+ }
+
+ function enable() {
+ container.state = "";
+ }
+
+ BorderImage {
+ id: buttonImage
+ source: "../resources/button.sci"
+ width: container.width; height: container.height
+ }
+
+ MouseArea {
+ id: mouseRegion
+ anchors.fill: buttonImage
+ hoverEnabled: true
+ onClicked: { container.clicked(); }
+ }
+ Text {
+ id: buttonText
+ color: "white"
+ anchors.centerIn: buttonImage; font.bold: true
+ style: Text.Raised; styleColor: "black"
+ }
+
+ states: [
+ State {
+ name: "Pressed"
+ when: mouseRegion.pressed == true
+ PropertyChanges { target: buttonImage; source: "../resources/button_pressed.png" }
+ PropertyChanges { target: buttonText; style: Text.Sunken }
+ },
+ State {
+ name: "Hovered"
+ when: mouseRegion.containsMouse
+ PropertyChanges{ target: buttonImage; source: "../resources/button_hovered.png" }
+ },
+ State {
+ name: "Disabled"
+ PropertyChanges{ target: buttonText; color: "grey" }
+ PropertyChanges{ target: mouseRegion; enabled: false }
+ }
+ ]
+}
diff --git a/examples/declarative/map3d/common/Menu.qml b/examples/declarative/map3d/common/Menu.qml
new file mode 100644
index 00000000..89efc983
--- /dev/null
+++ b/examples/declarative/map3d/common/Menu.qml
@@ -0,0 +1,109 @@
+import QtQuick 2.0
+
+Item {
+ id: menu
+ property int gap: 0
+ property int button: 0
+ property alias orientation: menuView.orientation
+ property alias count: menuModel.count
+ property int itemHeight //to create menu just set menu item height and width, do not set menu's height and width explicitly
+ property int itemWidth
+// height: (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count
+ width: (menuView.orientation == ListView.Horizontal)? itemWidth * count : itemWidth
+
+ signal clicked
+
+ function setModel(objects)
+ {
+ for (var i=0; i< objects.length; i++){
+ menuModel.append({"label": objects[i], "enabledItem" : true})
+ }
+ height = (menuView.orientation == ListView.Horizontal)? itemHeight : itemHeight * count
+ }
+
+ function disableItem(index){
+ menuModel.set(index, {"enabledItem": false})
+ }
+
+ function enableItem(index){
+ menuModel.set(index, {"enabledItem": true})
+ }
+
+ ListModel {
+ id: menuModel
+ }
+
+ Component{
+ id: menuItemDelegate
+ Item {
+ height: itemHeight
+ width: itemWidth
+
+ BorderImage {
+ id: menuItemImage;
+ source: "../resources/menuItem.sci";
+ height: parent.height + 14;
+ width: parent.width
+ y: -7
+ }
+
+ Text {
+ id: menuItemText
+ text: label;
+ elide: Text.ElideLeft
+ font.bold: true;
+ color: "white"
+ style: Text.Raised;
+ styleColor: "dimgrey"
+ anchors.verticalCenter: parent.verticalCenter
+ Component.onCompleted: {
+ if (menuView.orientation == ListView.Horizontal){
+ anchors.horizontalCenter = parent.horizontalCenter
+ }
+ else {
+ anchors.left = parent.left
+ anchors.leftMargin = 10
+ }
+ }
+ }
+ MouseArea {
+ id: mouseRegion
+ anchors.fill: parent
+ hoverEnabled: true
+ enabled: enabledItem
+ onClicked: {
+ button = index
+ menu.clicked()
+ }
+ }
+
+ states: [
+ State {
+ name: "Pressed"
+ when: mouseRegion.pressed == true
+ PropertyChanges { target: menuItemImage; source: "../resources/menuItem_pressed.png"}
+ PropertyChanges { target: menuItemText; style: Text.Sunken }
+ },
+ State {
+ name: "Hovered"
+ when: mouseRegion.containsMouse == true
+ PropertyChanges { target: menuItemImage; source: "../resources/menuItem_hovered.png"}
+ },
+ State {
+ name: "Disabled"
+ when: mouseRegion.enabled == false
+ PropertyChanges { target: menuItemText; color: "grey"}
+ }
+ ]
+ }
+ }
+
+ ListView {
+ id: menuView
+ anchors.fill: parent
+ model: menuModel
+ delegate: menuItemDelegate
+ spacing: gap
+ interactive: false
+ }
+}
diff --git a/examples/declarative/map3d/common/Slider.qml b/examples/declarative/map3d/common/Slider.qml
new file mode 100644
index 00000000..ce3b37b9
--- /dev/null
+++ b/examples/declarative/map3d/common/Slider.qml
@@ -0,0 +1,109 @@
+/*/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: slider;
+ height: 40
+ // value is read/write.
+ property int value
+ property real minimum: 0
+ property real maximum: 1
+ property int xMin: 2
+ property int xMax: slider.width - handle.width-xMin
+
+ Rectangle {
+ anchors.fill: parent
+ border.width: 0;
+ radius: 8
+ color: "dimgrey"
+ opacity: 0.6
+ }
+
+ Rectangle {
+ id: handle; smooth: true
+ width: 30;
+ y: xMin;
+ x: xMin + (value - minimum) * slider.xMax / (maximum - minimum)
+
+ height: slider.height-4; radius: 6
+ gradient: normalGradient
+
+ Gradient {
+ id: normalGradient
+ GradientStop { position: 0.0; color: "lightgrey" }
+ GradientStop { position: 1.0; color: "gray" }
+ }
+
+ Gradient {
+ id: pressedGradient
+ GradientStop { position: 0.0; color: "lightgray" }
+ GradientStop { position: 1.0; color: "black" }
+ }
+
+ Gradient {
+ id: hoveredGradient
+ GradientStop { position: 0.0; color: "lightgrey" }
+ GradientStop { position: 1.0; color: "dimgrey" }
+ }
+
+ MouseArea {
+ id: mouseRegion
+ hoverEnabled: true
+ anchors.fill: parent; drag.target: parent
+ drag.axis: Drag.XAxis; drag.minimumX: slider.xMin; drag.maximumX: slider.xMax
+ onPositionChanged: { value = (maximum - minimum) * (handle.x-slider.xMin) / (slider.xMax - slider.xMin) + minimum; }
+ }
+ }
+
+ states: [
+ State {
+ name: "Pressed"
+ when: mouseRegion.pressed
+ PropertyChanges { target: handle; gradient: pressedGradient }
+ },
+ State {
+ name: "Hovered"
+ when: mouseRegion.containsMouse
+ PropertyChanges { target: handle; gradient: hoveredGradient }
+ }
+ ]
+}
diff --git a/examples/declarative/map3d/common/TitleBar.qml b/examples/declarative/map3d/common/TitleBar.qml
new file mode 100755
index 00000000..f0700a8d
--- /dev/null
+++ b/examples/declarative/map3d/common/TitleBar.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+ id: titleBar
+
+ property alias text:titleText.text
+ property alias hoverEnabled: mouseRegion.hoverEnabled
+ signal clicked
+
+ BorderImage { source: "../resources/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+
+ Image {
+ id: quitButton
+ anchors.right: parent.right; anchors.rightMargin: 10
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../resources/quit.png"
+ MouseArea {
+ id: mouseRegion
+ hoverEnabled: true
+ anchors.fill: parent
+ onClicked: { titleBar.clicked(); }
+ }
+ }
+
+ Text {
+ id: titleText
+ anchors {
+ left: parent.left; leftMargin: 10; verticalCenter: parent.verticalCenter
+ }
+ elide: Text.ElideLeft
+ font.bold: true; color: "white"; style: Text.Raised; styleColor: "dimgrey"
+ }
+
+ states: [
+ State {
+ name: "Pressed"
+ when: mouseRegion.pressed
+ PropertyChanges { target: quitButton; source: "../resources/quit_pressed.png" }
+ },
+ State {
+ name: "Hover"
+ when: mouseRegion.containsMouse
+ PropertyChanges { target: quitButton; source: "../resources/quit_hovered.png" }
+ }
+ ]
+}
diff --git a/examples/declarative/map3d/map3d.pro b/examples/declarative/map3d/map3d.pro
new file mode 100644
index 00000000..555b276d
--- /dev/null
+++ b/examples/declarative/map3d/map3d.pro
@@ -0,0 +1,18 @@
+TARGET = qml_location_map3d
+TEMPLATE=app
+
+QT += declarative network
+
+SOURCES += qmlmap3d.cpp
+
+RESOURCES += \
+ map3d.qrc
+
+target.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.qml *.png *.sci
+sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer
+
+INSTALLS += target sources
+
+OTHER_FILES += \
+ map3d.qml
diff --git a/examples/declarative/map3d/map3d.qml b/examples/declarative/map3d/map3d.qml
new file mode 100644
index 00000000..645a03a4
--- /dev/null
+++ b/examples/declarative/map3d/map3d.qml
@@ -0,0 +1,600 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import Qt.location 5.0
+import Qt.location.test 5.0
+import "common" as Common
+
+Item {
+ objectName: "The page."
+ width: 1140 //360
+ height: 1085 // 640
+ //width: 360
+ //height: 640
+ id: page
+
+ //Rectangle {
+ // id: bottleAnimation
+ // width: animation.width; height: animation.height + 8
+ // }
+
+ // From location.test plugin
+ TestModel {
+ id: testModel
+ datatype: 'coordinate'
+ datacount: 8
+ delay: 0
+ crazyMode: false // generate arbitrarily updates. interval is set below, and the number of items is varied between 0..datacount
+ crazyLevel: 2000 // the update interval varies between 3...crazyLevel (ms)
+ }
+
+ Item {
+ visible: false
+ id: shaderItem
+ width: 256
+ height: 256
+ x: 100
+ y: 100
+ Rectangle {
+ radius: 20
+ id: shaderRect
+ width: parent.width
+ height: parent.height/4
+ color: 'red'
+ z: 1
+ Text {text: "Wicked!"}
+
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation { from: "DeepSkyBlue"; to: "red"; duration: 2000 }
+ ColorAnimation { from: "red"; to: "DeepSkyBlue"; duration: 2000 }
+ }
+ }
+ Rectangle {
+ id: shaderRect2
+ opacity: 0.5
+ //width: parent.width
+ anchors.fill: shaderRect
+ //height: parent.height/4
+ color: 'green'
+ Text {text: "Sick!"}
+ }
+ Rectangle {
+ id: shaderRect3
+ width: parent.width
+ anchors.top: shaderRect2.bottom
+ height: parent.height/4
+ color: 'blue'
+ Text {text: "Sick!"}
+ }
+ Rectangle {
+ width: parent.width
+ anchors.top: shaderRect3.bottom
+ height: parent.height/4
+ color: 'yellow'
+ Text {text: "Sick!"}
+ }
+ }
+
+ Column {
+ id: buttonColumn
+ anchors.top: page.top
+ anchors.left: map.right
+ spacing: 2
+
+ Rectangle {color: "lightblue"; width: 80; height: 80;
+ Text {text: "Crazy mode:\n" + testModel.crazyMode + "\nclick to\ntoggle."}
+ MouseArea{ anchors.fill: parent;
+ onClicked: testModel.crazyMode = !testModel.crazyMode
+ onDoubleClicked: map.removeMapItem(mapItem1)
+ }
+ }
+ AnimatedImage {
+ MouseArea { anchors.fill: parent; onClicked: mapItem2.source = parent }
+ width: 80
+ height: 80
+ playing: testModel.crazyMode
+ source: "blinky.gif"
+ }
+ Rectangle {color: "lightblue"; width: 80; height: 80;
+ Text {text: "Click:\nadd item1\nDouble-click:\nrm item1"}
+ MouseArea{ anchors.fill: parent;
+ onClicked: {console.log('----------------adding item 1'); map.addMapItem(externalStaticMapItem1);}
+ onDoubleClicked: {console.log('+++++++++++++++ removing item 1'); map.removeMapItem(externalStaticMapItem1);}
+ }
+ }
+ Rectangle {color: "lightblue"; width: 80; height: 80;
+ Text {text: "Click:\nadd item2\nDouble-click:\nrm item2"}
+ MouseArea{ anchors.fill: parent;
+ onClicked: {console.log('adding item 2'); map.addMapItem(externalStaticMapItem2);}
+ onDoubleClicked: {console.log('removing item 2'); map.removeMapItem(externalStaticMapItem2);}
+ }
+ }
+ }
+
+ /*
+ MapItem {
+ id: externalStaticMapItem1
+ objectName: "externalStaticMapItem1"
+ coordinate: brisbaneCoordinate
+ zoomLevel: 5.0
+ source: Rectangle {
+ color: "gray"
+ width: 140
+ height: 20
+ Text {font.pixelSize: 15;text: "ext map item 1"; font.bold: true; color: 'red'}
+ }
+ }
+
+ MapItem {
+ id: externalStaticMapItem2
+ objectName: "externalStaticMapItem2"
+ coordinate: brisbaneCoordinate2
+ zoomLevel: 5.0
+ source: Rectangle {
+ color: "gray"
+ width: 140
+ height: 20
+ Text {font.pixelSize: 15;text: "ext map item 2"; font.bold: true; color: 'red'}
+ }
+ }
+ */
+
+ /*
+ MapItem {
+ id: mapItem1
+ source: AnimatedImage {width: 80; height: 80; playing: true; source: "walk.gif"}
+ }
+ */
+
+ //AnimatedImage {width: 80; height: 80; playing: true; source: "walk.gif"}
+ //MapItem {id: mapItem2 }
+ //MapItem {id: mapItem3 }
+ //MapItem {id: mapItem4 }
+ //MapItem {id: mapItem5 }
+ //MapItem {id: mapItem6 }
+ //MapItem {id: mapItem7 }
+ //MapItem {id: mapItem8 }
+
+ Coordinate {
+ id: brisbaneCoordinate
+ latitude: -27.5
+ longitude: 140
+ }
+
+ Coordinate {
+ id: brisbaneCoordinate2
+ latitude: -30.5
+ longitude: 140
+ }
+
+ Map3D {
+ id: map
+ z: 3
+
+ /*
+ MapItem {
+ objectName: 'blinky static item'
+ zoomLevel: 7 // at which map's zoom level the width and height are '1-to-1'
+ coordinate: brisbaneCoordinate
+ source: AnimatedImage {
+ width: 80
+ height: 80
+ playing: true
+ source: "blinky.gif"
+ }
+ }
+ */
+
+
+ //MapItem {
+ // source: Rectangle { width: 40; height: 40; color: 'chocolate'
+ // }
+ // }
+ /*
+ MapObjectView {
+ id: theObjectView
+ model: testModel
+ delegate: Component {
+ MapItem {
+ objectName: 'one of many items from model'
+ visible: true
+ live: true
+ recursive: true
+ source: Rectangle {
+ width: 300; height: 300; color: 'green'
+ Component.onCompleted: {
+ var num = (Math.floor(4 * Math.random()));
+ switch (num % 4) {
+ case 0:
+ color = "#ff0000";
+ break;
+ case 1:
+ color = "#0000ff";
+ break;
+ case 2:
+ color = "#00ffff";
+ break;
+ case 3:
+ color = "#00ff00";
+ break;
+ }
+ }
+
+ }
+ coordinate: Coordinate {
+ latitude: modeldata.coordinate.latitude;
+ longitude: modeldata.coordinate.longitude;
+ }
+ }
+ }
+ }
+ */
+
+ // From location.test plugin
+ PinchGenerator {
+ id: pinchGenerator
+ anchors.fill: parent
+ target: map
+ enabled: false
+ focus: true // enables keyboard control for convinience
+ replaySpeedFactor: 1.1 // replay with 1.1 times the recording speed to better see what happens
+ Text {
+ text: "PinchArea state: " + pinchGenerator.state + "\n"
+ + "Swipes recorded: " + pinchGenerator.count + "\n"
+ + "Replay speed factor: " + pinchGenerator.replaySpeedFactor
+ }
+ }
+ /*
+ Keys.onPressed: {
+ if (event.key == Qt.Key_A) {
+ console.log('Key A was pressed');
+ //event.accepted = true;
+ }
+ }
+ */
+
+ Row {
+ id: textRow1
+ spacing: 15
+ y: 1050
+ Text {id: firstText; text: "Map zoom level: " + map.zoomLevel; color: 'red'; font.bold: true}
+ Text {text: "Pinch zoom sensitivity: " + map.pinch.maximumZoomLevelChange; color: firstText.color; font.bold: true}
+ Text {text: "Pinch rotation sensitivity: " + map.pinch.rotationSpeed; color: firstText.color; font.bold: true}
+ }
+
+ Row {
+ spacing: 15
+ anchors.top: textRow1.bottom
+ Text {text: "Pinch tilt sensitivity: " + map.pinch.maximumTiltChange; color: firstText.color; font.bold: true}
+ Text {text: "Flick deceleration: " + map.flick.deceleration; color: firstText.color; font.bold: true}
+ Text {text: "Weather: Sunny, mild, late showers."; color: firstText.color; font.bold: true}
+ }
+ plugin : Plugin {name : "nokia"}
+ // commented features are checked to work at least somehow
+ x: 0
+ y: 0
+ //size.width: 100
+ //size.height: 100
+ //anchors.left: parent.left
+ //anchors.bottom: parent.bottom
+ //anchors.leftMargin: 70
+ //scale: 2
+ //visible: false
+ //transform: Translate {y: 200}
+ //anchors.fill: page
+ width: page.width - 80
+ height: 1000
+ zoomLevel: 5.1
+
+ // pinch.activeGestures: MapPinch.ZoomGesture | RotationGesture
+ pinch.activeGestures: MapPinch.NoGesture
+
+ pinch.enabled: true
+ pinch.maximumZoomLevel: 20 // biggest zoomlevel allowed
+ pinch.minimumZoomLevel: 1 // smallest zoomlevel allowed
+ pinch.maximumZoomLevelChange: 1.0 // maximum zoomlevel changes per pinch
+ pinch.maximumRotation: 0 // unlimited
+ pinch.minimumRotation: 0 // unlimited
+ pinch.rotationSpeed: 1.0 // default ~follows angle between fingers
+ pinch.maximumTilt: 90
+ pinch.minimumTilt: 0
+ pinch.maximumTiltChange: 35
+
+ // Flicking
+ flick.enabled: true
+ flick.deceleration: 3000
+ flick.onFlickStarted: {console.log ('flick started signal F Start ++++++++++++++++++ ') }
+ flick.onFlickEnded: {console.log ('flick ended signal F Stop ------------------ ') }
+ flick.onMovementStarted: {console.log('movement started signal M Start ++++++++++++++++++ ') }
+ flick.onMovementEnded: {console.log ('movement ended signal M Stop ------------------ ') }
+
+
+ onWheel: {
+ console.log('map wheel event, rotation in degrees: ' + delta/8);
+ if (delta > 0) map.zoomLevel += 0.25
+ else map.zoomLevel -= 0.25
+ }
+
+ pinch.onPinchStarted: {
+ console.log('Map element pinch started---------+++++++++++++++++++++++++++++++++++++')
+ pinchRect1.x = pinch.point1.x; pinchRect1.y = pinch.point1.y;
+ pinchRect2.x = pinch.point2.x; pinchRect2.y = pinch.point2.y;
+ pinchRect1.visible = true; pinchRect2.visible = true;
+ //console.log('Point 1 x: ' + pinch.point1.x + ' Point2 x' + pinch.point2.x)
+ //console.log('Center x: ' + pinch.center.x + ' Point1 y: ' + pinch.point1.y)
+ }
+ pinch.onPinchUpdated: {
+ console.log('Map element pinch updated---------+++++++++++++++++++++++++++++++++++++')
+ pinchRect1.x = pinch.point1.x; pinchRect1.y = pinch.point1.y;
+ pinchRect2.x = pinch.point2.x; pinchRect2.y = pinch.point2.y;
+ }
+ pinch.onPinchFinished: {
+ console.log('Map element pinch finished ---------+++++++++++++++++++++++++++++++++++++')
+ pinchRect1.visible = false; pinchRect2.visible = false;
+ //map.pinch.minimumZoomLevel = map.zoomLevel - 2
+ //map.pinch.maximumZoomLevel = map.zoomLevel + 2
+ }
+
+
+ //focus : true
+ center: Coordinate {
+ latitude: 51.5
+ longitude: -0.11
+ }
+// MouseArea {
+// id: mapMouse
+// objectName: "mouse area in map within Map"
+// anchors.fill: parent // should not be set
+// enabled: true
+
+// onCanceled: {console.log('mouse area in map canceled')}
+// onEntered: {console.log('mouse area in map entered')}
+// onExited: {console.log('mouse area in map exited')}
+// //onPositionChanged: {console.log('mouse area in map position changed')}
+// onReleased: {console.log('mouse area in map released')}
+
+// onPressed: {console.log('mouse area in map in map pressed')}
+// onDoubleClicked: {console.log('mouse area in map in map doubleclicked')}
+// onPressAndHold: {console.log('mouse area in map press and hold signal received')}
+// onClicked: {console.log('mouse area in map in map clicked')}
+
+// //drag.target: map
+// //drag.axis: Drag.XandYAxis
+// //drag.minimumX: 0
+// //drag.maximumX: page.width - map.width
+// //drag.minimumY: 0
+// //drag.maximumY: page.height - map.height
+// }
+
+ MouseArea {
+ id: excessiveMouseAreaGeneratesWarningForTestPurposes
+ }
+
+ // <unsupported so far>
+ //rotation: 10 // strangely impacts the size of the map element though
+ //transform: Scale { origin.x: 25; origin.y: 25; xScale: 3} // weirdly translates the item
+ //transform: Rotation { origin.y: 25; origin.x: 25; angle: 45} // weirdly translates the item
+ //z: 4 // map will always be under everything, will not be supported
+ //opacity: 0.4 // doesn't probably make sense
+ //clip: true // not implemented, not sure if very useful either
+ // </unsupported so far>
+ }
+
+
+
+ Row {
+ id: buttonRow
+ anchors.leftMargin: 2
+ anchors.topMargin: 2
+ anchors.top: map.bottom;
+ spacing: 2
+ Rectangle { id: rowRect1; width: 80; height: 45; color: 'peru';
+ MouseArea { anchors.fill: parent; onClicked: { map.pinch.maximumZoomLevelChange += 0.1}
+ Text {text: "Pinch zoom\nsensitivity+"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumZoomLevelChange -= 0.1}
+ Text {text: "Pinch zoom\nsensitivity-"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.pinch.rotationSpeed += 0.1}
+ Text {text: "Pinch rotation\nsensitivity+"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.pinch.rotationSpeed -= 0.1}
+ Text {text: "Pinch rotation\nsensitivity-"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumTiltChange += 1}
+ Text {text: "Pinch tilt\nsensitivity+"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.pinch.maximumTiltChange -= 1}
+ Text {text: "Pinch tilt\nsensitivity-"}
+ }
+ }
+ Rectangle { id: rowRectPinchGen; width: rowRect1.width; height: rowRect1.height; color: 'lightsteelblue';
+ Text { text: "Pinch\nzoom:\n" + ((map.pinch.activeGestures & MapPinch.ZoomGesture) > 0? "Yes":"No")}
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ console.log('map pinch active gestures' + map.pinch.activeGestures);
+ if (map.pinch.activeGestures & MapPinch.ZoomGesture)
+ map.pinch.activeGestures &= ~MapPinch.ZoomGesture
+ else
+ map.pinch.activeGestures += MapPinch.ZoomGesture
+ }
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color;
+ Text { text: "Pinch\nrotation:\n" + ((map.pinch.activeGestures & MapPinch.RotationGesture) > 0? "Yes":"No")}
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ console.log('map pinch active gestures' + map.pinch.activeGestures);
+ if (map.pinch.activeGestures & MapPinch.RotationGesture)
+ map.pinch.activeGestures &= ~MapPinch.RotationGesture
+ else
+ map.pinch.activeGestures += MapPinch.RotationGesture
+ }
+ }
+ }
+
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color;
+ Text { text: "Pinch\ntilt:\n" + ((map.pinch.activeGestures & MapPinch.TiltGesture) > 0? "Yes":"No")}
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ console.log('map pinch active gestures' + map.pinch.activeGestures);
+ if (map.pinch.activeGestures & MapPinch.TiltGesture)
+ map.pinch.activeGestures &= ~MapPinch.TiltGesture
+ else
+ map.pinch.activeGestures += MapPinch.TiltGesture
+ }
+ }
+
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRectPinchGen.color;
+ Text { id: generatorEnabledText; text: pinchGenerator.enabled? "Pinch Gen\nEnabled" : "Pinch Gen\nDisabled"; font.bold: true}
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ if (pinchGenerator.focus == true) {
+ pinchGenerator.focus = false;
+ pinchGenerator.enabled = false;
+ pinchGenerator.z = -1
+ map.focus = true;
+ } else {
+ pinchGenerator.focus = true
+ pinchGenerator.enabled = true;
+ pinchGenerator.z = 10
+ map.focus = false
+ }
+ }
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ Text {text: map.flick.enabled? "Flick\nEnabled":"Flick\nDisabled"; font.bold: true}
+ MouseArea { anchors.fill: parent; onClicked: {map.flick.enabled = !map.flick.enabled} }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.flick.deceleration += 200}
+ Text {text: "Flick\ndeceleration+"}
+ }
+ }
+ Rectangle { width: rowRect1.width; height: rowRect1.height; color: rowRect1.color;
+ MouseArea { anchors.fill: parent; onClicked: {map.flick.deceleration -= 200}
+ Text {text: "Flick\ndeceleration-"}
+ }
+ }
+ } // Row
+
+ Rectangle {
+ id: pinchRect1
+ color: 'red'
+ visible: false
+ z: 10
+ width: 5
+ height: 5
+ }
+ Rectangle {
+ id: pinchRect2
+ color: 'red'
+ visible: false
+ z: 10
+ width: 5
+ height: 5
+ }
+
+ Repeater {
+ id: swipeView1
+ model: pinchGenerator.swipe1
+ delegate: Component {
+ Rectangle {
+ Text {id: touchPointText}
+ Component.onCompleted: {
+ if (modelData.touchState == 1) { // Qt.TouchPointPressed
+ color = "pink"; width = 15; height = 15
+ touchPointText.text = 'From'
+ }
+ else if (modelData.touchState == 2) { // Qt.TouchPointMoved
+ color = 'yellow'; width = 5; height = 5
+ }
+ else if (modelData.touchState == 8) { // Qt.TouchPointReleased
+ color = 'red'; width = 15; height = 15
+ touchPointText.text = 'To'
+ }
+ }
+ x: modelData.targetX; y: modelData.targetY
+ }
+ }
+ }
+
+ Repeater {
+ id: swipeView2
+ model: pinchGenerator.swipe2
+ delegate: Component {
+ Rectangle {
+ Text {id: touchPoint2Text}
+ Component.onCompleted: {
+ if (modelData.touchState == 1) { // Qt.TouchPointPressed
+ color = "green"; width = 15; height = 15
+ touchPoint2Text.text = 'From'
+ }
+ else if (modelData.touchState == 2) { // Qt.TouchPointMoved
+ color = 'yellow'; width = 5; height = 5
+ }
+ else if (modelData.touchState == 8) { // Qt.TouchPointReleased
+ color = 'blue'; width = 15; height = 15
+ touchPoint2Text.text = 'To'
+ }
+ }
+ x: modelData.targetX; y: modelData.targetY
+ }
+ }
+ }
+}
diff --git a/examples/declarative/map3d/map3d.qrc b/examples/declarative/map3d/map3d.qrc
new file mode 100644
index 00000000..3b5e4e1f
--- /dev/null
+++ b/examples/declarative/map3d/map3d.qrc
@@ -0,0 +1,24 @@
+<RCC>
+ <qresource prefix="/">
+ <file>map3d.qml</file>
+ <file>Dialog.qml</file>
+ <file>common/TitleBar.qml</file>
+ <file>common/Button.qml</file>
+ <file>common/Slider.qml</file>
+ <file>common/Menu.qml</file>
+ <file>resources/button.png</file>
+ <file>resources/button.sci</file>
+ <file>resources/quit.png</file>
+ <file>resources/titlebar.png</file>
+ <file>resources/titlebar.sci</file>
+ <file>resources/quit_pressed.png</file>
+ <file>resources/menuItem.png</file>
+ <file>resources/menuItem.sci</file>
+ <file>resources/menuItem_pressed.png</file>
+ <file>resources/quit_hovered.png</file>
+ <file>resources/menuItem_hovered.png</file>
+ <file>resources/button_pressed.png</file>
+ <file>resources/button_hovered.png</file>
+ <file>blinky.gif</file>
+ </qresource>
+</RCC>
diff --git a/examples/declarative/map3d/qmlmap3d.cpp b/examples/declarative/map3d/qmlmap3d.cpp
new file mode 100644
index 00000000..0072e2f1
--- /dev/null
+++ b/examples/declarative/map3d/qmlmap3d.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QApplication>
+#include <QtDeclarative/QDeclarativeEngine>
+#include <QNetworkProxy>
+#include <QtDeclarative/qsgview.h>
+
+// QML2 app
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ // For internal testing purposes
+ //qmlRegisterType<PinchGenerator>("QtQuick", 2, 0, "PinchGenerator");
+
+ QGLFormat f = QGLFormat::defaultFormat();
+ f.setSampleBuffers(true);
+ //f.setSwapInterval(1);
+ QSGView view(f);
+
+ const QString mainQmlApp = QLatin1String("qrc:///map3d.qml");
+ view.setSource(QUrl(mainQmlApp));
+ // Temporary development-time proxy setting. TODO improve later.
+ QNetworkProxy proxy;
+ proxy.setType(QNetworkProxy::HttpProxy);
+ proxy.setHostName("nokes.nokia.com");
+ proxy.setPort(8080);
+ QNetworkProxy::setApplicationProxy(proxy);
+ // Qt.quit() called in embedded .qml by default only emits
+ // quit() signal, so do this (optionally use Qt.exit()).
+ QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit()));
+ if (QApplication::arguments().contains(QLatin1String("-maximize"))) {
+ view.showMaximized();
+ } else if (QApplication::arguments().contains(QLatin1String("-fullscreen"))) {
+ view.showFullScreen();
+ } else {
+ //view.setGeometry(QRect(100, 100, 360, 640));
+ //view.showMaximized();
+ view.show();
+ }
+ view.raise();
+ return app.exec();
+}
diff --git a/examples/declarative/map3d/quit.png b/examples/declarative/map3d/quit.png
new file mode 100755
index 00000000..5bda1b6e
--- /dev/null
+++ b/examples/declarative/map3d/quit.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/button.png b/examples/declarative/map3d/resources/button.png
new file mode 100755
index 00000000..11310013
--- /dev/null
+++ b/examples/declarative/map3d/resources/button.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/button.sci b/examples/declarative/map3d/resources/button.sci
new file mode 100755
index 00000000..a34a58b6
--- /dev/null
+++ b/examples/declarative/map3d/resources/button.sci
@@ -0,0 +1,5 @@
+border.left: 15
+border.top: 4
+border.bottom: 4
+border.right: 15
+source: button.png
diff --git a/examples/declarative/map3d/resources/button_hovered.png b/examples/declarative/map3d/resources/button_hovered.png
new file mode 100755
index 00000000..7c9b9b63
--- /dev/null
+++ b/examples/declarative/map3d/resources/button_hovered.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/button_pressed.png b/examples/declarative/map3d/resources/button_pressed.png
new file mode 100755
index 00000000..b290b6b9
--- /dev/null
+++ b/examples/declarative/map3d/resources/button_pressed.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/menuItem.png b/examples/declarative/map3d/resources/menuItem.png
new file mode 100755
index 00000000..51c90082
--- /dev/null
+++ b/examples/declarative/map3d/resources/menuItem.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/menuItem.sci b/examples/declarative/map3d/resources/menuItem.sci
new file mode 100755
index 00000000..0418d94c
--- /dev/null
+++ b/examples/declarative/map3d/resources/menuItem.sci
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
diff --git a/examples/declarative/map3d/resources/menuItem_hovered.png b/examples/declarative/map3d/resources/menuItem_hovered.png
new file mode 100755
index 00000000..16c1a94e
--- /dev/null
+++ b/examples/declarative/map3d/resources/menuItem_hovered.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/menuItem_pressed.png b/examples/declarative/map3d/resources/menuItem_pressed.png
new file mode 100755
index 00000000..3ab14f1f
--- /dev/null
+++ b/examples/declarative/map3d/resources/menuItem_pressed.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/quit.png b/examples/declarative/map3d/resources/quit.png
new file mode 100755
index 00000000..5bda1b6e
--- /dev/null
+++ b/examples/declarative/map3d/resources/quit.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/quit_hovered.png b/examples/declarative/map3d/resources/quit_hovered.png
new file mode 100755
index 00000000..d4b900cf
--- /dev/null
+++ b/examples/declarative/map3d/resources/quit_hovered.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/quit_pressed.png b/examples/declarative/map3d/resources/quit_pressed.png
new file mode 100755
index 00000000..05c4ef83
--- /dev/null
+++ b/examples/declarative/map3d/resources/quit_pressed.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/titlebar.png b/examples/declarative/map3d/resources/titlebar.png
new file mode 100755
index 00000000..51c90082
--- /dev/null
+++ b/examples/declarative/map3d/resources/titlebar.png
Binary files differ
diff --git a/examples/declarative/map3d/resources/titlebar.sci b/examples/declarative/map3d/resources/titlebar.sci
new file mode 100755
index 00000000..0418d94c
--- /dev/null
+++ b/examples/declarative/map3d/resources/titlebar.sci
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
diff --git a/examples/declarative/map3d/titlebar.png b/examples/declarative/map3d/titlebar.png
new file mode 100755
index 00000000..51c90082
--- /dev/null
+++ b/examples/declarative/map3d/titlebar.png
Binary files differ
diff --git a/examples/declarative/map3d/titlebar.sci b/examples/declarative/map3d/titlebar.sci
new file mode 100755
index 00000000..0418d94c
--- /dev/null
+++ b/examples/declarative/map3d/titlebar.sci
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
diff --git a/examples/declarative/mapviewer/mapviewer.pro b/examples/declarative/mapviewer/mapviewer.pro
index adc53344..5d931a8e 100644
--- a/examples/declarative/mapviewer/mapviewer.pro
+++ b/examples/declarative/mapviewer/mapviewer.pro
@@ -1,7 +1,7 @@
TARGET = qml_location_mapviewer
TEMPLATE=app
-QT += qtquick1 declarative network
+QT += declarative network
SOURCES += qmlmapviewer.cpp
symbian {
diff --git a/examples/examples.pro b/examples/examples.pro
index 1161e17a..085f0672 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,3 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS += declarative \
- maps
+SUBDIRS += declarative map3d
diff --git a/examples/map3d/camerawidget.cpp b/examples/map3d/camerawidget.cpp
new file mode 100644
index 00000000..6b1e0dd2
--- /dev/null
+++ b/examples/map3d/camerawidget.cpp
@@ -0,0 +1,114 @@
+#include "camerawidget.h"
+
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QGridLayout>
+
+CameraWidget::CameraWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi();
+}
+
+void CameraWidget::setupUi()
+{
+ QLabel *latLabel = new QLabel("Latitude");
+ lat_ = new QLineEdit();
+
+ QLabel *lonLabel = new QLabel("Longitude");
+ lon_ = new QLineEdit();
+
+ QLabel *distanceLabel = new QLabel("Distance");
+ distance_ = new QLineEdit();
+
+ QLabel *zoomLevelLabel = new QLabel("Zoom Level");
+ zoomLevel_ = new QLineEdit();
+
+ QLabel *zoomFactorLabel = new QLabel("Zoom Factor");
+ zoomFactor_ = new QLineEdit();
+
+ QLabel *bearingLabel = new QLabel("Bearing");
+ bearing_ = new QLineEdit();
+
+ QLabel *tiltLabel = new QLabel("Tilt");
+ tilt_ = new QLineEdit();
+
+ QLabel *rollLabel = new QLabel("Roll");
+ roll_ = new QLineEdit();
+
+ QGridLayout *grid = new QGridLayout();
+ grid->addWidget(latLabel, 0, 0);
+ grid->addWidget(lat_, 0, 1);
+ grid->addWidget(lonLabel, 1, 0);
+ grid->addWidget(lon_, 1, 1);
+ grid->addWidget(distanceLabel, 2, 0);
+ grid->addWidget(distance_, 2, 1);
+ grid->addWidget(zoomLevelLabel, 3, 0);
+ grid->addWidget(zoomLevel_, 3, 1);
+ grid->addWidget(zoomFactorLabel, 4, 0);
+ grid->addWidget(zoomFactor_, 4, 1);
+ grid->addWidget(bearingLabel, 5, 0);
+ grid->addWidget(bearing_, 5, 1);
+ grid->addWidget(tiltLabel, 6, 0);
+ grid->addWidget(tilt_, 6, 1);
+ grid->addWidget(rollLabel, 7, 0);
+ grid->addWidget(roll_, 7, 1);
+
+ update_ = new QPushButton("Update");
+ connect(update_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(updateCamera()));
+
+ capture_ = new QPushButton("Capture");
+ connect(capture_,
+ SIGNAL(clicked()),
+ this,
+ SIGNAL(capture()));
+
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->addLayout(grid);
+ layout->addWidget(update_);
+ layout->addWidget(capture_);
+
+ setLayout(layout);
+}
+
+CameraData CameraWidget::camera() const
+{
+ return cam_;
+}
+
+void CameraWidget::setCamera(const CameraData& camera)
+{
+ cam_ = camera;
+
+ lat_->setText(QString::number(cam_.center().latitude(), 'g', 10));
+ lon_->setText(QString::number(cam_.center().longitude(), 'g', 10));
+ distance_->setText(QString::number(cam_.distance(), 'g', 4));
+ zoomLevel_->setText(QString::number(cam_.zoomLevel()));
+ zoomFactor_->setText(QString::number(cam_.zoomFactor()));
+ bearing_->setText(QString::number(cam_.bearing(), 'g', 10));
+ tilt_->setText(QString::number(cam_.tilt(), 'g', 10));
+ roll_->setText(QString::number(cam_.roll(), 'g', 10));
+}
+
+void CameraWidget::updateCamera()
+{
+ double lat = lat_->text().toDouble();
+ double lon = lon_->text().toDouble();
+ cam_.setCenter(QGeoCoordinate(lat, lon));
+ if (!zoomFactor_->text().isEmpty()) {
+ cam_.setZoomFactor(zoomFactor_->text().toDouble());
+ } else {
+ cam_.setZoomLevel(zoomLevel_->text().toInt());
+ cam_.setDistance(distance_->text().toDouble());
+ }
+ cam_.setBearing(bearing_->text().toDouble());
+ cam_.setTilt(tilt_->text().toDouble());
+ cam_.setRoll(roll_->text().toDouble());
+
+ emit updated();
+}
diff --git a/examples/map3d/camerawidget.h b/examples/map3d/camerawidget.h
new file mode 100644
index 00000000..d3e8faa4
--- /dev/null
+++ b/examples/map3d/camerawidget.h
@@ -0,0 +1,46 @@
+#ifndef CAMERAWIDGET_H
+#define CAMERAWIDGET_H
+
+#include <QWidget>
+
+#include "cameradata.h"
+
+class QLineEdit;
+class QPushButton;
+
+class CameraWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ CameraWidget(QWidget *parent = 0);
+
+ CameraData camera() const;
+
+public slots:
+ void setCamera(const CameraData& camera);
+
+private slots:
+ void updateCamera();
+
+signals:
+ void updated();
+ void capture();
+
+private:
+ void setupUi();
+
+ CameraData cam_;
+
+ QLineEdit *lat_;
+ QLineEdit *lon_;
+ QLineEdit *distance_;
+ QLineEdit *zoomLevel_;
+ QLineEdit *zoomFactor_;
+ QLineEdit *bearing_;
+ QLineEdit *tilt_;
+ QLineEdit *roll_;
+ QPushButton *update_;
+ QPushButton *capture_;
+};
+
+#endif // CAMERAWIDGET_H
diff --git a/examples/map3d/main.cpp b/examples/map3d/main.cpp
new file mode 100644
index 00000000..4c9d0b85
--- /dev/null
+++ b/examples/map3d/main.cpp
@@ -0,0 +1,45 @@
+#include <QApplication>
+
+#include <QUrl>
+#include <QSettings>
+#include <QProcessEnvironment>
+#include <QNetworkProxyFactory>
+
+#include "mainwidget.h"
+
+int main(int argc, char** argv)
+{
+ QApplication app(argc, argv);
+
+ // not in the tutorial text: set up a proxy server from
+ // a QSettings file if necessary (useful on Linux)
+
+ QApplication::setOrganizationName("Nokia");
+ QApplication::setApplicationName("Maps3D");
+
+ QSettings settings;
+
+ QVariant value = settings.value("http.proxy");
+ if (value.isValid()) {
+ QUrl url(value.toString(), QUrl::TolerantMode);
+ QNetworkProxy proxy;
+ proxy.setType(QNetworkProxy::HttpProxy);
+ proxy.setHostName(url.host());
+ proxy.setPort(url.port(8080));
+ QNetworkProxy::setApplicationProxy(proxy);
+ }
+
+ int bm = 0;
+
+ if (argc == 2) {
+ bool ok = false;
+ bm = QString(QLatin1String(argv[1])).toInt(&ok);
+ if (!ok)
+ bm = 0;
+ }
+
+ MainWidget *w = new MainWidget(0, bm);
+ w->show();
+
+ return app.exec();
+}
diff --git a/examples/map3d/mainwidget.cpp b/examples/map3d/mainwidget.cpp
new file mode 100644
index 00000000..1ad6a6dd
--- /dev/null
+++ b/examples/map3d/mainwidget.cpp
@@ -0,0 +1,300 @@
+#include "mainwidget.h"
+
+#include "tilecache.h"
+#include "tileview.h"
+#include "camerawidget.h"
+
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QTextEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QLineEdit>
+#include <QTimer>
+#include <QComboBox>
+
+#include <QApplication>
+
+#include <QPropertyAnimation>
+#include <QSequentialAnimationGroup>
+
+MainWidget::MainWidget(QWidget *parent, int bm)
+ : QWidget(parent),
+ exitWhenDone_(false)
+{
+ TileCache *cache = new TileCache();
+
+ tileView_ = new TileView(cache);
+ tileView_->setMinimumSize(450, 450);
+
+ camera1_ = new CameraWidget();
+
+ connect(camera1_,
+ SIGNAL(updated()),
+ this,
+ SLOT(camera1Update()));
+ connect(camera1_,
+ SIGNAL(capture()),
+ this,
+ SLOT(camera1Capture()));
+
+ camera2_ = new CameraWidget();
+
+ animate1_ = new QPushButton("Go");
+ connect(animate1_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(animate1Clicked()));
+
+ animate2_ = new QPushButton("Go");
+ connect(animate2_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(animate2Clicked()));
+
+ QLabel *durationLabel = new QLabel("Duration");
+ duration_ = new QLineEdit();
+ duration_->setText("2000");
+
+ QLabel *easingLabel = new QLabel("Easing Curve");
+ easing_ = new QComboBox();
+ easing_->setEditable(false);
+
+ easing_->addItem("Linear", 0);
+
+ easing_->addItem("InQuad", 1);
+ easing_->addItem("OutQuad", 2);
+ easing_->addItem("InOutQuad", 3);
+ easing_->addItem("OutInQuad", 4);
+
+ easing_->addItem("InCubic", 5);
+ easing_->addItem("OutCubic", 6);
+ easing_->addItem("InOutCubic", 7);
+ easing_->addItem("OutInCubic", 8);
+
+ easing_->addItem("InQuart", 9);
+ easing_->addItem("OutQuart", 10);
+ easing_->addItem("InOutQuart", 11);
+ easing_->addItem("OutInQuart", 12);
+
+ easing_->addItem("InQunit", 13);
+ easing_->addItem("OutQunit", 14);
+ easing_->addItem("InOutQunit", 15);
+ easing_->addItem("OutInQunit", 16);
+
+ easing_->addItem("InSine", 17);
+ easing_->addItem("OutSine", 18);
+ easing_->addItem("InOutSine", 19);
+ easing_->addItem("OutInSine", 20);
+
+ easing_->addItem("InExpo", 21);
+ easing_->addItem("OutExpo", 22);
+ easing_->addItem("InOutExpo", 23);
+ easing_->addItem("OutInExpo", 24);
+
+ easing_->addItem("InCirc", 25);
+ easing_->addItem("OutCirc", 26);
+ easing_->addItem("InOutCirc", 27);
+ easing_->addItem("OutInCirc", 28);
+
+ easing_->addItem("InElastic", 29);
+ easing_->addItem("OutElastic", 30);
+ easing_->addItem("InOutElastic", 31);
+ easing_->addItem("OutInElastic", 32);
+
+ easing_->addItem("InBounce", 33);
+ easing_->addItem("OutBounce", 34);
+ easing_->addItem("InOutBounce", 35);
+ easing_->addItem("OutInBounce", 36);
+
+ easing_->addItem("InBack", 37);
+ easing_->addItem("OutBack", 38);
+ easing_->addItem("InOutBack", 39);
+ easing_->addItem("OutInBack", 40);
+
+ connect(camera2_,
+ SIGNAL(updated()),
+ this,
+ SLOT(camera2Update()));
+ connect(camera2_,
+ SIGNAL(capture()),
+ this,
+ SLOT(camera2Capture()));
+
+ bm1Button_ = new QPushButton("Benchmark 1");
+ connect(bm1Button_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(runBenchmark1()));
+
+ QGridLayout *animateLayout = new QGridLayout;
+ animateLayout->addWidget(durationLabel, 0, 0);
+ animateLayout->addWidget(duration_, 0, 1);
+ animateLayout->addWidget(easingLabel, 1, 0);
+ animateLayout->addWidget(easing_, 1, 1);
+
+ QGridLayout *cameraLayout = new QGridLayout;
+ cameraLayout->addWidget(camera1_, 0, 0);
+ cameraLayout->addWidget(camera2_, 0, 1);
+ cameraLayout->addLayout(animateLayout, 1, 0, 1, 2);
+ cameraLayout->addWidget(animate1_, 2, 0);
+ cameraLayout->addWidget(animate2_, 2, 1);
+ cameraLayout->addWidget(bm1Button_, 3, 0);
+ cameraLayout->setRowStretch(4, 1);
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addLayout(cameraLayout, 0);
+ layout->addWidget(tileView_, 1);
+
+ CameraData c1;
+ camera1_->setCamera(c1);
+ CameraData c2;
+ c2.setCenter(QGeoCoordinate(-19.2, 146.75));
+ c2.setZoomFactor(8.0);
+ camera2_->setCamera(c2);
+
+ setLayout(layout);
+
+ if (bm == 1) {
+ exitWhenDone_ = true;
+ QTimer::singleShot(0, this, SLOT(runBenchmark1()));
+ }
+}
+
+void MainWidget::runBenchmark1()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+
+ CameraData newCameraData;
+ newCameraData.setCenter(QGeoCoordinate(-19.2, 146.75));
+ newCameraData.setZoomFactor(8.0);
+ // hack to get the internal projection set in the cameradata object
+ tileView_->map()->setCameraData(newCameraData);
+ CameraData newCamera = tileView_->map()->cameraData();
+
+ CameraData oldCameraData;
+ oldCameraData.setCenter(QGeoCoordinate(-27.5, 153));
+ oldCameraData.setZoomFactor(4.0);
+ // hack to get the internal projection set in the cameradata object
+ tileView_->map()->setCameraData(oldCameraData);
+ CameraData oldCamera = tileView_->map()->cameraData();
+
+ QPropertyAnimation *a20f = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a20f->setStartValue(QVariant::fromValue(oldCamera));
+ a20f->setEndValue(QVariant::fromValue(newCamera));
+ a20f->setDuration(20000);
+
+ QPropertyAnimation *a20b = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a20b->setStartValue(QVariant::fromValue(newCamera));
+ a20b->setEndValue(QVariant::fromValue(oldCamera));
+ a20b->setDuration(20000);
+
+ QPropertyAnimation *a2f = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a2f->setStartValue(QVariant::fromValue(oldCamera));
+ a2f->setEndValue(QVariant::fromValue(newCamera));
+ a2f->setDuration(2000);
+
+ QPropertyAnimation *a2b = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a2b->setStartValue(QVariant::fromValue(newCamera));
+ a2b->setEndValue(QVariant::fromValue(oldCamera));
+ a2b->setDuration(2000);
+
+ QSequentialAnimationGroup *s2 = new QSequentialAnimationGroup(this);
+ s2->addAnimation(a2f);
+ s2->addAnimation(a2b);
+ s2->setLoopCount(10);
+
+ QSequentialAnimationGroup *s = new QSequentialAnimationGroup(this);
+ s->addAnimation(a20f);
+ s->addAnimation(a20b);
+ s->addAnimation(s2);
+
+ if (exitWhenDone_) {
+ connect(s,
+ SIGNAL(finished()),
+ qApp,
+ SLOT(quit()));
+ }
+
+ QTimer::singleShot(0, s, SLOT(start()));
+
+}
+
+void MainWidget::camera1Update()
+{
+ tileView_->map()->setCameraData(camera1_->camera());
+ if (!tileView_->map()->autoUpdate())
+ tileView_->map()->update();
+}
+
+void MainWidget::camera2Update()
+{
+ tileView_->map()->setCameraData(camera2_->camera());
+ if (!tileView_->map()->autoUpdate())
+ tileView_->map()->update();
+}
+
+void MainWidget::camera1Capture()
+{
+ camera1_->setCamera(tileView_->map()->cameraData());
+}
+
+void MainWidget::camera2Capture()
+{
+ camera2_->setCamera(tileView_->map()->cameraData());
+}
+
+void MainWidget::animate1Clicked()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+ CameraData oldCamera = tileView_->map()->cameraData();
+ CameraData newCamera = camera1_->camera();
+
+ QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this);
+
+ connect(a,
+ SIGNAL(finished()),
+ this,
+ SLOT(animationFinished()));
+
+ a->setStartValue(QVariant::fromValue(oldCamera));
+ a->setEndValue(QVariant::fromValue(newCamera));
+ a->setDuration(duration_->text().toInt());
+ a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt()));
+
+ QTimer::singleShot(0, a, SLOT(start()));
+}
+
+void MainWidget::animate2Clicked()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+ CameraData oldCamera = tileView_->map()->cameraData();
+ CameraData newCamera = camera2_->camera();
+
+ QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this);
+
+ connect(a,
+ SIGNAL(finished()),
+ this,
+ SLOT(animationFinished()));
+
+ a->setStartValue(QVariant::fromValue(oldCamera));
+ a->setEndValue(QVariant::fromValue(newCamera));
+ a->setDuration(duration_->text().toInt());
+ a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt()));
+
+// TilePlan *tp = new TilePlan(a);
+// tileView_->map()->mapCamera()->prepareAnimation(tp);
+// delete tp;
+
+ QTimer::singleShot(0, a, SLOT(start()));
+}
+
+void MainWidget::animationFinished()
+{
+ tileView_->map()->setAutoUpdate(oldAutoUpdate_);
+}
diff --git a/examples/map3d/mainwidget.h b/examples/map3d/mainwidget.h
new file mode 100644
index 00000000..3a7f072d
--- /dev/null
+++ b/examples/map3d/mainwidget.h
@@ -0,0 +1,48 @@
+#ifndef MAINWIDGET_H
+#define MAINWIDGET_H
+
+#include <QWidget>
+
+class TileView;
+class CameraWidget;
+
+class QTextEdit;
+class QPushButton;
+class QLineEdit;
+class QComboBox;
+
+class MainWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ MainWidget(QWidget *parent = 0, int bm = 0);
+
+public slots:
+ void camera1Update();
+ void camera1Capture();
+ void camera2Update();
+ void camera2Capture();
+ void animate1Clicked();
+ void animate2Clicked();
+ void animationFinished();
+
+ void runBenchmark1();
+
+private:
+ TileView *tileView_;
+
+ CameraWidget *camera1_;
+ CameraWidget *camera2_;
+ QLineEdit *duration_;
+ QComboBox *easing_;
+ QPushButton *animate1_;
+ QPushButton *animate2_;
+
+ QPushButton *bm1Button_;
+
+ bool exitWhenDone_;
+
+ bool oldAutoUpdate_;
+};
+
+#endif // MAINWIDGET_H
diff --git a/examples/map3d/map3d.pro b/examples/map3d/map3d.pro
new file mode 100644
index 00000000..058b1f47
--- /dev/null
+++ b/examples/map3d/map3d.pro
@@ -0,0 +1,26 @@
+
+TEMPLATE = app
+TARGET = map3d
+
+CONFIG += qt warn_on qt3d
+
+QT += network location
+
+INCLUDEPATH += ../../src/location/mapsgl/map3d
+
+HEADERS += \
+ camerawidget.h \
+ mainwidget.h \
+ tileview.h
+
+SOURCES += \
+ main.cpp \
+ camerawidget.cpp \
+ mainwidget.cpp \
+ tileview.cpp
+
+#install
+target.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d
+sources.files = $$SOURCES $HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d
+INSTALLS += target sources
diff --git a/examples/map3d/tileview.cpp b/examples/map3d/tileview.cpp
new file mode 100644
index 00000000..48ddd9ff
--- /dev/null
+++ b/examples/map3d/tileview.cpp
@@ -0,0 +1,254 @@
+#include "tileview.h"
+
+#include "tilecache.h"
+#include "tile.h"
+#include "cameradata.h"
+#include "mapitem.h"
+
+#include "qgeocoordinate.h"
+
+#include "qgeoserviceprovider.h"
+#include "qgeomappingmanager.h"
+
+#include <qglscenenode.h>
+#include <qglbuilder.h>
+#include <qgeometrydata.h>
+
+#include <QApplication>
+#include <QKeyEvent>
+#include <QTimer>
+
+#include <QColor>
+
+#include <QPropertyAnimation>
+
+#include <cmath>
+
+#include <QDebug>
+
+TileView::TileView(TileCache *tileCache, QWidget *parent) :
+ QGLView(parent),
+ tileCache_(tileCache)
+{
+ serviceProvider_ = new QGeoServiceProvider("nokia");
+ map_ = new Map(tileCache, this);
+ map_->setMappingManager(serviceProvider_->mappingManager());
+ map_->setAutoUpdate(false);
+
+ connect(map_,
+ SIGNAL(updateRequired()),
+ this,
+ SLOT(update()));
+
+ setCamera(map_->glCamera());
+
+
+// MapItem *item1 = new MapItem;
+// item1->setCoordinate(QGeoCoordinate(-27, 153));
+// item1->setSize(QSizeF(128, 128));
+// item1->setZoom(5);
+// map_->addMapItem(item1);
+
+// MapItem *item2 = new MapItem;
+// item2->setCoordinate(QGeoCoordinate(-27, 153));
+// item2->setSize(QSizeF(128, 128));
+// item2->setAnchor(QPointF(128, 128));
+// item2->setZoom(5);
+// map_->addMapItem(item2);
+
+// MapItem *item3 = new MapItem;
+// item3->setCoordinate(QGeoCoordinate(-27, 153));
+// item3->setSize(QSizeF(256.0, 256.0));
+// item3->setAnchor(QPointF(-256.0, -256.0));
+// item3->setZoom(6);
+// map_->addMapItem(item3);
+}
+
+TileView::~TileView()
+{
+ delete serviceProvider_;
+}
+
+Map* TileView::map()
+{
+ return map_;
+}
+
+void TileView::closeEvent(QCloseEvent *)
+{
+ qApp->quit();
+}
+
+void TileView::paintGL(QGLPainter *painter)
+{
+ map_->paintGL(painter);
+// QGLSceneNode *node = map_->sceneNodeForRendering();
+// if (node) {
+// node->draw(painter);
+// map_->sceneNodeRenderingDone();
+// }
+}
+
+void TileView::showEvent(QShowEvent *)
+{
+ updateAspectRatio();
+}
+
+void TileView::resizeEvent(QResizeEvent *event)
+{
+ QGLView::resizeEvent(event);
+ updateAspectRatio();
+}
+
+void TileView::updateAspectRatio()
+{
+ map_->resize(width(), height());
+}
+
+void TileView::enterEvent(QEvent *)
+{
+ setFocus();
+ grabKeyboard();
+}
+
+void TileView::leaveEvent(QEvent *)
+{
+ releaseKeyboard();
+}
+
+void TileView::keyPressEvent(QKeyEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+ if (e->key() == Qt::Key_Left) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Right) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Up) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Down) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Plus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ cameraData.setDistance(cameraData.distance() / 2.0);
+ cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() / 1.1);
+ }
+ } else if (e->key() == Qt::Key_Minus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ if (cameraData.zoomLevel() != 1)
+ cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+ cameraData.setDistance(cameraData.distance() * 2.0);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() * 1.1);
+ }
+ } else if (e->key() == Qt::Key_U) {
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ }
+ map_->setCameraData(cameraData);
+ update();
+}
+
+void TileView::wheelEvent(QWheelEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+ if (e->delta() > 0) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ cameraData.setDistance(cameraData.distance() / 2.0);
+ cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() / 1.1);
+ }
+ } else {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ if (cameraData.zoomLevel() != 1)
+ cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+ cameraData.setDistance(cameraData.distance() * 2.0);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() * 1.1);
+ }
+ }
+ map_->setCameraData(cameraData);
+ update();
+
+ e->accept();
+}
+
+void TileView::mousePressEvent(QMouseEvent *e)
+{
+ switch (e->button()) {
+ case Qt::LeftButton:
+ mousePos_ = e->pos();
+// QGeoCoordinate coord = map_->screenPositionToCoordinate(mousePos_);
+// qDebug() << __FUNCTION__
+// << "mousePos " << mousePos_
+// << " -> coord " << coord
+// << " -> screen " << map_->coordinateToScreenPosition(coord);
+ break;
+ default:
+ break;
+ }
+ e->accept();
+}
+
+void TileView::mouseReleaseEvent(QMouseEvent *)
+{
+}
+
+void TileView::mouseMoveEvent(QMouseEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+
+ if ((e->buttons() & Qt::LeftButton) == Qt::LeftButton)
+ {
+ // Pixel pan support?!
+ QPoint delta = (mousePos_ - e->pos()) / 50;
+
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() + delta.y());
+ coord.setLongitude(coord.longitude() - delta.x());
+ cameraData.setCenter(coord);
+
+ map_->setCameraData(cameraData);
+ update();
+ }
+ e->accept();
+}
diff --git a/examples/map3d/tileview.h b/examples/map3d/tileview.h
new file mode 100644
index 00000000..51774087
--- /dev/null
+++ b/examples/map3d/tileview.h
@@ -0,0 +1,51 @@
+#ifndef TILEVIEW_H
+#define TILEVIEW_H
+
+#include <qglview.h>
+
+#include "cameradata.h"
+#include "map.h"
+
+class QGLPainter;
+class QGLSceneNode;
+class TileCache;
+class Tile;
+class TileSpec;
+class MapSphere;
+class QGeoServiceProvider;
+class ScriptEngine;
+
+class TileView : public QGLView
+{
+ Q_OBJECT
+public:
+ explicit TileView(TileCache *tileCache, QWidget *parent = 0);
+ ~TileView();
+
+ Map *map();
+
+ void paintGL(QGLPainter *painter);
+
+protected:
+ void showEvent(QShowEvent *);
+ void resizeEvent(QResizeEvent *);
+ void enterEvent(QEvent *);
+ void leaveEvent(QEvent *e);
+ void keyPressEvent(QKeyEvent *e);
+ void closeEvent(QCloseEvent *);
+
+ void wheelEvent(QWheelEvent *e);
+ void mousePressEvent(QMouseEvent *e);
+ void mouseReleaseEvent(QMouseEvent *e);
+ void mouseMoveEvent(QMouseEvent *e);
+
+private:
+ void updateAspectRatio();
+
+ QGeoServiceProvider *serviceProvider_;
+ TileCache *tileCache_;
+ Map *map_;
+ QPoint mousePos_;
+};
+
+#endif // TILEVIEW_H
diff --git a/src/3rdparty/proj.pri b/src/3rdparty/proj.pri
deleted file mode 100644
index b954a9ad..00000000
--- a/src/3rdparty/proj.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-INCLUDEPATH += $$PWD/proj/include
-
-DEFINES += DISABLE_CVSID
-
-symbian {
- LIBS += -llibpthread -llibm
-}
diff --git a/src/3rdparty/proj.pro b/src/3rdparty/proj.pro
deleted file mode 100644
index beee478d..00000000
--- a/src/3rdparty/proj.pro
+++ /dev/null
@@ -1,158 +0,0 @@
-TEMPLATE=lib
-CONFIG+=static
-
-include(proj.pri)
-
-CONFIG += warn_off
-
-SOURCES += \
- $$PWD/proj/PJ_aeqd.c \
- $$PWD/proj/PJ_gnom.c \
- $$PWD/proj/PJ_laea.c \
- $$PWD/proj/PJ_mod_ster.c \
- $$PWD/proj/PJ_nsper.c \
- $$PWD/proj/PJ_nzmg.c \
- $$PWD/proj/PJ_ortho.c \
- $$PWD/proj/PJ_stere.c \
- $$PWD/proj/PJ_sterea.c \
- $$PWD/proj/PJ_aea.c \
- $$PWD/proj/PJ_bipc.c \
- $$PWD/proj/PJ_bonne.c \
- $$PWD/proj/PJ_eqdc.c \
- $$PWD/proj/PJ_imw_p.c \
- $$PWD/proj/PJ_krovak.c \
- $$PWD/proj/PJ_lcc.c \
- $$PWD/proj/PJ_poly.c \
- $$PWD/proj/PJ_rpoly.c \
- $$PWD/proj/PJ_sconics.c \
- $$PWD/proj/proj_rouss.c \
- $$PWD/proj/PJ_cass.c \
- $$PWD/proj/PJ_cc.c \
- $$PWD/proj/PJ_cea.c \
- $$PWD/proj/PJ_eqc.c \
- $$PWD/proj/PJ_gall.c \
- $$PWD/proj/PJ_labrd.c \
- $$PWD/proj/PJ_lsat.c \
- $$PWD/proj/PJ_merc.c \
- $$PWD/proj/PJ_mill.c \
- $$PWD/proj/PJ_ocea.c \
- $$PWD/proj/PJ_omerc.c \
- $$PWD/proj/PJ_somerc.c \
- $$PWD/proj/PJ_tcc.c \
- $$PWD/proj/PJ_tcea.c \
- $$PWD/proj/PJ_tmerc.c \
- $$PWD/proj/PJ_airy.c \
- $$PWD/proj/PJ_aitoff.c \
- $$PWD/proj/PJ_august.c \
- $$PWD/proj/PJ_bacon.c \
- $$PWD/proj/PJ_chamb.c \
- $$PWD/proj/PJ_hammer.c \
- $$PWD/proj/PJ_lagrng.c \
- $$PWD/proj/PJ_larr.c \
- $$PWD/proj/PJ_lask.c \
- $$PWD/proj/PJ_nocol.c \
- $$PWD/proj/PJ_ob_tran.c \
- $$PWD/proj/PJ_oea.c \
- $$PWD/proj/PJ_tpeqd.c \
- $$PWD/proj/PJ_vandg.c \
- $$PWD/proj/PJ_vandg2.c \
- $$PWD/proj/PJ_vandg4.c \
- $$PWD/proj/PJ_wag7.c \
- $$PWD/proj/PJ_lcca.c \
- $$PWD/proj/PJ_geos.c \
- $$PWD/proj/PJ_boggs.c \
- $$PWD/proj/PJ_collg.c \
- $$PWD/proj/PJ_crast.c \
- $$PWD/proj/PJ_denoy.c \
- $$PWD/proj/PJ_eck1.c \
- $$PWD/proj/PJ_eck2.c \
- $$PWD/proj/PJ_eck3.c \
- $$PWD/proj/PJ_eck4.c \
- $$PWD/proj/PJ_eck5.c \
- $$PWD/proj/PJ_fahey.c \
- $$PWD/proj/PJ_fouc_s.c \
- $$PWD/proj/PJ_gins8.c \
- $$PWD/proj/PJ_gstmerc.c \
- $$PWD/proj/PJ_gn_sinu.c \
- $$PWD/proj/PJ_goode.c \
- $$PWD/proj/PJ_hatano.c \
- $$PWD/proj/PJ_loxim.c \
- $$PWD/proj/PJ_mbt_fps.c \
- $$PWD/proj/PJ_mbtfpp.c \
- $$PWD/proj/PJ_mbtfpq.c \
- $$PWD/proj/PJ_moll.c \
- $$PWD/proj/PJ_nell.c \
- $$PWD/proj/PJ_nell_h.c \
- $$PWD/proj/PJ_putp2.c \
- $$PWD/proj/PJ_putp3.c \
- $$PWD/proj/PJ_putp4p.c \
- $$PWD/proj/PJ_putp5.c \
- $$PWD/proj/PJ_putp6.c \
- $$PWD/proj/PJ_robin.c \
- $$PWD/proj/PJ_sts.c \
- $$PWD/proj/PJ_urm5.c \
- $$PWD/proj/PJ_urmfps.c \
- $$PWD/proj/PJ_wag2.c \
- $$PWD/proj/PJ_wag3.c \
- $$PWD/proj/PJ_wink1.c \
- $$PWD/proj/PJ_wink2.c \
- $$PWD/proj/pj_latlong.c \
- $$PWD/proj/pj_geocent.c \
- $$PWD/proj/aasincos.c \
- $$PWD/proj/adjlon.c \
- $$PWD/proj/bch2bps.c \
- $$PWD/proj/bchgen.c \
- $$PWD/proj/biveval.c \
- $$PWD/proj/dmstor.c \
- $$PWD/proj/mk_cheby.c \
- $$PWD/proj/pj_auth.c \
- $$PWD/proj/pj_deriv.c \
- $$PWD/proj/pj_ell_set.c \
- $$PWD/proj/pj_ellps.c \
- $$PWD/proj/pj_errno.c \
- $$PWD/proj/pj_factors.c \
- $$PWD/proj/pj_fwd.c \
- $$PWD/proj/pj_init.c \
- $$PWD/proj/pj_inv.c \
- $$PWD/proj/pj_list.c \
- $$PWD/proj/pj_malloc.c \
- $$PWD/proj/pj_mlfn.c \
- $$PWD/proj/pj_msfn.c \
- $$PWD/proj/proj_mdist.c \
- $$PWD/proj/pj_open_lib_qt.cpp \
- $$PWD/proj/pj_param.c \
- $$PWD/proj/pj_phi2.c \
- $$PWD/proj/pj_pr_list.c \
- $$PWD/proj/pj_qsfn.c \
- $$PWD/proj/pj_strerrno.c \
- $$PWD/proj/pj_tsfn.c \
- $$PWD/proj/pj_units.c \
- $$PWD/proj/pj_zpoly1.c \
- $$PWD/proj/rtodms.c \
- $$PWD/proj/vector1.c \
- $$PWD/proj/pj_release.c \
- $$PWD/proj/pj_gauss.c \
- $$PWD/proj/nad_cvt.c \
- $$PWD/proj/nad_init.c \
- $$PWD/proj/nad_intr.c \
- $$PWD/proj/emess.c \
- $$PWD/proj/pj_apply_gridshift.c \
- $$PWD/proj/pj_datums.c \
- $$PWD/proj/pj_datum_set.c \
- $$PWD/proj/pj_transform.c \
- $$PWD/proj/geocent.c \
- $$PWD/proj/pj_utils.c \
- $$PWD/proj/pj_gridinfo.c \
- $$PWD/proj/pj_gridlist.c \
- $$PWD/proj/pj_mutex.c \
- $$PWD/proj/pj_initcache.c
-
-unix {
- DEFINES += MUTEX_pthread
-}
-
-win32 {
- DEFINES += MUTEX_win32
-}
-
-RESOURCES += $$PWD/proj/data.qrc
diff --git a/src/3rdparty/proj/PJ_aea.c b/src/3rdparty/proj/PJ_aea.c
deleted file mode 100644
index c3799365..00000000
--- a/src/3rdparty/proj/PJ_aea.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/******************************************************************************
- * $Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the aea (Albers Equal Area) projection.
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PROJ_PARMS__ \
- double ec; \
- double n; \
- double c; \
- double dd; \
- double n2; \
- double rho0; \
- double rho; \
- double phi1; \
- double phi2; \
- double *en; \
- int ellips;
-
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-# define EPS10 1.e-10
-# define TOL7 1.e-7
-
-PROJ_HEAD(aea, "Albers Equal Area")
- "\n\tConic Sph&Ell\n\tlat_1= lat_2=";
-PROJ_HEAD(leac, "Lambert Equal Area Conic")
- "\n\tConic, Sph&Ell\n\tlat_1= south";
-/* determine latitude angle phi-1 */
-# define N_ITER 15
-# define EPSILON 1.0e-7
-# define TOL 1.0e-10
- static double
-phi1_(double qs, double Te, double Tone_es) {
- int i;
- double Phi, sinpi, cospi, con, com, dphi;
-
- Phi = asin (.5 * qs);
- if (Te < EPSILON)
- return( Phi );
- i = N_ITER;
- do {
- sinpi = sin (Phi);
- cospi = cos (Phi);
- con = Te * sinpi;
- com = 1. - con * con;
- dphi = .5 * com * com / cospi * (qs / Tone_es -
- sinpi / com + .5 / Te * log ((1. - con) /
- (1. + con)));
- Phi += dphi;
- } while (fabs(dphi) > TOL && --i);
- return( i ? Phi : HUGE_VAL );
-}
-FORWARD(e_forward); /* ellipsoid & spheroid */
- if ((P->rho = P->c - (P->ellips ? P->n * pj_qsfn(sin(lp.phi),
- P->e, P->one_es) : P->n2 * sin(lp.phi))) < 0.) F_ERROR
- P->rho = P->dd * sqrt(P->rho);
- xy.x = P->rho * sin( lp.lam *= P->n );
- xy.y = P->rho0 - P->rho * cos(lp.lam);
- return (xy);
-}
-INVERSE(e_inverse) /* ellipsoid & spheroid */;
- if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) {
- if (P->n < 0.) {
- P->rho = -P->rho;
- xy.x = -xy.x;
- xy.y = -xy.y;
- }
- lp.phi = P->rho / P->dd;
- if (P->ellips) {
- lp.phi = (P->c - lp.phi * lp.phi) / P->n;
- if (fabs(P->ec - fabs(lp.phi)) > TOL7) {
- if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL)
- I_ERROR
- } else
- lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- } else if (fabs(lp.phi = (P->c - lp.phi * lp.phi) / P->n2) <= 1.)
- lp.phi = asin(lp.phi);
- else
- lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- lp.lam = atan2(xy.x, xy.y) / P->n;
- } else {
- lp.lam = 0.;
- lp.phi = P->n > 0. ? HALFPI : - HALFPI;
- }
- return (lp);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
- static PJ *
-setup(PJ *P) {
- double cosphi, sinphi;
- int secant;
-
- if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21);
- P->n = sinphi = sin(P->phi1);
- cosphi = cos(P->phi1);
- secant = fabs(P->phi1 - P->phi2) >= EPS10;
- if( (P->ellips = (P->es > 0.))) {
- double ml1, m1;
-
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- m1 = pj_msfn(sinphi, cosphi, P->es);
- ml1 = pj_qsfn(sinphi, P->e, P->one_es);
- if (secant) { /* secant cone */
- double ml2, m2;
-
- sinphi = sin(P->phi2);
- cosphi = cos(P->phi2);
- m2 = pj_msfn(sinphi, cosphi, P->es);
- ml2 = pj_qsfn(sinphi, P->e, P->one_es);
- P->n = (m1 * m1 - m2 * m2) / (ml2 - ml1);
- }
- P->ec = 1. - .5 * P->one_es * log((1. - P->e) /
- (1. + P->e)) / P->e;
- P->c = m1 * m1 + P->n * ml1;
- P->dd = 1. / P->n;
- P->rho0 = P->dd * sqrt(P->c - P->n * pj_qsfn(sin(P->phi0),
- P->e, P->one_es));
- } else {
- if (secant) P->n = .5 * (P->n + sin(P->phi2));
- P->n2 = P->n + P->n;
- P->c = cosphi * cosphi + P->n2 * sinphi;
- P->dd = 1. / P->n;
- P->rho0 = P->dd * sqrt(P->c - P->n2 * sin(P->phi0));
- }
- P->inv = e_inverse; P->fwd = e_forward;
- return P;
-}
-ENTRY1(aea,en)
- P->phi1 = pj_param(P->params, "rlat_1").f;
- P->phi2 = pj_param(P->params, "rlat_2").f;
-ENDENTRY(setup(P))
-ENTRY1(leac,en)
- P->phi2 = pj_param(P->params, "rlat_1").f;
- P->phi1 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_aeqd.c b/src/3rdparty/proj/PJ_aeqd.c
deleted file mode 100644
index dea9edff..00000000
--- a/src/3rdparty/proj/PJ_aeqd.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/******************************************************************************
- * $Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection.
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PROJ_PARMS__ \
- double sinph0; \
- double cosph0; \
- double *en; \
- double M1; \
- double N1; \
- double Mp; \
- double He; \
- double G; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam";
-
-#define EPS10 1.e-10
-#define TOL 1.e-14
-
-#define N_POLE 0
-#define S_POLE 1
-#define EQUIT 2
-#define OBLIQ 3
-FORWARD(e_guam_fwd); /* Guam elliptical */
- double cosphi, sinphi, t;
-
- cosphi = cos(lp.phi);
- sinphi = sin(lp.phi);
- t = 1. / sqrt(1. - P->es * sinphi * sinphi);
- xy.x = lp.lam * cosphi * t;
- xy.y = pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->M1 +
- .5 * lp.lam * lp.lam * cosphi * sinphi * t;
- return (xy);
-}
-FORWARD(e_forward); /* elliptical */
- double coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA;
-
- coslam = cos(lp.lam);
- cosphi = cos(lp.phi);
- sinphi = sin(lp.phi);
- switch (P->mode) {
- case N_POLE:
- coslam = - coslam;
- case S_POLE:
- xy.x = (rho = fabs(P->Mp - pj_mlfn(lp.phi, sinphi, cosphi, P->en))) *
- sin(lp.lam);
- xy.y = rho * coslam;
- break;
- case EQUIT:
- case OBLIQ:
- if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) {
- xy.x = xy.y = 0.;
- break;
- }
- t = atan2(P->one_es * sinphi + P->es * P->N1 * P->sinph0 *
- sqrt(1. - P->es * sinphi * sinphi), cosphi);
- ct = cos(t); st = sin(t);
- Az = atan2(sin(lp.lam) * ct, P->cosph0 * st - P->sinph0 * coslam * ct);
- cA = cos(Az); sA = sin(Az);
- s = aasin( fabs(sA) < TOL ?
- (P->cosph0 * st - P->sinph0 * coslam * ct) / cA :
- sin(lp.lam) * ct / sA );
- H = P->He * cA;
- H2 = H * H;
- c = P->N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. +
- s * ( P->G * H * (1. - 2. * H2 * H2) / 8. +
- s * ((H2 * (4. - 7. * H2) - 3. * P->G * P->G * (1. - 7. * H2)) /
- 120. - s * P->G * H / 48.))));
- xy.x = c * sA;
- xy.y = c * cA;
- break;
- }
- return (xy);
-}
-FORWARD(s_forward); /* spherical */
- double coslam, cosphi, sinphi;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case EQUIT:
- xy.y = cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam;
-oblcon:
- if (fabs(fabs(xy.y) - 1.) < TOL)
- if (xy.y < 0.)
- F_ERROR
- else
- xy.x = xy.y = 0.;
- else {
- xy.y = acos(xy.y);
- xy.y /= sin(xy.y);
- xy.x = xy.y * cosphi * sin(lp.lam);
- xy.y *= (P->mode == EQUIT) ? sinphi :
- P->cosph0 * sinphi - P->sinph0 * cosphi * coslam;
- }
- break;
- case N_POLE:
- lp.phi = -lp.phi;
- coslam = -coslam;
- case S_POLE:
- if (fabs(lp.phi - HALFPI) < EPS10) F_ERROR;
- xy.x = (xy.y = (HALFPI + lp.phi)) * sin(lp.lam);
- xy.y *= coslam;
- break;
- }
- return (xy);
-}
-INVERSE(e_guam_inv); /* Guam elliptical */
- double x2, t;
- int i;
-
- x2 = 0.5 * xy.x * xy.x;
- lp.phi = P->phi0;
- for (i = 0; i < 3; ++i) {
- t = P->e * sin(lp.phi);
- lp.phi = pj_inv_mlfn(P->M1 + xy.y -
- x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, P->en);
- }
- lp.lam = xy.x * t / cos(lp.phi);
- return (lp);
-}
-INVERSE(e_inverse); /* elliptical */
- double c, Az, cosAz, A, B, D, E, F, psi, t;
-
- if ((c = hypot(xy.x, xy.y)) < EPS10) {
- lp.phi = P->phi0;
- lp.lam = 0.;
- return (lp);
- }
- if (P->mode == OBLIQ || P->mode == EQUIT) {
- cosAz = cos(Az = atan2(xy.x, xy.y));
- t = P->cosph0 * cosAz;
- B = P->es * t / P->one_es;
- A = - B * t;
- B *= 3. * (1. - A) * P->sinph0;
- D = c / P->N1;
- E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.));
- F = 1. - E * E * (A / 2. + B * E / 6.);
- psi = aasin(P->sinph0 * cos(E) + t * sin(E));
- lp.lam = aasin(sin(Az) * sin(E) / cos(psi));
- if ((t = fabs(psi)) < EPS10)
- lp.phi = 0.;
- else if (fabs(t - HALFPI) < 0.)
- lp.phi = HALFPI;
- else
- lp.phi = atan((1. - P->es * F * P->sinph0 / sin(psi)) * tan(psi) /
- P->one_es);
- } else { /* Polar */
- lp.phi = pj_inv_mlfn(P->mode == N_POLE ? P->Mp - c : P->Mp + c,
- P->es, P->en);
- lp.lam = atan2(xy.x, P->mode == N_POLE ? -xy.y : xy.y);
- }
- return (lp);
-}
-INVERSE(s_inverse); /* spherical */
- double cosc, c_rh, sinc;
-
- if ((c_rh = hypot(xy.x, xy.y)) > PI) {
- if (c_rh - EPS10 > PI) I_ERROR;
- c_rh = PI;
- } else if (c_rh < EPS10) {
- lp.phi = P->phi0;
- lp.lam = 0.;
- return (lp);
- }
- if (P->mode == OBLIQ || P->mode == EQUIT) {
- sinc = sin(c_rh);
- cosc = cos(c_rh);
- if (P->mode == EQUIT) {
- lp.phi = aasin(xy.y * sinc / c_rh);
- xy.x *= sinc;
- xy.y = cosc * c_rh;
- } else {
- lp.phi = aasin(cosc * P->sinph0 + xy.y * sinc * P->cosph0 /
- c_rh);
- xy.y = (cosc - P->sinph0 * sin(lp.phi)) * c_rh;
- xy.x *= sinc * P->cosph0;
- }
- lp.lam = xy.y == 0. ? 0. : atan2(xy.x, xy.y);
- } else if (P->mode == N_POLE) {
- lp.phi = HALFPI - c_rh;
- lp.lam = atan2(xy.x, -xy.y);
- } else {
- lp.phi = c_rh - HALFPI;
- lp.lam = atan2(xy.x, xy.y);
- }
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->en)
- pj_dalloc(P->en);
- pj_dalloc(P);
- }
-}
-ENTRY1(aeqd, en)
- P->phi0 = pj_param(P->params, "rlat_0").f;
- if (fabs(fabs(P->phi0) - HALFPI) < EPS10) {
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- P->sinph0 = P->phi0 < 0. ? -1. : 1.;
- P->cosph0 = 0.;
- } else if (fabs(P->phi0) < EPS10) {
- P->mode = EQUIT;
- P->sinph0 = 0.;
- P->cosph0 = 1.;
- } else {
- P->mode = OBLIQ;
- P->sinph0 = sin(P->phi0);
- P->cosph0 = cos(P->phi0);
- }
- if (! P->es) {
- P->inv = s_inverse; P->fwd = s_forward;
- } else {
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- if (pj_param(P->params, "bguam").i) {
- P->M1 = pj_mlfn(P->phi0, P->sinph0, P->cosph0, P->en);
- P->inv = e_guam_inv; P->fwd = e_guam_fwd;
- } else {
- switch (P->mode) {
- case N_POLE:
- P->Mp = pj_mlfn(HALFPI, 1., 0., P->en);
- break;
- case S_POLE:
- P->Mp = pj_mlfn(-HALFPI, -1., 0., P->en);
- break;
- case EQUIT:
- case OBLIQ:
- P->inv = e_inverse; P->fwd = e_forward;
- P->N1 = 1. / sqrt(1. - P->es * P->sinph0 * P->sinph0);
- P->G = P->sinph0 * (P->He = P->e / sqrt(P->one_es));
- P->He *= P->cosph0;
- break;
- }
- P->inv = e_inverse; P->fwd = e_forward;
- }
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_airy.c b/src/3rdparty/proj/PJ_airy.c
deleted file mode 100644
index 2de02ee2..00000000
--- a/src/3rdparty/proj/PJ_airy.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/******************************************************************************
- * $Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the airy (Airy) projection.
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PROJ_PARMS__ \
- double p_halfpi; \
- double sinph0; \
- double cosph0; \
- double Cb; \
- int mode; \
- int no_cut; /* do not cut at hemisphere limit */
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b=";
-
-# define EPS 1.e-10
-# define N_POLE 0
-# define S_POLE 1
-# define EQUIT 2
-# define OBLIQ 3
-FORWARD(s_forward); /* spheroid */
- double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz;
-
- sinlam = sin(lp.lam);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case EQUIT:
- case OBLIQ:
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- cosz = cosphi * coslam;
- if (P->mode == OBLIQ)
- cosz = P->sinph0 * sinphi + P->cosph0 * cosz;
- if (!P->no_cut && cosz < -EPS)
- F_ERROR;
- if (fabs(s = 1. - cosz) > EPS) {
- t = 0.5 * (1. + cosz);
- Krho = -log(t)/s - P->Cb / t;
- } else
- Krho = 0.5 - P->Cb;
- xy.x = Krho * cosphi * sinlam;
- if (P->mode == OBLIQ)
- xy.y = Krho * (P->cosph0 * sinphi -
- P->sinph0 * cosphi * coslam);
- else
- xy.y = Krho * sinphi;
- break;
- case S_POLE:
- case N_POLE:
- lp.phi = fabs(P->p_halfpi - lp.phi);
- if (!P->no_cut && (lp.phi - EPS) > HALFPI)
- F_ERROR;
- if ((lp.phi *= 0.5) > EPS) {
- t = tan(lp.phi);
- Krho = -2.*(log(cos(lp.phi)) / t + t * P->Cb);
- xy.x = Krho * sinlam;
- xy.y = Krho * coslam;
- if (P->mode == N_POLE)
- xy.y = -xy.y;
- } else
- xy.x = xy.y = 0.;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(airy)
- double beta;
-
- P->no_cut = pj_param(P->params, "bno_cut").i;
- beta = 0.5 * (HALFPI - pj_param(P->params, "rlat_b").f);
- if (fabs(beta) < EPS)
- P->Cb = -0.5;
- else {
- P->Cb = 1./tan(beta);
- P->Cb *= P->Cb * log(cos(beta));
- }
- if (fabs(fabs(P->phi0) - HALFPI) < EPS)
- if (P->phi0 < 0.) {
- P->p_halfpi = -HALFPI;
- P->mode = S_POLE;
- } else {
- P->p_halfpi = HALFPI;
- P->mode = N_POLE;
- }
- else {
- if (fabs(P->phi0) < EPS)
- P->mode = EQUIT;
- else {
- P->mode = OBLIQ;
- P->sinph0 = sin(P->phi0);
- P->cosph0 = cos(P->phi0);
- }
- }
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_aitoff.c b/src/3rdparty/proj/PJ_aitoff.c
deleted file mode 100644
index a49b30bb..00000000
--- a/src/3rdparty/proj/PJ_aitoff.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/******************************************************************************
- * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel)
- * projections.
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PROJ_PARMS__ \
- double cosphi1; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph";
-PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1";
-
-FORWARD(s_forward); /* spheroid */
- double c, d;
-
- if((d = acos(cos(lp.phi) * cos(c = 0.5 * lp.lam)))) {/* basic Aitoff */
- xy.x = 2. * d * cos(lp.phi) * sin(c) * (xy.y = 1. / sin(d));
- xy.y *= d * sin(lp.phi);
- } else
- xy.x = xy.y = 0.;
- if (P->mode) { /* Winkel Tripel */
- xy.x = (xy.x + lp.lam * P->cosphi1) * 0.5;
- xy.y = (xy.y + lp.phi) * 0.5;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->inv = 0;
- P->fwd = s_forward;
- P->es = 0.;
- return P;
-}
-ENTRY0(aitoff)
- P->mode = 0;
-ENDENTRY(setup(P))
-ENTRY0(wintri)
- P->mode = 1;
- if (pj_param(P->params, "tlat_1").i)
- {
- if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.)
- E_ERROR(-22)
- }
- else /* 50d28' or acos(2/pi) */
- P->cosphi1 = 0.636619772367581343;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_august.c b/src/3rdparty/proj/PJ_august.c
deleted file mode 100644
index 4e6dab98..00000000
--- a/src/3rdparty/proj/PJ_august.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv.";
-#define M 1.333333333333333
-FORWARD(s_forward); /* spheroid */
- double t, c1, c, x1, x12, y1, y12;
-
- t = tan(.5 * lp.phi);
- c1 = sqrt(1. - t * t);
- c = 1. + c1 * cos(lp.lam *= .5);
- x1 = sin(lp.lam) * c1 / c;
- y1 = t / c;
- xy.x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1));
- xy.y = M * y1 * (3. + 3. * x12 - y12);
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(august) P->inv = 0; P->fwd = s_forward; P->es = 0.; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_bacon.c b/src/3rdparty/proj/PJ_bacon.c
deleted file mode 100644
index dfc559b8..00000000
--- a/src/3rdparty/proj/PJ_bacon.c
+++ /dev/null
@@ -1,41 +0,0 @@
-# define HLFPI2 2.46740110027233965467
-# define EPS 1e-10
-#define PROJ_PARMS__ \
- int bacn; \
- int ortl;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv.";
-PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv.";
-PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv.";
-FORWARD(s_forward); /* spheroid */
- double ax, f;
-
- xy.y = P->bacn ? HALFPI * sin(lp.phi) : lp.phi;
- if ((ax = fabs(lp.lam)) >= EPS) {
- if (P->ortl && ax >= HALFPI)
- xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - HALFPI;
- else {
- f = 0.5 * (HLFPI2 / ax + ax);
- xy.x = ax - f + sqrt(f * f - xy.y * xy.y);
- }
- if (lp.lam < 0.) xy.x = - xy.x;
- } else
- xy.x = 0.;
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(bacon)
- P->bacn = 1;
- P->ortl = 0;
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
-ENTRY0(apian)
- P->bacn = P->ortl = 0;
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
-ENTRY0(ortel)
- P->bacn = 0;
- P->ortl = 1;
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_bipc.c b/src/3rdparty/proj/PJ_bipc.c
deleted file mode 100644
index 5cb74256..00000000
--- a/src/3rdparty/proj/PJ_bipc.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#define PROJ_PARMS__ \
- int noskew;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(bipc, "Bipolar conic of western hemisphere")
- "\n\tConic Sph.";
-# define EPS 1e-10
-# define EPS10 1e-10
-# define ONEEPS 1.000000001
-# define NITER 10
-# define lamB -.34894976726250681539
-# define n .63055844881274687180
-# define F 1.89724742567461030582
-# define Azab .81650043674686363166
-# define Azba 1.82261843856185925133
-# define T 1.27246578267089012270
-# define rhoc 1.20709121521568721927
-# define cAzc .69691523038678375519
-# define sAzc .71715351331143607555
-# define C45 .70710678118654752469
-# define S45 .70710678118654752410
-# define C20 .93969262078590838411
-# define S20 -.34202014332566873287
-# define R110 1.91986217719376253360
-# define R104 1.81514242207410275904
-FORWARD(s_forward); /* spheroid */
- double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r;
- int tag;
-
- cphi = cos(lp.phi);
- sphi = sin(lp.phi);
- cdlam = cos(sdlam = lamB - lp.lam);
- sdlam = sin(sdlam);
- if (fabs(fabs(lp.phi) - HALFPI) < EPS10) {
- Az = lp.phi < 0. ? PI : 0.;
- tphi = HUGE_VAL;
- } else {
- tphi = sphi / cphi;
- Az = atan2(sdlam , C45 * (tphi - cdlam));
- }
- if( (tag = (Az > Azba)) ) {
- cdlam = cos(sdlam = lp.lam + R110);
- sdlam = sin(sdlam);
- z = S20 * sphi + C20 * cphi * cdlam;
- if (fabs(z) > 1.) {
- if (fabs(z) > ONEEPS) F_ERROR
- else z = z < 0. ? -1. : 1.;
- } else
- z = acos(z);
- if (tphi != HUGE_VAL)
- Az = atan2(sdlam, (C20 * tphi - S20 * cdlam));
- Av = Azab;
- xy.y = rhoc;
- } else {
- z = S45 * (sphi + cphi * cdlam);
- if (fabs(z) > 1.) {
- if (fabs(z) > ONEEPS) F_ERROR
- else z = z < 0. ? -1. : 1.;
- } else
- z = acos(z);
- Av = Azba;
- xy.y = -rhoc;
- }
- if (z < 0.) F_ERROR;
- r = F * (t = pow(tan(.5 * z), n));
- if ((al = .5 * (R104 - z)) < 0.) F_ERROR;
- al = (t + pow(al, n)) / T;
- if (fabs(al) > 1.) {
- if (fabs(al) > ONEEPS) F_ERROR
- else al = al < 0. ? -1. : 1.;
- } else
- al = acos(al);
- if (fabs(t = n * (Av - Az)) < al)
- r /= cos(al + (tag ? t : -t));
- xy.x = r * sin(t);
- xy.y += (tag ? -r : r) * cos(t);
- if (P->noskew) {
- t = xy.x;
- xy.x = -xy.x * cAzc - xy.y * sAzc;
- xy.y = -xy.y * cAzc + t * sAzc;
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t, r, rp, rl, al, z, fAz, Az, s, c, Av;
- int neg, i;
-
- if (P->noskew) {
- t = xy.x;
- xy.x = -xy.x * cAzc + xy.y * sAzc;
- xy.y = -xy.y * cAzc - t * sAzc;
- }
- if( (neg = (xy.x < 0.)) ) {
- xy.y = rhoc - xy.y;
- s = S20;
- c = C20;
- Av = Azab;
- } else {
- xy.y += rhoc;
- s = S45;
- c = C45;
- Av = Azba;
- }
- rl = rp = r = hypot(xy.x, xy.y);
- fAz = fabs(Az = atan2(xy.x, xy.y));
- for (i = NITER; i ; --i) {
- z = 2. * atan(pow(r / F,1 / n));
- al = acos((pow(tan(.5 * z), n) +
- pow(tan(.5 * (R104 - z)), n)) / T);
- if (fAz < al)
- r = rp * cos(al + (neg ? Az : -Az));
- if (fabs(rl - r) < EPS)
- break;
- rl = r;
- }
- if (! i) I_ERROR;
- Az = Av - Az / n;
- lp.phi = asin(s * cos(z) + c * sin(z) * cos(Az));
- lp.lam = atan2(sin(Az), c / tan(z) - s * cos(Az));
- if (neg)
- lp.lam -= R110;
- else
- lp.lam = lamB - lp.lam;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(bipc)
- P->noskew = pj_param(P->params, "bns").i;
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_boggs.c b/src/3rdparty/proj/PJ_boggs.c
deleted file mode 100644
index 48fdc9ab..00000000
--- a/src/3rdparty/proj/PJ_boggs.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph.";
-# define NITER 20
-# define EPS 1e-7
-# define ONETOL 1.000001
-# define FXC 2.00276
-# define FXC2 1.11072
-# define FYC 0.49931
-# define FYC2 1.41421356237309504880
-FORWARD(s_forward); /* spheroid */
- double theta, th1, c;
- int i;
-
- theta = lp.phi;
- if (fabs(fabs(lp.phi) - HALFPI) < EPS)
- xy.x = 0.;
- else {
- c = sin(theta) * PI;
- for (i = NITER; i; --i) {
- theta -= th1 = (theta + sin(theta) - c) /
- (1. + cos(theta));
- if (fabs(th1) < EPS) break;
- }
- theta *= 0.5;
- xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta));
- }
- xy.y = FYC * (lp.phi + FYC2 * sin(theta));
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(boggs) P->es = 0.; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_bonne.c b/src/3rdparty/proj/PJ_bonne.c
deleted file mode 100644
index 81a5bf98..00000000
--- a/src/3rdparty/proj/PJ_bonne.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#define PROJ_PARMS__ \
- double phi1; \
- double cphi1; \
- double am1; \
- double m1; \
- double *en;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)")
- "\n\tConic Sph&Ell\n\tlat_1=";
-#define EPS10 1e-10
-FORWARD(e_forward); /* ellipsoid */
- double rh, E, c;
-
- rh = P->am1 + P->m1 - pj_mlfn(lp.phi, E = sin(lp.phi), c = cos(lp.phi), P->en);
- E = c * lp.lam / (rh * sqrt(1. - P->es * E * E));
- xy.x = rh * sin(E);
- xy.y = P->am1 - rh * cos(E);
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- double E, rh;
-
- rh = P->cphi1 + P->phi1 - lp.phi;
- if (fabs(rh) > EPS10) {
- xy.x = rh * sin(E = lp.lam * cos(lp.phi) / rh);
- xy.y = P->cphi1 - rh * cos(E);
- } else
- xy.x = xy.y = 0.;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double rh;
-
- rh = hypot(xy.x, xy.y = P->cphi1 - xy.y);
- lp.phi = P->cphi1 + P->phi1 - rh;
- if (fabs(lp.phi) > HALFPI) I_ERROR;
- if (fabs(fabs(lp.phi) - HALFPI) <= EPS10)
- lp.lam = 0.;
- else
- lp.lam = rh * atan2(xy.x, xy.y) / cos(lp.phi);
- return (lp);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double s, rh;
-
- rh = hypot(xy.x, xy.y = P->am1 - xy.y);
- lp.phi = pj_inv_mlfn(P->am1 + P->m1 - rh, P->es, P->en);
- if ((s = fabs(lp.phi)) < HALFPI) {
- s = sin(lp.phi);
- lp.lam = rh * atan2(xy.x, xy.y) *
- sqrt(1. - P->es * s * s) / cos(lp.phi);
- } else if (fabs(s - HALFPI) <= EPS10)
- lp.lam = 0.;
- else I_ERROR;
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->en)
- pj_dalloc(P->en);
- pj_dalloc(P);
- }
-}
-ENTRY1(bonne, en)
- double c;
-
- P->phi1 = pj_param(P->params, "rlat_1").f;
- if (fabs(P->phi1) < EPS10) E_ERROR(-23);
- if (P->es) {
- P->en = pj_enfn(P->es);
- P->m1 = pj_mlfn(P->phi1, P->am1 = sin(P->phi1),
- c = cos(P->phi1), P->en);
- P->am1 = c / (sqrt(1. - P->es * P->am1 * P->am1) * P->am1);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- if (fabs(P->phi1) + EPS10 >= HALFPI)
- P->cphi1 = 0.;
- else
- P->cphi1 = 1. / tan(P->phi1);
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_cass.c b/src/3rdparty/proj/PJ_cass.c
deleted file mode 100644
index 4539c66b..00000000
--- a/src/3rdparty/proj/PJ_cass.c
+++ /dev/null
@@ -1,79 +0,0 @@
-#define PROJ_PARMS__ \
- double m0; \
- double n; \
- double t; \
- double a1; \
- double c; \
- double r; \
- double dd; \
- double d2; \
- double a2; \
- double tn; \
- double *en;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell";
-# define EPS10 1e-10
-# define C1 .16666666666666666666
-# define C2 .00833333333333333333
-# define C3 .04166666666666666666
-# define C4 .33333333333333333333
-# define C5 .06666666666666666666
-FORWARD(e_forward); /* ellipsoid */
- xy.y = pj_mlfn(lp.phi, P->n = sin(lp.phi), P->c = cos(lp.phi), P->en);
- P->n = 1./sqrt(1. - P->es * P->n * P->n);
- P->tn = tan(lp.phi); P->t = P->tn * P->tn;
- P->a1 = lp.lam * P->c;
- P->c *= P->es * P->c / (1 - P->es);
- P->a2 = P->a1 * P->a1;
- xy.x = P->n * P->a1 * (1. - P->a2 * P->t *
- (C1 - (8. - P->t + 8. * P->c) * P->a2 * C2));
- xy.y -= P->m0 - P->n * P->tn * P->a2 *
- (.5 + (5. - P->t + 6. * P->c) * P->a2 * C3);
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- xy.x = asin(cos(lp.phi) * sin(lp.lam));
- xy.y = atan2(tan(lp.phi) , cos(lp.lam)) - P->phi0;
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double ph1;
-
- ph1 = pj_inv_mlfn(P->m0 + xy.y, P->es, P->en);
- P->tn = tan(ph1); P->t = P->tn * P->tn;
- P->n = sin(ph1);
- P->r = 1. / (1. - P->es * P->n * P->n);
- P->n = sqrt(P->r);
- P->r *= (1. - P->es) * P->n;
- P->dd = xy.x / P->n;
- P->d2 = P->dd * P->dd;
- lp.phi = ph1 - (P->n * P->tn / P->r) * P->d2 *
- (.5 - (1. + 3. * P->t) * P->d2 * C3);
- lp.lam = P->dd * (1. + P->t * P->d2 *
- (-C4 + (1. + 3. * P->t) * P->d2 * C5)) / cos(ph1);
- return (lp);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = asin(sin(P->dd = xy.y + P->phi0) * cos(xy.x));
- lp.lam = atan2(tan(xy.x), cos(P->dd));
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->en)
- pj_dalloc(P->en);
- pj_dalloc(P);
- }
-}
-ENTRY1(cass, en)
- if (P->es) {
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- P->m0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_cc.c b/src/3rdparty/proj/PJ_cc.c
deleted file mode 100644
index be1191b6..00000000
--- a/src/3rdparty/proj/PJ_cc.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#define PROJ_PARMS__ \
- double ap;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph";
-#define EPS10 1.e-10
-FORWARD(s_forward); /* spheroid */
- if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR;
- xy.x = lp.lam;
- xy.y = tan(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = atan(xy.y);
- lp.lam = xy.x;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(cc) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_cea.c b/src/3rdparty/proj/PJ_cea.c
deleted file mode 100644
index 97e4f3aa..00000000
--- a/src/3rdparty/proj/PJ_cea.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#define PROJ_PARMS__ \
- double qp; \
- double *apa;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts=";
-# define EPS 1e-10
-FORWARD(e_forward); /* spheroid */
- xy.x = P->k0 * lp.lam;
- xy.y = .5 * pj_qsfn(sin(lp.phi), P->e, P->one_es) / P->k0;
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- xy.x = P->k0 * lp.lam;
- xy.y = sin(lp.phi) / P->k0;
- return (xy);
-}
-INVERSE(e_inverse); /* spheroid */
- lp.phi = pj_authlat(asin( 2. * xy.y * P->k0 / P->qp), P->apa);
- lp.lam = xy.x / P->k0;
- return (lp);
-}
-INVERSE(s_inverse); /* spheroid */
- double t;
-
- if ((t = fabs(xy.y *= P->k0)) - EPS <= 1.) {
- if (t >= 1.)
- lp.phi = xy.y < 0. ? -HALFPI : HALFPI;
- else
- lp.phi = asin(xy.y);
- lp.lam = xy.x / P->k0;
- } else I_ERROR;
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->apa)
- pj_dalloc(P->apa);
- pj_dalloc(P);
- }
-}
-ENTRY1(cea, apa)
- double t;
-
- if (pj_param(P->params, "tlat_ts").i &&
- (P->k0 = cos(t = pj_param(P->params, "rlat_ts").f)) < 0.) E_ERROR(-24)
- else
- t = 0.;
- if (P->es) {
- t = sin(t);
- P->k0 /= sqrt(1. - P->es * t * t);
- P->e = sqrt(P->es);
- if (!(P->apa = pj_authset(P->es))) E_ERROR_0;
- P->qp = pj_qsfn(1., P->e, P->one_es);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_chamb.c b/src/3rdparty/proj/PJ_chamb.c
deleted file mode 100644
index c17a7133..00000000
--- a/src/3rdparty/proj/PJ_chamb.c
+++ /dev/null
@@ -1,112 +0,0 @@
-typedef struct { double r, Az; } VECT;
-#define PROJ_PARMS__ \
- struct { /* control point data */ \
- double phi, lam; \
- double cosphi, sinphi; \
- VECT v; \
- XY p; \
- double Az; \
- } c[3]; \
- XY p; \
- double beta_0, beta_1, beta_2;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv."
-"\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3=";
-#include <stdio.h>
-#define THIRD 0.333333333333333333
-#define TOL 1e-9
- static VECT /* distance and azimuth from point 1 to point 2 */
-vect(double dphi, double c1, double s1, double c2, double s2, double dlam) {
- VECT v;
- double cdl, dp, dl;
-
- cdl = cos(dlam);
- if (fabs(dphi) > 1. || fabs(dlam) > 1.)
- v.r = aacos(s1 * s2 + c1 * c2 * cdl);
- else { /* more accurate for smaller distances */
- dp = sin(.5 * dphi);
- dl = sin(.5 * dlam);
- v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl));
- }
- if (fabs(v.r) > TOL)
- v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl);
- else
- v.r = v.Az = 0.;
- return v;
-}
- static double /* law of cosines */
-lc(double b,double c,double a) {
- return aacos(.5 * (b * b + c * c - a * a) / (b * c));
-}
-FORWARD(s_forward); /* spheroid */
- double sinphi, cosphi, a;
- VECT v[3];
- int i, j;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- for (i = 0; i < 3; ++i) { /* dist/azimiths from control */
- v[i] = vect(lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi,
- cosphi, sinphi, lp.lam - P->c[i].lam);
- if ( ! v[i].r)
- break;
- v[i].Az = adjlon(v[i].Az - P->c[i].v.Az);
- }
- if (i < 3) /* current point at control point */
- xy = P->c[i].p;
- else { /* point mean of intersepts */
- xy = P->p;
- for (i = 0; i < 3; ++i) {
- j = i == 2 ? 0 : i + 1;
- a = lc(P->c[i].v.r, v[i].r, v[j].r);
- if (v[i].Az < 0.)
- a = -a;
- if (! i) { /* coord comp unique to each arc */
- xy.x += v[i].r * cos(a);
- xy.y -= v[i].r * sin(a);
- } else if (i == 1) {
- a = P->beta_1 - a;
- xy.x -= v[i].r * cos(a);
- xy.y -= v[i].r * sin(a);
- } else {
- a = P->beta_2 - a;
- xy.x += v[i].r * cos(a);
- xy.y += v[i].r * sin(a);
- }
- }
- xy.x *= THIRD; /* mean of arc intercepts */
- xy.y *= THIRD;
- }
- return xy;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(chamb)
- int i, j;
- char line[10];
-
- for (i = 0; i < 3; ++i) { /* get control point locations */
- (void)sprintf(line, "rlat_%d", i+1);
- P->c[i].phi = pj_param(P->params, line).f;
- (void)sprintf(line, "rlon_%d", i+1);
- P->c[i].lam = pj_param(P->params, line).f;
- P->c[i].lam = adjlon(P->c[i].lam - P->lam0);
- P->c[i].cosphi = cos(P->c[i].phi);
- P->c[i].sinphi = sin(P->c[i].phi);
- }
- for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */
- j = i == 2 ? 0 : i + 1;
- P->c[i].v = vect(P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi,
- P->c[j].cosphi, P->c[j].sinphi, P->c[j].lam - P->c[i].lam);
- if (! P->c[i].v.r) E_ERROR(-25);
- /* co-linearity problem ignored for now */
- }
- P->beta_0 = lc(P->c[0].v.r, P->c[2].v.r, P->c[1].v.r);
- P->beta_1 = lc(P->c[0].v.r, P->c[1].v.r, P->c[2].v.r);
- P->beta_2 = PI - P->beta_0;
- P->p.y = 2. * (P->c[0].p.y = P->c[1].p.y = P->c[2].v.r * sin(P->beta_0));
- P->c[2].p.y = 0.;
- P->c[0].p.x = - (P->c[1].p.x = 0.5 * P->c[0].v.r);
- P->p.x = P->c[2].p.x = P->c[0].p.x + P->c[2].v.r * cos(P->beta_0);
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_collg.c b/src/3rdparty/proj/PJ_collg.c
deleted file mode 100644
index ca389a63..00000000
--- a/src/3rdparty/proj/PJ_collg.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph.";
-#define FXC 1.12837916709551257390
-#define FYC 1.77245385090551602729
-#define ONEEPS 1.0000001
-FORWARD(s_forward); /* spheroid */
- if ((xy.y = 1. - sin(lp.phi)) <= 0.)
- xy.y = 0.;
- else
- xy.y = sqrt(xy.y);
- xy.x = FXC * lp.lam * xy.y;
- xy.y = FYC * (1. - xy.y);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / FYC - 1.;
- if (fabs(lp.phi = 1. - lp.phi * lp.phi) < 1.)
- lp.phi = asin(lp.phi);
- else if (fabs(lp.phi) > ONEEPS) I_ERROR
- else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- if ((lp.lam = 1. - sin(lp.phi)) <= 0.)
- lp.lam = 0.;
- else
- lp.lam = xy.x / (FXC * sqrt(lp.lam));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(collg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_crast.c b/src/3rdparty/proj/PJ_crast.c
deleted file mode 100644
index 5351a390..00000000
--- a/src/3rdparty/proj/PJ_crast.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)")
-"\n\tPCyl., Sph.";
-#define XM 0.97720502380583984317
-#define RXM 1.02332670794648848847
-#define YM 3.06998012383946546542
-#define RYM 0.32573500793527994772
-#define THIRD 0.333333333333333333
-FORWARD(s_forward); /* spheroid */
- lp.phi *= THIRD;
- xy.x = XM * lp.lam * (2. * cos(lp.phi + lp.phi) - 1.);
- xy.y = YM * sin(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = 3. * asin(xy.y * RYM);
- lp.lam = xy.x * RXM / (2. * cos((lp.phi + lp.phi) * THIRD) - 1);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(crast) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_denoy.c b/src/3rdparty/proj/PJ_denoy.c
deleted file mode 100644
index 8b800318..00000000
--- a/src/3rdparty/proj/PJ_denoy.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph.";
-#define C0 0.95
-#define C1 -.08333333333333333333
-#define C3 .00166666666666666666
-#define D1 0.9
-#define D5 0.03
-FORWARD(s_forward); /* spheroid */
- xy.y = lp.phi;
- xy.x = lp.lam;
- lp.lam = fabs(lp.lam);
- xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) *
- (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi)));
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(denoy) P->es = 0.; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eck1.c b/src/3rdparty/proj/PJ_eck1.c
deleted file mode 100644
index 9b31b095..00000000
--- a/src/3rdparty/proj/PJ_eck1.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph.";
-#define FC .92131773192356127802
-#define RP .31830988618379067154
-FORWARD(s_forward); /* spheroid */
- xy.x = FC * lp.lam * (1. - RP * fabs(lp.phi));
- xy.y = FC * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / FC;
- lp.lam = xy.x / (FC * (1. - RP * fabs(lp.phi)));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(eck1)
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eck2.c b/src/3rdparty/proj/PJ_eck2.c
deleted file mode 100644
index f8e0154e..00000000
--- a/src/3rdparty/proj/PJ_eck2.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph.";
-#define FXC 0.46065886596178063902
-#define FYC 1.44720250911653531871
-#define C13 0.33333333333333333333
-#define ONEEPS 1.0000001
-FORWARD(s_forward); /* spheroid */
- xy.x = FXC * lp.lam * (xy.y = sqrt(4. - 3. * sin(fabs(lp.phi))));
- xy.y = FYC * (2. - xy.y);
- if ( lp.phi < 0.) xy.y = -xy.y;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.lam = xy.x / (FXC * ( lp.phi = 2. - fabs(xy.y) / FYC) );
- lp.phi = (4. - lp.phi * lp.phi) * C13;
- if (fabs(lp.phi) >= 1.) {
- if (fabs(lp.phi) > ONEEPS) I_ERROR
- else
- lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- } else
- lp.phi = asin(lp.phi);
- if (xy.y < 0)
- lp.phi = -lp.phi;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(eck2); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eck3.c b/src/3rdparty/proj/PJ_eck3.c
deleted file mode 100644
index d7755f0c..00000000
--- a/src/3rdparty/proj/PJ_eck3.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x, C_y, A, B;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph.";
-PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph.";
-PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph.";
-PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph.";
-FORWARD(s_forward); /* spheroid */
- xy.y = P->C_y * lp.phi;
- xy.x = P->C_x * lp.lam * (P->A + asqrt(1. - P->B * lp.phi * lp.phi));
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / P->C_y;
- lp.lam = xy.x / (P->C_x * (P->A + asqrt(1. - P->B * lp.phi * lp.phi)));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->es = 0.;
- P->inv = s_inverse;
- P->fwd = s_forward;
- return P;
-}
-ENTRY0(eck3)
- P->C_x = .42223820031577120149;
- P->C_y = .84447640063154240298;
- P->A = 1.;
- P->B = 0.4052847345693510857755;
-ENDENTRY(setup(P))
-ENTRY0(kav7)
- P->C_x = 0.2632401569273184856851;
- P->C_x = 0.8660254037844;
- P->C_y = 1.;
- P->A = 0.;
- P->B = 0.30396355092701331433;
-ENDENTRY(setup(P))
-ENTRY0(wag6);
- P->C_x = P->C_y = 0.94745;
- P->A = 0.;
- P->B = 0.30396355092701331433;
-ENDENTRY(setup(P))
-ENTRY0(putp1);
- P->C_x = 1.89490;
- P->C_y = 0.94745;
- P->A = -0.5;
- P->B = 0.30396355092701331433;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_eck4.c b/src/3rdparty/proj/PJ_eck4.c
deleted file mode 100644
index 2b5c8101..00000000
--- a/src/3rdparty/proj/PJ_eck4.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph.";
-#define C_x .42223820031577120149
-#define C_y 1.32650042817700232218
-#define RC_y .75386330736002178205
-#define C_p 3.57079632679489661922
-#define RC_p .28004957675577868795
-#define EPS 1e-7
-#define NITER 6
-FORWARD(s_forward); /* spheroid */
- double p, V, s, c;
- int i;
-
- p = C_p * sin(lp.phi);
- V = lp.phi * lp.phi;
- lp.phi *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 );
- for (i = NITER; i ; --i) {
- c = cos(lp.phi);
- s = sin(lp.phi);
- lp.phi -= V = (lp.phi + s * (c + 2.) - p) /
- (1. + c * (c + 2.) - s * s);
- if (fabs(V) < EPS)
- break;
- }
- if (!i) {
- xy.x = C_x * lp.lam;
- xy.y = lp.phi < 0. ? -C_y : C_y;
- } else {
- xy.x = C_x * lp.lam * (1. + cos(lp.phi));
- xy.y = C_y * sin(lp.phi);
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double c;
-
- lp.phi = aasin(xy.y / C_y);
- lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi))));
- lp.phi = aasin((lp.phi + sin(lp.phi) * (c + 2.)) / C_p);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(eck4); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eck5.c b/src/3rdparty/proj/PJ_eck5.c
deleted file mode 100644
index 3eeb3326..00000000
--- a/src/3rdparty/proj/PJ_eck5.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph.";
-#define XF 0.44101277172455148219
-#define RXF 2.26750802723822639137
-#define YF 0.88202554344910296438
-#define RYF 1.13375401361911319568
-FORWARD(s_forward); /* spheroid */
- xy.x = XF * (1. + cos(lp.phi)) * lp.lam;
- xy.y = YF * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.lam = RXF * xy.x / (1. + cos( lp.phi = RYF * xy.y));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(eck5); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eqc.c b/src/3rdparty/proj/PJ_eqc.c
deleted file mode 100644
index 533fb63e..00000000
--- a/src/3rdparty/proj/PJ_eqc.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#define PROJ_PARMS__ \
- double rc;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)")
- "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]";
-FORWARD(s_forward); /* spheroid */
- xy.x = P->rc * lp.lam;
- xy.y = lp.phi - P->phi0;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.lam = xy.x / P->rc;
- lp.phi = xy.y + P->phi0;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(eqc)
- if ((P->rc = cos(pj_param(P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24);
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_eqdc.c b/src/3rdparty/proj/PJ_eqdc.c
deleted file mode 100644
index eda95b0d..00000000
--- a/src/3rdparty/proj/PJ_eqdc.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#define PROJ_PARMS__ \
- double phi1; \
- double phi2; \
- double n; \
- double rho; \
- double rho0; \
- double c; \
- double *en; \
- int ellips;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(eqdc, "Equidistant Conic")
- "\n\tConic, Sph&Ell\n\tlat_1= lat_2=";
-# define EPS10 1.e-10
-FORWARD(e_forward); /* sphere & ellipsoid */
- P->rho = P->c - (P->ellips ? pj_mlfn(lp.phi, sin(lp.phi),
- cos(lp.phi), P->en) : lp.phi);
- xy.x = P->rho * sin( lp.lam *= P->n );
- xy.y = P->rho0 - P->rho * cos(lp.lam);
- return (xy);
-}
-INVERSE(e_inverse); /* sphere & ellipsoid */
- if ((P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) {
- if (P->n < 0.) {
- P->rho = -P->rho;
- xy.x = -xy.x;
- xy.y = -xy.y;
- }
- lp.phi = P->c - P->rho;
- if (P->ellips)
- lp.phi = pj_inv_mlfn(lp.phi, P->es, P->en);
- lp.lam = atan2(xy.x, xy.y) / P->n;
- } else {
- lp.lam = 0.;
- lp.phi = P->n > 0. ? HALFPI : - HALFPI;
- }
- return (lp);
-}
-SPECIAL(fac) {
- double sinphi, cosphi;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- fac->code |= IS_ANAL_HK;
- fac->h = 1.;
- fac->k = P->n * (P->c - (P->ellips ? pj_mlfn(lp.phi, sinphi,
- cosphi, P->en) : lp.phi)) / pj_msfn(sinphi, cosphi, P->es);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
-ENTRY1(eqdc, en)
- double cosphi, sinphi;
- int secant;
-
- P->phi1 = pj_param(P->params, "rlat_1").f;
- P->phi2 = pj_param(P->params, "rlat_2").f;
- if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21);
- if (!(P->en = pj_enfn(P->es)))
- E_ERROR_0;
- P->n = sinphi = sin(P->phi1);
- cosphi = cos(P->phi1);
- secant = fabs(P->phi1 - P->phi2) >= EPS10;
- if( (P->ellips = (P->es > 0.)) ) {
- double ml1, m1;
-
- m1 = pj_msfn(sinphi, cosphi, P->es);
- ml1 = pj_mlfn(P->phi1, sinphi, cosphi, P->en);
- if (secant) { /* secant cone */
- sinphi = sin(P->phi2);
- cosphi = cos(P->phi2);
- P->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) /
- (pj_mlfn(P->phi2, sinphi, cosphi, P->en) - ml1);
- }
- P->c = ml1 + m1 / P->n;
- P->rho0 = P->c - pj_mlfn(P->phi0, sin(P->phi0),
- cos(P->phi0), P->en);
- } else {
- if (secant)
- P->n = (cosphi - cos(P->phi2)) / (P->phi2 - P->phi1);
- P->c = P->phi1 + cos(P->phi1) / P->n;
- P->rho0 = P->c - P->phi0;
- }
- P->inv = e_inverse;
- P->fwd = e_forward;
- P->spc = fac;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_fahey.c b/src/3rdparty/proj/PJ_fahey.c
deleted file mode 100644
index 93e9b38d..00000000
--- a/src/3rdparty/proj/PJ_fahey.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph.";
-#define TOL 1e-6
-FORWARD(s_forward); /* spheroid */
- xy.y = 1.819152 * ( xy.x = tan(0.5 * lp.phi) );
- xy.x = 0.819152 * lp.lam * asqrt(1 - xy.x * xy.x);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = 2. * atan(xy.y /= 1.819152);
- lp.lam = fabs(xy.y = 1. - xy.y * xy.y) < TOL ? 0. :
- xy.x / (0.819152 * sqrt(xy.y));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(fahey) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_fouc_s.c b/src/3rdparty/proj/PJ_fouc_s.c
deleted file mode 100644
index dee05a96..00000000
--- a/src/3rdparty/proj/PJ_fouc_s.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#define PROJ_PARMS__ \
- double n, n1;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph.";
-#define MAX_ITER 10
-#define LOOP_TOL 1e-7
-FORWARD(s_forward); /* spheroid */
- double t;
-
- t = cos(lp.phi);
- xy.x = lp.lam * t / (P->n + P->n1 * t);
- xy.y = P->n * lp.phi + P->n1 * sin(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double V;
- int i;
-
- if (P->n) {
- lp.phi = xy.y;
- for (i = MAX_ITER; i ; --i) {
- lp.phi -= V = (P->n * lp.phi + P->n1 * sin(lp.phi) - xy.y ) /
- (P->n + P->n1 * cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp.phi = xy.y < 0. ? -HALFPI : HALFPI;
- } else
- lp.phi = aasin(xy.y);
- V = cos(lp.phi);
- lp.lam = xy.x * (P->n + P->n1 * V) / V;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(fouc_s)
- P->n = pj_param(P->params, "dn").f;
- if (P->n < 0. || P->n > 1.)
- E_ERROR(-99)
- P->n1 = 1. - P->n;
- P->es = 0;
- P->inv = s_inverse;
- P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_gall.c b/src/3rdparty/proj/PJ_gall.c
deleted file mode 100644
index 3c507bd0..00000000
--- a/src/3rdparty/proj/PJ_gall.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(gall, "Gall (Gall Stereographic)") "\n\tCyl, Sph";
-#define YF 1.70710678118654752440
-#define XF 0.70710678118654752440
-#define RYF 0.58578643762690495119
-#define RXF 1.41421356237309504880
-FORWARD(s_forward); /* spheroid */
- xy.x = XF * lp.lam;
- xy.y = YF * tan(.5 * lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.lam = RXF * xy.x;
- lp.phi = 2. * atan(xy.y * RYF);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(gall) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_geos.c b/src/3rdparty/proj/PJ_geos.c
deleted file mode 100644
index db9dd7e5..00000000
--- a/src/3rdparty/proj/PJ_geos.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-** libproj -- library of cartographic projections
-**
-** Copyright (c) 2004 Gerald I. Evenden
-*/
-static const char
-LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/*
-** See also (section 4.4.3.2):
-** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
-**
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be
-** included in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#define PROJ_PARMS__ \
- double h; \
- double radius_p; \
- double radius_p2; \
- double radius_p_inv2; \
- double radius_g; \
- double radius_g_1; \
- double C;
-#define PJ_LIB__
-#include <projects.h>
-
-PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th=";
-
-FORWARD(s_forward); /* spheroid */
- double Vx, Vy, Vz, tmp;
-
-/* Calculation of the three components of the vector from satellite to
-** position on earth surface (lon,lat).*/
- tmp = cos(lp.phi);
- Vx = cos (lp.lam) * tmp;
- Vy = sin (lp.lam) * tmp;
- Vz = sin (lp.phi);
-/* Check visibility.*/
- if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) F_ERROR;
-/* Calculation based on view angles from satellite.*/
- tmp = P->radius_g - Vx;
- xy.x = P->radius_g_1 * atan(Vy / tmp);
- xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp));
- return (xy);
-}
-FORWARD(e_forward); /* ellipsoid */
- double r, Vx, Vy, Vz, tmp;
-
-/* Calculation of geocentric latitude. */
- lp.phi = atan (P->radius_p2 * tan (lp.phi));
-/* Calculation of the three components of the vector from satellite to
-** position on earth surface (lon,lat).*/
- r = (P->radius_p) / hypot(P->radius_p * cos (lp.phi), sin (lp.phi));
- Vx = r * cos (lp.lam) * cos (lp.phi);
- Vy = r * sin (lp.lam) * cos (lp.phi);
- Vz = r * sin (lp.phi);
-/* Check visibility. */
- if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * P->radius_p_inv2) < 0.)
- F_ERROR;
-/* Calculation based on view angles from satellite. */
- tmp = P->radius_g - Vx;
- xy.x = P->radius_g_1 * atan (Vy / tmp);
- xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp));
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double Vx, Vy, Vz, a, b, c, det, k;
-
-/* Setting three components of vector from satellite to position.*/
- Vx = -1.0;
- Vy = tan (xy.x / (P->radius_g - 1.0));
- Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
-/* Calculation of terms in cubic equation and determinant.*/
- a = Vy * Vy + Vz * Vz + Vx * Vx;
- b = 2 * P->radius_g * Vx;
- if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR;
-/* Calculation of three components of vector from satellite to position.*/
- k = (-b - sqrt(det)) / (2 * a);
- Vx = P->radius_g + k * Vx;
- Vy *= k;
- Vz *= k;
-/* Calculation of longitude and latitude.*/
- lp.lam = atan2 (Vy, Vx);
- lp.phi = atan (Vz * cos (lp.lam) / Vx);
- return (lp);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double Vx, Vy, Vz, a, b, c, det, k;
-
-/* Setting three components of vector from satellite to position.*/
- Vx = -1.0;
- Vy = tan (xy.x / P->radius_g_1);
- Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy);
-/* Calculation of terms in cubic equation and determinant.*/
- a = Vz / P->radius_p;
- a = Vy * Vy + a * a + Vx * Vx;
- b = 2 * P->radius_g * Vx;
- if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR;
-/* Calculation of three components of vector from satellite to position.*/
- k = (-b - sqrt(det)) / (2. * a);
- Vx = P->radius_g + k * Vx;
- Vy *= k;
- Vz *= k;
-/* Calculation of longitude and latitude.*/
- lp.lam = atan2 (Vy, Vx);
- lp.phi = atan (Vz * cos (lp.lam) / Vx);
- lp.phi = atan (P->radius_p_inv2 * tan (lp.phi));
- return (lp);
-}
-FREEUP; if (P) free(P); }
-ENTRY0(geos)
- if ((P->h = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30);
- if (P->phi0) E_ERROR(-46);
- P->radius_g = 1. + (P->radius_g_1 = P->h / P->a);
- P->C = P->radius_g * P->radius_g - 1.0;
- if (P->es) {
- P->radius_p = sqrt (P->one_es);
- P->radius_p2 = P->one_es;
- P->radius_p_inv2 = P->rone_es;
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- P->radius_p = P->radius_p2 = P->radius_p_inv2 = 1.0;
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_gins8.c b/src/3rdparty/proj/PJ_gins8.c
deleted file mode 100644
index 0747d761..00000000
--- a/src/3rdparty/proj/PJ_gins8.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv.";
-#define Cl 0.000952426
-#define Cp 0.162388
-#define C12 0.08333333333333333
-FORWARD(s_forward); /* spheroid */
- double t = lp.phi * lp.phi;
-
- xy.y = lp.phi * (1. + t * C12);
- xy.x = lp.lam * (1. - Cp * t);
- t = lp.lam * lp.lam;
- xy.x *= (0.87 - Cl * t * t);
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(gins8) P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_gn_sinu.c b/src/3rdparty/proj/PJ_gn_sinu.c
deleted file mode 100644
index 3bf9854f..00000000
--- a/src/3rdparty/proj/PJ_gn_sinu.c
+++ /dev/null
@@ -1,100 +0,0 @@
-#define PROJ_PARMS__ \
- double *en; \
- double m, n, C_x, C_y;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n=";
-PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell";
-PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph.";
-PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph.";
-#define EPS10 1e-10
-#define MAX_ITER 8
-#define LOOP_TOL 1e-7
-/* Ellipsoidal Sinusoidal only */
-FORWARD(e_forward); /* ellipsoid */
- double s, c;
-
- xy.y = pj_mlfn(lp.phi, s = sin(lp.phi), c = cos(lp.phi), P->en);
- xy.x = lp.lam * c / sqrt(1. - P->es * s * s);
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double s;
-
- if ((s = fabs(lp.phi = pj_inv_mlfn(xy.y, P->es, P->en))) < HALFPI) {
- s = sin(lp.phi);
- lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi);
- } else if ((s - EPS10) < HALFPI)
- lp.lam = 0.;
- else I_ERROR;
- return (lp);
-}
-/* General spherical sinusoidals */
-FORWARD(s_forward); /* sphere */
- if (!P->m)
- lp.phi = P->n != 1. ? aasin(P->n * sin(lp.phi)): lp.phi;
- else {
- double k, V;
- int i;
-
- k = P->n * sin(lp.phi);
- for (i = MAX_ITER; i ; --i) {
- lp.phi -= V = (P->m * lp.phi + sin(lp.phi) - k) /
- (P->m + cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- F_ERROR
- }
- xy.x = P->C_x * lp.lam * (P->m + cos(lp.phi));
- xy.y = P->C_y * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* sphere */
- double s;
-
- xy.y /= P->C_y;
- lp.phi = P->m ? aasin((P->m * xy.y + sin(xy.y)) / P->n) :
- ( P->n != 1. ? aasin(sin(xy.y) / P->n) : xy.y );
- lp.lam = xy.x / (P->C_x * (P->m + cos(xy.y)));
- return (lp);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
- static void /* for spheres, only */
-setup(PJ *P) {
- P->es = 0;
- P->C_x = (P->C_y = sqrt((P->m + 1.) / P->n))/(P->m + 1.);
- P->inv = s_inverse;
- P->fwd = s_forward;
-}
-ENTRY1(sinu, en)
- if (!(P->en = pj_enfn(P->es)))
- E_ERROR_0;
- if (P->es) {
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- P->n = 1.;
- P->m = 0.;
- setup(P);
- }
-ENDENTRY(P)
-ENTRY1(eck6, en)
- P->m = 1.;
- P->n = 2.570796326794896619231321691;
- setup(P);
-ENDENTRY(P)
-ENTRY1(mbtfps, en)
- P->m = 0.5;
- P->n = 1.785398163397448309615660845;
- setup(P);
-ENDENTRY(P)
-ENTRY1(gn_sinu, en)
- if (pj_param(P->params, "tn").i && pj_param(P->params, "tm").i) {
- P->n = pj_param(P->params, "dn").f;
- P->m = pj_param(P->params, "dm").f;
- } else
- E_ERROR(-99)
- setup(P);
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_gnom.c b/src/3rdparty/proj/PJ_gnom.c
deleted file mode 100644
index 11deb86c..00000000
--- a/src/3rdparty/proj/PJ_gnom.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#define PROJ_PARMS__ \
- double sinph0; \
- double cosph0; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph.";
-#define EPS10 1.e-10
-#define N_POLE 0
-#define S_POLE 1
-#define EQUIT 2
-#define OBLIQ 3
-FORWARD(s_forward); /* spheroid */
- double coslam, cosphi, sinphi;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case EQUIT:
- xy.y = cosphi * coslam;
- break;
- case OBLIQ:
- xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam;
- break;
- case S_POLE:
- xy.y = - sinphi;
- break;
- case N_POLE:
- xy.y = sinphi;
- break;
- }
- if (xy.y <= EPS10) F_ERROR;
- xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam);
- switch (P->mode) {
- case EQUIT:
- xy.y *= sinphi;
- break;
- case OBLIQ:
- xy.y *= P->cosph0 * sinphi - P->sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- case S_POLE:
- xy.y *= cosphi * coslam;
- break;
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double rh, cosz, sinz;
-
- rh = hypot(xy.x, xy.y);
- sinz = sin(lp.phi = atan(rh));
- cosz = sqrt(1. - sinz * sinz);
- if (fabs(rh) <= EPS10) {
- lp.phi = P->phi0;
- lp.lam = 0.;
- } else {
- switch (P->mode) {
- case OBLIQ:
- lp.phi = cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh;
- if (fabs(lp.phi) >= 1.)
- lp.phi = lp.phi > 0. ? HALFPI : - HALFPI;
- else
- lp.phi = asin(lp.phi);
- xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh;
- xy.x *= sinz * P->cosph0;
- break;
- case EQUIT:
- lp.phi = xy.y * sinz / rh;
- if (fabs(lp.phi) >= 1.)
- lp.phi = lp.phi > 0. ? HALFPI : - HALFPI;
- else
- lp.phi = asin(lp.phi);
- xy.y = cosz * rh;
- xy.x *= sinz;
- break;
- case S_POLE:
- lp.phi -= HALFPI;
- break;
- case N_POLE:
- lp.phi = HALFPI - lp.phi;
- xy.y = -xy.y;
- break;
- }
- lp.lam = atan2(xy.x, xy.y);
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(gnom)
- if (fabs(fabs(P->phi0) - HALFPI) < EPS10)
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(P->phi0) < EPS10)
- P->mode = EQUIT;
- else {
- P->mode = OBLIQ;
- P->sinph0 = sin(P->phi0);
- P->cosph0 = cos(P->phi0);
- }
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_goode.c b/src/3rdparty/proj/PJ_goode.c
deleted file mode 100644
index ed8ded8b..00000000
--- a/src/3rdparty/proj/PJ_goode.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#define PROJ_PARMS__ \
- struct PJconsts *sinu; \
- struct PJconsts *moll;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph.";
- C_NAMESPACE PJ
-*pj_sinu(PJ *), *pj_moll(PJ *);
-#define Y_COR 0.05280
-#define PHI_LIM .71093078197902358062
-FORWARD(s_forward); /* spheroid */
- if (fabs(lp.phi) <= PHI_LIM)
- xy = P->sinu->fwd(lp, P->sinu);
- else {
- xy = P->moll->fwd(lp, P->moll);
- xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR;
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- if (fabs(xy.y) <= PHI_LIM)
- lp = P->sinu->inv(xy, P->sinu);
- else {
- xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR;
- lp = P->moll->inv(xy, P->moll);
- }
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->sinu)
- (*(P->sinu->pfree))(P->sinu);
- if (P->moll)
- (*(P->moll->pfree))(P->moll);
- pj_dalloc(P);
- }
-}
-ENTRY2(goode, sinu, moll)
- P->es = 0.;
- if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0)))
- E_ERROR_0;
- if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll)))
- E_ERROR_0;
- P->fwd = s_forward;
- P->inv = s_inverse;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_gstmerc.c b/src/3rdparty/proj/PJ_gstmerc.c
deleted file mode 100644
index 23b86ee8..00000000
--- a/src/3rdparty/proj/PJ_gstmerc.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#define PROJ_PARMS__ \
- double lamc;\
- double phic;\
- double c;\
- double n1;\
- double n2;\
- double XS;\
- double YS;
-
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)")
- "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0=";
-FORWARD(s_forward); /* spheroid */
- double L, Ls, sinLs1, Ls1;
- L= P->n1*lp.lam;
- Ls= P->c+P->n1*log(pj_tsfn(-1.0*lp.phi,-1.0*sin(lp.phi),P->e));
- sinLs1= sin(L)/cosh(Ls);
- Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0));
- xy.x= (P->XS + P->n2*Ls1)*P->ra;
- xy.y= (P->YS + P->n2*atan(sinh(Ls)/cos(L)))*P->ra;
- /*fprintf(stderr,"fwd:\nL =%16.13f\nLs =%16.13f\nLs1 =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp.lam+P->lam0,lp.phi,(xy.x*P->a + P->x0)*P->to_meter,(xy.y*P->a + P->y0)*P->to_meter);*/
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double L, LC, sinC;
- L= atan(sinh((xy.x*P->a - P->XS)/P->n2)/cos((xy.y*P->a - P->YS)/P->n2));
- sinC= sin((xy.y*P->a - P->YS)/P->n2)/cosh((xy.x*P->a - P->XS)/P->n2);
- LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0));
- lp.lam= L/P->n1;
- lp.phi= -1.0*pj_phi2(exp((LC-P->c)/P->n1),P->e);
- /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy.x/P->ra)+P->x0)/P->to_meter,((xy.y/P->ra)+P->y0)/P->to_meter,lp.lam+P->lam0,lp.phi);*/
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(gstmerc)
- P->lamc= P->lam0;
- P->n1= sqrt(1.0+P->es*pow(cos(P->phi0),4.0)/(1.0-P->es));
- P->phic= asin(sin(P->phi0)/P->n1);
- P->c= log(pj_tsfn(-1.0*P->phic,0.0,0.0))
- -P->n1*log(pj_tsfn(-1.0*P->phi0,-1.0*sin(P->phi0),P->e));
- P->n2= P->k0*P->a*sqrt(1.0-P->es)/(1.0-P->es*sin(P->phi0)*sin(P->phi0));
- P->XS= 0;/* -P->x0 */
- P->YS= -1.0*P->n2*P->phic;/* -P->y0 */
- P->inv= s_inverse;
- P->fwd= s_forward;
- /*fprintf(stderr,"a (m) =%16.4f\ne =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0 =%16.4f\nX0 (m)=%16.4f\nY0 (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc =%16.13f\nn1 =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", P->a, P->e, P->lam0, P->phi0, P->k0, P->x0, P->y0, P->lamc, P->phic, P->c, P->n1, P->n2, P->XS +P->x0, P->YS + P->y0);*/
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_hammer.c b/src/3rdparty/proj/PJ_hammer.c
deleted file mode 100644
index a2ba02aa..00000000
--- a/src/3rdparty/proj/PJ_hammer.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#define PROJ_PARMS__ \
- double w; \
- double m, rm;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff")
- "\n\tMisc Sph, no inv.\n\tW= M=";
-FORWARD(s_forward); /* spheroid */
- double cosphi, d;
-
- d = sqrt(2./(1. + (cosphi = cos(lp.phi)) * cos(lp.lam *= P->w)));
- xy.x = P->m * d * cosphi * sin(lp.lam);
- xy.y = P->rm * d * sin(lp.phi);
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(hammer)
- if (pj_param(P->params, "tW").i) {
- if ((P->w = fabs(pj_param(P->params, "dW").f)) <= 0.) E_ERROR(-27);
- } else
- P->w = .5;
- if (pj_param(P->params, "tM").i) {
- if ((P->m = fabs(pj_param(P->params, "dM").f)) <= 0.) E_ERROR(-27);
- } else
- P->m = 1.;
- P->rm = 1. / P->m;
- P->m /= P->w;
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_hatano.c b/src/3rdparty/proj/PJ_hatano.c
deleted file mode 100644
index 8e0ff5ce..00000000
--- a/src/3rdparty/proj/PJ_hatano.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph.";
-#define NITER 20
-#define EPS 1e-7
-#define ONETOL 1.000001
-#define CN 2.67595
-#define CS 2.43763
-#define RCN 0.37369906014686373063
-#define RCS 0.41023453108141924738
-#define FYCN 1.75859
-#define FYCS 1.93052
-#define RYCN 0.56863737426006061674
-#define RYCS 0.51799515156538134803
-#define FXC 0.85
-#define RXC 1.17647058823529411764
-FORWARD(s_forward); /* spheroid */
- double th1, c;
- int i;
-
- c = sin(lp.phi) * (lp.phi < 0. ? CS : CN);
- for (i = NITER; i; --i) {
- lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi));
- if (fabs(th1) < EPS) break;
- }
- xy.x = FXC * lp.lam * cos(lp.phi *= .5);
- xy.y = sin(lp.phi) * (lp.phi < 0. ? FYCS : FYCN);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double th;
-
- th = xy.y * ( xy.y < 0. ? RYCS : RYCN);
- if (fabs(th) > 1.)
- if (fabs(th) > ONETOL) I_ERROR
- else th = th > 0. ? HALFPI : - HALFPI;
- else
- th = asin(th);
- lp.lam = RXC * xy.x / cos(th);
- th += th;
- lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN);
- if (fabs(lp.phi) > 1.)
- if (fabs(lp.phi) > ONETOL) I_ERROR
- else lp.phi = lp.phi > 0. ? HALFPI : - HALFPI;
- else
- lp.phi = asin(lp.phi);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(hatano) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_imw_p.c b/src/3rdparty/proj/PJ_imw_p.c
deleted file mode 100644
index 135b3dab..00000000
--- a/src/3rdparty/proj/PJ_imw_p.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#define PROJ_PARMS__ \
- double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; \
- double phi_1, phi_2, lam_1; \
- double *en; \
- int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(imw_p, "International Map of the World Polyconic")
- "\n\tMod. Polyconic, Ell\n\tlat_1= and lat_2= [lon_1=]";
-#define TOL 1e-10
-#define EPS 1e-10
- static int
-phi12(PJ *P, double *del, double *sig) {
- int err = 0;
-
- if (!pj_param(P->params, "tlat_1").i ||
- !pj_param(P->params, "tlat_2").i) {
- err = -41;
- } else {
- P->phi_1 = pj_param(P->params, "rlat_1").f;
- P->phi_2 = pj_param(P->params, "rlat_2").f;
- *del = 0.5 * (P->phi_2 - P->phi_1);
- *sig = 0.5 * (P->phi_2 + P->phi_1);
- err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0;
- }
- return err;
-}
- static XY
-loc_for(LP lp, PJ *P, double *yc) {
- XY xy;
-
- if (! lp.phi) {
- xy.x = lp.lam;
- xy.y = 0.;
- } else {
- double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C;
-
- sp = sin(lp.phi);
- m = pj_mlfn(lp.phi, sp, cos(lp.phi), P->en);
- xa = P->Pp + P->Qp * m;
- ya = P->P + P->Q * m;
- R = 1. / (tan(lp.phi) * sqrt(1. - P->es * sp * sp));
- C = sqrt(R * R - xa * xa);
- if (lp.phi < 0.) C = - C;
- C += ya - R;
- if (P->mode < 0) {
- xb = lp.lam;
- yb = P->C2;
- } else {
- t = lp.lam * P->sphi_2;
- xb = P->R_2 * sin(t);
- yb = P->C2 + P->R_2 * (1. - cos(t));
- }
- if (P->mode > 0) {
- xc = lp.lam;
- *yc = 0.;
- } else {
- t = lp.lam * P->sphi_1;
- xc = P->R_1 * sin(t);
- *yc = P->R_1 * (1. - cos(t));
- }
- D = (xb - xc)/(yb - *yc);
- B = xc + D * (C + R - *yc);
- xy.x = D * sqrt(R * R * (1 + D * D) - B * B);
- if (lp.phi > 0)
- xy.x = - xy.x;
- xy.x = (B + xy.x) / (1. + D * D);
- xy.y = sqrt(R * R - xy.x * xy.x);
- if (lp.phi > 0)
- xy.y = - xy.y;
- xy.y += C + R;
- }
- return (xy);
-}
-FORWARD(e_forward); /* ellipsoid */
- double yc;
- xy = loc_for(lp, P, &yc);
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- XY t;
- double yc;
-
- lp.phi = P->phi_2;
- lp.lam = xy.x / cos(lp.phi);
- do {
- t = loc_for(lp, P, &yc);
- lp.phi = ((lp.phi - P->phi_1) * (xy.y - yc) / (t.y - yc)) + P->phi_1;
- lp.lam = lp.lam * xy.x / t.x;
- } while (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL);
- return (lp);
-}
- static void
-xy(PJ *P, double phi, double *x, double *y, double *sp, double *R) {
- double F;
-
- *sp = sin(phi);
- *R = 1./(tan(phi) * sqrt(1. - P->es * *sp * *sp ));
- F = P->lam_1 * *sp;
- *y = *R * (1 - cos(F));
- *x = *R * sin(F);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
-ENTRY1(imw_p, en)
- double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2;
- int i;
-
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- if( (i = phi12(P, &del, &sig)) != 0)
- E_ERROR(i);
- if (P->phi_2 < P->phi_1) { /* make sure P->phi_1 most southerly */
- del = P->phi_1;
- P->phi_1 = P->phi_2;
- P->phi_2 = del;
- }
- if (pj_param(P->params, "tlon_1").i)
- P->lam_1 = pj_param(P->params, "rlon_1").f;
- else { /* use predefined based upon latitude */
- sig = fabs(sig * RAD_TO_DEG);
- if (sig <= 60) sig = 2.;
- else if (sig <= 76) sig = 4.;
- else sig = 8.;
- P->lam_1 = sig * DEG_TO_RAD;
- }
- P->mode = 0;
- if (P->phi_1) xy(P, P->phi_1, &x1, &y1, &P->sphi_1, &P->R_1);
- else {
- P->mode = 1;
- y1 = 0.;
- x1 = P->lam_1;
- }
- if (P->phi_2) xy(P, P->phi_2, &x2, &T2, &P->sphi_2, &P->R_2);
- else {
- P->mode = -1;
- T2 = 0.;
- x2 = P->lam_1;
- }
- m1 = pj_mlfn(P->phi_1, P->sphi_1, cos(P->phi_1), P->en);
- m2 = pj_mlfn(P->phi_2, P->sphi_2, cos(P->phi_2), P->en);
- t = m2 - m1;
- s = x2 - x1;
- y2 = sqrt(t * t - s * s) + y1;
- P->C2 = y2 - T2;
- t = 1. / t;
- P->P = (m2 * y1 - m1 * y2) * t;
- P->Q = (y2 - y1) * t;
- P->Pp = (m2 * x1 - m1 * x2) * t;
- P->Qp = (x2 - x1) * t;
- P->fwd = e_forward;
- P->inv = e_inverse;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_krovak.c b/src/3rdparty/proj/PJ_krovak.c
deleted file mode 100644
index 53e50994..00000000
--- a/src/3rdparty/proj/PJ_krovak.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/******************************************************************************
- * $Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the krovak (Krovak) projection.
- * Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3
- * Author: Thomas Flemming, tf@ttqv.com
- *
- ******************************************************************************
- * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *****************************************************************************/
-
-#define PROJ_PARMS__ \
- double C_x;
-#define PJ_LIB__
-
-#include <projects.h>
-#include <string.h>
-#include <stdio.h>
-
-PJ_CVSID("$Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps.";
-
-/**
- NOTES: According to EPSG the full Krovak projection method should have
- the following parameters. Within PROJ.4 the azimuth, and pseudo
- standard parallel are hardcoded in the algorithm and can't be
- altered from outside. The others all have defaults to match the
- common usage with Krovak projection.
-
- lat_0 = latitude of centre of the projection
-
- lon_0 = longitude of centre of the projection
-
- ** = azimuth (true) of the centre line passing through the centre of the projection
-
- ** = latitude of pseudo standard parallel
-
- k = scale factor on the pseudo standard parallel
-
- x_0 = False Easting of the centre of the projection at the apex of the cone
-
- y_0 = False Northing of the centre of the projection at the apex of the cone
-
- **/
-
-
-
-FORWARD(e_forward); /* ellipsoid */
-/* calculate xy from lat/lon */
-
- char errmess[255];
- char tmp[16];
-
-/* Constants, identical to inverse transform function */
- double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
- double gfi, u, fi0, lon17, lamdd, deltav, s, d, eps, ro;
-
-
- s45 = 0.785398163397448; /* 45° */
- s90 = 2 * s45;
- fi0 = P->phi0; /* Latitude of projection centre 49° 30' */
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
- be set to 1 here.
- Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
- e2=0.006674372230614;
- */
- a = 1; /* 6377397.155; */
- /* e2 = P->es;*/ /* 0.006674372230614; */
- e2 = 0.006674372230614;
- e = sqrt(e2);
-
- alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
-
- uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
- u0 = asin(sin(fi0) / alfa);
- g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
- k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
- k1 = P->k0;
- n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
- s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */
- n = sin(s0);
- ro0 = k1 * n0 / tan(s0);
- ad = s90 - uq;
-
-/* Transformation */
-
- gfi =pow ( ((1. + e * sin(lp.phi)) /
- (1. - e * sin(lp.phi))) , (alfa * e / 2.));
-
- u= 2. * (atan(k * pow( tan(lp.phi / 2. + s45), alfa) / gfi)-s45);
-
- deltav = - lp.lam * alfa;
-
- s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav));
- d = asin(cos(u) * sin(deltav) / cos(s));
- eps = n * d;
- ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ;
-
- /* x and y are reverted! */
- xy.y = ro * cos(eps) / a;
- xy.x = ro * sin(eps) / a;
-
- if( !pj_param(P -> params, "tczech").i )
- {
- xy.y *= -1.0;
- xy.x *= -1.0;
- }
-
- return (xy);
-}
-
-
-
-INVERSE(e_inverse); /* ellipsoid */
- /* calculate lat/lon from xy */
-
-/* Constants, identisch wie in der Umkehrfunktion */
- double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
- double u, l24, lamdd, deltav, s, d, eps, ro, fi1, xy0, lon17;
- int ok;
-
- s45 = 0.785398163397448; /* 45° */
- s90 = 2 * s45;
- fi0 = P->phi0; /* Latitude of projection centre 49° 30' */
-
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
- be set to 1 here.
- Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
- e2=0.006674372230614;
- */
- a = 1; /* 6377397.155; */
- /* e2 = P->es; */ /* 0.006674372230614; */
- e2 = 0.006674372230614;
- e = sqrt(e2);
-
- alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
- uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
- u0 = asin(sin(fi0) / alfa);
- g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
- k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
- k1 = P->k0;
- n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
- s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78° 30'00" N */
- n = sin(s0);
- ro0 = k1 * n0 / tan(s0);
- ad = s90 - uq;
-
-
-/* Transformation */
- /* revert y, x*/
- xy0=xy.x;
- xy.x=xy.y;
- xy.y=xy0;
-
- if( !pj_param(P -> params, "tczech").i )
- {
- xy.x *= -1.0;
- xy.y *= -1.0;
- }
-
- ro = sqrt(xy.x * xy.x + xy.y * xy.y);
- eps = atan2(xy.y, xy.x);
- d = eps / sin(s0);
- s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45);
-
- u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d));
- deltav = asin(cos(s) * sin(d) / cos(u));
-
- lp.lam = P->lam0 - deltav / alfa;
-
-/* ITERATION FOR lp.phi */
- fi1 = u;
-
- ok = 0;
- do
- {
- lp.phi = 2. * ( atan( pow( k, -1. / alfa) *
- pow( tan(u / 2. + s45) , 1. / alfa) *
- pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.)
- ) - s45);
-
- if (fabs(fi1 - lp.phi) < 0.000000000000001) ok=1;
- fi1 = lp.phi;
-
- }
- while (ok==0);
-
- lp.lam -= P->lam0;
-
- return (lp);
-}
-
-FREEUP; if (P) pj_dalloc(P); }
-
-ENTRY0(krovak)
- double ts;
- /* read some Parameters,
- * here Latitude Truescale */
-
- ts = pj_param(P->params, "rlat_ts").f;
- P->C_x = ts;
-
- /* we want Bessel as fixed ellipsoid */
- P->a = 6377397.155;
- P->e = sqrt(P->es = 0.006674372230614);
-
- /* if latitude of projection center is not set, use 49d30'N */
- if (!pj_param(P->params, "tlat_0").i)
- P->phi0 = 0.863937979737193;
-
- /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */
- /* that will correspond to using longitudes relative to greenwich */
- /* as input and output, instead of lat/long relative to Ferro */
- if (!pj_param(P->params, "tlon_0").i)
- P->lam0 = 0.7417649320975901 - 0.308341501185665;
-
- /* if scale not set default to 0.9999 */
- if (!pj_param(P->params, "tk").i)
- P->k0 = 0.9999;
-
- /* always the same */
- P->inv = e_inverse;
- P->fwd = e_forward;
-
-ENDENTRY(P)
-
diff --git a/src/3rdparty/proj/PJ_labrd.c b/src/3rdparty/proj/PJ_labrd.c
deleted file mode 100644
index 70cd2f42..00000000
--- a/src/3rdparty/proj/PJ_labrd.c
+++ /dev/null
@@ -1,109 +0,0 @@
-#define PROJ_PARMS__ \
- double Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd; \
- int rot;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar";
-#define EPS 1.e-10
-FORWARD(e_forward);
- double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6,
- x2, y2, t;
-
- V1 = P->A * log( tan(FORTPI + .5 * lp.phi) );
- t = P->e * sin(lp.phi);
- V2 = .5 * P->e * P->A * log ((1. + t)/(1. - t));
- ps = 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI);
- I1 = ps - P->p0s;
- cosps = cos(ps); cosps2 = cosps * cosps;
- sinps = sin(ps); sinps2 = sinps * sinps;
- I4 = P->A * cosps;
- I2 = .5 * P->A * I4 * sinps;
- I3 = I2 * P->A * P->A * (5. * cosps2 - sinps2) / 12.;
- I6 = I4 * P->A * P->A;
- I5 = I6 * (cosps2 - sinps2) / 6.;
- I6 *= P->A * P->A *
- (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.;
- t = lp.lam * lp.lam;
- xy.x = P->kRg * lp.lam * (I4 + t * (I5 + t * I6));
- xy.y = P->kRg * (I1 + t * (I2 + t * I3));
- x2 = xy.x * xy.x;
- y2 = xy.y * xy.y;
- V1 = 3. * xy.x * y2 - xy.x * x2;
- V2 = xy.y * y2 - 3. * x2 * xy.y;
- xy.x += P->Ca * V1 + P->Cb * V2;
- xy.y += P->Ca * V2 - P->Cb * V1;
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid & spheroid */
- double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s,
- I7, I8, I9, I10, I11, d, Re;
- int i;
-
- x2 = xy.x * xy.x;
- y2 = xy.y * xy.y;
- V1 = 3. * xy.x * y2 - xy.x * x2;
- V2 = xy.y * y2 - 3. * x2 * xy.y;
- V3 = xy.x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 ));
- V4 = xy.y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 ));
- xy.x += - P->Ca * V1 - P->Cb * V2 + P->Cc * V3 + P->Cd * V4;
- xy.y += P->Cb * V1 - P->Ca * V2 - P->Cd * V3 + P->Cc * V4;
- ps = P->p0s + xy.y / P->kRg;
- pe = ps + P->phi0 - P->p0s;
- for ( i = 20; i; --i) {
- V1 = P->A * log(tan(FORTPI + .5 * pe));
- tpe = P->e * sin(pe);
- V2 = .5 * P->e * P->A * log((1. + tpe)/(1. - tpe));
- t = ps - 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI);
- pe += t;
- if (fabs(t) < EPS)
- break;
- }
-/*
- if (!i) {
- } else {
- }
-*/
- t = P->e * sin(pe);
- t = 1. - t * t;
- Re = P->one_es / ( t * sqrt(t) );
- t = tan(ps);
- t2 = t * t;
- s = P->kRg * P->kRg;
- d = Re * P->k0 * P->kRg;
- I7 = t / (2. * d);
- I8 = t * (5. + 3. * t2) / (24. * d * s);
- d = cos(ps) * P->kRg * P->A;
- I9 = 1. / d;
- d *= s;
- I10 = (1. + 2. * t2) / (6. * d);
- I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s);
- x2 = xy.x * xy.x;
- lp.phi = pe + x2 * (-I7 + I8 * x2);
- lp.lam = xy.x * (I9 + x2 * (-I10 + x2 * I11));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(labrd)
- double Az, sinp, R, N, t;
-
- P->rot = pj_param(P->params, "bno_rot").i == 0;
- Az = pj_param(P->params, "razi").f;
- sinp = sin(P->phi0);
- t = 1. - P->es * sinp * sinp;
- N = 1. / sqrt(t);
- R = P->one_es * N / t;
- P->kRg = P->k0 * sqrt( N * R );
- P->p0s = atan( sqrt(R / N) * tan(P->phi0) );
- P->A = sinp / sin(P->p0s);
- t = P->e * sinp;
- P->C = .5 * P->e * P->A * log((1. + t)/(1. - t)) +
- - P->A * log( tan(FORTPI + .5 * P->phi0))
- + log( tan(FORTPI + .5 * P->p0s));
- t = Az + Az;
- P->Ca = (1. - cos(t)) * ( P->Cb = 1. / (12. * P->kRg * P->kRg) );
- P->Cb *= sin(t);
- P->Cc = 3. * (P->Ca * P->Ca - P->Cb * P->Cb);
- P->Cd = 6. * P->Ca * P->Cb;
- P->inv = e_inverse;
- P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_laea.c b/src/3rdparty/proj/PJ_laea.c
deleted file mode 100644
index d32bb0be..00000000
--- a/src/3rdparty/proj/PJ_laea.c
+++ /dev/null
@@ -1,233 +0,0 @@
-#define PROJ_PARMS__ \
- double sinb1; \
- double cosb1; \
- double xmf; \
- double ymf; \
- double mmf; \
- double qp; \
- double dd; \
- double rq; \
- double *apa; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell";
-#define sinph0 P->sinb1
-#define cosph0 P->cosb1
-#define EPS10 1.e-10
-#define NITER 20
-#define CONV 1.e-10
-#define N_POLE 0
-#define S_POLE 1
-#define EQUIT 2
-#define OBLIQ 3
-FORWARD(e_forward); /* ellipsoid */
- double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0;
-
- coslam = cos(lp.lam);
- sinlam = sin(lp.lam);
- sinphi = sin(lp.phi);
- q = pj_qsfn(sinphi, P->e, P->one_es);
- if (P->mode == OBLIQ || P->mode == EQUIT) {
- sinb = q / P->qp;
- cosb = sqrt(1. - sinb * sinb);
- }
- switch (P->mode) {
- case OBLIQ:
- b = 1. + P->sinb1 * sinb + P->cosb1 * cosb * coslam;
- break;
- case EQUIT:
- b = 1. + cosb * coslam;
- break;
- case N_POLE:
- b = HALFPI + lp.phi;
- q = P->qp - q;
- break;
- case S_POLE:
- b = lp.phi - HALFPI;
- q = P->qp + q;
- break;
- }
- if (fabs(b) < EPS10) F_ERROR;
- switch (P->mode) {
- case OBLIQ:
- xy.y = P->ymf * ( b = sqrt(2. / b) )
- * (P->cosb1 * sinb - P->sinb1 * cosb * coslam);
- goto eqcon;
- break;
- case EQUIT:
- xy.y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * P->ymf;
-eqcon:
- xy.x = P->xmf * b * cosb * sinlam;
- break;
- case N_POLE:
- case S_POLE:
- if (q >= 0.) {
- xy.x = (b = sqrt(q)) * sinlam;
- xy.y = coslam * (P->mode == S_POLE ? b : -b);
- } else
- xy.x = xy.y = 0.;
- break;
- }
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- double coslam, cosphi, sinphi;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case EQUIT:
- xy.y = 1. + cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam;
-oblcon:
- if (xy.y <= EPS10) F_ERROR;
- xy.x = (xy.y = sqrt(2. / xy.y)) * cosphi * sin(lp.lam);
- xy.y *= P->mode == EQUIT ? sinphi :
- cosph0 * sinphi - sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = -coslam;
- case S_POLE:
- if (fabs(lp.phi + P->phi0) < EPS10) F_ERROR;
- xy.y = FORTPI - lp.phi * .5;
- xy.y = 2. * (P->mode == S_POLE ? cos(xy.y) : sin(xy.y));
- xy.x = xy.y * sin(lp.lam);
- xy.y *= coslam;
- break;
- }
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double cCe, sCe, q, rho, ab=0.0;
-
- switch (P->mode) {
- case EQUIT:
- case OBLIQ:
- if ((rho = hypot(xy.x /= P->dd, xy.y *= P->dd)) < EPS10) {
- lp.lam = 0.;
- lp.phi = P->phi0;
- return (lp);
- }
- cCe = cos(sCe = 2. * asin(.5 * rho / P->rq));
- xy.x *= (sCe = sin(sCe));
- if (P->mode == OBLIQ) {
- q = P->qp * (ab = cCe * P->sinb1 + xy.y * sCe * P->cosb1 / rho);
- xy.y = rho * P->cosb1 * cCe - xy.y * P->sinb1 * sCe;
- } else {
- q = P->qp * (ab = xy.y * sCe / rho);
- xy.y = rho * cCe;
- }
- break;
- case N_POLE:
- xy.y = -xy.y;
- case S_POLE:
- if (!(q = (xy.x * xy.x + xy.y * xy.y)) ) {
- lp.lam = 0.;
- lp.phi = P->phi0;
- return (lp);
- }
- /*
- q = P->qp - q;
- */
- ab = 1. - q / P->qp;
- if (P->mode == S_POLE)
- ab = - ab;
- break;
- }
- lp.lam = atan2(xy.x, xy.y);
- lp.phi = pj_authlat(asin(ab), P->apa);
- return (lp);
-}
-INVERSE(s_inverse); /* spheroid */
- double cosz=0.0, rh, sinz=0.0;
-
- rh = hypot(xy.x, xy.y);
- if ((lp.phi = rh * .5 ) > 1.) I_ERROR;
- lp.phi = 2. * asin(lp.phi);
- if (P->mode == OBLIQ || P->mode == EQUIT) {
- sinz = sin(lp.phi);
- cosz = cos(lp.phi);
- }
- switch (P->mode) {
- case EQUIT:
- lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh);
- xy.x *= sinz;
- xy.y = cosz * rh;
- break;
- case OBLIQ:
- lp.phi = fabs(rh) <= EPS10 ? P->phi0 :
- asin(cosz * sinph0 + xy.y * sinz * cosph0 / rh);
- xy.x *= sinz * cosph0;
- xy.y = (cosz - sin(lp.phi) * sinph0) * rh;
- break;
- case N_POLE:
- xy.y = -xy.y;
- lp.phi = HALFPI - lp.phi;
- break;
- case S_POLE:
- lp.phi -= HALFPI;
- break;
- }
- lp.lam = (xy.y == 0. && (P->mode == EQUIT || P->mode == OBLIQ)) ?
- 0. : atan2(xy.x, xy.y);
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->apa)
- pj_dalloc(P->apa);
- pj_dalloc(P);
- }
-}
-ENTRY1(laea,apa)
- double t;
-
- if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10)
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(t) < EPS10)
- P->mode = EQUIT;
- else
- P->mode = OBLIQ;
- if (P->es) {
- double sinphi;
-
- P->e = sqrt(P->es);
- P->qp = pj_qsfn(1., P->e, P->one_es);
- P->mmf = .5 / (1. - P->es);
- P->apa = pj_authset(P->es);
- switch (P->mode) {
- case N_POLE:
- case S_POLE:
- P->dd = 1.;
- break;
- case EQUIT:
- P->dd = 1. / (P->rq = sqrt(.5 * P->qp));
- P->xmf = 1.;
- P->ymf = .5 * P->qp;
- break;
- case OBLIQ:
- P->rq = sqrt(.5 * P->qp);
- sinphi = sin(P->phi0);
- P->sinb1 = pj_qsfn(sinphi, P->e, P->one_es) / P->qp;
- P->cosb1 = sqrt(1. - P->sinb1 * P->sinb1);
- P->dd = cos(P->phi0) / (sqrt(1. - P->es * sinphi * sinphi) *
- P->rq * P->cosb1);
- P->ymf = (P->xmf = P->rq) / P->dd;
- P->xmf *= P->dd;
- break;
- }
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- if (P->mode == OBLIQ) {
- sinph0 = sin(P->phi0);
- cosph0 = cos(P->phi0);
- }
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_lagrng.c b/src/3rdparty/proj/PJ_lagrng.c
deleted file mode 100644
index d0e123a9..00000000
--- a/src/3rdparty/proj/PJ_lagrng.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#define PROJ_PARMS__ \
- double hrw; \
- double rw; \
- double a1;
-#define TOL 1e-10
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph, no inv.\n\tW=";
-FORWARD(s_forward); /* spheroid */
- double v, c;
-
- if (fabs(fabs(lp.phi) - HALFPI) < TOL) {
- xy.x = 0;
- xy.y = lp.phi < 0 ? -2. : 2.;
- } else {
- lp.phi = sin(lp.phi);
- v = P->a1 * pow((1. + lp.phi)/(1. - lp.phi), P->hrw);
- if ((c = 0.5 * (v + 1./v) + cos(lp.lam *= P->rw)) < TOL)
- F_ERROR;
- xy.x = 2. * sin(lp.lam) / c;
- xy.y = (v - 1./v) / c;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(lagrng)
- double phi1;
-
- if ((P->rw = pj_param(P->params, "dW").f) <= 0) E_ERROR(-27);
- P->hrw = 0.5 * (P->rw = 1. / P->rw);
- phi1 = pj_param(P->params, "rlat_1").f;
- if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) E_ERROR(-22);
- P->a1 = pow((1. - phi1)/(1. + phi1), P->hrw);
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_larr.c b/src/3rdparty/proj/PJ_larr.c
deleted file mode 100644
index 5bab2b09..00000000
--- a/src/3rdparty/proj/PJ_larr.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#define PROJ_PARMS__
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv.";
-#define SIXTH .16666666666666666
-FORWARD(s_forward); /* sphere */
- xy.x = 0.5 * lp.lam * (1. + sqrt(cos(lp.phi)));
- xy.y = lp.phi / (cos(0.5 * lp.phi) * cos(SIXTH * lp.lam));
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(larr) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_lask.c b/src/3rdparty/proj/PJ_lask.c
deleted file mode 100644
index 05e80a19..00000000
--- a/src/3rdparty/proj/PJ_lask.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#define PROJ_PARMS__
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv.";
-#define a10 0.975534
-#define a12 -0.119161
-#define a32 -0.0143059
-#define a14 -0.0547009
-#define b01 1.00384
-#define b21 0.0802894
-#define b03 0.0998909
-#define b41 0.000199025
-#define b23 -0.0285500
-#define b05 -0.0491032
-FORWARD(s_forward); /* sphere */
- double l2, p2;
-
- l2 = lp.lam * lp.lam;
- p2 = lp.phi * lp.phi;
- xy.x = lp.lam * (a10 + p2 * (a12 + l2 * a32 + p2 * a14));
- xy.y = lp.phi * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) +
- p2 * (b03 + p2 * b05));
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(lask) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_lcc.c b/src/3rdparty/proj/PJ_lcc.c
deleted file mode 100644
index 80a85d0b..00000000
--- a/src/3rdparty/proj/PJ_lcc.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#define PROJ_PARMS__ \
- double phi1; \
- double phi2; \
- double n; \
- double rho0; \
- double c; \
- int ellips;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(lcc, "Lambert Conformal Conic")
- "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0";
-# define EPS10 1.e-10
-FORWARD(e_forward); /* ellipsoid & spheroid */
- double rho;
- if (fabs(fabs(lp.phi) - HALFPI) < EPS10) {
- if ((lp.phi * P->n) <= 0.) F_ERROR;
- rho = 0.;
- }
- else
- rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
- P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n));
- xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) );
- xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) );
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid & spheroid */
- double rho;
- xy.x /= P->k0;
- xy.y /= P->k0;
- if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) {
- if (P->n < 0.) {
- rho = -rho;
- xy.x = -xy.x;
- xy.y = -xy.y;
- }
- if (P->ellips) {
- if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e))
- == HUGE_VAL)
- I_ERROR;
- } else
- lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI;
- lp.lam = atan2(xy.x, xy.y) / P->n;
- } else {
- lp.lam = 0.;
- lp.phi = P->n > 0. ? HALFPI : - HALFPI;
- }
- return (lp);
-}
-SPECIAL(fac) {
- double rho;
- if (fabs(fabs(lp.phi) - HALFPI) < EPS10) {
- if ((lp.phi * P->n) <= 0.) return;
- rho = 0.;
- } else
- rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
- P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n));
- fac->code |= IS_ANAL_HK + IS_ANAL_CONV;
- fac->k = fac->h = P->k0 * P->n * rho /
- pj_msfn(sin(lp.phi), cos(lp.phi), P->es);
- fac->conv = - P->n * lp.lam;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(lcc)
- double cosphi, sinphi;
- int secant;
-
- P->phi1 = pj_param(P->params, "rlat_1").f;
- if (pj_param(P->params, "tlat_2").i)
- P->phi2 = pj_param(P->params, "rlat_2").f;
- else {
- P->phi2 = P->phi1;
- if (!pj_param(P->params, "tlat_0").i)
- P->phi0 = P->phi1;
- }
- if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21);
- P->n = sinphi = sin(P->phi1);
- cosphi = cos(P->phi1);
- secant = fabs(P->phi1 - P->phi2) >= EPS10;
- if( (P->ellips = (P->es != 0.)) ) {
- double ml1, m1;
-
- P->e = sqrt(P->es);
- m1 = pj_msfn(sinphi, cosphi, P->es);
- ml1 = pj_tsfn(P->phi1, sinphi, P->e);
- if (secant) { /* secant cone */
- P->n = log(m1 /
- pj_msfn(sinphi = sin(P->phi2), cos(P->phi2), P->es));
- P->n /= log(ml1 / pj_tsfn(P->phi2, sinphi, P->e));
- }
- P->c = (P->rho0 = m1 * pow(ml1, -P->n) / P->n);
- P->rho0 *= (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. :
- pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), P->n);
- } else {
- if (secant)
- P->n = log(cosphi / cos(P->phi2)) /
- log(tan(FORTPI + .5 * P->phi2) /
- tan(FORTPI + .5 * P->phi1));
- P->c = cosphi * pow(tan(FORTPI + .5 * P->phi1), P->n) / P->n;
- P->rho0 = (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. :
- P->c * pow(tan(FORTPI + .5 * P->phi0), -P->n);
- }
- P->inv = e_inverse;
- P->fwd = e_forward;
- P->spc = fac;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_lcca.c b/src/3rdparty/proj/PJ_lcca.c
deleted file mode 100644
index 2bb101ad..00000000
--- a/src/3rdparty/proj/PJ_lcca.c
+++ /dev/null
@@ -1,72 +0,0 @@
-static const char RCS_ID[] = "$Id: PJ_lcca.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/* PROJ.4 Cartographic Projection System
-*/
-#define MAX_ITER 10
-#define DEL_TOL 1e-12
-#define PROJ_PARMS__ \
- double *en; \
- double r0, l, M0; \
- double C;
-#define PJ_LIB__
-#include <projects.h>
-
-PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative")
- "\n\tConic, Sph&Ell\n\tlat_0=";
-
- static double /* func to compute dr */
-fS(double S, double C) {
- return(S * ( 1. + S * S * C));
-}
- static double /* deriv of fs */
-fSp(double S, double C) {
- return(1. + 3.* S * S * C);
-}
-FORWARD(e_forward); /* ellipsoid */
- double S, S3, r, dr;
-
- S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) - P->M0;
- dr = fS(S, P->C);
- r = P->r0 - dr;
- xy.x = P->k0 * (r * sin( lp.lam *= P->l ) );
- xy.y = P->k0 * (P->r0 - r * cos(lp.lam) );
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid & spheroid */
- double theta, dr, S, dif;
- int i;
-
- xy.x /= P->k0;
- xy.y /= P->k0;
- theta = atan2(xy.x , P->r0 - xy.y);
- dr = xy.y - xy.x * tan(0.5 * theta);
- lp.lam = theta / P->l;
- S = dr;
- for (i = MAX_ITER; i ; --i) {
- S -= (dif = (fS(S, P->C) - dr) / fSp(S, P->C));
- if (fabs(dif) < DEL_TOL) break;
- }
- if (!i) I_ERROR
- lp.phi = pj_inv_mlfn(S + P->M0, P->es, P->en);
- return (lp);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
-ENTRY0(lcca)
- double s2p0, N0, R0, tan0, tan20;
-
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- if (!pj_param(P->params, "tlat_0").i) E_ERROR(50);
- if (P->phi0 == 0.) E_ERROR(51);
- P->l = sin(P->phi0);
- P->M0 = pj_mlfn(P->phi0, P->l, cos(P->phi0), P->en);
- s2p0 = P->l * P->l;
- R0 = 1. / (1. - P->es * s2p0);
- N0 = sqrt(R0);
- R0 *= P->one_es * N0;
- tan0 = tan(P->phi0);
- tan20 = tan0 * tan0;
- P->r0 = N0 / tan0;
- P->C = 1. / (6. * R0 * N0);
- P->inv = e_inverse;
- P->fwd = e_forward;
-ENDENTRY(P)
-
diff --git a/src/3rdparty/proj/PJ_loxim.c b/src/3rdparty/proj/PJ_loxim.c
deleted file mode 100644
index 80c15318..00000000
--- a/src/3rdparty/proj/PJ_loxim.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#define PROJ_PARMS__ \
- double phi1; \
- double cosphi1; \
- double tanphi1;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph";
-#define EPS 1e-8
-FORWARD(s_forward); /* spheroid */
- xy.y = lp.phi - P->phi1;
- if (fabs(xy.y) < EPS)
- xy.x = lp.lam * P->cosphi1;
- else {
- xy.x = FORTPI + 0.5 * lp.phi;
- if (fabs(xy.x) < EPS || fabs(fabs(xy.x) - HALFPI) < EPS)
- xy.x = 0.;
- else
- xy.x = lp.lam * xy.y / log( tan(xy.x) / P->tanphi1 );
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y + P->phi1;
- if (fabs(xy.y) < EPS)
- lp.lam = xy.x / P->cosphi1;
- else
- if (fabs( lp.lam = FORTPI + 0.5 * lp.phi ) < EPS ||
- fabs(fabs(lp.lam) - HALFPI) < EPS)
- lp.lam = 0.;
- else
- lp.lam = xy.x * log( tan(lp.lam) / P->tanphi1 ) / xy.y ;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(loxim);
- P->phi1 = pj_param(P->params, "rlat_1").f;
- if ((P->cosphi1 = cos(P->phi1)) < EPS) E_ERROR(-22);
- P->tanphi1 = tan(FORTPI + 0.5 * P->phi1);
- P->inv = s_inverse; P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_lsat.c b/src/3rdparty/proj/PJ_lsat.c
deleted file mode 100644
index e8edb542..00000000
--- a/src/3rdparty/proj/PJ_lsat.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* based upon Snyder and Linck, USGS-NMD */
-#define PROJ_PARMS__ \
- double a2, a4, b, c1, c3; \
- double q, t, u, w, p22, sa, ca, xj, rlm, rlm2;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(lsat, "Space oblique for LANDSAT")
- "\n\tCyl, Sph&Ell\n\tlsat= path=";
-#define TOL 1e-7
-#define PI_HALFPI 4.71238898038468985766
-#define TWOPI_HALFPI 7.85398163397448309610
- static void
-seraz0(double lam, double mult, PJ *P) {
- double sdsq, h, s, fc, sd, sq, d__1;
-
- lam *= DEG_TO_RAD;
- sd = sin(lam);
- sdsq = sd * sd;
- s = P->p22 * P->sa * cos(lam) * sqrt((1. + P->t * sdsq) / ((
- 1. + P->w * sdsq) * (1. + P->q * sdsq)));
- d__1 = 1. + P->q * sdsq;
- h = sqrt((1. + P->q * sdsq) / (1. + P->w * sdsq)) * ((1. +
- P->w * sdsq) / (d__1 * d__1) - P->p22 * P->ca);
- sq = sqrt(P->xj * P->xj + s * s);
- P->b += fc = mult * (h * P->xj - s * s) / sq;
- P->a2 += fc * cos(lam + lam);
- P->a4 += fc * cos(lam * 4.);
- fc = mult * s * (h + P->xj) / sq;
- P->c1 += fc * cos(lam);
- P->c3 += fc * cos(lam * 3.);
-}
-FORWARD(e_forward); /* ellipsoid */
- int l, nn;
- double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph,
- lamtp, cl, sd, sp, fac, sav, tanphi;
-
- if (lp.phi > HALFPI)
- lp.phi = HALFPI;
- else if (lp.phi < -HALFPI)
- lp.phi = -HALFPI;
- lampp = lp.phi >= 0. ? HALFPI : PI_HALFPI;
- tanphi = tan(lp.phi);
- for (nn = 0;;) {
- sav = lampp;
- lamtp = lp.lam + P->p22 * lampp;
- cl = cos(lamtp);
- if (fabs(cl) < TOL)
- lamtp -= TOL;
- fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI);
- for (l = 50; l; --l) {
- lamt = lp.lam + P->p22 * sav;
- if (fabs(c = cos(lamt)) < TOL)
- lamt -= TOL;
- xlam = (P->one_es * tanphi * P->sa + sin(lamt) * P->ca) / c;
- lamdp = atan(xlam) + fac;
- if (fabs(fabs(sav) - fabs(lamdp)) < TOL)
- break;
- sav = lamdp;
- }
- if (!l || ++nn >= 3 || (lamdp > P->rlm && lamdp < P->rlm2))
- break;
- if (lamdp <= P->rlm)
- lampp = TWOPI_HALFPI;
- else if (lamdp >= P->rlm2)
- lampp = HALFPI;
- }
- if (l) {
- sp = sin(lp.phi);
- phidp = aasin((P->one_es * P->ca * sp - P->sa * cos(lp.phi) *
- sin(lamt)) / sqrt(1. - P->es * sp * sp));
- tanph = log(tan(FORTPI + .5 * phidp));
- sd = sin(lamdp);
- sdsq = sd * sd;
- s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq)
- / ((1. + P->w * sdsq) * (1. + P->q * sdsq)));
- d = sqrt(P->xj * P->xj + s * s);
- xy.x = P->b * lamdp + P->a2 * sin(2. * lamdp) + P->a4 *
- sin(lamdp * 4.) - tanph * s / d;
- xy.y = P->c1 * sd + P->c3 * sin(lamdp * 3.) + tanph * P->xj / d;
- } else
- xy.x = xy.y = HUGE_VAL;
- return xy;
-}
-INVERSE(e_inverse); /* ellipsoid */
- int nn;
- double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp;
-
- lamdp = xy.x / P->b;
- nn = 50;
- do {
- sav = lamdp;
- sd = sin(lamdp);
- sdsq = sd * sd;
- s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq)
- / ((1. + P->w * sdsq) * (1. + P->q * sdsq)));
- lamdp = xy.x + xy.y * s / P->xj - P->a2 * sin(
- 2. * lamdp) - P->a4 * sin(lamdp * 4.) - s / P->xj * (
- P->c1 * sin(lamdp) + P->c3 * sin(lamdp * 3.));
- lamdp /= P->b;
- } while (fabs(lamdp - sav) >= TOL && --nn);
- sl = sin(lamdp);
- fac = exp(sqrt(1. + s * s / P->xj / P->xj) * (xy.y -
- P->c1 * sl - P->c3 * sin(lamdp * 3.)));
- phidp = 2. * (atan(fac) - FORTPI);
- dd = sl * sl;
- if (fabs(cos(lamdp)) < TOL)
- lamdp -= TOL;
- spp = sin(phidp);
- sppsq = spp * spp;
- lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) *
- P->ca - spp * P->sa * sqrt((1. + P->q * dd) * (
- 1. - sppsq) - sppsq * P->u) / cos(lamdp)) / (1. - sppsq
- * (1. + P->u)));
- sl = lamt >= 0. ? 1. : -1.;
- scl = cos(lamdp) >= 0. ? 1. : -1;
- lamt -= HALFPI * (1. - scl) * sl;
- lp.lam = lamt - P->p22 * lamdp;
- if (fabs(P->sa) < TOL)
- lp.phi = aasin(spp / sqrt(P->one_es * P->one_es + P->es * sppsq));
- else
- lp.phi = atan((tan(lamdp) * cos(lamt) - P->ca * sin(lamt)) /
- (P->one_es * P->sa));
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(lsat)
- int land, path;
- double lam, alf, esc, ess;
-
- land = pj_param(P->params, "ilsat").i;
- if (land <= 0 || land > 5) E_ERROR(-28);
- path = pj_param(P->params, "ipath").i;
- if (path <= 0 || path > (land <= 3 ? 251 : 233)) E_ERROR(-29);
- if (land <= 3) {
- P->lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path;
- P->p22 = 103.2669323;
- alf = DEG_TO_RAD * 99.092;
- } else {
- P->lam0 = DEG_TO_RAD * 129.3 - TWOPI / 233. * path;
- P->p22 = 98.8841202;
- alf = DEG_TO_RAD * 98.2;
- }
- P->p22 /= 1440.;
- P->sa = sin(alf);
- P->ca = cos(alf);
- if (fabs(P->ca) < 1e-9)
- P->ca = 1e-9;
- esc = P->es * P->ca * P->ca;
- ess = P->es * P->sa * P->sa;
- P->w = (1. - esc) * P->rone_es;
- P->w = P->w * P->w - 1.;
- P->q = ess * P->rone_es;
- P->t = ess * (2. - P->es) * P->rone_es * P->rone_es;
- P->u = esc * P->rone_es;
- P->xj = P->one_es * P->one_es * P->one_es;
- P->rlm = PI * (1. / 248. + .5161290322580645);
- P->rlm2 = P->rlm + TWOPI;
- P->a2 = P->a4 = P->b = P->c1 = P->c3 = 0.;
- seraz0(0., 1., P);
- for (lam = 9.; lam <= 81.0001; lam += 18.)
- seraz0(lam, 4., P);
- for (lam = 18; lam <= 72.0001; lam += 18.)
- seraz0(lam, 2., P);
- seraz0(90., 1., P);
- P->a2 /= 30.;
- P->a4 /= 60.;
- P->b /= 30.;
- P->c1 /= 15.;
- P->c3 /= 45.;
- P->inv = e_inverse; P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_mbt_fps.c b/src/3rdparty/proj/PJ_mbt_fps.c
deleted file mode 100644
index 63e02ca3..00000000
--- a/src/3rdparty/proj/PJ_mbt_fps.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph.";
-#define MAX_ITER 10
-#define LOOP_TOL 1e-7
-#define C1 0.45503
-#define C2 1.36509
-#define C3 1.41546
-#define C_x 0.22248
-#define C_y 1.44492
-#define C1_2 0.33333333333333333333333333
-FORWARD(s_forward); /* spheroid */
- double k, V, t;
- int i;
-
- k = C3 * sin(lp.phi);
- for (i = MAX_ITER; i ; --i) {
- t = lp.phi / C2;
- lp.phi -= V = (C1 * sin(t) + sin(lp.phi) - k) /
- (C1_2 * cos(t) + cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- t = lp.phi / C2;
- xy.x = C_x * lp.lam * (1. + 3. * cos(lp.phi)/cos(t) );
- xy.y = C_y * sin(t);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t, s;
-
- lp.phi = C2 * (t = aasin(xy.y / C_y));
- lp.lam = xy.x / (C_x * (1. + 3. * cos(lp.phi)/cos(t)));
- lp.phi = aasin((C1 * sin(t) + sin(lp.phi)) / C3);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(mbt_fps) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_mbtfpp.c b/src/3rdparty/proj/PJ_mbtfpp.c
deleted file mode 100644
index 9549a23a..00000000
--- a/src/3rdparty/proj/PJ_mbtfpp.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph.";
-#define CS .95257934441568037152
-#define FXC .92582009977255146156
-#define FYC 3.40168025708304504493
-#define C23 .66666666666666666666
-#define C13 .33333333333333333333
-#define ONEEPS 1.0000001
-FORWARD(s_forward); /* spheroid */
- lp.phi = asin(CS * sin(lp.phi));
- xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.);
- xy.y = FYC * sin(C13 * lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / FYC;
- if (fabs(lp.phi) >= 1.) {
- if (fabs(lp.phi) > ONEEPS) I_ERROR
- else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI;
- } else
- lp.phi = asin(lp.phi);
- lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) );
- if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) {
- if (fabs(lp.phi) > ONEEPS) I_ERROR
- else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI;
- } else
- lp.phi = asin(lp.phi);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(mbtfpp) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_mbtfpq.c b/src/3rdparty/proj/PJ_mbtfpq.c
deleted file mode 100644
index 3298db4f..00000000
--- a/src/3rdparty/proj/PJ_mbtfpq.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph.";
-#define NITER 20
-#define EPS 1e-7
-#define ONETOL 1.000001
-#define C 1.70710678118654752440
-#define RC 0.58578643762690495119
-#define FYC 1.87475828462269495505
-#define RYC 0.53340209679417701685
-#define FXC 0.31245971410378249250
-#define RXC 3.20041258076506210122
-FORWARD(s_forward); /* spheroid */
- double th1, c;
- int i;
-
- c = C * sin(lp.phi);
- for (i = NITER; i; --i) {
- lp.phi -= th1 = (sin(.5*lp.phi) + sin(lp.phi) - c) /
- (.5*cos(.5*lp.phi) + cos(lp.phi));
- if (fabs(th1) < EPS) break;
- }
- xy.x = FXC * lp.lam * (1.0 + 2. * cos(lp.phi)/cos(0.5 * lp.phi));
- xy.y = FYC * sin(0.5 * lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t;
-
- lp.phi = RYC * xy.y;
- if (fabs(lp.phi) > 1.) {
- if (fabs(lp.phi) > ONETOL) I_ERROR
- else if (lp.phi < 0.) { t = -1.; lp.phi = -PI; }
- else { t = 1.; lp.phi = PI; }
- } else
- lp.phi = 2. * asin(t = lp.phi);
- lp.lam = RXC * xy.x / (1. + 2. * cos(lp.phi)/cos(0.5 * lp.phi));
- lp.phi = RC * (t + sin(lp.phi));
- if (fabs(lp.phi) > 1.)
- if (fabs(lp.phi) > ONETOL) I_ERROR
- else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- else
- lp.phi = asin(lp.phi);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(mbtfpq) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_merc.c b/src/3rdparty/proj/PJ_merc.c
deleted file mode 100644
index f8e0426a..00000000
--- a/src/3rdparty/proj/PJ_merc.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts=";
-#define EPS10 1.e-10
-FORWARD(e_forward); /* ellipsoid */
- if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR;
- xy.x = P->k0 * lp.lam;
- xy.y = - P->k0 * log(pj_tsfn(lp.phi, sin(lp.phi), P->e));
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR;
- xy.x = P->k0 * lp.lam;
- xy.y = P->k0 * log(tan(FORTPI + .5 * lp.phi));
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- if ((lp.phi = pj_phi2(exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR;
- lp.lam = xy.x / P->k0;
- return (lp);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = HALFPI - 2. * atan(exp(-xy.y / P->k0));
- lp.lam = xy.x / P->k0;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(merc)
- double phits=0.0;
- int is_phits;
-
- if( (is_phits = pj_param(P->params, "tlat_ts").i) ) {
- phits = fabs(pj_param(P->params, "rlat_ts").f);
- if (phits >= HALFPI) E_ERROR(-24);
- }
- if (P->es) { /* ellipsoid */
- if (is_phits)
- P->k0 = pj_msfn(sin(phits), cos(phits), P->es);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else { /* sphere */
- if (is_phits)
- P->k0 = cos(phits);
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_mill.c b/src/3rdparty/proj/PJ_mill.c
deleted file mode 100644
index 03c35598..00000000
--- a/src/3rdparty/proj/PJ_mill.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph";
-FORWARD(s_forward); /* spheroid */
- xy.x = lp.lam;
- xy.y = log(tan(FORTPI + lp.phi * .4)) * 1.25;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.lam = xy.x;
- lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - FORTPI);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(mill) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_mod_ster.c b/src/3rdparty/proj/PJ_mod_ster.c
deleted file mode 100644
index 854f35e1..00000000
--- a/src/3rdparty/proj/PJ_mod_ster.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/* based upon Snyder and Linck, USGS-NMD */
-#define PROJ_PARMS__ \
- COMPLEX *zcoeff; \
- double cchio, schio; \
- int n;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)";
-PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)";
-PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") "\n\tAzi(mod)";
-PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") "\n\tAzi(mod)";
-PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") "\n\tAzi(mod)";
-#define EPSLN 1e-10
-
-FORWARD(e_forward); /* ellipsoid */
- double sinlon, coslon, esphi, chi, schi, cchi, s;
- COMPLEX p;
-
- sinlon = sin(lp.lam);
- coslon = cos(lp.lam);
- esphi = P->e * sin(lp.phi);
- chi = 2. * atan(tan((HALFPI + lp.phi) * .5) *
- pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI;
- schi = sin(chi);
- cchi = cos(chi);
- s = 2. / (1. + P->schio * schi + P->cchio * cchi * coslon);
- p.r = s * cchi * sinlon;
- p.i = s * (P->cchio * schi - P->schio * cchi * coslon);
- p = pj_zpoly1(p, P->zcoeff, P->n);
- xy.x = p.r;
- xy.y = p.i;
- return xy;
-}
-INVERSE(e_inverse); /* ellipsoid */
- int nn;
- COMPLEX p, fxy, fpxy, dp;
- double den, rh, z, sinz, cosz, chi, phi, dphi, esphi;
-
- p.r = xy.x;
- p.i = xy.y;
- for (nn = 20; nn ;--nn) {
- fxy = pj_zpolyd1(p, P->zcoeff, P->n, &fpxy);
- fxy.r -= xy.x;
- fxy.i -= xy.y;
- den = fpxy.r * fpxy.r + fpxy.i * fpxy.i;
- dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den;
- dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den;
- p.r += dp.r;
- p.i += dp.i;
- if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
- break;
- }
- if (nn) {
- rh = hypot(p.r, p.i);
- z = 2. * atan(.5 * rh);
- sinz = sin(z);
- cosz = cos(z);
- lp.lam = P->lam0;
- if (fabs(rh) <= EPSLN) {
- lp.phi = P->phi0;
- return lp;
- }
- chi = aasin(cosz * P->schio + p.i * sinz * P->cchio / rh);
- phi = chi;
- for (nn = 20; nn ;--nn) {
- esphi = P->e * sin(phi);
- dphi = 2. * atan(tan((HALFPI + chi) * .5) *
- pow((1. + esphi) / (1. - esphi), P->e * .5)) - HALFPI - phi;
- phi += dphi;
- if (fabs(dphi) <= EPSLN)
- break;
- }
- }
- if (nn) {
- lp.phi = phi;
- lp.lam = atan2(p.r * sinz, rh * P->cchio * cosz - p.i *
- P->schio * sinz);
- } else
- lp.lam = lp.phi = HUGE_VAL;
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) { /* general initialization */
- double esphi, chio;
-
- if (P->es) {
- esphi = P->e * sin(P->phi0);
- chio = 2. * atan(tan((HALFPI + P->phi0) * .5) *
- pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI;
- } else
- chio = P->phi0;
- P->schio = sin(chio);
- P->cchio = cos(chio);
- P->inv = e_inverse; P->fwd = e_forward;
- return P;
-}
-ENTRY0(mil_os)
- static COMPLEX /* Miller Oblated Stereographic */
-AB[] = {
- {0.924500, 0.},
- {0., 0.},
- {0.019430, 0.}
-};
-
- P->n = 2;
- P->lam0 = DEG_TO_RAD * 20.;
- P->phi0 = DEG_TO_RAD * 18.;
- P->zcoeff = AB;
- P->es = 0.;
-ENDENTRY(setup(P))
-ENTRY0(lee_os)
- static COMPLEX /* Lee Oblated Stereographic */
-AB[] = {
- {0.721316, 0.},
- {0., 0.},
- {-0.0088162, -0.00617325}
-};
-
- P->n = 2;
- P->lam0 = DEG_TO_RAD * -165.;
- P->phi0 = DEG_TO_RAD * -10.;
- P->zcoeff = AB;
- P->es = 0.;
-ENDENTRY(setup(P))
-ENTRY0(gs48)
- static COMPLEX /* 48 United States */
-AB[] = {
- {0.98879, 0.},
- {0., 0.},
- {-0.050909, 0.},
- {0., 0.},
- {0.075528, 0.}
-};
-
- P->n = 4;
- P->lam0 = DEG_TO_RAD * -96.;
- P->phi0 = DEG_TO_RAD * -39.;
- P->zcoeff = AB;
- P->es = 0.;
- P->a = 6370997.;
-ENDENTRY(setup(P))
-ENTRY0(alsk)
- static COMPLEX
-ABe[] = { /* Alaska ellipsoid */
- {.9945303, 0.},
- {.0052083, -.0027404},
- {.0072721, .0048181},
- {-.0151089, -.1932526},
- {.0642675, -.1381226},
- {.3582802, -.2884586}},
-ABs[] = { /* Alaska sphere */
- {.9972523, 0.},
- {.0052513, -.0041175},
- {.0074606, .0048125},
- {-.0153783, -.1968253},
- {.0636871, -.1408027},
- {.3660976, -.2937382}
-};
-
- P->n = 5;
- P->lam0 = DEG_TO_RAD * -152.;
- P->phi0 = DEG_TO_RAD * 64.;
- if (P->es) { /* fixed ellipsoid/sphere */
- P->zcoeff = ABe;
- P->a = 6378206.4;
- P->e = sqrt(P->es = 0.00676866);
- } else {
- P->zcoeff = ABs;
- P->a = 6370997.;
- }
-ENDENTRY(setup(P))
-ENTRY0(gs50)
- static COMPLEX
-ABe[] = { /* GS50 ellipsoid */
- {.9827497, 0.},
- {.0210669, .0053804},
- {-.1031415, -.0571664},
- {-.0323337, -.0322847},
- {.0502303, .1211983},
- {.0251805, .0895678},
- {-.0012315, -.1416121},
- {.0072202, -.1317091},
- {-.0194029, .0759677},
- {-.0210072, .0834037}
-},
-ABs[] = { /* GS50 sphere */
- {.9842990, 0.},
- {.0211642, .0037608},
- {-.1036018, -.0575102},
- {-.0329095, -.0320119},
- {.0499471, .1223335},
- {.0260460, .0899805},
- {.0007388, -.1435792},
- {.0075848, -.1334108},
- {-.0216473, .0776645},
- {-.0225161, .0853673}
-};
-
- P->n = 9;
- P->lam0 = DEG_TO_RAD * -120.;
- P->phi0 = DEG_TO_RAD * 45.;
- if (P->es) { /* fixed ellipsoid/sphere */
- P->zcoeff = ABe;
- P->a = 6378206.4;
- P->e = sqrt(P->es = 0.00676866);
- } else {
- P->zcoeff = ABs;
- P->a = 6370997.;
- }
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_moll.c b/src/3rdparty/proj/PJ_moll.c
deleted file mode 100644
index ce14cfbc..00000000
--- a/src/3rdparty/proj/PJ_moll.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x, C_y, C_p;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph.";
-PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph.";
-PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph.";
-#define MAX_ITER 10
-#define LOOP_TOL 1e-7
-FORWARD(s_forward); /* spheroid */
- double k, V;
- int i;
-
- k = P->C_p * sin(lp.phi);
- for (i = MAX_ITER; i ; --i) {
- lp.phi -= V = (lp.phi + sin(lp.phi) - k) /
- (1. + cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI;
- else
- lp.phi *= 0.5;
- xy.x = P->C_x * lp.lam * cos(lp.phi);
- xy.y = P->C_y * sin(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double th, s;
-
- lp.phi = aasin(xy.y / P->C_y);
- lp.lam = xy.x / (P->C_x * cos(lp.phi));
- lp.phi += lp.phi;
- lp.phi = aasin((lp.phi + sin(lp.phi)) / P->C_p);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P, double p) {
- double r, sp, p2 = p + p;
-
- P->es = 0;
- sp = sin(p);
- r = sqrt(TWOPI * sp / (p2 + sin(p2)));
- P->C_x = 2. * r / PI;
- P->C_y = r / sp;
- P->C_p = p2 + sin(p2);
- P->inv = s_inverse;
- P->fwd = s_forward;
- return P;
-}
-ENTRY0(moll) ENDENTRY(setup(P, HALFPI))
-ENTRY0(wag4) ENDENTRY(setup(P, PI/3.))
-ENTRY0(wag5)
- P->es = 0;
- P->C_x = 0.90977;
- P->C_y = 1.65014;
- P->C_p = 3.00896;
- P->inv = s_inverse;
- P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_nell.c b/src/3rdparty/proj/PJ_nell.c
deleted file mode 100644
index 5de57cbc..00000000
--- a/src/3rdparty/proj/PJ_nell.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph.";
-#define MAX_ITER 10
-#define LOOP_TOL 1e-7
-FORWARD(s_forward); /* spheroid */
- double k, V;
- int i;
-
- k = 2. * sin(lp.phi);
- V = lp.phi * lp.phi;
- lp.phi *= 1.00371 + V * (-0.0935382 + V * -0.011412);
- for (i = MAX_ITER; i ; --i) {
- lp.phi -= V = (lp.phi + sin(lp.phi) - k) /
- (1. + cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- xy.x = 0.5 * lp.lam * (1. + cos(lp.phi));
- xy.y = lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double th, s;
-
- lp.lam = 2. * xy.x / (1. + cos(xy.y));
- lp.phi = aasin(0.5 * (xy.y + sin(xy.y)));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(nell) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_nell_h.c b/src/3rdparty/proj/PJ_nell_h.c
deleted file mode 100644
index 670dea88..00000000
--- a/src/3rdparty/proj/PJ_nell_h.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph.";
-#define NITER 9
-#define EPS 1e-7
-FORWARD(s_forward); /* spheroid */
- xy.x = 0.5 * lp.lam * (1. + cos(lp.phi));
- xy.y = 2.0 * (lp.phi - tan(0.5 *lp.phi));
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double V, c, p;
- int i;
-
- p = 0.5 * xy.y;
- for (i = NITER; i ; --i) {
- c = cos(0.5 * lp.phi);
- lp.phi -= V = (lp.phi - tan(lp.phi/2) - p)/(1. - 0.5/(c*c));
- if (fabs(V) < EPS)
- break;
- }
- if (!i) {
- lp.phi = p < 0. ? -HALFPI : HALFPI;
- lp.lam = 2. * xy.x;
- } else
- lp.lam = 2. * xy.x / (1. + cos(lp.phi));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(nell_h) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_nocol.c b/src/3rdparty/proj/PJ_nocol.c
deleted file mode 100644
index f129eb25..00000000
--- a/src/3rdparty/proj/PJ_nocol.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv.";
-#define EPS 1e-10
-FORWARD(s_forward); /* spheroid */
- if (fabs(lp.lam) < EPS) {
- xy.x = 0;
- xy.y = lp.phi;
- } else if (fabs(lp.phi) < EPS) {
- xy.x = lp.lam;
- xy.y = 0.;
- } else if (fabs(fabs(lp.lam) - HALFPI) < EPS) {
- xy.x = lp.lam * cos(lp.phi);
- xy.y = HALFPI * sin(lp.phi);
- } else if (fabs(fabs(lp.phi) - HALFPI) < EPS) {
- xy.x = 0;
- xy.y = lp.phi;
- } else {
- double tb, c, d, m, n, r2, sp;
-
- tb = HALFPI / lp.lam - lp.lam / HALFPI;
- c = lp.phi / HALFPI;
- d = (1 - c * c)/((sp = sin(lp.phi)) - c);
- r2 = tb / d;
- r2 *= r2;
- m = (tb * sp / d - 0.5 * tb)/(1. + r2);
- n = (sp / r2 + 0.5 * d)/(1. + 1./r2);
- xy.x = cos(lp.phi);
- xy.x = sqrt(m * m + xy.x * xy.x / (1. + r2));
- xy.x = HALFPI * ( m + (lp.lam < 0. ? -xy.x : xy.x));
- xy.y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) /
- (1. + 1./r2));
- xy.y = HALFPI * ( n + (lp.phi < 0. ? xy.y : -xy.y ));
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(nicol) P->es = 0.; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_nsper.c b/src/3rdparty/proj/PJ_nsper.c
deleted file mode 100644
index a3ee264e..00000000
--- a/src/3rdparty/proj/PJ_nsper.c
+++ /dev/null
@@ -1,149 +0,0 @@
-#define PROJ_PARMS__ \
- double height; \
- double sinph0; \
- double cosph0; \
- double p; \
- double rp; \
- double pn1; \
- double pfact; \
- double h; \
- double cg; \
- double sg; \
- double sw; \
- double cw; \
- int mode; \
- int tilt;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(nsper, "Near-sided perspective") "\n\tAzi, Sph\n\th=";
-PROJ_HEAD(tpers, "Tilted perspective") "\n\tAzi, Sph\n\ttilt= azi= h=";
-# define EPS10 1.e-10
-# define N_POLE 0
-# define S_POLE 1
-# define EQUIT 2
-# define OBLIQ 3
-FORWARD(s_forward); /* spheroid */
- double coslam, cosphi, sinphi;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case OBLIQ:
- xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam;
- break;
- case EQUIT:
- xy.y = cosphi * coslam;
- break;
- case S_POLE:
- xy.y = - sinphi;
- break;
- case N_POLE:
- xy.y = sinphi;
- break;
- }
- if (xy.y < P->rp) F_ERROR;
- xy.y = P->pn1 / (P->p - xy.y);
- xy.x = xy.y * cosphi * sin(lp.lam);
- switch (P->mode) {
- case OBLIQ:
- xy.y *= (P->cosph0 * sinphi -
- P->sinph0 * cosphi * coslam);
- break;
- case EQUIT:
- xy.y *= sinphi;
- break;
- case N_POLE:
- coslam = - coslam;
- case S_POLE:
- xy.y *= cosphi * coslam;
- break;
- }
- if (P->tilt) {
- double yt, ba;
-
- yt = xy.y * P->cg + xy.x * P->sg;
- ba = 1. / (yt * P->sw * P->h + P->cw);
- xy.x = (xy.x * P->cg - xy.y * P->sg) * P->cw * ba;
- xy.y = yt * ba;
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double rh, cosz, sinz;
-
- if (P->tilt) {
- double bm, bq, yt;
-
- yt = 1./(P->pn1 - xy.y * P->sw);
- bm = P->pn1 * xy.x * yt;
- bq = P->pn1 * xy.y * P->cw * yt;
- xy.x = bm * P->cg + bq * P->sg;
- xy.y = bq * P->cg - bm * P->sg;
- }
- rh = hypot(xy.x, xy.y);
- if ((sinz = 1. - rh * rh * P->pfact) < 0.) I_ERROR;
- sinz = (P->p - sqrt(sinz)) / (P->pn1 / rh + rh / P->pn1);
- cosz = sqrt(1. - sinz * sinz);
- if (fabs(rh) <= EPS10) {
- lp.lam = 0.;
- lp.phi = P->phi0;
- } else {
- switch (P->mode) {
- case OBLIQ:
- lp.phi = asin(cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh);
- xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh;
- xy.x *= sinz * P->cosph0;
- break;
- case EQUIT:
- lp.phi = asin(xy.y * sinz / rh);
- xy.y = cosz * rh;
- xy.x *= sinz;
- break;
- case N_POLE:
- lp.phi = asin(cosz);
- xy.y = -xy.y;
- break;
- case S_POLE:
- lp.phi = - asin(cosz);
- break;
- }
- lp.lam = atan2(xy.x, xy.y);
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- if ((P->height = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30);
- if (fabs(fabs(P->phi0) - HALFPI) < EPS10)
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(P->phi0) < EPS10)
- P->mode = EQUIT;
- else {
- P->mode = OBLIQ;
- P->sinph0 = sin(P->phi0);
- P->cosph0 = cos(P->phi0);
- }
- P->pn1 = P->height / P->a; /* normalize by radius */
- P->p = 1. + P->pn1;
- P->rp = 1. / P->p;
- P->h = 1. / P->pn1;
- P->pfact = (P->p + 1.) * P->h;
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
- return P;
-}
-ENTRY0(nsper)
- P->tilt = 0;
-ENDENTRY(setup(P))
-ENTRY0(tpers)
- double omega, gamma;
-
- omega = pj_param(P->params, "dtilt").f * DEG_TO_RAD;
- gamma = pj_param(P->params, "dazi").f * DEG_TO_RAD;
- P->tilt = 1;
- P->cg = cos(gamma); P->sg = sin(gamma);
- P->cw = cos(omega); P->sw = sin(omega);
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_nzmg.c b/src/3rdparty/proj/PJ_nzmg.c
deleted file mode 100644
index 5a285411..00000000
--- a/src/3rdparty/proj/PJ_nzmg.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/******************************************************************************
- * $Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Implementation of the nzmg (New Zealand Map Grid) projection.
- * Very loosely based upon DMA code by Bradford W. Drew
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(nzmg, "New Zealand Map Grid") "\n\tfixed Earth";
-
-#define EPSLN 1e-10
-#define SEC5_TO_RAD 0.4848136811095359935899141023
-#define RAD_TO_SEC5 2.062648062470963551564733573
- static COMPLEX
-bf[] = {
- {.7557853228, 0.0},
- {.249204646, .003371507},
- {-.001541739, .041058560},
- {-.10162907, .01727609},
- {-.26623489, -.36249218},
- {-.6870983, -1.1651967} };
- static double
-tphi[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594,
- .007317, .01220, .00394, -.0013 },
-tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879,
- -.0055161, .0026906, -.001333, .00067, -.00034 };
-#define Nbf 5
-#define Ntpsi 9
-#define Ntphi 8
-FORWARD(e_forward); /* ellipsoid */
- COMPLEX p;
- double *C;
- int i;
-
- lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5;
- for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i)
- p.r = *--C + lp.phi * p.r;
- p.r *= lp.phi;
- p.i = lp.lam;
- p = pj_zpoly1(p, bf, Nbf);
- xy.x = p.i;
- xy.y = p.r;
- return xy;
-}
-INVERSE(e_inverse); /* ellipsoid */
- int nn, i;
- COMPLEX p, f, fp, dp;
- double den, *C;
-
- p.r = xy.y;
- p.i = xy.x;
- for (nn = 20; nn ;--nn) {
- f = pj_zpolyd1(p, bf, Nbf, &fp);
- f.r -= xy.y;
- f.i -= xy.x;
- den = fp.r * fp.r + fp.i * fp.i;
- p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den;
- p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den;
- if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
- break;
- }
- if (nn) {
- lp.lam = p.i;
- for (lp.phi = *(C = tphi + (i = Ntphi)); i ; --i)
- lp.phi = *--C + p.r * lp.phi;
- lp.phi = P->phi0 + p.r * lp.phi * SEC5_TO_RAD;
- } else
- lp.lam = lp.phi = HUGE_VAL;
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(nzmg)
- /* force to International major axis */
- P->ra = 1. / (P->a = 6378388.0);
- P->lam0 = DEG_TO_RAD * 173.;
- P->phi0 = DEG_TO_RAD * -41.;
- P->x0 = 2510000.;
- P->y0 = 6023150.;
- P->inv = e_inverse; P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_ob_tran.c b/src/3rdparty/proj/PJ_ob_tran.c
deleted file mode 100644
index 460a600f..00000000
--- a/src/3rdparty/proj/PJ_ob_tran.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#define PROJ_PARMS__ \
- struct PJconsts *link; \
- double lamp; \
- double cphip, sphip;
-#define PJ_LIB__
-#include <projects.h>
-#include <string.h>
-PROJ_HEAD(ob_tran, "General Oblique Transformation") "\n\tMisc Sph"
-"\n\to_proj= plus parameters for projection"
-"\n\to_lat_p= o_lon_p= (new pole) or"
-"\n\to_alpha= o_lon_c= o_lat_c= or"
-"\n\to_lon_1= o_lat_1= o_lon_2= o_lat_2=";
-#define TOL 1e-10
-FORWARD(o_forward); /* spheroid */
- double coslam, sinphi, cosphi;
-
- (void) xy;
-
- coslam = cos(lp.lam);
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam +
- P->cphip * sinphi) + P->lamp);
- lp.phi = aasin(P->sphip * sinphi - P->cphip * cosphi * coslam);
- return (P->link->fwd(lp, P->link));
-}
-FORWARD(t_forward); /* spheroid */
- double cosphi, coslam;
-
- (void) xy;
-
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + P->lamp);
- lp.phi = aasin(- cosphi * coslam);
- return (P->link->fwd(lp, P->link));
-}
-INVERSE(o_inverse); /* spheroid */
- double coslam, sinphi, cosphi;
-
- lp = P->link->inv(xy, P->link);
- if (lp.lam != HUGE_VAL) {
- coslam = cos(lp.lam -= P->lamp);
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- lp.phi = aasin(P->sphip * sinphi + P->cphip * cosphi * coslam);
- lp.lam = aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam -
- P->cphip * sinphi);
- }
- return (lp);
-}
-INVERSE(t_inverse); /* spheroid */
- double cosphi, t;
-
- lp = P->link->inv(xy, P->link);
- if (lp.lam != HUGE_VAL) {
- cosphi = cos(lp.phi);
- t = lp.lam - P->lamp;
- lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi));
- lp.phi = aasin(cosphi * cos(t));
- }
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->link)
- (*(P->link->pfree))(P->link);
- pj_dalloc(P);
- }
-}
-ENTRY1(ob_tran, link)
- int i;
- double phip;
- char *name, *s;
-
- /* get name of projection to be translated */
- if (!(name = pj_param(P->params, "so_proj").s)) E_ERROR(-26);
- for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ;
- if (!s || !(P->link = (*pj_list[i].proj)(0))) E_ERROR(-37);
- /* copy existing header into new */
- P->es = 0.; /* force to spherical */
- P->link->params = P->params;
- P->link->over = P->over;
- P->link->geoc = P->geoc;
- P->link->a = P->a;
- P->link->es = P->es;
- P->link->ra = P->ra;
- P->link->lam0 = P->lam0;
- P->link->phi0 = P->phi0;
- P->link->x0 = P->x0;
- P->link->y0 = P->y0;
- P->link->k0 = P->k0;
- /* force spherical earth */
- P->link->one_es = P->link->rone_es = 1.;
- P->link->es = P->link->e = 0.;
- if (!(P->link = pj_list[i].proj(P->link))) {
- freeup(P);
- return 0;
- }
- if (pj_param(P->params, "to_alpha").i) {
- double lamc, phic, alpha;
-
- lamc = pj_param(P->params, "ro_lon_c").f;
- phic = pj_param(P->params, "ro_lat_c").f;
- alpha = pj_param(P->params, "ro_alpha").f;
-/*
- if (fabs(phic) <= TOL ||
- fabs(fabs(phic) - HALFPI) <= TOL ||
- fabs(fabs(alpha) - HALFPI) <= TOL)
-*/
- if (fabs(fabs(phic) - HALFPI) <= TOL)
- E_ERROR(-32);
- P->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic));
- phip = aasin(cos(phic) * sin(alpha));
- } else if (pj_param(P->params, "to_lat_p").i) { /* specified new pole */
- P->lamp = pj_param(P->params, "ro_lon_p").f;
- phip = pj_param(P->params, "ro_lat_p").f;
- } else { /* specified new "equator" points */
- double lam1, lam2, phi1, phi2, con;
-
- lam1 = pj_param(P->params, "ro_lon_1").f;
- phi1 = pj_param(P->params, "ro_lat_1").f;
- lam2 = pj_param(P->params, "ro_lon_2").f;
- phi2 = pj_param(P->params, "ro_lat_2").f;
- if (fabs(phi1 - phi2) <= TOL ||
- (con = fabs(phi1)) <= TOL ||
- fabs(con - HALFPI) <= TOL ||
- fabs(fabs(phi2) - HALFPI) <= TOL) E_ERROR(-33);
- P->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) -
- sin(phi1) * cos(phi2) * cos(lam2),
- sin(phi1) * cos(phi2) * sin(lam2) -
- cos(phi1) * sin(phi2) * sin(lam1));
- phip = atan(-cos(P->lamp - lam1) / tan(phi1));
- }
- if (fabs(phip) > TOL) { /* oblique */
- P->cphip = cos(phip);
- P->sphip = sin(phip);
- P->fwd = o_forward;
- P->inv = P->link->inv ? o_inverse : 0;
- } else { /* transverse */
- P->fwd = t_forward;
- P->inv = P->link->inv ? t_inverse : 0;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_ocea.c b/src/3rdparty/proj/PJ_ocea.c
deleted file mode 100644
index cdffd6e4..00000000
--- a/src/3rdparty/proj/PJ_ocea.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#define PROJ_PARMS__ \
- double rok; \
- double rtk; \
- double sinphi; \
- double cosphi; \
- double singam; \
- double cosgam;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph"
- "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2=";
-FORWARD(s_forward); /* spheroid */
- double t;
-
- xy.y = sin(lp.lam);
-/*
- xy.x = atan2((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) , cos(lp.lam));
-*/
- t = cos(lp.lam);
- xy.x = atan((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) / t);
- if (t < 0.)
- xy.x += PI;
- xy.x *= P->rtk;
- xy.y = P->rok * (P->sinphi * sin(lp.phi) - P->cosphi * cos(lp.phi) * xy.y);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t, s;
-
- xy.y /= P->rok;
- xy.x /= P->rtk;
- t = sqrt(1. - xy.y * xy.y);
- lp.phi = asin(xy.y * P->sinphi + t * P->cosphi * (s = sin(xy.x)));
- lp.lam = atan2(t * P->sinphi * s - xy.y * P->cosphi,
- t * cos(xy.x));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(ocea)
- double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha;
-
- P->rok = P->a / P->k0;
- P->rtk = P->a * P->k0;
- if ( pj_param(P->params, "talpha").i) {
- alpha = pj_param(P->params, "ralpha").f;
- lonz = pj_param(P->params, "rlonc").f;
- P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz;
- P->sinphi = asin(cos(phi_0) * sin(alpha));
- } else {
- phi_1 = pj_param(P->params, "rlat_1").f;
- phi_2 = pj_param(P->params, "rlat_2").f;
- lam_1 = pj_param(P->params, "rlon_1").f;
- lam_2 = pj_param(P->params, "rlon_2").f;
- P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) -
- sin(phi_1) * cos(phi_2) * cos(lam_2),
- sin(phi_1) * cos(phi_2) * sin(lam_2) -
- cos(phi_1) * sin(phi_2) * sin(lam_1) );
- P->sinphi = atan(-cos(P->singam - lam_1) / tan(phi_1));
- }
- P->lam0 = P->singam + HALFPI;
- P->cosphi = cos(P->sinphi);
- P->sinphi = sin(P->sinphi);
- P->cosgam = cos(P->singam);
- P->singam = sin(P->singam);
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_oea.c b/src/3rdparty/proj/PJ_oea.c
deleted file mode 100644
index b5e42a1f..00000000
--- a/src/3rdparty/proj/PJ_oea.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#define PROJ_PARMS__ \
- double theta; \
- double m, n; \
- double two_r_m, two_r_n, rm, rn, hm, hn; \
- double cp0, sp0;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta=";
-FORWARD(s_forward); /* sphere */
- double Az, M, N, cp, sp, cl, shz;
-
- cp = cos(lp.phi);
- sp = sin(lp.phi);
- cl = cos(lp.lam);
- Az = aatan2(cp * sin(lp.lam), P->cp0 * sp - P->sp0 * cp * cl) + P->theta;
- shz = sin(0.5 * aacos(P->sp0 * sp + P->cp0 * cp * cl));
- M = aasin(shz * sin(Az));
- N = aasin(shz * cos(Az) * cos(M) / cos(M * P->two_r_m));
- xy.y = P->n * sin(N * P->two_r_n);
- xy.x = P->m * sin(M * P->two_r_m) * cos(N) / cos(N * P->two_r_n);
- return (xy);
-}
-INVERSE(s_inverse); /* sphere */
- double N, M, xp, yp, z, Az, cz, sz, cAz;
-
- N = P->hn * aasin(xy.y * P->rn);
- M = P->hm * aasin(xy.x * P->rm * cos(N * P->two_r_n) / cos(N));
- xp = 2. * sin(M);
- yp = 2. * sin(N) * cos(M * P->two_r_m) / cos(M);
- cAz = cos(Az = aatan2(xp, yp) - P->theta);
- z = 2. * aasin(0.5 * hypot(xp, yp));
- sz = sin(z);
- cz = cos(z);
- lp.phi = aasin(P->sp0 * cz + P->cp0 * sz * cAz);
- lp.lam = aatan2(sz * sin(Az),
- P->cp0 * cz - P->sp0 * sz * cAz);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(oea)
- if (((P->n = pj_param(P->params, "dn").f) <= 0.) ||
- ((P->m = pj_param(P->params, "dm").f) <= 0.))
- E_ERROR(-39)
- else {
- P->theta = pj_param(P->params, "rtheta").f;
- P->sp0 = sin(P->phi0);
- P->cp0 = cos(P->phi0);
- P->rn = 1./ P->n;
- P->rm = 1./ P->m;
- P->two_r_n = 2. * P->rn;
- P->two_r_m = 2. * P->rm;
- P->hm = 0.5 * P->m;
- P->hn = 0.5 * P->n;
- P->fwd = s_forward;
- P->inv = s_inverse;
- P->es = 0.;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_omerc.c b/src/3rdparty/proj/PJ_omerc.c
deleted file mode 100644
index 1b862dbb..00000000
--- a/src/3rdparty/proj/PJ_omerc.c
+++ /dev/null
@@ -1,166 +0,0 @@
-#define PROJ_PARMS__ \
- double alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el, \
- singam, cosgam, sinrot, cosrot, u_0; \
- int ellips, rot;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(omerc, "Oblique Mercator")
- "\n\tCyl, Sph&Ell\n\t no_rot rot_conv no_uoff and\n\t"
-"alpha= lonc= or\n\t lon_1= lat_1= lon_2= lat_2=";
-#define TOL 1.e-7
-#define EPS 1.e-10
-#define TSFN0(x) tan(.5 * (HALFPI - (x)))
-FORWARD(e_forward); /* ellipsoid & spheroid */
- double con, q, s, ul, us, vl, vs;
-
- vl = sin(P->bl * lp.lam);
- if (fabs(fabs(lp.phi) - HALFPI) <= EPS) {
- ul = lp.phi < 0. ? -P->singam : P->singam;
- us = P->al * lp.phi / P->bl;
- } else {
- q = P->el / (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->bl)
- : TSFN0(lp.phi));
- s = .5 * (q - 1. / q);
- ul = 2. * (s * P->singam - vl * P->cosgam) / (q + 1. / q);
- con = cos(P->bl * lp.lam);
- if (fabs(con) >= TOL) {
- us = P->al * atan((s * P->cosgam + vl * P->singam) / con) / P->bl;
- if (con < 0.)
- us += PI * P->al / P->bl;
- } else
- us = P->al * P->bl * lp.lam;
- }
- if (fabs(fabs(ul) - 1.) <= EPS) F_ERROR;
- vs = .5 * P->al * log((1. - ul) / (1. + ul)) / P->bl;
- us -= P->u_0;
- if (! P->rot) {
- xy.x = us;
- xy.y = vs;
- } else {
- xy.x = vs * P->cosrot + us * P->sinrot;
- xy.y = us * P->cosrot - vs * P->sinrot;
- }
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid & spheroid */
- double q, s, ul, us, vl, vs;
-
- if (! P->rot) {
- us = xy.x;
- vs = xy.y;
- } else {
- vs = xy.x * P->cosrot - xy.y * P->sinrot;
- us = xy.y * P->cosrot + xy.x * P->sinrot;
- }
- us += P->u_0;
- q = exp(- P->bl * vs / P->al);
- s = .5 * (q - 1. / q);
- vl = sin(P->bl * us / P->al);
- ul = 2. * (vl * P->cosgam + s * P->singam) / (q + 1. / q);
- if (fabs(fabs(ul) - 1.) < EPS) {
- lp.lam = 0.;
- lp.phi = ul < 0. ? -HALFPI : HALFPI;
- } else {
- lp.phi = P->el / sqrt((1. + ul) / (1. - ul));
- if (P->ellips) {
- if ((lp.phi = pj_phi2(pow(lp.phi, 1. / P->bl), P->e)) == HUGE_VAL)
- I_ERROR;
- } else
- lp.phi = HALFPI - 2. * atan(lp.phi);
- lp.lam = - atan2((s * P->cosgam -
- vl * P->singam), cos(P->bl * us / P->al)) / P->bl;
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(omerc)
- double con, com, cosph0, d, f, h, l, sinph0, p, j;
- int azi;
-
- P->rot = pj_param(P->params, "bno_rot").i == 0;
- if( (azi = pj_param(P->params, "talpha").i) != 0.0) {
- P->lamc = pj_param(P->params, "rlonc").f;
- P->alpha = pj_param(P->params, "ralpha").f;
- if ( fabs(P->alpha) <= TOL ||
- fabs(fabs(P->phi0) - HALFPI) <= TOL ||
- fabs(fabs(P->alpha) - HALFPI) <= TOL)
- E_ERROR(-32);
- } else {
- P->lam1 = pj_param(P->params, "rlon_1").f;
- P->phi1 = pj_param(P->params, "rlat_1").f;
- P->lam2 = pj_param(P->params, "rlon_2").f;
- P->phi2 = pj_param(P->params, "rlat_2").f;
- if (fabs(P->phi1 - P->phi2) <= TOL ||
- (con = fabs(P->phi1)) <= TOL ||
- fabs(con - HALFPI) <= TOL ||
- fabs(fabs(P->phi0) - HALFPI) <= TOL ||
- fabs(fabs(P->phi2) - HALFPI) <= TOL) E_ERROR(-33);
- }
- com = (P->ellips = P->es > 0.) ? sqrt(P->one_es) : 1.;
- if (fabs(P->phi0) > EPS) {
- sinph0 = sin(P->phi0);
- cosph0 = cos(P->phi0);
- if (P->ellips) {
- con = 1. - P->es * sinph0 * sinph0;
- P->bl = cosph0 * cosph0;
- P->bl = sqrt(1. + P->es * P->bl * P->bl / P->one_es);
- P->al = P->bl * P->k0 * com / con;
- d = P->bl * com / (cosph0 * sqrt(con));
- } else {
- P->bl = 1.;
- P->al = P->k0;
- d = 1. / cosph0;
- }
- if ((f = d * d - 1.) <= 0.)
- f = 0.;
- else {
- f = sqrt(f);
- if (P->phi0 < 0.)
- f = -f;
- }
- P->el = f += d;
- if (P->ellips) P->el *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->bl);
- else P->el *= TSFN0(P->phi0);
- } else {
- P->bl = 1. / com;
- P->al = P->k0;
- P->el = d = f = 1.;
- }
- if (azi) {
- P->Gamma = asin(sin(P->alpha) / d);
- P->lam0 = P->lamc - asin((.5 * (f - 1. / f)) *
- tan(P->Gamma)) / P->bl;
- } else {
- if (P->ellips) {
- h = pow(pj_tsfn(P->phi1, sin(P->phi1), P->e), P->bl);
- l = pow(pj_tsfn(P->phi2, sin(P->phi2), P->e), P->bl);
- } else {
- h = TSFN0(P->phi1);
- l = TSFN0(P->phi2);
- }
- f = P->el / h;
- p = (l - h) / (l + h);
- j = P->el * P->el;
- j = (j - l * h) / (j + l * h);
- if ((con = P->lam1 - P->lam2) < -PI)
- P->lam2 -= TWOPI;
- else if (con > PI)
- P->lam2 += TWOPI;
- P->lam0 = adjlon(.5 * (P->lam1 + P->lam2) - atan(
- j * tan(.5 * P->bl * (P->lam1 - P->lam2)) / p) / P->bl);
- P->Gamma = atan(2. * sin(P->bl * adjlon(P->lam1 - P->lam0)) /
- (f - 1. / f));
- P->alpha = asin(d * sin(P->Gamma));
- }
- P->singam = sin(P->Gamma);
- P->cosgam = cos(P->Gamma);
- f = pj_param(P->params, "brot_conv").i ? P->Gamma : P->alpha;
- P->sinrot = sin(f);
- P->cosrot = cos(f);
- P->u_0 = pj_param(P->params, "bno_uoff").i ? 0. :
- fabs(P->al * atan(sqrt(d * d - 1.) / P->cosrot) / P->bl);
- if (P->phi0 < 0.)
- P->u_0 = - P->u_0;
- P->inv = e_inverse;
- P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_ortho.c b/src/3rdparty/proj/PJ_ortho.c
deleted file mode 100644
index 202b0176..00000000
--- a/src/3rdparty/proj/PJ_ortho.c
+++ /dev/null
@@ -1,95 +0,0 @@
-#define PROJ_PARMS__ \
- double sinph0; \
- double cosph0; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph.";
-#define EPS10 1.e-10
-#define N_POLE 0
-#define S_POLE 1
-#define EQUIT 2
-#define OBLIQ 3
-FORWARD(s_forward); /* spheroid */
- double coslam, cosphi, sinphi;
-
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- switch (P->mode) {
- case EQUIT:
- if (cosphi * coslam < - EPS10) F_ERROR;
- xy.y = sin(lp.phi);
- break;
- case OBLIQ:
- if (P->sinph0 * (sinphi = sin(lp.phi)) +
- P->cosph0 * cosphi * coslam < - EPS10) F_ERROR;
- xy.y = P->cosph0 * sinphi - P->sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- case S_POLE:
- if (fabs(lp.phi - P->phi0) - EPS10 > HALFPI) F_ERROR;
- xy.y = cosphi * coslam;
- break;
- }
- xy.x = cosphi * sin(lp.lam);
- return (xy);
-}
-
-INVERSE(s_inverse); /* spheroid */
- double rh, cosc, sinc;
-
- if ((sinc = (rh = hypot(xy.x, xy.y))) > 1.) {
- if ((sinc - 1.) > EPS10) I_ERROR;
- sinc = 1.;
- }
- cosc = sqrt(1. - sinc * sinc); /* in this range OK */
- if (fabs(rh) <= EPS10) {
- lp.phi = P->phi0;
- lp.lam = 0.0;
- } else {
- switch (P->mode) {
- case N_POLE:
- xy.y = -xy.y;
- lp.phi = acos(sinc);
- break;
- case S_POLE:
- lp.phi = - acos(sinc);
- break;
- case EQUIT:
- lp.phi = xy.y * sinc / rh;
- xy.x *= sinc;
- xy.y = cosc * rh;
- goto sinchk;
- case OBLIQ:
- lp.phi = cosc * P->sinph0 + xy.y * sinc * P->cosph0 /rh;
- xy.y = (cosc - P->sinph0 * lp.phi) * rh;
- xy.x *= sinc * P->cosph0;
- sinchk:
- if (fabs(lp.phi) >= 1.)
- lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- else
- lp.phi = asin(lp.phi);
- break;
- }
- lp.lam = (xy.y == 0. && (P->mode == OBLIQ || P->mode == EQUIT))
- ? (xy.x == 0. ? 0. : xy.x < 0. ? -HALFPI : HALFPI)
- : atan2(xy.x, xy.y);
- }
- return (lp);
-}
-
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(ortho)
- if (fabs(fabs(P->phi0) - HALFPI) <= EPS10)
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(P->phi0) > EPS10) {
- P->mode = OBLIQ;
- P->sinph0 = sin(P->phi0);
- P->cosph0 = cos(P->phi0);
- } else
- P->mode = EQUIT;
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_poly.c b/src/3rdparty/proj/PJ_poly.c
deleted file mode 100644
index ef5b8905..00000000
--- a/src/3rdparty/proj/PJ_poly.c
+++ /dev/null
@@ -1,99 +0,0 @@
-#define PROJ_PARMS__ \
- double ml0; \
- double *en;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(poly, "Polyconic (American)")
- "\n\tConic, Sph&Ell";
-#define TOL 1e-10
-#define CONV 1e-10
-#define N_ITER 10
-#define I_ITER 20
-#define ITOL 1.e-12
-FORWARD(e_forward); /* ellipsoid */
- double ms, sp, cp;
-
- if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -P->ml0; }
- else {
- sp = sin(lp.phi);
- ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.;
- xy.x = ms * sin(lp.lam *= sp);
- xy.y = (pj_mlfn(lp.phi, sp, cp, P->en) - P->ml0) + ms * (1. - cos(lp.lam));
- }
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- double cot, E;
-
- if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = P->ml0; }
- else {
- cot = 1. / tan(lp.phi);
- xy.x = sin(E = lp.lam * sin(lp.phi)) * cot;
- xy.y = lp.phi - P->phi0 + cot * (1. - cos(E));
- }
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- xy.y += P->ml0;
- if (fabs(xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; }
- else {
- double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi;
- int i;
-
- r = xy.y * xy.y + xy.x * xy.x;
- for (lp.phi = xy.y, i = I_ITER; i ; --i) {
- sp = sin(lp.phi);
- s2ph = sp * ( cp = cos(lp.phi));
- if (fabs(cp) < ITOL)
- I_ERROR;
- c = sp * (mlp = sqrt(1. - P->es * sp * sp)) / cp;
- ml = pj_mlfn(lp.phi, sp, cp, P->en);
- mlb = ml * ml + r;
- mlp = P->one_es / (mlp * mlp * mlp);
- lp.phi += ( dPhi =
- ( ml + ml + c * mlb - 2. * xy.y * (c * ml + 1.) ) / (
- P->es * s2ph * (mlb - 2. * xy.y * ml) / c +
- 2.* (xy.y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp ));
- if (fabs(dPhi) <= ITOL)
- break;
- }
- if (!i)
- I_ERROR;
- c = sin(lp.phi);
- lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi);
- }
- return (lp);
-}
-INVERSE(s_inverse); /* spheroid */
- double B, dphi, tp;
- int i;
-
- if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; }
- else {
- lp.phi = xy.y;
- B = xy.x * xy.x + xy.y * xy.y;
- i = N_ITER;
- do {
- tp = tan(lp.phi);
- lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi -
- .5 * ( lp.phi * lp.phi + B) * tp) /
- ((lp.phi - xy.y) / tp - 1.));
- } while (fabs(dphi) > CONV && --i);
- if (! i) I_ERROR;
- lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi);
- }
- return (lp);
-}
-FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } }
-ENTRY1(poly, en)
- if (P->es) {
- if (!(P->en = pj_enfn(P->es))) E_ERROR_0;
- P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- P->ml0 = -P->phi0;
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_putp2.c b/src/3rdparty/proj/PJ_putp2.c
deleted file mode 100644
index e846f13b..00000000
--- a/src/3rdparty/proj/PJ_putp2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph.";
-#define C_x 1.89490
-#define C_y 1.71848
-#define C_p 0.6141848493043784
-#define EPS 1e-10
-#define NITER 10
-#define PI_DIV_3 1.0471975511965977
-FORWARD(s_forward); /* spheroid */
- double p, c, s, V;
- int i;
-
- p = C_p * sin(lp.phi);
- s = lp.phi * lp.phi;
- lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 );
- for (i = NITER; i ; --i) {
- c = cos(lp.phi);
- s = sin(lp.phi);
- lp.phi -= V = (lp.phi + s * (c - 1.) - p) /
- (1. + c * (c - 1.) - s * s);
- if (fabs(V) < EPS)
- break;
- }
- if (!i)
- lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3;
- xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5);
- xy.y = C_y * sin(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double c;
-
- lp.phi = aasin(xy.y / C_y);
- lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5));
- lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(putp2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_putp3.c b/src/3rdparty/proj/PJ_putp3.c
deleted file mode 100644
index 46e25004..00000000
--- a/src/3rdparty/proj/PJ_putp3.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#define PROJ_PARMS__ \
- double A;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph.";
-PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., no inv., Sph.";
-#define C 0.79788456
-#define RPISQ 0.1013211836
-FORWARD(s_forward); /* spheroid */
- xy.x = C * lp.lam * (1. - P->A * lp.phi * lp.phi);
- xy.y = C * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / C;
- lp.lam = xy.x / (C * (1. - P->A * lp.phi * lp.phi));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
- return P;
-}
-ENTRY0(putp3) P->A = 4. * RPISQ; ENDENTRY(setup(P))
-ENTRY0(putp3p) P->A = 2. * RPISQ; ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_putp4p.c b/src/3rdparty/proj/PJ_putp4p.c
deleted file mode 100644
index 35066c2a..00000000
--- a/src/3rdparty/proj/PJ_putp4p.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x, C_y;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph.";
-PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph.";
-FORWARD(s_forward); /* spheroid */
- lp.phi = aasin(0.883883476 * sin(lp.phi));
- xy.x = P->C_x * lp.lam * cos(lp.phi);
- xy.x /= cos(lp.phi *= 0.333333333333333);
- xy.y = P->C_y * sin(lp.phi);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = aasin(xy.y / P->C_y);
- lp.lam = xy.x * cos(lp.phi) / P->C_x;
- lp.phi *= 3.;
- lp.lam /= cos(lp.phi);
- lp.phi = aasin(1.13137085 * sin(lp.phi));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
- return P;
-}
-ENTRY0(putp4p) P->C_x = 0.874038744; P->C_y = 3.883251825; ENDENTRY(setup(P))
-ENTRY0(weren) P->C_x = 1.; P->C_y = 4.442882938; ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_putp5.c b/src/3rdparty/proj/PJ_putp5.c
deleted file mode 100644
index 8d3c59a0..00000000
--- a/src/3rdparty/proj/PJ_putp5.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#define PROJ_PARMS__ \
- double A, B;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph.";
-PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph.";
-#define C 1.01346
-#define D 1.2158542
-FORWARD(s_forward); /* spheroid */
- xy.x = C * lp.lam * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi));
- xy.y = C * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / C;
- lp.lam = xy.x / (C * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi)));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
- return P;
-}
-ENTRY0(putp5) P->A = 2.; P->B = 1.; ENDENTRY(setup(P))
-ENTRY0(putp5p) P->A = 1.5; P->B = 0.5; ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_putp6.c b/src/3rdparty/proj/PJ_putp6.c
deleted file mode 100644
index 28e82cfd..00000000
--- a/src/3rdparty/proj/PJ_putp6.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x, C_y, A, B, D;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph.";
-PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph.";
-#define EPS 1e-10
-#define NITER 10
-#define CON_POLE 1.732050807568877
-FORWARD(s_forward); /* spheroid */
- double p, r, V;
- int i;
-
- p = P->B * sin(lp.phi);
- lp.phi *= 1.10265779;
- for (i = NITER; i ; --i) {
- r = sqrt(1. + lp.phi * lp.phi);
- lp.phi -= V = ( (P->A - r) * lp.phi - log(lp.phi + r) - p ) /
- (P->A - 2. * r);
- if (fabs(V) < EPS)
- break;
- }
- if (!i)
- lp.phi = p < 0. ? -CON_POLE : CON_POLE;
- xy.x = P->C_x * lp.lam * (P->D - sqrt(1. + lp.phi * lp.phi));
- xy.y = P->C_y * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double r;
-
- lp.phi = xy.y / P->C_y;
- r = sqrt(1. + lp.phi * lp.phi);
- lp.lam = xy.x / (P->C_x * (P->D - r));
- lp.phi = aasin( ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B);
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->es = 0.;
- P->inv = s_inverse;
- P->fwd = s_forward;
- return P;
-}
-ENTRY0(putp6)
- P->C_x = 1.01346;
- P->C_y = 0.91910;
- P->A = 4.;
- P->B = 2.1471437182129378784;
- P->D = 2.;
-ENDENTRY(setup(P))
-ENTRY0(putp6p)
- P->C_x = 0.44329;
- P->C_y = 0.80404;
- P->A = 6.;
- P->B = 5.61125;
- P->D = 3.;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_robin.c b/src/3rdparty/proj/PJ_robin.c
deleted file mode 100644
index 92f93e4b..00000000
--- a/src/3rdparty/proj/PJ_robin.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph.";
-#define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3)))
-#define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3))
-/* note: following terms based upon 5 deg. intervals in degrees. */
-static struct COEFS {
- float c0, c1, c2, c3;
-} X[] = {
-1, -5.67239e-12, -7.15511e-05, 3.11028e-06,
-0.9986, -0.000482241, -2.4897e-05, -1.33094e-06,
-0.9954, -0.000831031, -4.4861e-05, -9.86588e-07,
-0.99, -0.00135363, -5.96598e-05, 3.67749e-06,
-0.9822, -0.00167442, -4.4975e-06, -5.72394e-06,
-0.973, -0.00214869, -9.03565e-05, 1.88767e-08,
-0.96, -0.00305084, -9.00732e-05, 1.64869e-06,
-0.9427, -0.00382792, -6.53428e-05, -2.61493e-06,
-0.9216, -0.00467747, -0.000104566, 4.8122e-06,
-0.8962, -0.00536222, -3.23834e-05, -5.43445e-06,
-0.8679, -0.00609364, -0.0001139, 3.32521e-06,
-0.835, -0.00698325, -6.40219e-05, 9.34582e-07,
-0.7986, -0.00755337, -5.00038e-05, 9.35532e-07,
-0.7597, -0.00798325, -3.59716e-05, -2.27604e-06,
-0.7186, -0.00851366, -7.0112e-05, -8.63072e-06,
-0.6732, -0.00986209, -0.000199572, 1.91978e-05,
-0.6213, -0.010418, 8.83948e-05, 6.24031e-06,
-0.5722, -0.00906601, 0.000181999, 6.24033e-06,
-0.5322, 0.,0.,0. },
-Y[] = {
-0, 0.0124, 3.72529e-10, 1.15484e-09,
-0.062, 0.0124001, 1.76951e-08, -5.92321e-09,
-0.124, 0.0123998, -7.09668e-08, 2.25753e-08,
-0.186, 0.0124008, 2.66917e-07, -8.44523e-08,
-0.248, 0.0123971, -9.99682e-07, 3.15569e-07,
-0.31, 0.0124108, 3.73349e-06, -1.1779e-06,
-0.372, 0.0123598, -1.3935e-05, 4.39588e-06,
-0.434, 0.0125501, 5.20034e-05, -1.00051e-05,
-0.4968, 0.0123198, -9.80735e-05, 9.22397e-06,
-0.5571, 0.0120308, 4.02857e-05, -5.2901e-06,
-0.6176, 0.0120369, -3.90662e-05, 7.36117e-07,
-0.6769, 0.0117015, -2.80246e-05, -8.54283e-07,
-0.7346, 0.0113572, -4.08389e-05, -5.18524e-07,
-0.7903, 0.0109099, -4.86169e-05, -1.0718e-06,
-0.8435, 0.0103433, -6.46934e-05, 5.36384e-09,
-0.8936, 0.00969679, -6.46129e-05, -8.54894e-06,
-0.9394, 0.00840949, -0.000192847, -4.21023e-06,
-0.9761, 0.00616525, -0.000256001, -4.21021e-06,
-1., 0.,0.,0 };
-#define FXC 0.8487
-#define FYC 1.3523
-#define C1 11.45915590261646417544
-#define RC1 0.08726646259971647884
-#define NODES 18
-#define ONEEPS 1.000001
-#define EPS 1e-8
-FORWARD(s_forward); /* spheroid */
- int i;
- double dphi;
-
- i = floor((dphi = fabs(lp.phi)) * C1);
- if (i >= NODES) i = NODES - 1;
- dphi = RAD_TO_DEG * (dphi - RC1 * i);
- xy.x = V(X[i], dphi) * FXC * lp.lam;
- xy.y = V(Y[i], dphi) * FYC;
- if (lp.phi < 0.) xy.y = -xy.y;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- int i;
- double t, t1;
- struct COEFS T;
-
- lp.lam = xy.x / FXC;
- lp.phi = fabs(xy.y / FYC);
- if (lp.phi >= 1.) { /* simple pathologic cases */
- if (lp.phi > ONEEPS) I_ERROR
- else {
- lp.phi = xy.y < 0. ? -HALFPI : HALFPI;
- lp.lam /= X[NODES].c0;
- }
- } else { /* general problem */
- /* in Y space, reduce to table interval */
- for (i = floor(lp.phi * NODES);;) {
- if (Y[i].c0 > lp.phi) --i;
- else if (Y[i+1].c0 <= lp.phi) ++i;
- else break;
- }
- T = Y[i];
- /* first guess, linear interp */
- t = 5. * (lp.phi - T.c0)/(Y[i+1].c0 - T.c0);
- /* make into root */
- T.c0 -= lp.phi;
- for (;;) { /* Newton-Raphson reduction */
- t -= t1 = V(T,t) / DV(T,t);
- if (fabs(t1) < EPS)
- break;
- }
- lp.phi = (5 * i + t) * DEG_TO_RAD;
- if (xy.y < 0.) lp.phi = -lp.phi;
- lp.lam /= V(X[i], t);
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(robin) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_rpoly.c b/src/3rdparty/proj/PJ_rpoly.c
deleted file mode 100644
index 1440327d..00000000
--- a/src/3rdparty/proj/PJ_rpoly.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#define PROJ_PARMS__ \
- double phi1; \
- double fxa; \
- double fxb; \
- int mode;
-#define EPS 1e-9
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(rpoly, "Rectangular Polyconic")
- "\n\tConic, Sph., no inv.\n\tlat_ts=";
-FORWARD(s_forward); /* spheroid */
- double fa;
-
- if (P->mode)
- fa = tan(lp.lam * P->fxb) * P->fxa;
- else
- fa = 0.5 * lp.lam;
- if (fabs(lp.phi) < EPS) {
- xy.x = fa + fa;
- xy.y = - P->phi0;
- } else {
- xy.y = 1. / tan(lp.phi);
- xy.x = sin(fa = 2. * atan(fa * sin(lp.phi))) * xy.y;
- xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(rpoly)
- if ((P->mode = (P->phi1 = fabs(pj_param(P->params, "rlat_ts").f)) > EPS)) {
- P->fxb = 0.5 * sin(P->phi1);
- P->fxa = 0.5 / P->fxb;
- }
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_sconics.c b/src/3rdparty/proj/PJ_sconics.c
deleted file mode 100644
index c65635d8..00000000
--- a/src/3rdparty/proj/PJ_sconics.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#define PROJ_PARMS__ \
- double n; \
- double rho_c; \
- double rho_0; \
- double sig; \
- double c1, c2; \
- int type;
-#define PJ_LIB__
-#include <projects.h>
-#define EULER 0
-#define MURD1 1
-#define MURD2 2
-#define MURD3 3
-#define PCONIC 4
-#define TISSOT 5
-#define VITK1 6
-#define EPS10 1.e-10
-#define EPS 1e-10
-#define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2="
-PROJ_HEAD(tissot, "Tissot")
- LINE2;
-PROJ_HEAD(murd1, "Murdoch I")
- LINE2;
-PROJ_HEAD(murd2, "Murdoch II")
- LINE2;
-PROJ_HEAD(murd3, "Murdoch III")
- LINE2;
-PROJ_HEAD(euler, "Euler")
- LINE2;
-PROJ_HEAD(pconic, "Perspective Conic")
- LINE2;
-PROJ_HEAD(vitk1, "Vitkovsky I")
- LINE2;
-/* get common factors for simple conics */
- static int
-phi12(PJ *P, double *del) {
- double p1, p2;
- int err = 0;
-
- if (!pj_param(P->params, "tlat_1").i ||
- !pj_param(P->params, "tlat_2").i) {
- err = -41;
- } else {
- p1 = pj_param(P->params, "rlat_1").f;
- p2 = pj_param(P->params, "rlat_2").f;
- *del = 0.5 * (p2 - p1);
- P->sig = 0.5 * (p2 + p1);
- err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0;
- *del = *del;
- }
- return err;
-}
-FORWARD(s_forward); /* spheroid */
- double rho;
-
- switch (P->type) {
- case MURD2:
- rho = P->rho_c + tan(P->sig - lp.phi);
- break;
- case PCONIC:
- rho = P->c2 * (P->c1 - tan(lp.phi));
- break;
- default:
- rho = P->rho_c - lp.phi;
- break;
- }
- xy.x = rho * sin( lp.lam *= P->n );
- xy.y = P->rho_0 - rho * cos(lp.lam);
- return (xy);
-}
-INVERSE(s_inverse); /* ellipsoid & spheroid */
- double rho;
-
- rho = hypot(xy.x, xy.y = P->rho_0 - xy.y);
- if (P->n < 0.) {
- rho = - rho;
- xy.x = - xy.x;
- xy.y = - xy.y;
- }
- lp.lam = atan2(xy.x, xy.y) / P->n;
- switch (P->type) {
- case PCONIC:
- lp.phi = atan(P->c1 - rho / P->c2) + P->sig;
- break;
- case MURD2:
- lp.phi = P->sig - atan(rho - P->rho_c);
- break;
- default:
- lp.phi = P->rho_c - rho;
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- double del, cs;
- int i;
-
- if( (i = phi12(P, &del)) )
- E_ERROR(i);
- switch (P->type) {
- case TISSOT:
- P->n = sin(P->sig);
- cs = cos(del);
- P->rho_c = P->n / cs + cs / P->n;
- P->rho_0 = sqrt((P->rho_c - 2 * sin(P->phi0))/P->n);
- break;
- case MURD1:
- P->rho_c = sin(del)/(del * tan(P->sig)) + P->sig;
- P->rho_0 = P->rho_c - P->phi0;
- P->n = sin(P->sig);
- break;
- case MURD2:
- P->rho_c = (cs = sqrt(cos(del))) / tan(P->sig);
- P->rho_0 = P->rho_c + tan(P->sig - P->phi0);
- P->n = sin(P->sig) * cs;
- break;
- case MURD3:
- P->rho_c = del / (tan(P->sig) * tan(del)) + P->sig;
- P->rho_0 = P->rho_c - P->phi0;
- P->n = sin(P->sig) * sin(del) * tan(del) / (del * del);
- break;
- case EULER:
- P->n = sin(P->sig) * sin(del) / del;
- del *= 0.5;
- P->rho_c = del / (tan(del) * tan(P->sig)) + P->sig;
- P->rho_0 = P->rho_c - P->phi0;
- break;
- case PCONIC:
- P->n = sin(P->sig);
- P->c2 = cos(del);
- P->c1 = 1./tan(P->sig);
- if (fabs(del = P->phi0 - P->sig) - EPS10 >= HALFPI)
- E_ERROR(-43);
- P->rho_0 = P->c2 * (P->c1 - tan(del));
- break;
- case VITK1:
- P->n = (cs = tan(del)) * sin(P->sig) / del;
- P->rho_c = del / (cs * tan(P->sig)) + P->sig;
- P->rho_0 = P->rho_c - P->phi0;
- break;
- }
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0;
- return (P);
-}
-ENTRY0(euler) P->type = EULER; ENDENTRY(setup(P))
-ENTRY0(tissot) P->type = TISSOT; ENDENTRY(setup(P))
-ENTRY0(murd1) P->type = MURD1; ENDENTRY(setup(P))
-ENTRY0(murd2) P->type = MURD2; ENDENTRY(setup(P))
-ENTRY0(murd3) P->type = MURD3; ENDENTRY(setup(P))
-ENTRY0(pconic) P->type = PCONIC; ENDENTRY(setup(P))
-ENTRY0(vitk1) P->type = VITK1; ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_somerc.c b/src/3rdparty/proj/PJ_somerc.c
deleted file mode 100644
index d419e653..00000000
--- a/src/3rdparty/proj/PJ_somerc.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#define PROJ_PARMS__ \
- double K, c, hlf_e, kR, cosp0, sinp0;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903";
-#define EPS 1.e-10
-#define NITER 6
-FORWARD(e_forward);
- double phip, lamp, phipp, lampp, sp, cp;
-
- sp = P->e * sin(lp.phi);
- phip = 2.* atan( exp( P->c * (
- log(tan(FORTPI + 0.5 * lp.phi)) - P->hlf_e * log((1. + sp)/(1. - sp)))
- + P->K)) - HALFPI;
- lamp = P->c * lp.lam;
- cp = cos(phip);
- phipp = aasin(P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp));
- lampp = aasin(cp * sin(lamp) / cos(phipp));
- xy.x = P->kR * lampp;
- xy.y = P->kR * log(tan(FORTPI + 0.5 * phipp));
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid & spheroid */
- double phip, lamp, phipp, lampp, cp, esp, con, delp;
- int i;
-
- phipp = 2. * (atan(exp(xy.y / P->kR)) - FORTPI);
- lampp = xy.x / P->kR;
- cp = cos(phipp);
- phip = aasin(P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp));
- lamp = aasin(cp * sin(lampp) / cos(phip));
- con = (P->K - log(tan(FORTPI + 0.5 * phip)))/P->c;
- for (i = NITER; i ; --i) {
- esp = P->e * sin(phip);
- delp = (con + log(tan(FORTPI + 0.5 * phip)) - P->hlf_e *
- log((1. + esp)/(1. - esp)) ) *
- (1. - esp * esp) * cos(phip) * P->rone_es;
- phip -= delp;
- if (fabs(delp) < EPS)
- break;
- }
- if (i) {
- lp.phi = phip;
- lp.lam = lamp / P->c;
- } else
- I_ERROR
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(somerc)
- double cp, phip0, sp;
-
- P->hlf_e = 0.5 * P->e;
- cp = cos(P->phi0);
- cp *= cp;
- P->c = sqrt(1 + P->es * cp * cp * P->rone_es);
- sp = sin(P->phi0);
- P->cosp0 = cos( phip0 = aasin(P->sinp0 = sp / P->c) );
- sp *= P->e;
- P->K = log(tan(FORTPI + 0.5 * phip0)) - P->c * (
- log(tan(FORTPI + 0.5 * P->phi0)) - P->hlf_e *
- log((1. + sp) / (1. - sp)));
- P->kR = P->k0 * sqrt(P->one_es) / (1. - sp * sp);
- P->inv = e_inverse;
- P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_stere.c b/src/3rdparty/proj/PJ_stere.c
deleted file mode 100644
index a31bf97b..00000000
--- a/src/3rdparty/proj/PJ_stere.c
+++ /dev/null
@@ -1,241 +0,0 @@
-#define PROJ_PARMS__ \
- double phits; \
- double sinX1; \
- double cosX1; \
- double akm1; \
- int mode;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts=";
-PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Sph&Ell\n\tsouth";
-#define sinph0 P->sinX1
-#define cosph0 P->cosX1
-#define EPS10 1.e-10
-#define TOL 1.e-8
-#define NITER 8
-#define CONV 1.e-10
-#define S_POLE 0
-#define N_POLE 1
-#define OBLIQ 2
-#define EQUIT 3
- static double
-ssfn_(double phit, double sinphi, double eccen) {
- sinphi *= eccen;
- return (tan (.5 * (HALFPI + phit)) *
- pow((1. - sinphi) / (1. + sinphi), .5 * eccen));
-}
-FORWARD(e_forward); /* ellipsoid */
- double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi;
-
- coslam = cos(lp.lam);
- sinlam = sin(lp.lam);
- sinphi = sin(lp.phi);
- if (P->mode == OBLIQ || P->mode == EQUIT) {
- sinX = sin(X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - HALFPI);
- cosX = cos(X);
- }
- switch (P->mode) {
- case OBLIQ:
- A = P->akm1 / (P->cosX1 * (1. + P->sinX1 * sinX +
- P->cosX1 * cosX * coslam));
- xy.y = A * (P->cosX1 * sinX - P->sinX1 * cosX * coslam);
- goto xmul;
- case EQUIT:
- A = 2. * P->akm1 / (1. + cosX * coslam);
- xy.y = A * sinX;
-xmul:
- xy.x = A * cosX;
- break;
- case S_POLE:
- lp.phi = -lp.phi;
- coslam = - coslam;
- sinphi = -sinphi;
- case N_POLE:
- xy.x = P->akm1 * pj_tsfn(lp.phi, sinphi, P->e);
- xy.y = - xy.x * coslam;
- break;
- }
- xy.x = xy.x * sinlam;
- return (xy);
-}
-FORWARD(s_forward); /* spheroid */
- double sinphi, cosphi, coslam, sinlam;
-
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- sinlam = sin(lp.lam);
- switch (P->mode) {
- case EQUIT:
- xy.y = 1. + cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam;
-oblcon:
- if (xy.y <= EPS10) F_ERROR;
- xy.x = (xy.y = P->akm1 / xy.y) * cosphi * sinlam;
- xy.y *= (P->mode == EQUIT) ? sinphi :
- cosph0 * sinphi - sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- lp.phi = - lp.phi;
- case S_POLE:
- if (fabs(lp.phi - HALFPI) < TOL) F_ERROR;
- xy.x = sinlam * ( xy.y = P->akm1 * tan(FORTPI + .5 * lp.phi) );
- xy.y *= coslam;
- break;
- }
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0;
- int i;
-
- rho = hypot(xy.x, xy.y);
- switch (P->mode) {
- case OBLIQ:
- case EQUIT:
- cosphi = cos( tp = 2. * atan2(rho * P->cosX1 , P->akm1) );
- sinphi = sin(tp);
- if( rho == 0.0 )
- phi_l = asin(cosphi * P->sinX1);
- else
- phi_l = asin(cosphi * P->sinX1 + (xy.y * sinphi * P->cosX1 / rho));
-
- tp = tan(.5 * (HALFPI + phi_l));
- xy.x *= sinphi;
- xy.y = rho * P->cosX1 * cosphi - xy.y * P->sinX1* sinphi;
- halfpi = HALFPI;
- halfe = .5 * P->e;
- break;
- case N_POLE:
- xy.y = -xy.y;
- case S_POLE:
- phi_l = HALFPI - 2. * atan(tp = - rho / P->akm1);
- halfpi = -HALFPI;
- halfe = -.5 * P->e;
- break;
- }
- for (i = NITER; i--; phi_l = lp.phi) {
- sinphi = P->e * sin(phi_l);
- lp.phi = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi),
- halfe)) - halfpi;
- if (fabs(phi_l - lp.phi) < CONV) {
- if (P->mode == S_POLE)
- lp.phi = -lp.phi;
- lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y);
- return (lp);
- }
- }
- I_ERROR;
-}
-INVERSE(s_inverse); /* spheroid */
- double c, rh, sinc, cosc;
-
- sinc = sin(c = 2. * atan((rh = hypot(xy.x, xy.y)) / P->akm1));
- cosc = cos(c);
- lp.lam = 0.;
- switch (P->mode) {
- case EQUIT:
- if (fabs(rh) <= EPS10)
- lp.phi = 0.;
- else
- lp.phi = asin(xy.y * sinc / rh);
- if (cosc != 0. || xy.x != 0.)
- lp.lam = atan2(xy.x * sinc, cosc * rh);
- break;
- case OBLIQ:
- if (fabs(rh) <= EPS10)
- lp.phi = P->phi0;
- else
- lp.phi = asin(cosc * sinph0 + xy.y * sinc * cosph0 / rh);
- if ((c = cosc - sinph0 * sin(lp.phi)) != 0. || xy.x != 0.)
- lp.lam = atan2(xy.x * sinc * cosph0, c * rh);
- break;
- case N_POLE:
- xy.y = -xy.y;
- case S_POLE:
- if (fabs(rh) <= EPS10)
- lp.phi = P->phi0;
- else
- lp.phi = asin(P->mode == S_POLE ? - cosc : cosc);
- lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y);
- break;
- }
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) { /* general initialization */
- double t;
-
- if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10)
- P->mode = P->phi0 < 0. ? S_POLE : N_POLE;
- else
- P->mode = t > EPS10 ? OBLIQ : EQUIT;
- P->phits = fabs(P->phits);
- if (P->es) {
- double X;
-
- switch (P->mode) {
- case N_POLE:
- case S_POLE:
- if (fabs(P->phits - HALFPI) < EPS10)
- P->akm1 = 2. * P->k0 /
- sqrt(pow(1+P->e,1+P->e)*pow(1-P->e,1-P->e));
- else {
- P->akm1 = cos(P->phits) /
- pj_tsfn(P->phits, t = sin(P->phits), P->e);
- t *= P->e;
- P->akm1 /= sqrt(1. - t * t);
- }
- break;
- case EQUIT:
- P->akm1 = 2. * P->k0;
- break;
- case OBLIQ:
- t = sin(P->phi0);
- X = 2. * atan(ssfn_(P->phi0, t, P->e)) - HALFPI;
- t *= P->e;
- P->akm1 = 2. * P->k0 * cos(P->phi0) / sqrt(1. - t * t);
- P->sinX1 = sin(X);
- P->cosX1 = cos(X);
- break;
- }
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- switch (P->mode) {
- case OBLIQ:
- sinph0 = sin(P->phi0);
- cosph0 = cos(P->phi0);
- case EQUIT:
- P->akm1 = 2. * P->k0;
- break;
- case S_POLE:
- case N_POLE:
- P->akm1 = fabs(P->phits - HALFPI) >= EPS10 ?
- cos(P->phits) / tan(FORTPI - .5 * P->phits) :
- 2. * P->k0 ;
- break;
- }
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
- return P;
-}
-ENTRY0(stere)
- P->phits = pj_param(P->params, "tlat_ts").i ?
- P->phits = pj_param(P->params, "rlat_ts").f : HALFPI;
-ENDENTRY(setup(P))
-ENTRY0(ups)
- /* International Ellipsoid */
- P->phi0 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI;
- if (!P->es) E_ERROR(-34);
- P->k0 = .994;
- P->x0 = 2000000.;
- P->y0 = 2000000.;
- P->phits = HALFPI;
- P->lam0 = 0.;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_sterea.c b/src/3rdparty/proj/PJ_sterea.c
deleted file mode 100644
index 162acf02..00000000
--- a/src/3rdparty/proj/PJ_sterea.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-** libproj -- library of cartographic projections
-**
-** Copyright (c) 2003 Gerald I. Evenden
-*/
-static const char
-LIBPROJ_ID[] = "$Id: PJ_sterea.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/*
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be
-** included in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#define PROJ_PARMS__ \
- double phic0; \
- double cosc0, sinc0; \
- double R2; \
- void *en;
-
-#define PJ_LIB__
-#include <projects.h>
-
-PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell";
-
-# define DEL_TOL 1.e-14
-# define MAX_ITER 10
-
-FORWARD(e_forward); /* ellipsoid */
- double cosphi, sinphi, coslam, k;
-
- lp = pj_gauss(lp, P->en);
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- coslam = cos(lp.lam);
- k = P->k0 * P->R2 / (1. + P->sinc0 * sinphi + P->cosc0 * cosphi * coslam);
- xy.x = k * cosphi * sin(lp.lam);
- xy.y = k * (P->cosc0 * sinphi - P->sinc0 * cosphi * coslam);
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double rho, c, sincc, coscc;
-
- xy.x /= P->k0;
- xy.y /= P->k0;
- if((rho = hypot(xy.x, xy.y))) {
- c = 2. * atan2(rho, P->R2);
- sincc = sin(c);
- coscc = cos(c);
- lp.phi = asin(coscc * P->sinc0 + xy.y * sincc * P->cosc0 / rho);
- lp.lam = atan2(xy.x * sincc, rho * P->cosc0 * coscc -
- xy.y * P->sinc0 * sincc);
- } else {
- lp.phi = P->phic0;
- lp.lam = 0.;
- }
- return(pj_inv_gauss(lp, P->en));
-}
-FREEUP; if (P) { if (P->en) free(P->en); free(P); } }
-ENTRY0(sterea)
- double R;
-
- if (!(P->en = pj_gauss_ini(P->e, P->phi0, &(P->phic0), &R))) E_ERROR_0;
- P->sinc0 = sin(P->phic0);
- P->cosc0 = cos(P->phic0);
- P->R2 = 2. * R;
- P->inv = e_inverse;
- P->fwd = e_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_sts.c b/src/3rdparty/proj/PJ_sts.c
deleted file mode 100644
index f1557feb..00000000
--- a/src/3rdparty/proj/PJ_sts.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x, C_y, C_p; \
- int tan_mode;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph.";
-PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph.";
-PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph.";
-PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph.";
-FORWARD(s_forward); /* spheroid */
- double c;
-
- xy.x = P->C_x * lp.lam * cos(lp.phi);
- xy.y = P->C_y;
- lp.phi *= P->C_p;
- c = cos(lp.phi);
- if (P->tan_mode) {
- xy.x *= c * c;
- xy.y *= tan(lp.phi);
- } else {
- xy.x /= c;
- xy.y *= sin(lp.phi);
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double c;
-
- xy.y /= P->C_y;
- c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y));
- lp.phi /= P->C_p;
- lp.lam = xy.x / (P->C_x * cos(lp.phi));
- if (P->tan_mode)
- lp.lam /= c * c;
- else
- lp.lam *= c;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P, double p, double q, int mode) {
- P->es = 0.;
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->C_x = q / p;
- P->C_y = p;
- P->C_p = 1/ q;
- P->tan_mode = mode;
- return P;
-}
-ENTRY0(kav5) ENDENTRY(setup(P, 1.50488, 1.35439, 0))
-ENTRY0(qua_aut) ENDENTRY(setup(P, 2., 2., 0))
-ENTRY0(mbt_s) ENDENTRY(setup(P, 1.48875, 1.36509, 0))
-ENTRY0(fouc) ENDENTRY(setup(P, 2., 2., 1))
diff --git a/src/3rdparty/proj/PJ_tcc.c b/src/3rdparty/proj/PJ_tcc.c
deleted file mode 100644
index 00cdb556..00000000
--- a/src/3rdparty/proj/PJ_tcc.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#define PROJ_PARMS__ \
- double ap;
-#define EPS10 1.e-10
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv.";
-FORWARD(s_forward); /* spheroid */
- double b, bt;
-
- b = cos(lp.phi) * sin(lp.lam);
- if ((bt = 1. - b * b) < EPS10) F_ERROR;
- xy.x = b / sqrt(bt);
- xy.y = atan2(tan(lp.phi) , cos(lp.lam));
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(tcc) P->es = 0.; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_tcea.c b/src/3rdparty/proj/PJ_tcea.c
deleted file mode 100644
index 3626fa17..00000000
--- a/src/3rdparty/proj/PJ_tcea.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#define PROJ_PARMS__ \
- double rk0;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph";
-FORWARD(s_forward); /* spheroid */
- xy.x = P->rk0 * cos(lp.phi) * sin(lp.lam);
- xy.y = P->k0 * (atan2(tan(lp.phi), cos(lp.lam)) - P->phi0);
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t;
-
- xy.y = xy.y * P->rk0 + P->phi0;
- xy.x *= P->k0;
- t = sqrt(1. - xy.x * xy.x);
- lp.phi = asin(t * sin(xy.y));
- lp.lam = atan2(xy.x, t * cos(xy.y));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(tcea)
- P->rk0 = 1 / P->k0;
- P->inv = s_inverse;
- P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_tmerc.c b/src/3rdparty/proj/PJ_tmerc.c
deleted file mode 100644
index 14cf2e8e..00000000
--- a/src/3rdparty/proj/PJ_tmerc.c
+++ /dev/null
@@ -1,175 +0,0 @@
-#define PROJ_PARMS__ \
- double esp; \
- double ml0; \
- double *en;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell";
-PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)")
- "\n\tCyl, Sph\n\tzone= south";
-#define EPS10 1.e-10
-#define aks0 P->esp
-#define aks5 P->ml0
-#define FC1 1.
-#define FC2 .5
-#define FC3 .16666666666666666666
-#define FC4 .08333333333333333333
-#define FC5 .05
-#define FC6 .03333333333333333333
-#define FC7 .02380952380952380952
-#define FC8 .01785714285714285714
-FORWARD(e_forward); /* ellipse */
- double al, als, n, cosphi, sinphi, t;
-
- /*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
- * Is error -20 really an appropriate return value?
- *
- * http://trac.osgeo.org/proj/ticket/5
- */
- if( lp.lam < -HALFPI || lp.lam > HALFPI )
- {
- xy.x = HUGE_VAL;
- xy.y = HUGE_VAL;
- pj_errno = -14;
- return xy;
- }
-
- sinphi = sin(lp.phi); cosphi = cos(lp.phi);
- t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
- t *= t;
- al = cosphi * lp.lam;
- als = al * al;
- al /= sqrt(1. - P->es * sinphi * sinphi);
- n = P->esp * cosphi * cosphi;
- xy.x = P->k0 * al * (FC1 +
- FC3 * als * (1. - t + n +
- FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t)
- + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) )
- )));
- xy.y = P->k0 * (pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->ml0 +
- sinphi * al * lp.lam * FC2 * ( 1. +
- FC4 * als * (5. - t + n * (9. + 4. * n) +
- FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t)
- + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) )
- ))));
- return (xy);
-}
-FORWARD(s_forward); /* sphere */
- double b, cosphi;
-
- /*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
- * Is error -20 really an appropriate return value?
- *
- * http://trac.osgeo.org/proj/ticket/5
- */
- if( lp.lam < -HALFPI || lp.lam > HALFPI )
- {
- xy.x = HUGE_VAL;
- xy.y = HUGE_VAL;
- pj_errno = -14;
- return xy;
- }
-
- b = (cosphi = cos(lp.phi)) * sin(lp.lam);
- if (fabs(fabs(b) - 1.) <= EPS10) F_ERROR;
- xy.x = aks5 * log((1. + b) / (1. - b));
- if ((b = fabs( xy.y = cosphi * cos(lp.lam) / sqrt(1. - b * b) )) >= 1.) {
- if ((b - 1.) > EPS10) F_ERROR
- else xy.y = 0.;
- } else
- xy.y = acos(xy.y);
- if (lp.phi < 0.) xy.y = -xy.y;
- xy.y = aks0 * (xy.y - P->phi0);
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double n, con, cosphi, d, ds, sinphi, t;
-
- lp.phi = pj_inv_mlfn(P->ml0 + xy.y / P->k0, P->es, P->en);
- if (fabs(lp.phi) >= HALFPI) {
- lp.phi = xy.y < 0. ? -HALFPI : HALFPI;
- lp.lam = 0.;
- } else {
- sinphi = sin(lp.phi);
- cosphi = cos(lp.phi);
- t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
- n = P->esp * cosphi * cosphi;
- d = xy.x * sqrt(con = 1. - P->es * sinphi * sinphi) / P->k0;
- con *= t;
- t *= t;
- ds = d * d;
- lp.phi -= (con * ds / (1.-P->es)) * FC2 * (1. -
- ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) -
- ds * FC6 * (61. + t * (90. - 252. * n +
- 45. * t) + 46. * n
- - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) )
- )));
- lp.lam = d*(FC1 -
- ds*FC3*( 1. + 2.*t + n -
- ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n
- - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) )
- ))) / cosphi;
- }
- return (lp);
-}
-INVERSE(s_inverse); /* sphere */
- double h, g;
-
- h = exp(xy.x / aks0);
- g = .5 * (h - 1. / h);
- h = cos(P->phi0 + xy.y / aks0);
- lp.phi = asin(sqrt((1. - h * h) / (1. + g * g)));
- if (xy.y < 0.) lp.phi = -lp.phi;
- lp.lam = (g || h) ? atan2(g, h) : 0.;
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->en)
- pj_dalloc(P->en);
- pj_dalloc(P);
- }
-}
- static PJ *
-setup(PJ *P) { /* general initialization */
- if (P->es) {
- if (!(P->en = pj_enfn(P->es)))
- E_ERROR_0;
- P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en);
- P->esp = P->es / (1. - P->es);
- P->inv = e_inverse;
- P->fwd = e_forward;
- } else {
- aks0 = P->k0;
- aks5 = .5 * aks0;
- P->inv = s_inverse;
- P->fwd = s_forward;
- }
- return P;
-}
-ENTRY1(tmerc, en)
-ENDENTRY(setup(P))
-ENTRY1(utm, en)
- int zone;
-
- if (!P->es) E_ERROR(-34);
- P->y0 = pj_param(P->params, "bsouth").i ? 10000000. : 0.;
- P->x0 = 500000.;
- if (pj_param(P->params, "tzone").i) /* zone input ? */
- if ((zone = pj_param(P->params, "izone").i) > 0 && zone <= 60)
- --zone;
- else
- E_ERROR(-35)
- else /* nearest central meridian input */
- if ((zone = floor((adjlon(P->lam0) + PI) * 30. / PI)) < 0)
- zone = 0;
- else if (zone >= 60)
- zone = 59;
- P->lam0 = (zone + .5) * PI / 30. - PI;
- P->k0 = 0.9996;
- P->phi0 = 0.;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_tpeqd.c b/src/3rdparty/proj/PJ_tpeqd.c
deleted file mode 100644
index b4e76aa0..00000000
--- a/src/3rdparty/proj/PJ_tpeqd.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#define PROJ_PARMS__ \
- double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; \
- double hz0, thz0, rhshz0, ca, sa, lp, lamc;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(tpeqd, "Two Point Equidistant")
- "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2=";
-FORWARD(s_forward); /* sphere */
- double t, z1, z2, dl1, dl2, sp, cp;
-
- sp = sin(lp.phi);
- cp = cos(lp.phi);
- z1 = aacos(P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2));
- z2 = aacos(P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2));
- z1 *= z1;
- z2 *= z2;
- xy.x = P->r2z0 * (t = z1 - z2);
- t = P->z02 - t;
- xy.y = P->r2z0 * asqrt(4. * P->z02 * z2 - t * t);
- if ((P->ccs * sp - cp * (P->cs * sin(dl1) - P->sc * sin(dl2))) < 0.)
- xy.y = -xy.y;
- return xy;
-}
-INVERSE(s_inverse); /* sphere */
- double cz1, cz2, s, d, cp, sp;
-
- cz1 = cos(hypot(xy.y, xy.x + P->hz0));
- cz2 = cos(hypot(xy.y, xy.x - P->hz0));
- s = cz1 + cz2;
- d = cz1 - cz2;
- lp.lam = - atan2(d, (s * P->thz0));
- lp.phi = aacos(hypot(P->thz0 * s, d) * P->rhshz0);
- if ( xy.y < 0. )
- lp.phi = - lp.phi;
- /* lam--phi now in system relative to P1--P2 base equator */
- sp = sin(lp.phi);
- cp = cos(lp.phi);
- lp.phi = aasin(P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp)));
- lp.lam = atan2(cp * sin(lp.lam), P->sa * cp * s - P->ca * sp) + P->lamc;
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(tpeqd)
- double lam_1, lam_2, phi_1, phi_2, A12, pp;
-
- /* get control point locations */
- phi_1 = pj_param(P->params, "rlat_1").f;
- lam_1 = pj_param(P->params, "rlon_1").f;
- phi_2 = pj_param(P->params, "rlat_2").f;
- lam_2 = pj_param(P->params, "rlon_2").f;
- if (phi_1 == phi_2 && lam_1 == lam_2) E_ERROR(-25);
- P->lam0 = adjlon(0.5 * (lam_1 + lam_2));
- P->dlam2 = adjlon(lam_2 - lam_1);
- P->cp1 = cos(phi_1);
- P->cp2 = cos(phi_2);
- P->sp1 = sin(phi_1);
- P->sp2 = sin(phi_2);
- P->cs = P->cp1 * P->sp2;
- P->sc = P->sp1 * P->cp2;
- P->ccs = P->cp1 * P->cp2 * sin(P->dlam2);
- P->z02 = aacos(P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2));
- P->hz0 = .5 * P->z02;
- A12 = atan2(P->cp2 * sin(P->dlam2),
- P->cp1 * P->sp2 - P->sp1 * P->cp2 * cos(P->dlam2));
- P->ca = cos(pp = aasin(P->cp1 * sin(A12)));
- P->sa = sin(pp);
- P->lp = adjlon(atan2(P->cp1 * cos(A12), P->sp1) - P->hz0);
- P->dlam2 *= .5;
- P->lamc = HALFPI - atan2(sin(A12) * P->sp1, cos(A12)) - P->dlam2;
- P->thz0 = tan(P->hz0);
- P->rhshz0 = .5 / sin(P->hz0);
- P->r2z0 = 0.5 / P->z02;
- P->z02 *= P->z02;
- P->inv = s_inverse; P->fwd = s_forward;
- P->es = 0.;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_urm5.c b/src/3rdparty/proj/PJ_urm5.c
deleted file mode 100644
index 70a5a1d6..00000000
--- a/src/3rdparty/proj/PJ_urm5.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#define PROJ_PARMS__ \
- double m, rmn, q3, n;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph.\n\tn= q= alphi=";
-FORWARD(s_forward); /* spheroid */
- double t;
-
- t = lp.phi = aasin(P->n * sin(lp.phi));
- xy.x = P->m * lp.lam * cos(lp.phi);
- t *= t;
- xy.y = lp.phi * (1. + t * P->q3) * P->rmn;
- return xy;
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(urm5)
- double alpha, t;
-
- P->n = pj_param(P->params, "dn").f;
- P->q3 = pj_param(P->params, "dq").f / 3.;
- alpha = pj_param(P->params, "ralpha").f;
- t = P->n * sin(alpha);
- P->m = cos(alpha) / sqrt(1. - t * t);
- P->rmn = 1. / (P->m * P->n);
- P->es = 0.;
- P->inv = 0;
- P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_urmfps.c b/src/3rdparty/proj/PJ_urmfps.c
deleted file mode 100644
index 4a4f31a9..00000000
--- a/src/3rdparty/proj/PJ_urmfps.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#define PROJ_PARMS__ \
- double n, C_y;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn=";
-PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph.";
-#define C_x 0.8773826753
-#define Cy 1.139753528477
-FORWARD(s_forward); /* sphere */
- lp.phi = aasin(P->n * sin(lp.phi));
- xy.x = C_x * lp.lam * cos(lp.phi);
- xy.y = P->C_y * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* sphere */
- xy.y /= P->C_y;
- lp.phi = aasin(sin(xy.y) / P->n);
- lp.lam = xy.x / (C_x * cos(xy.y));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
- static PJ *
-setup(PJ *P) {
- P->C_y = Cy / P->n;
- P->es = 0.;
- P->inv = s_inverse;
- P->fwd = s_forward;
- return P;
-}
-ENTRY0(urmfps)
- if (pj_param(P->params, "tn").i) {
- P->n = pj_param(P->params, "dn").f;
- if (P->n <= 0. || P->n > 1.)
- E_ERROR(-40)
- } else
- E_ERROR(-40)
-ENDENTRY(setup(P))
-ENTRY0(wag1)
- P->n = 0.8660254037844386467637231707;
-ENDENTRY(setup(P))
diff --git a/src/3rdparty/proj/PJ_vandg.c b/src/3rdparty/proj/PJ_vandg.c
deleted file mode 100644
index 784674b7..00000000
--- a/src/3rdparty/proj/PJ_vandg.c
+++ /dev/null
@@ -1,78 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph";
-# define TOL 1.e-10
-# define THIRD .33333333333333333333
-# define TWO_THRD .66666666666666666666
-# define C2_27 .07407407407407407407
-# define PI4_3 4.18879020478639098458
-# define PISQ 9.86960440108935861869
-# define TPISQ 19.73920880217871723738
-# define HPISQ 4.93480220054467930934
-FORWARD(s_forward); /* spheroid */
- double al, al2, g, g2, p2;
-
- p2 = fabs(lp.phi / HALFPI);
- if ((p2 - TOL) > 1.) F_ERROR;
- if (p2 > 1.)
- p2 = 1.;
- if (fabs(lp.phi) <= TOL) {
- xy.x = lp.lam;
- xy.y = 0.;
- } else if (fabs(lp.lam) <= TOL || fabs(p2 - 1.) < TOL) {
- xy.x = 0.;
- xy.y = PI * tan(.5 * asin(p2));
- if (lp.phi < 0.) xy.y = -xy.y;
- } else {
- al = .5 * fabs(PI / lp.lam - lp.lam / PI);
- al2 = al * al;
- g = sqrt(1. - p2 * p2);
- g = g / (p2 + g - 1.);
- g2 = g * g;
- p2 = g * (2. / p2 - 1.);
- p2 = p2 * p2;
- xy.x = g - p2; g = p2 + al2;
- xy.x = PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g;
- if (lp.lam < 0.) xy.x = -xy.x;
- xy.y = fabs(xy.x / PI);
- xy.y = 1. - xy.y * (xy.y + 2. * al);
- if (xy.y < -TOL) F_ERROR;
- if (xy.y < 0.) xy.y = 0.;
- else xy.y = sqrt(xy.y) * (lp.phi < 0. ? -PI : PI);
- }
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2;
-
- x2 = xy.x * xy.x;
- if ((ay = fabs(xy.y)) < TOL) {
- lp.phi = 0.;
- t = x2 * x2 + TPISQ * (x2 + HPISQ);
- lp.lam = fabs(xy.x) <= TOL ? 0. :
- .5 * (x2 - PISQ + sqrt(t)) / xy.x;
- return (lp);
- }
- y2 = xy.y * xy.y;
- r = x2 + y2; r2 = r * r;
- c1 = - PI * ay * (r + PISQ);
- c3 = r2 + TWOPI * (ay * r + PI * (y2 + PI * (ay + HALFPI)));
- c2 = c1 + PISQ * (r - 3. * y2);
- c0 = PI * ay;
- c2 /= c3;
- al = c1 / c3 - THIRD * c2 * c2;
- m = 2. * sqrt(-THIRD * al);
- d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3;
- if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) {
- d = t > 1. ? (d > 0. ? 0. : PI) : acos(d);
- lp.phi = PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2);
- if (xy.y < 0.) lp.phi = -lp.phi;
- t = r2 + TPISQ * (x2 - y2 + HPISQ);
- lp.lam = fabs(xy.x) <= TOL ? 0. :
- .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x;
- } else
- I_ERROR;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(vandg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_vandg2.c b/src/3rdparty/proj/PJ_vandg2.c
deleted file mode 100644
index 7bfa8f4e..00000000
--- a/src/3rdparty/proj/PJ_vandg2.c
+++ /dev/null
@@ -1,45 +0,0 @@
-# define TOL 1e-10
-# define TWORPI 0.63661977236758134308
-#define PROJ_PARMS__ \
- int vdg3;
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv.";
-PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv.";
-FORWARD(s_forward); /* spheroid */
- double x1, at, bt, ct;
-
- bt = fabs(TWORPI * lp.phi);
- if ((ct = 1. - bt * bt) < 0.)
- ct = 0.;
- else
- ct = sqrt(ct);
- if (fabs(lp.lam) < TOL) {
- xy.x = 0.;
- xy.y = PI * (lp.phi < 0. ? -bt : bt) / (1. + ct);
- } else {
- at = 0.5 * fabs(PI / lp.lam - lp.lam / PI);
- if (P->vdg3) {
- x1 = bt / (1. + ct);
- xy.x = PI * (sqrt(at * at + 1. - x1 * x1) - at);
- xy.y = PI * x1;
- } else {
- x1 = (ct * sqrt(1. + at * at) - at * ct * ct) /
- (1. + at * at * bt * bt);
- xy.x = PI * x1;
- xy.y = PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL);
- }
- if ( lp.lam < 0.) xy.x = -xy.x;
- if ( lp.phi < 0.) xy.y = -xy.y;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(vandg2)
- P->vdg3 = 0;
- P->inv = 0; P->fwd = s_forward;
-ENDENTRY(P)
-ENTRY0(vandg3)
- P->vdg3 = 1;
- P->es = 0.; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_vandg4.c b/src/3rdparty/proj/PJ_vandg4.c
deleted file mode 100644
index d6705031..00000000
--- a/src/3rdparty/proj/PJ_vandg4.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv.";
-#define TOL 1e-10
-#define TWORPI 0.63661977236758134308
-FORWARD(s_forward); /* spheroid */
- double x1, t, bt, ct, ft, bt2, ct2, dt, dt2;
-
- if (fabs(lp.phi) < TOL) {
- xy.x = lp.lam;
- xy.y = 0.;
- } else if (fabs(lp.lam) < TOL || fabs(fabs(lp.phi) - HALFPI) < TOL) {
- xy.x = 0.;
- xy.y = lp.phi;
- } else {
- bt = fabs(TWORPI * lp.phi);
- bt2 = bt * bt;
- ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.)
- / (bt2 * (bt - 1.));
- ct2 = ct * ct;
- dt = TWORPI * lp.lam;
- dt = dt + 1. / dt;
- dt = sqrt(dt * dt - 4.);
- if ((fabs(lp.lam) - HALFPI) < 0.) dt = -dt;
- dt2 = dt * dt;
- x1 = bt + ct; x1 *= x1;
- t = bt + 3.*ct;
- ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * (
- bt2 * (t * t + 4. * ct2) +
- ct2 * (12. * bt * ct + 4. * ct2) );
- x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) /
- (4.* x1 + dt2);
- xy.x = HALFPI * x1;
- xy.y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1);
- if (lp.lam < 0.) xy.x = -xy.x;
- if (lp.phi < 0.) xy.y = -xy.y;
- }
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(vandg4) P->es = 0.; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_wag2.c b/src/3rdparty/proj/PJ_wag2.c
deleted file mode 100644
index 96fd5fcb..00000000
--- a/src/3rdparty/proj/PJ_wag2.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph.";
-#define C_x 0.92483
-#define C_y 1.38725
-#define C_p1 0.88022
-#define C_p2 0.88550
-FORWARD(s_forward); /* spheroid */
- lp.phi = aasin(C_p1 * sin(C_p2 * lp.phi));
- xy.x = C_x * lp.lam * cos(lp.phi);
- xy.y = C_y * lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y / C_y;
- lp.lam = xy.x / (C_x * cos(lp.phi));
- lp.phi = aasin(sin(lp.phi) / C_p1) / C_p2;
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wag2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_wag3.c b/src/3rdparty/proj/PJ_wag3.c
deleted file mode 100644
index fbab4c49..00000000
--- a/src/3rdparty/proj/PJ_wag3.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#define PROJ_PARMS__ \
- double C_x;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts=";
-#define TWOTHIRD 0.6666666666666666666667
-FORWARD(s_forward); /* spheroid */
- xy.x = P->C_x * lp.lam * cos(TWOTHIRD * lp.phi);
- xy.y = lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y;
- lp.lam = xy.x / (P->C_x * cos(TWOTHIRD * lp.phi));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wag3)
- double ts;
-
- ts = pj_param(P->params, "rlat_ts").f;
- P->C_x = cos(ts) / cos(2.*ts/3.);
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_wag7.c b/src/3rdparty/proj/PJ_wag7.c
deleted file mode 100644
index 5f6f1bb1..00000000
--- a/src/3rdparty/proj/PJ_wag7.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv.";
-FORWARD(s_forward); /* sphere */
- double theta, ct, D;
-
- theta = asin(xy.y = 0.90630778703664996 * sin(lp.phi));
- xy.x = 2.66723 * (ct = cos(theta)) * sin(lp.lam /= 3.);
- xy.y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp.lam)))));
- xy.x *= D;
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wag7) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_wink1.c b/src/3rdparty/proj/PJ_wink1.c
deleted file mode 100644
index 214e6f4f..00000000
--- a/src/3rdparty/proj/PJ_wink1.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#define PROJ_PARMS__ \
- double cosphi1;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts=";
-FORWARD(s_forward); /* spheroid */
- xy.x = .5 * lp.lam * (P->cosphi1 + cos(lp.phi));
- xy.y = lp.phi;
- return (xy);
-}
-INVERSE(s_inverse); /* spheroid */
- lp.phi = xy.y;
- lp.lam = 2. * xy.x / (P->cosphi1 + cos(lp.phi));
- return (lp);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wink1)
- P->cosphi1 = cos(pj_param(P->params, "rlat_ts").f);
- P->es = 0.; P->inv = s_inverse; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/PJ_wink2.c b/src/3rdparty/proj/PJ_wink2.c
deleted file mode 100644
index 8eace009..00000000
--- a/src/3rdparty/proj/PJ_wink2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#define PROJ_PARMS__ \
- double cosphi1;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1=";
-#define MAX_ITER 10
-#define LOOP_TOL 1e-7
-#define TWO_D_PI 0.636619772367581343
-FORWARD(s_forward); /* spheroid */
- double k, V;
- int i;
-
- xy.y = lp.phi * TWO_D_PI;
- k = PI * sin(lp.phi);
- lp.phi *= 1.8;
- for (i = MAX_ITER; i ; --i) {
- lp.phi -= V = (lp.phi + sin(lp.phi) - k) /
- (1. + cos(lp.phi));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI;
- else
- lp.phi *= 0.5;
- xy.x = 0.5 * lp.lam * (cos(lp.phi) + P->cosphi1);
- xy.y = FORTPI * (sin(lp.phi) + xy.y);
- return (xy);
-}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wink2)
- P->cosphi1 = cos(pj_param(P->params, "rlat_1").f);
- P->es = 0.; P->inv = 0; P->fwd = s_forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/aasincos.c b/src/3rdparty/proj/aasincos.c
deleted file mode 100644
index 460590e4..00000000
--- a/src/3rdparty/proj/aasincos.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* arc sin, cosine, tan2 and sqrt that will NOT fail */
-#include <projects.h>
-#define ONE_TOL 1.00000000000001
-#define TOL 0.000000001
-#define ATOL 1e-50
- double
-aasin(double v) {
- double av;
-
- if ((av = fabs(v)) >= 1.) {
- if (av > ONE_TOL)
- pj_errno = -19;
- return (v < 0. ? -HALFPI : HALFPI);
- }
- return asin(v);
-}
- double
-aacos(double v) {
- double av;
-
- if ((av = fabs(v)) >= 1.) {
- if (av > ONE_TOL)
- pj_errno = -19;
- return (v < 0. ? PI : 0.);
- }
- return acos(v);
-}
- double
-asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); }
- double
-aatan2(double n, double d) {
- return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d));
-}
diff --git a/src/3rdparty/proj/adjlon.c b/src/3rdparty/proj/adjlon.c
deleted file mode 100644
index 09b3b14b..00000000
--- a/src/3rdparty/proj/adjlon.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* reduce argument to range +/- PI */
-#include <math.h>
-#include <projects.h>
-
-#define SPI 3.14159265359
-#define TWOPI 6.2831853071795864769
-#define ONEPI 3.14159265358979323846
-
-double adjlon (double lon) {
- if (fabs(lon) <= SPI) return( lon );
- lon += ONEPI; /* adjust to 0..2pi rad */
- lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/
- lon -= ONEPI; /* adjust back to -pi..pi rad */
- return( lon );
-}
diff --git a/src/3rdparty/proj/bch2bps.c b/src/3rdparty/proj/bch2bps.c
deleted file mode 100644
index 68a4737d..00000000
--- a/src/3rdparty/proj/bch2bps.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* convert bivariate w Chebyshev series to w Power series */
-#include <projects.h>
-/* basic support procedures */
- static void /* clear vector to zero */
-clear(projUV *p, int n) { static const projUV c = {0., 0.}; while (n--) *p++ = c; }
- static void /* clear matrix rows to zero */
-bclear(projUV **p, int n, int m) { while (n--) clear(*p++, m); }
- static void /* move vector */
-bmove(projUV *a, projUV *b, int n) { while (n--) *a++ = *b++; }
- static void /* a <- m * b - c */
-submop(projUV *a, double m, projUV *b, projUV *c, int n) {
- while (n--) {
- a->u = m * b->u - c->u;
- a++->v = m * b++->v - c++->v;
- }
-}
- static void /* a <- b - c */
-subop(projUV *a, projUV *b, projUV *c, int n) {
- while (n--) {
- a->u = b->u - c->u;
- a++->v = b++->v - c++->v;
- }
-}
- static void /* multiply vector a by scalar m */
-dmult(projUV *a, double m, int n) { while(n--) { a->u *= m; a->v *= m; ++a; } }
- static void /* row adjust a[] <- a[] - m * b[] */
-dadd(projUV *a, projUV *b, double m, int n) {
- while(n--) {
- a->u -= m * b->u;
- a++->v -= m * b++->v;
- }
-}
- static void /* convert row to pover series */
-rows(projUV *c, projUV *d, int n) {
- projUV sv, *dd;
- int j, k;
-
- dd = (projUV *)vector1(n-1, sizeof(projUV));
- sv.u = sv.v = 0.;
- for (j = 0; j < n; ++j) d[j] = dd[j] = sv;
- d[0] = c[n-1];
- for (j = n-2; j >= 1; --j) {
- for (k = n-j; k >= 1; --k) {
- sv = d[k];
- d[k].u = 2. * d[k-1].u - dd[k].u;
- d[k].v = 2. * d[k-1].v - dd[k].v;
- dd[k] = sv;
- }
- sv = d[0];
- d[0].u = -dd[0].u + c[j].u;
- d[0].v = -dd[0].v + c[j].v;
- dd[0] = sv;
- }
- for (j = n-1; j >= 1; --j) {
- d[j].u = d[j-1].u - dd[j].u;
- d[j].v = d[j-1].v - dd[j].v;
- }
- d[0].u = -dd[0].u + .5 * c[0].u;
- d[0].v = -dd[0].v + .5 * c[0].v;
- pj_dalloc(dd);
-}
- static void /* convert columns to power series */
-cols(projUV **c, projUV **d, int nu, int nv) {
- projUV *sv, **dd;
- int j, k;
-
- dd = (projUV **)vector2(nu, nv, sizeof(projUV));
- sv = (projUV *)vector1(nv, sizeof(projUV));
- bclear(d, nu, nv);
- bclear(dd, nu, nv);
- bmove(d[0], c[nu-1], nv);
- for (j = nu-2; j >= 1; --j) {
- for (k = nu-j; k >= 1; --k) {
- bmove(sv, d[k], nv);
- submop(d[k], 2., d[k-1], dd[k], nv);
- bmove(dd[k], sv, nv);
- }
- bmove(sv, d[0], nv);
- subop(d[0], c[j], dd[0], nv);
- bmove(dd[0], sv, nv);
- }
- for (j = nu-1; j >= 1; --j)
- subop(d[j], d[j-1], dd[j], nv);
- submop(d[0], .5, c[0], dd[0], nv);
- freev2((void **) dd, nu);
- pj_dalloc(sv);
-}
- static void /* row adjust for range -1 to 1 to a to b */
-rowshft(double a, double b, projUV *d, int n) {
- int k, j;
- double fac, cnst;
-
- cnst = 2. / (b - a);
- fac = cnst;
- for (j = 1; j < n; ++j) {
- d[j].u *= fac;
- d[j].v *= fac;
- fac *= cnst;
- }
- cnst = .5 * (a + b);
- for (j = 0; j <= n-2; ++j)
- for (k = n - 2; k >= j; --k) {
- d[k].u -= cnst * d[k+1].u;
- d[k].v -= cnst * d[k+1].v;
- }
-}
- static void /* column adjust for range -1 to 1 to a to b */
-colshft(double a, double b, projUV **d, int n, int m) {
- int k, j;
- double fac, cnst;
-
- cnst = 2. / (b - a);
- fac = cnst;
- for (j = 1; j < n; ++j) {
- dmult(d[j], fac, m);
- fac *= cnst;
- }
- cnst = .5 * (a + b);
- for (j = 0; j <= n-2; ++j)
- for (k = n - 2; k >= j; --k)
- dadd(d[k], d[k+1], cnst, m);
-}
- int /* entry point */
-bch2bps(projUV a, projUV b, projUV **c, int nu, int nv) {
- projUV **d;
- int i;
-
- if (nu < 1 || nv < 1 || !(d = (projUV **)vector2(nu, nv, sizeof(projUV))))
- return 0;
- /* do rows to power series */
- for (i = 0; i < nu; ++i) {
- rows(c[i], d[i], nv);
- rowshft(a.v, b.v, d[i], nv);
- }
- /* do columns to power series */
- cols(d, c, nu, nv);
- colshft(a.u, b.u, c, nu, nv);
- freev2((void **) d, nu);
- return 1;
-}
diff --git a/src/3rdparty/proj/bchgen.c b/src/3rdparty/proj/bchgen.c
deleted file mode 100644
index fe2ffe6c..00000000
--- a/src/3rdparty/proj/bchgen.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* generate double bivariate Chebychev polynomial */
-#include <projects.h>
- int
-bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) {
- int i, j, k;
- projUV arg, *t, bma, bpa, *c;
- double d, fac;
-
- bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v);
- bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v);
- for ( i = 0; i < nu; ++i) {
- arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u;
- for ( j = 0; j < nv; ++j) {
- arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v;
- f[i][j] = (*func)(arg);
- if ((f[i][j]).u == HUGE_VAL)
- return(1);
- }
- }
- if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1;
- fac = 2. / nu;
- for ( j = 0; j < nv ; ++j) {
- for ( i = 0; i < nu; ++i) {
- arg.u = arg.v = 0.;
- for (k = 0; k < nu; ++k) {
- d = cos(PI * i * (k + .5) / nu);
- arg.u += f[k][j].u * d;
- arg.v += f[k][j].v * d;
- }
- arg.u *= fac;
- arg.v *= fac;
- c[i] = arg;
- }
- for (i = 0; i < nu; ++i)
- f[i][j] = c[i];
- }
- pj_dalloc(c);
- if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1;
- fac = 2. / nv;
- for ( i = 0; i < nu; ++i) {
- t = f[i];
- for (j = 0; j < nv; ++j) {
- arg.u = arg.v = 0.;
- for (k = 0; k < nv; ++k) {
- d = cos(PI * j * (k + .5) / nv);
- arg.u += t[k].u * d;
- arg.v += t[k].v * d;
- }
- arg.u *= fac;
- arg.v *= fac;
- c[j] = arg;
- }
- f[i] = c;
- c = t;
- }
- pj_dalloc(c);
- return(0);
-}
diff --git a/src/3rdparty/proj/biveval.c b/src/3rdparty/proj/biveval.c
deleted file mode 100644
index 40f2af41..00000000
--- a/src/3rdparty/proj/biveval.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* procedures for evaluating Tseries */
-# include <projects.h>
-# define NEAR_ONE 1.00001
-static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) {
- double d=0, dd=0, vd, vdd, tmp, *c;
- int j;
-
- for (C += n ; n-- ; --C ) {
- if (j = C->m) {
- vd = vdd = 0.;
- for (c = C->c + --j; j ; --j ) {
- vd = w2.v * (tmp = vd) - vdd + *c--;
- vdd = tmp;
- }
- d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c;
- } else
- d = w2.u * (tmp = d) - dd;
- dd = tmp;
- }
- if (j = C->m) {
- vd = vdd = 0.;
- for (c = C->c + --j; j ; --j ) {
- vd = w2.v * (tmp = vd) - vdd + *c--;
- vdd = tmp;
- }
- return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c ));
- } else
- return (w.u * d - dd);
-}
- projUV /* bivariate Chebyshev polynomial entry point */
-bcheval(projUV in, Tseries *T) {
- projUV w2, w;
- projUV out;
- /* scale to +-1 */
- w.u = ( in.u + in.u - T->a.u ) * T->b.u;
- w.v = ( in.v + in.v - T->a.v ) * T->b.v;
- if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) {
- out.u = out.v = HUGE_VAL;
- pj_errno = -36;
- } else { /* double evaluation */
- w2.u = w.u + w.u;
- w2.v = w.v + w.v;
- out.u = ceval(T->cu, T->mu, w, w2);
- out.v = ceval(T->cv, T->mv, w, w2);
- }
- return out;
-}
- projUV /* bivariate power polynomial entry point */
-bpseval(projUV in, Tseries *T) {
- projUV out;
- double *c, row;
- int i, m;
-
- out.u = out.v = 0.;
- for (i = T->mu; i >= 0; --i) {
- row = 0.;
- if (m = T->cu[i].m) {
- c = T->cu[i].c + m;
- while (m--)
- row = *--c + in.v * row;
- }
- out.u = row + in.u * out.u;
- }
- for (i = T->mv; i >= 0; --i) {
- row = 0.;
- if (m = T->cv[i].m) {
- c = T->cv[i].c + m;
- while (m--)
- row = *--c + in.v * row;
- }
- out.v = row + in.u * out.v;
- }
- return out;
-}
-
-projUV /* general entry point selecting evaluation mode */
-biveval(projUV in, Tseries *T) {
-
- if (T->power) {
- return bpseval(in, T);
- } else {
- return bcheval(in, T);
- }
-}
-
diff --git a/src/3rdparty/proj/cs2cs.c b/src/3rdparty/proj/cs2cs.c
deleted file mode 100644
index f545675a..00000000
--- a/src/3rdparty/proj/cs2cs.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/******************************************************************************
- * $Id: cs2cs.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Mainline program sort of like ``proj'' for converting between
- * two coordinate systems.
- * Author: Frank Warmerdam, warmerda@home.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#include "projects.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-#include "emess.h"
-
-#define MAX_LINE 1000
-#define MAX_PARGS 100
-
-static projPJ fromProj, toProj;
-
-static int
-reversein = 0, /* != 0 reverse input arguments */
-reverseout = 0, /* != 0 reverse output arguments */
-echoin = 0, /* echo input data to output line */
-tag = '#'; /* beginning of line tag character */
- static char
-*oform = (char *)0, /* output format for x-y or decimal degrees */
-*oterr = "*\t*", /* output line for unprojectable input */
-*usage =
-"%s\nusage: %s [ -eEfIlrstvwW [args] ] [ +opts[=arg] ]\n"
-" [+to [+opts[=arg] [ files ]\n";
-
-static struct FACTORS facs;
-static double (*informat)(const char *,
- char **); /* input data deformatter function */
-
-
-/************************************************************************/
-/* process() */
-/* */
-/* File processing function. */
-/************************************************************************/
-static void process(FILE *fid)
-
-{
- char line[MAX_LINE+3], *s, pline[40];
- projUV data;
-
- for (;;) {
- double z;
-
- ++emess_dat.File_line;
- if (!(s = fgets(line, MAX_LINE, fid)))
- break;
- if (!strchr(s, '\n')) { /* overlong line */
- int c;
- (void)strcat(s, "\n");
- /* gobble up to newline */
- while ((c = fgetc(fid)) != EOF && c != '\n') ;
- }
- if (*s == tag) {
- fputs(line, stdout);
- continue;
- }
-
- if (reversein) {
- data.v = (*informat)(s, &s);
- data.u = (*informat)(s, &s);
- } else {
- data.u = (*informat)(s, &s);
- data.v = (*informat)(s, &s);
- }
-
- z = strtod( s, &s );
-
- if (data.v == HUGE_VAL)
- data.u = HUGE_VAL;
-
- if (!*s && (s > line)) --s; /* assumed we gobbled \n */
-
- if ( echoin) {
- int t;
- t = *s;
- *s = '\0';
- (void)fputs(line, stdout);
- *s = t;
- putchar('\t');
- }
-
- if (data.u != HUGE_VAL) {
- if( pj_transform( fromProj, toProj, 1, 0,
- &(data.u), &(data.v), &z ) != 0 )
- {
- data.u = HUGE_VAL;
- data.v = HUGE_VAL;
- }
- }
-
- if (data.u == HUGE_VAL) /* error output */
- fputs(oterr, stdout);
-
- else if (pj_is_latlong(toProj) && !oform) { /*ascii DMS output */
- if (reverseout) {
- fputs(rtodms(pline, data.v, 'N', 'S'), stdout);
- putchar('\t');
- fputs(rtodms(pline, data.u, 'E', 'W'), stdout);
- } else {
- fputs(rtodms(pline, data.u, 'E', 'W'), stdout);
- putchar('\t');
- fputs(rtodms(pline, data.v, 'N', 'S'), stdout);
- }
-
- } else { /* x-y or decimal degree ascii output */
- if ( pj_is_latlong(toProj) ) {
- data.v *= RAD_TO_DEG;
- data.u *= RAD_TO_DEG;
- }
- if (reverseout) {
- printf(oform,data.v); putchar('\t');
- printf(oform,data.u);
- } else {
- printf(oform,data.u); putchar('\t');
- printf(oform,data.v);
- }
- }
-
- putchar(' ');
- if( oform != NULL )
- printf( oform, z );
- else
- printf( "%.3f", z );
- if( s )
- printf( "%s", s );
- else
- printf( "\n" );
- }
-}
-
-/************************************************************************/
-/* main() */
-/************************************************************************/
-
-int main(int argc, char **argv)
-{
- char *arg, **eargv = argv, *from_argv[MAX_PARGS], *to_argv[MAX_PARGS],
- **iargv = argv;
- FILE *fid;
- int from_argc=0, to_argc=0, iargc = argc, eargc = 0, c, mon = 0;
- int have_to_flag = 0, inverse = 0, i;
-
- if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR))
- ++emess_dat.Prog_name;
- else emess_dat.Prog_name = *argv;
- inverse = ! strncmp(emess_dat.Prog_name, "inv", 3);
- if (argc <= 1 ) {
- (void)fprintf(stderr, usage, pj_get_release(), emess_dat.Prog_name);
- exit (0);
- }
- /* process run line arguments */
- while (--argc > 0) { /* collect run line arguments */
- if(**++argv == '-') for(arg = *argv;;) {
- switch(*++arg) {
- case '\0': /* position of "stdin" */
- if (arg[-1] == '-') eargv[eargc++] = "-";
- break;
- case 'v': /* monitor dump of initialization */
- mon = 1;
- continue;
- case 'I': /* alt. method to spec inverse */
- inverse = 1;
- continue;
- case 'E': /* echo ascii input to ascii output */
- echoin = 1;
- continue;
- case 't': /* set col. one char */
- if (arg[1]) tag = *++arg;
- else emess(1,"missing -t col. 1 tag");
- continue;
- case 'l': /* list projections, ellipses or units */
- if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') {
- /* list projections */
- struct PJ_LIST *lp;
- int do_long = arg[1] == 'P', c;
- char *str;
-
- for (lp = pj_get_list_ref() ; lp->id ; ++lp) {
- (void)printf("%s : ", lp->id);
- if (do_long) /* possibly multiline description */
- (void)puts(*lp->descr);
- else { /* first line, only */
- str = *lp->descr;
- while ((c = *str++) && c != '\n')
- putchar(c);
- putchar('\n');
- }
- }
- } else if (arg[1] == '=') { /* list projection 'descr' */
- struct PJ_LIST *lp;
-
- arg += 2;
- for (lp = pj_get_list_ref() ; lp->id ; ++lp)
- if (!strcmp(lp->id, arg)) {
- (void)printf("%9s : %s\n", lp->id, *lp->descr);
- break;
- }
- } else if (arg[1] == 'e') { /* list ellipses */
- struct PJ_ELLPS *le;
-
- for (le = pj_get_ellps_ref(); le->id ; ++le)
- (void)printf("%9s %-16s %-16s %s\n",
- le->id, le->major, le->ell, le->name);
- } else if (arg[1] == 'u') { /* list units */
- struct PJ_UNITS *lu;
-
- for (lu = pj_get_units_ref(); lu->id ; ++lu)
- (void)printf("%12s %-20s %s\n",
- lu->id, lu->to_meter, lu->name);
- } else if (arg[1] == 'd') { /* list datums */
- struct PJ_DATUMS *ld;
-
- printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" );
- for (ld = pj_get_datums_ref(); ld->id ; ++ld)
- {
- printf("%12s %-12s %-30s\n",
- ld->id, ld->ellipse_id, ld->defn);
- if( ld->comments != NULL && strlen(ld->comments) > 0 )
- printf( "%25s %s\n", " ", ld->comments );
- }
- } else if( arg[1] == 'm') { /* list prime meridians */
- struct PJ_PRIME_MERIDIANS *lpm;
-
- for (lpm = pj_get_prime_meridians_ref(); lpm->id ; ++lpm)
- (void)printf("%12s %-30s\n",
- lpm->id, lpm->defn);
- } else
- emess(1,"invalid list option: l%c",arg[1]);
- exit(0);
- continue; /* artificial */
- case 'e': /* error line alternative */
- if (--argc <= 0)
- noargument:
- emess(1,"missing argument for -%c",*arg);
- oterr = *++argv;
- continue;
- case 'W': /* specify seconds precision */
- case 'w': /* -W for constant field width */
- if ((c = arg[1]) != 0 && isdigit(c)) {
- set_rtodms(c - '0', *arg == 'W');
- ++arg;
- } else
- emess(1,"-W argument missing or non-digit");
- continue;
- case 'f': /* alternate output format degrees or xy */
- if (--argc <= 0) goto noargument;
- oform = *++argv;
- continue;
- case 'r': /* reverse input */
- reversein = 1;
- continue;
- case 's': /* reverse output */
- reverseout = 1;
- continue;
- default:
- emess(1, "invalid option: -%c",*arg);
- break;
- }
- break;
-
- } else if (strcmp(*argv,"+to") == 0 ) {
- have_to_flag = 1;
-
- } else if (**argv == '+') { /* + argument */
- if( have_to_flag )
- {
- if( to_argc < MAX_PARGS )
- to_argv[to_argc++] = *argv + 1;
- else
- emess(1,"overflowed + argument table");
- }
- else
- {
- if (from_argc < MAX_PARGS)
- from_argv[from_argc++] = *argv + 1;
- else
- emess(1,"overflowed + argument table");
- }
- } else /* assumed to be input file name(s) */
- eargv[eargc++] = *argv;
- }
- if (eargc == 0 ) /* if no specific files force sysin */
- eargv[eargc++] = "-";
-
- /*
- * If the user has requested inverse, then just reverse the
- * coordinate systems.
- */
- if( inverse )
- {
- int argcount;
-
- for( i = 0; i < MAX_PARGS; i++ )
- {
- char *arg;
-
- arg = from_argv[i];
- from_argv[i] = to_argv[i];
- to_argv[i] = arg;
- }
-
- argcount = from_argc;
- from_argc = to_argc;
- to_argc = argcount;
- }
-
- if (!(fromProj = pj_init(from_argc, from_argv)))
- {
- printf( "Using from definition: " );
- for( i = 0; i < from_argc; i++ )
- printf( "%s ", from_argv[i] );
- printf( "\n" );
-
- emess(3,"projection initialization failure\ncause: %s",
- pj_strerrno(pj_errno));
- }
-
- if( to_argc == 0 )
- {
- if (!(toProj = pj_latlong_from_proj( fromProj )))
- {
- printf( "Using to definition: " );
- for( i = 0; i < to_argc; i++ )
- printf( "%s ", to_argv[i] );
- printf( "\n" );
-
- emess(3,"projection initialization failure\ncause: %s",
- pj_strerrno(pj_errno));
- }
- }
- else if (!(toProj = pj_init(to_argc, to_argv)))
- {
- printf( "Using to definition: " );
- for( i = 0; i < to_argc; i++ )
- printf( "%s ", to_argv[i] );
- printf( "\n" );
-
- emess(3,"projection initialization failure\ncause: %s",
- pj_strerrno(pj_errno));
- }
-
- if (mon) {
- printf( "%c ---- From Coordinate System ----\n", tag );
- pj_pr_list(fromProj);
- printf( "%c ---- To Coordinate System ----\n", tag );
- pj_pr_list(toProj);
- }
-
- /* set input formating control */
- if( !fromProj->is_latlong )
- informat = strtod;
- else {
- informat = dmstor;
- }
-
- if( !toProj->is_latlong && !oform )
- oform = "%.2f";
-
- /* process input file list */
- for ( ; eargc-- ; ++eargv) {
- if (**eargv == '-') {
- fid = stdin;
- emess_dat.File_name = "<stdin>";
-
- } else {
- if ((fid = fopen(*eargv, "rt")) == NULL) {
- emess(-2, *eargv, "input file");
- continue;
- }
- emess_dat.File_name = *eargv;
- }
- emess_dat.File_line = 0;
- process(fid);
- fclose(fid);
- emess_dat.File_name = 0;
- }
-
- if( fromProj != NULL )
- pj_free( fromProj );
- if( toProj != NULL )
- pj_free( toProj );
-
- pj_deallocate_grids();
-
- exit(0); /* normal completion */
-}
diff --git a/src/3rdparty/proj/data.qrc b/src/3rdparty/proj/data.qrc
deleted file mode 100644
index 34763478..00000000
--- a/src/3rdparty/proj/data.qrc
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>proj_data/epsg</file>
- <file>proj_data/esri</file>
- <file>proj_data/esri.extra</file>
- <file>proj_data/GL27</file>
- <file>proj_data/IGNF</file>
- <file>proj_data/nad27</file>
- <file>proj_data/nad83</file>
- <file>proj_data/nad.lst</file>
- <file>proj_data/other.extra</file>
- <file>proj_data/proj_def.dat</file>
- <file>proj_data/world</file>
-</qresource>
-</RCC>
diff --git a/src/3rdparty/proj/dmstor.c b/src/3rdparty/proj/dmstor.c
deleted file mode 100644
index 1cc99f62..00000000
--- a/src/3rdparty/proj/dmstor.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Convert DMS string to radians */
-#include <projects.h>
-#include <string.h>
-#include <ctype.h>
-
-static double proj_strtod(char *nptr, char **endptr);
-
-/* following should be sufficient for all but the rediculous */
-#define MAX_WORK 64
- static const char
-*sym = "NnEeSsWw";
- static const double
-vm[] = {
- .0174532925199433,
- .0002908882086657216,
- .0000048481368110953599
-};
- double
-dmstor(const char *is, char **rs) {
- int sign, n, nl;
- char *p, *s, work[MAX_WORK];
- double v, tv;
-
- if (rs)
- *rs = (char *)is;
- /* copy sting into work space */
- while (isspace(sign = *is)) ++is;
- for (n = MAX_WORK, s = work, p = (char *)is; isgraph(*p) && --n ; )
- *s++ = *p++;
- *s = '\0';
- /* it is possible that a really odd input (like lots of leading
- zeros) could be truncated in copying into work. But ... */
- sign = *(s = work);
- if (sign == '+' || sign == '-') s++;
- else sign = '+';
- for (v = 0., nl = 0 ; nl < 3 ; nl = n + 1 ) {
- if (!(isdigit(*s) || *s == '.')) break;
- if ((tv = proj_strtod(s, &s)) == HUGE_VAL)
- return tv;
- switch (*s) {
- case 'D': case 'd':
- n = 0; break;
- case '\'':
- n = 1; break;
- case '"':
- n = 2; break;
- case 'r': case 'R':
- if (nl) {
- pj_errno = -16;
- return HUGE_VAL;
- }
- ++s;
- v = tv;
- goto skip;
- default:
- v += tv * vm[nl];
- skip: n = 4;
- continue;
- }
- if (n < nl) {
- pj_errno = -16;
- return HUGE_VAL;
- }
- v += tv * vm[n];
- ++s;
- }
- /* postfix sign */
- if (*s && (p = strchr(sym, *s))) {
- sign = (p - sym) >= 4 ? '-' : '+';
- ++s;
- }
- if (sign == '-')
- v = -v;
- if (rs) /* return point of next char after valid string */
- *rs = (char *)is + (s - work);
- return v;
-}
-
-static double
-proj_strtod(char *nptr, char **endptr)
-
-{
- char c, *cp = nptr;
- double result;
-
- /*
- * Scan for characters which cause problems with VC++ strtod()
- */
- while ((c = *cp) != '\0') {
- if (c == 'd' || c == 'D') {
-
- /*
- * Found one, so NUL it out, call strtod(),
- * then restore it and return
- */
- *cp = '\0';
- result = strtod(nptr, endptr);
- *cp = c;
- return result;
- }
- ++cp;
- }
-
- /* no offending characters, just handle normally */
-
- return strtod(nptr, endptr);
-}
-
diff --git a/src/3rdparty/proj/emess.c b/src/3rdparty/proj/emess.c
deleted file mode 100644
index 0c7f6c9e..00000000
--- a/src/3rdparty/proj/emess.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Error message processing */
-
-#ifdef _MSC_VER
-# ifndef _CRT_SECURE_NO_DEPRECATE
-# define _CRT_SECURE_NO_DEPRECATE
-# endif
-# ifndef _CRT_NONSTDC_NO_DEPRECATE
-# define _CRT_NONSTDC_NO_DEPRECATE
-# endif
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <string.h>
-#include <proj_api.h>
-#define EMESS_ROUTINE
-#include "emess.h"
- void
-emess(int code, char *fmt, ...) {
- va_list args;
-
- va_start(args, fmt);
- /* prefix program name, if given */
- if (fmt != NULL)
- (void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(),
- emess_dat.Prog_name);
- /* print file name and line, if given */
- if (emess_dat.File_name != NULL && *emess_dat.File_name) {
- (void)fprintf(stderr,"while processing file: %s", emess_dat.File_name);
- if (emess_dat.File_line > 0)
- (void)fprintf(stderr,", line %d\n", emess_dat.File_line);
- else
- (void)fputc('\n', stderr);
- } else
- putc('\n', stderr);
- /* if |code|==2, print errno code data */
- if (code == 2 || code == -2)
- (void)fprintf(stderr, "Sys errno: %d: %s\n",
- errno,
-#ifdef HAVE_STRERROR
- strerror(errno));
-#else
- "<system mess. texts unavail.>");
-#endif
- /* post remainder of call data */
- (void)vfprintf(stderr,fmt,args);
- va_end(args);
- /* die if code positive */
- if (code > 0) {
- (void)fputs("\nprogram abnormally terminated\n", stderr);
- exit(code);
- }
- else
- putc('\n', stderr);
-}
diff --git a/src/3rdparty/proj/emess.h b/src/3rdparty/proj/emess.h
deleted file mode 100644
index 6724a065..00000000
--- a/src/3rdparty/proj/emess.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Error message processing header file */
-#ifndef EMESS_H
-#define EMESS_H
-
-#ifndef lint
-static char EMESS_H_ID[] = "@(#)emess.h 4.1 93/03/08 GIE REL";
-#endif
-
-struct EMESS {
- char *File_name, /* input file name */
- *Prog_name; /* name of program */
- int File_line; /* approximate line read
- where error occured */
-};
-
-#ifdef EMESS_ROUTINE /* use type */
-/* for emess procedure */
-struct EMESS emess_dat = { (char *)0, (char *)0, 0 };
-
-#ifdef sun /* Archaic SunOs 4.1.1, etc. */
-extern char *sys_errlist[];
-#define strerror(n) (sys_errlist[n])
-#endif
-
-#else /* for for calling procedures */
-
-extern struct EMESS emess_dat;
-void emess(int, char *, ...);
-
-#endif /* use type */
-
-#endif /* end EMESS_H */
diff --git a/src/3rdparty/proj/gen_cheb.c b/src/3rdparty/proj/gen_cheb.c
deleted file mode 100644
index 82cd926a..00000000
--- a/src/3rdparty/proj/gen_cheb.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* generates 'T' option output */
-#define PJ_LIB__
-#include "projects.h"
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include "emess.h"
-#ifndef COEF_LINE_MAX
-#define COEF_LINE_MAX 60
-#endif
- void
-gen_cheb(int inverse, projUV (*proj)(projUV), char *s, PJ *P, int iargc, char **iargv) {
- int NU = 15, NV = 15, i, res = -1, errin = 0, pwr;
- char *arg, fmt[15];
- projUV low, upp, resid;
- Tseries *F;
- extern void p_series(Tseries *, FILE *, char *);
- double (*input)(const char *, char **);
-
- input = inverse ? strtod : dmstor;
- if (*s) low.u = input(s, &s); else ++errin;
- if (*s == ',') upp.u = input(s+1, &s); else ++errin;
- if (*s == ',') low.v = input(s+1, &s); else ++errin;
- if (*s == ',') upp.v = input(s+1, &s); else ++errin;
- if (errin)
- emess(16,"null or absent -T parameters");
- if (*s == ',') if (*++s != ',') res = strtol(s, &s, 10);
- if (*s == ',') if (*++s != ',') NU = strtol(s, &s, 10);
- if (*s == ',') if (*++s != ',') NV = strtol(s, &s, 10);
- pwr = s && *s && !strcmp(s, ",P");
- (void)printf("#proj_%s\n# run-line:\n",
- pwr ? "Power" : "Chebyshev");
- if (iargc > 0) { /* proj execution audit trail */
- int n = 0, L;
-
- for( i = 0 ; iargc ; --iargc) {
- arg = *iargv++;
- if (*arg != '+') {
- if (!n) { putchar('#'); ++n; }
- (void)printf(" %s%n",arg, &L);
- if ((n += L) > 50) { putchar('\n'); n = 0; }
- }
- }
- if (n) putchar('\n');
- }
- (void)printf("# projection parameters\n");
- pj_pr_list(P);
- if (low.u == upp.u || low.v >= upp.v)
- emess(16,"approx. argument range error");
- if (low.u > upp.u)
- low.u -= TWOPI;
- if (NU < 2 || NV < 2)
- emess(16,"approx. work dimensions (%d %d) too small",NU,NV);
- if (!(F = mk_cheby(low, upp, pow(10., (double)res)*.5, &resid, proj,
- NU, NV, pwr)))
- emess(16,"generation of approx failed\nreason: %s\n",
- pj_strerrno(errno));
- (void)printf("%c,%.12g,%.12g,%.12g,%.12g,%.12g\n",inverse?'I':'F',
- P->lam0*RAD_TO_DEG,
- low.u*(inverse?1.:RAD_TO_DEG),upp.u*(inverse?1.:RAD_TO_DEG),
- low.v*(inverse?1.:RAD_TO_DEG),upp.v*(inverse?1.:RAD_TO_DEG));
- if (pwr)
- strcpy(fmt, "%.15g");
- else if (res <= 0)
- (void)sprintf(fmt,"%%.%df",-res+1);
- else
- (void)strcpy(fmt,"%.0f");
- p_series(F, stdout, fmt);
- (void)printf("# |u,v| sums %g %g\n#end_proj_%s\n",
- resid.u, resid.v, pwr ? "Power" : "Chebyshev");
-}
diff --git a/src/3rdparty/proj/geocent.c b/src/3rdparty/proj/geocent.c
deleted file mode 100644
index d95a778b..00000000
--- a/src/3rdparty/proj/geocent.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/***************************************************************************/
-/* RSC IDENTIFIER: GEOCENTRIC
- *
- * ABSTRACT
- *
- * This component provides conversions between Geodetic coordinates (latitude,
- * longitude in radians and height in meters) and Geocentric coordinates
- * (X, Y, Z) in meters.
- *
- * ERROR HANDLING
- *
- * This component checks parameters for valid values. If an invalid value
- * is found, the error code is combined with the current error code using
- * the bitwise or. This combining allows multiple error codes to be
- * returned. The possible error codes are:
- *
- * GEOCENT_NO_ERROR : No errors occurred in function
- * GEOCENT_LAT_ERROR : Latitude out of valid range
- * (-90 to 90 degrees)
- * GEOCENT_LON_ERROR : Longitude out of valid range
- * (-180 to 360 degrees)
- * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero
- * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero
- * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis
- *
- *
- * REUSE NOTES
- *
- * GEOCENTRIC is intended for reuse by any application that performs
- * coordinate conversions between geodetic coordinates and geocentric
- * coordinates.
- *
- *
- * REFERENCES
- *
- * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion,
- * Ralph Toms, February 1996 UCRL-JC-123138.
- *
- * Further information on GEOCENTRIC can be found in the Reuse Manual.
- *
- * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center
- * Geospatial Information Division
- * 7701 Telegraph Road
- * Alexandria, VA 22310-3864
- *
- * LICENSES
- *
- * None apply to this component.
- *
- * RESTRICTIONS
- *
- * GEOCENTRIC has no restrictions.
- *
- * ENVIRONMENT
- *
- * GEOCENTRIC was tested and certified in the following environments:
- *
- * 1. Solaris 2.5 with GCC version 2.8.1
- * 2. Windows 95 with MS Visual C++ version 6
- *
- * MODIFICATIONS
- *
- * Date Description
- * ---- -----------
- * 25-02-97 Original Code
- *
- */
-
-
-/***************************************************************************/
-/*
- * INCLUDES
- */
-#include <math.h>
-#include "geocent.h"
-/*
- * math.h - is needed for calls to sin, cos, tan and sqrt.
- * geocent.h - is needed for Error codes and prototype error checking.
- */
-
-
-/***************************************************************************/
-/*
- * DEFINES
- */
-#define PI 3.14159265358979323e0
-#define PI_OVER_2 (PI / 2.0e0)
-#define FALSE 0
-#define TRUE 1
-#define COS_67P5 0.38268343236508977 /* cosine of 67.5 degrees */
-#define AD_C 1.0026000 /* Toms region 1 constant */
-
-
-/***************************************************************************/
-/*
- * FUNCTIONS
- */
-
-
-long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b)
-
-{ /* BEGIN Set_Geocentric_Parameters */
-/*
- * The function Set_Geocentric_Parameters receives the ellipsoid parameters
- * as inputs and sets the corresponding state variables.
- *
- * a : Semi-major axis, in meters. (input)
- * b : Semi-minor axis, in meters. (input)
- */
- long Error_Code = GEOCENT_NO_ERROR;
-
- if (a <= 0.0)
- Error_Code |= GEOCENT_A_ERROR;
- if (b <= 0.0)
- Error_Code |= GEOCENT_B_ERROR;
- if (a < b)
- Error_Code |= GEOCENT_A_LESS_B_ERROR;
- if (!Error_Code)
- {
- gi->Geocent_a = a;
- gi->Geocent_b = b;
- gi->Geocent_a2 = a * a;
- gi->Geocent_b2 = b * b;
- gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2;
- gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2;
- }
- return (Error_Code);
-} /* END OF Set_Geocentric_Parameters */
-
-
-void pj_Get_Geocentric_Parameters (GeocentricInfo *gi,
- double *a,
- double *b)
-{ /* BEGIN Get_Geocentric_Parameters */
-/*
- * The function Get_Geocentric_Parameters returns the ellipsoid parameters
- * to be used in geocentric coordinate conversions.
- *
- * a : Semi-major axis, in meters. (output)
- * b : Semi-minor axis, in meters. (output)
- */
-
- *a = gi->Geocent_a;
- *b = gi->Geocent_b;
-} /* END OF Get_Geocentric_Parameters */
-
-
-long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi,
- double Latitude,
- double Longitude,
- double Height,
- double *X,
- double *Y,
- double *Z)
-{ /* BEGIN Convert_Geodetic_To_Geocentric */
-/*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- * Latitude : Geodetic latitude in radians (input)
- * Longitude : Geodetic longitude in radians (input)
- * Height : Geodetic height, in meters (input)
- * X : Calculated Geocentric X coordinate, in meters (output)
- * Y : Calculated Geocentric Y coordinate, in meters (output)
- * Z : Calculated Geocentric Z coordinate, in meters (output)
- *
- */
- long Error_Code = GEOCENT_NO_ERROR;
- double Rn; /* Earth radius at location */
- double Sin_Lat; /* sin(Latitude) */
- double Sin2_Lat; /* Square of sin(Latitude) */
- double Cos_Lat; /* cos(Latitude) */
-
- /*
- ** Don't blow up if Latitude is just a little out of the value
- ** range as it may just be a rounding issue. Also removed longitude
- ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001.
- */
- if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 )
- Latitude = -PI_OVER_2;
- else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 )
- Latitude = PI_OVER_2;
- else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2))
- { /* Latitude out of range */
- Error_Code |= GEOCENT_LAT_ERROR;
- }
-
- if (!Error_Code)
- { /* no errors */
- if (Longitude > PI)
- Longitude -= (2*PI);
- Sin_Lat = sin(Latitude);
- Cos_Lat = cos(Latitude);
- Sin2_Lat = Sin_Lat * Sin_Lat;
- Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat));
- *X = (Rn + Height) * Cos_Lat * cos(Longitude);
- *Y = (Rn + Height) * Cos_Lat * sin(Longitude);
- *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat;
-
- }
- return (Error_Code);
-} /* END OF Convert_Geodetic_To_Geocentric */
-
-/*
- * The function Convert_Geocentric_To_Geodetic converts geocentric
- * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude,
- * and height), according to the current ellipsoid parameters.
- *
- * X : Geocentric X coordinate, in meters. (input)
- * Y : Geocentric Y coordinate, in meters. (input)
- * Z : Geocentric Z coordinate, in meters. (input)
- * Latitude : Calculated latitude value in radians. (output)
- * Longitude : Calculated longitude value in radians. (output)
- * Height : Calculated height value, in meters. (output)
- */
-
-#define USE_ITERATIVE_METHOD
-
-void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
- double X,
- double Y,
- double Z,
- double *Latitude,
- double *Longitude,
- double *Height)
-{ /* BEGIN Convert_Geocentric_To_Geodetic */
-#if !defined(USE_ITERATIVE_METHOD)
-/*
- * The method used here is derived from 'An Improved Algorithm for
- * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996
- */
-
-/* Note: Variable names follow the notation used in Toms, Feb 1996 */
-
- double W; /* distance from Z axis */
- double W2; /* square of distance from Z axis */
- double T0; /* initial estimate of vertical component */
- double T1; /* corrected estimate of vertical component */
- double S0; /* initial estimate of horizontal component */
- double S1; /* corrected estimate of horizontal component */
- double Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */
- double Sin3_B0; /* cube of sin(B0) */
- double Cos_B0; /* cos(B0) */
- double Sin_p1; /* sin(phi1), phi1 is estimated latitude */
- double Cos_p1; /* cos(phi1) */
- double Rn; /* Earth radius at location */
- double Sum; /* numerator of cos(phi1) */
- int At_Pole; /* indicates location is in polar region */
-
- At_Pole = FALSE;
- if (X != 0.0)
- {
- *Longitude = atan2(Y,X);
- }
- else
- {
- if (Y > 0)
- {
- *Longitude = PI_OVER_2;
- }
- else if (Y < 0)
- {
- *Longitude = -PI_OVER_2;
- }
- else
- {
- At_Pole = TRUE;
- *Longitude = 0.0;
- if (Z > 0.0)
- { /* north pole */
- *Latitude = PI_OVER_2;
- }
- else if (Z < 0.0)
- { /* south pole */
- *Latitude = -PI_OVER_2;
- }
- else
- { /* center of earth */
- *Latitude = PI_OVER_2;
- *Height = -Geocent_b;
- return;
- }
- }
- }
- W2 = X*X + Y*Y;
- W = sqrt(W2);
- T0 = Z * AD_C;
- S0 = sqrt(T0 * T0 + W2);
- Sin_B0 = T0 / S0;
- Cos_B0 = W / S0;
- Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;
- T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0;
- Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0;
- S1 = sqrt(T1*T1 + Sum * Sum);
- Sin_p1 = T1 / S1;
- Cos_p1 = Sum / S1;
- Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1);
- if (Cos_p1 >= COS_67P5)
- {
- *Height = W / Cos_p1 - Rn;
- }
- else if (Cos_p1 <= -COS_67P5)
- {
- *Height = W / -Cos_p1 - Rn;
- }
- else
- {
- *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0);
- }
- if (At_Pole == FALSE)
- {
- *Latitude = atan(Sin_p1 / Cos_p1);
- }
-#else /* defined(USE_ITERATIVE_METHOD) */
-/*
-* Reference...
-* ============
-* Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für
-* das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover
-* Nr. 137, p. 130-131.
-
-* Programmed by GGA- Leibniz-Institue of Applied Geophysics
-* Stilleweg 2
-* D-30655 Hannover
-* Federal Republic of Germany
-* Internet: www.gga-hannover.de
-*
-* Hannover, March 1999, April 2004.
-* see also: comments in statements
-* remarks:
-* Mathematically exact and because of symmetry of rotation-ellipsoid,
-* each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and
-* (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even
-* four solutions, every two symmetrical to the semi-minor axis.
-* Here Height1 and Height2 have at least a difference in order of
-* radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b);
-* (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or
-* (0.,225.,-(2a+100.))).
-* The algorithm always computes (Latitude,Longitude) with smallest |Height|.
-* For normal computations, that means |Height|<10000.m, algorithm normally
-* converges after to 2-3 steps!!!
-* But if |Height| has the amount of length of ellipsoid's axis
-* (e.g. -6300000.m), algorithm needs about 15 steps.
-*/
-
-/* local defintions and variables */
-/* end-criterium of loop, accuracy of sin(Latitude) */
-#define genau 1.E-12
-#define genau2 (genau*genau)
-#define maxiter 30
-
- double P; /* distance between semi-minor axis and location */
- double RR; /* distance between center and location */
- double CT; /* sin of geocentric latitude */
- double ST; /* cos of geocentric latitude */
- double RX;
- double RK;
- double RN; /* Earth radius at location */
- double CPHI0; /* cos of start or old geodetic latitude in iterations */
- double SPHI0; /* sin of start or old geodetic latitude in iterations */
- double CPHI; /* cos of searched geodetic latitude */
- double SPHI; /* sin of searched geodetic latitude */
- double SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
- int At_Pole; /* indicates location is in polar region */
- int iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
-
- At_Pole = FALSE;
- P = sqrt(X*X+Y*Y);
- RR = sqrt(X*X+Y*Y+Z*Z);
-
-/* special cases for latitude and longitude */
- if (P/gi->Geocent_a < genau) {
-
-/* special case, if P=0. (X=0., Y=0.) */
- At_Pole = TRUE;
- *Longitude = 0.;
-
-/* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
- * of ellipsoid (=center of mass), Latitude becomes PI/2 */
- if (RR/gi->Geocent_a < genau) {
- *Latitude = PI_OVER_2;
- *Height = -gi->Geocent_b;
- return ;
-
- }
- }
- else {
-/* ellipsoidal (geodetic) longitude
- * interval: -PI < Longitude <= +PI */
- *Longitude=atan2(Y,X);
- }
-
-/* --------------------------------------------------------------
- * Following iterative algorithm was developped by
- * "Institut für Erdmessung", University of Hannover, July 1988.
- * Internet: www.ife.uni-hannover.de
- * Iterative computation of CPHI,SPHI and Height.
- * Iteration of CPHI and SPHI to 10**-12 radian resp.
- * 2*10**-7 arcsec.
- * --------------------------------------------------------------
- */
- CT = Z/RR;
- ST = P/RR;
- RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST);
- CPHI0 = ST*(1.0-gi->Geocent_e2)*RX;
- SPHI0 = CT*RX;
- iter = 0;
-
-/* loop to find sin(Latitude) resp. Latitude
- * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
- do
- {
- iter++;
- RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0);
-
-/* ellipsoidal (geodetic) height */
- *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0);
-
- RK = gi->Geocent_e2*RN/(RN+*Height);
- RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST);
- CPHI = ST*(1.0-RK)*RX;
- SPHI = CT*RX;
- SDPHI = SPHI*CPHI0-CPHI*SPHI0;
- CPHI0 = CPHI;
- SPHI0 = SPHI;
- }
- while (SDPHI*SDPHI > genau2 && iter < maxiter);
-
-/* ellipsoidal (geodetic) latitude */
- *Latitude=atan(SPHI/fabs(CPHI));
-
- return;
-#endif /* defined(USE_ITERATIVE_METHOD) */
-} /* END OF Convert_Geocentric_To_Geodetic */
diff --git a/src/3rdparty/proj/geocent.h b/src/3rdparty/proj/geocent.h
deleted file mode 100644
index d6e90d23..00000000
--- a/src/3rdparty/proj/geocent.h
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef GEOCENT_H
-#define GEOCENT_H
-
-/***************************************************************************/
-/* RSC IDENTIFIER: GEOCENTRIC
- *
- * ABSTRACT
- *
- * This component provides conversions between Geodetic coordinates (latitude,
- * longitude in radians and height in meters) and Geocentric coordinates
- * (X, Y, Z) in meters.
- *
- * ERROR HANDLING
- *
- * This component checks parameters for valid values. If an invalid value
- * is found, the error code is combined with the current error code using
- * the bitwise or. This combining allows multiple error codes to be
- * returned. The possible error codes are:
- *
- * GEOCENT_NO_ERROR : No errors occurred in function
- * GEOCENT_LAT_ERROR : Latitude out of valid range
- * (-90 to 90 degrees)
- * GEOCENT_LON_ERROR : Longitude out of valid range
- * (-180 to 360 degrees)
- * GEOCENT_A_ERROR : Semi-major axis less than or equal to zero
- * GEOCENT_B_ERROR : Semi-minor axis less than or equal to zero
- * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis
- *
- *
- * REUSE NOTES
- *
- * GEOCENTRIC is intended for reuse by any application that performs
- * coordinate conversions between geodetic coordinates and geocentric
- * coordinates.
- *
- *
- * REFERENCES
- *
- * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion,
- * Ralph Toms, February 1996 UCRL-JC-123138.
- *
- * Further information on GEOCENTRIC can be found in the Reuse Manual.
- *
- * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center
- * Geospatial Information Division
- * 7701 Telegraph Road
- * Alexandria, VA 22310-3864
- *
- * LICENSES
- *
- * None apply to this component.
- *
- * RESTRICTIONS
- *
- * GEOCENTRIC has no restrictions.
- *
- * ENVIRONMENT
- *
- * GEOCENTRIC was tested and certified in the following environments:
- *
- * 1. Solaris 2.5 with GCC version 2.8.1
- * 2. Windows 95 with MS Visual C++ version 6
- *
- * MODIFICATIONS
- *
- * Date Description
- * ---- -----------
- *
- *
- */
-
-
-/***************************************************************************/
-/*
- * DEFINES
- */
-#define GEOCENT_NO_ERROR 0x0000
-#define GEOCENT_LAT_ERROR 0x0001
-#define GEOCENT_LON_ERROR 0x0002
-#define GEOCENT_A_ERROR 0x0004
-#define GEOCENT_B_ERROR 0x0008
-#define GEOCENT_A_LESS_B_ERROR 0x0010
-
-
-/***************************************************************************/
-/*
- * FUNCTION PROTOTYPES
- */
-
-/* ensure proper linkage to c++ programs */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct
-{
- double Geocent_a; /* Semi-major axis of ellipsoid in meters */
- double Geocent_b; /* Semi-minor axis of ellipsoid */
- double Geocent_a2; /* Square of semi-major axis */
- double Geocent_b2; /* Square of semi-minor axis */
- double Geocent_e2; /* Eccentricity squared */
- double Geocent_ep2; /* 2nd eccentricity squared */
-} GeocentricInfo;
-
-void pj_Init_Geocentric( GeocentricInfo *gi );
-long pj_Set_Geocentric_Parameters( GeocentricInfo *gi,
- double a,
- double b);
-
-/*
- * The function Set_Geocentric_Parameters receives the ellipsoid parameters
- * as inputs and sets the corresponding state variables.
- *
- * a : Semi-major axis, in meters. (input)
- * b : Semi-minor axis, in meters. (input)
- */
-
-
-void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi,
- double *a,
- double *b);
-
-/*
- * The function Get_Geocentric_Parameters returns the ellipsoid parameters
- * to be used in geocentric coordinate conversions.
- *
- * a : Semi-major axis, in meters. (output)
- * b : Semi-minor axis, in meters. (output)
- */
-
-
-long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi,
- double Latitude,
- double Longitude,
- double Height,
- double *X,
- double *Y,
- double *Z);
-/*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- * Latitude : Geodetic latitude in radians (input)
- * Longitude : Geodetic longitude in radians (input)
- * Height : Geodetic height, in meters (input)
- * X : Calculated Geocentric X coordinate, in meters. (output)
- * Y : Calculated Geocentric Y coordinate, in meters. (output)
- * Z : Calculated Geocentric Z coordinate, in meters. (output)
- *
- */
-
-
-void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
- double X,
- double Y,
- double Z,
- double *Latitude,
- double *Longitude,
- double *Height);
-/*
- * The function Convert_Geocentric_To_Geodetic converts geocentric
- * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude,
- * and height), according to the current ellipsoid parameters.
- *
- * X : Geocentric X coordinate, in meters. (input)
- * Y : Geocentric Y coordinate, in meters. (input)
- * Z : Geocentric Z coordinate, in meters. (input)
- * Latitude : Calculated latitude value in radians. (output)
- * Longitude : Calculated longitude value in radians. (output)
- * Height : Calculated height value, in meters. (output)
- */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GEOCENT_H */
diff --git a/src/3rdparty/proj/geod.c b/src/3rdparty/proj/geod.c
deleted file mode 100644
index cbe5a459..00000000
--- a/src/3rdparty/proj/geod.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/* <<<< Geodesic filter program >>>> */
-# include "projects.h"
-# include "geodesic.h"
-# include "emess.h"
-# include <ctype.h>
-# include <stdio.h>
-# include <string.h>
-
-# define MAXLINE 200
-# define MAX_PARGS 50
-# define TAB putchar('\t')
- static int
-fullout = 0, /* output full set of geodesic values */
-tag = '#', /* beginning of line tag character */
-pos_azi = 0, /* output azimuths as positive values */
-inverse = 0; /* != 0 then inverse geodesic */
- static char
-*oform = (char *)0, /* output format for decimal degrees */
-*osform = "%.3f", /* output format for S */
-pline[50], /* work string */
-*usage =
-"%s\nusage: %s [ -afFIptTwW [args] ] [ +opts[=arg] ] [ files ]\n";
- static void
-printLL(double p, double l) {
- if (oform) {
- (void)printf(oform, p * RAD_TO_DEG); TAB;
- (void)printf(oform, l * RAD_TO_DEG);
- } else {
- (void)fputs(rtodms(pline, p, 'N', 'S'),stdout); TAB;
- (void)fputs(rtodms(pline, l, 'E', 'W'),stdout);
- }
-}
- static void
-do_arc(void) {
- double az;
-
- printLL(phi2, lam2); putchar('\n');
- for (az = al12; n_alpha--; ) {
- al12 = az = adjlon(az + del_alpha);
- geod_pre();
- geod_for();
- printLL(phi2, lam2); putchar('\n');
- }
-}
- static void /* generate intermediate geodesic coordinates */
-do_geod(void) {
- double phil, laml, del_S;
-
- phil = phi2;
- laml = lam2;
- printLL(phi1, lam1); putchar('\n');
- for ( geod_S = del_S = geod_S / n_S; --n_S; geod_S += del_S) {
- geod_for();
- printLL(phi2, lam2); putchar('\n');
- }
- printLL(phil, laml); putchar('\n');
-}
- void static /* file processing function */
-process(FILE *fid) {
- char line[MAXLINE+3], *s;
-
- for (;;) {
- ++emess_dat.File_line;
- if (!(s = fgets(line, MAXLINE, fid)))
- break;
- if (!strchr(s, '\n')) { /* overlong line */
- int c;
- strcat(s, "\n");
- /* gobble up to newline */
- while ((c = fgetc(fid)) != EOF && c != '\n') ;
- }
- if (*s == tag) {
- fputs(line, stdout);
- continue;
- }
- phi1 = dmstor(s, &s);
- lam1 = dmstor(s, &s);
- if (inverse) {
- phi2 = dmstor(s, &s);
- lam2 = dmstor(s, &s);
- geod_inv();
- } else {
- al12 = dmstor(s, &s);
- geod_S = strtod(s, &s) * to_meter;
- geod_pre();
- geod_for();
- }
- if (!*s && (s > line)) --s; /* assumed we gobbled \n */
- if (pos_azi) {
- if (al12 < 0.) al12 += TWOPI;
- if (al21 < 0.) al21 += TWOPI;
- }
- if (fullout) {
- printLL(phi1, lam1); TAB;
- printLL(phi2, lam2); TAB;
- if (oform) {
- (void)printf(oform, al12 * RAD_TO_DEG); TAB;
- (void)printf(oform, al21 * RAD_TO_DEG); TAB;
- (void)printf(osform, geod_S * fr_meter);
- } else {
- (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB;
- (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB;
- (void)printf(osform, geod_S * fr_meter);
- }
- } else if (inverse)
- if (oform) {
- (void)printf(oform, al12 * RAD_TO_DEG); TAB;
- (void)printf(oform, al21 * RAD_TO_DEG); TAB;
- (void)printf(osform, geod_S * fr_meter);
- } else {
- (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB;
- (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB;
- (void)printf(osform, geod_S * fr_meter);
- }
- else {
- printLL(phi2, lam2); TAB;
- if (oform)
- (void)printf(oform, al21 * RAD_TO_DEG);
- else
- (void)fputs(rtodms(pline, al21, 0, 0), stdout);
- }
- (void)fputs(s, stdout);
- }
-}
-
-static char *pargv[MAX_PARGS];
-static int pargc = 0;
-
-int main(int argc, char **argv) {
- char *arg, **eargv = argv, *strnchr();
- FILE *fid;
- static int eargc = 0, c;
-
- if (emess_dat.Prog_name = strrchr(*argv,'/')) ++emess_dat.Prog_name;
- else emess_dat.Prog_name = *argv;
- inverse = ! strncmp(emess_dat.Prog_name, "inv", 3);
- if (argc <= 1 ) {
- (void)fprintf(stderr, usage, pj_get_release(),
- emess_dat.Prog_name);
- exit (0);
- }
- /* process run line arguments */
- while (--argc > 0) { /* collect run line arguments */
- if(**++argv == '-') for(arg = *argv;;) {
- switch(*++arg) {
- case '\0': /* position of "stdin" */
- if (arg[-1] == '-') eargv[eargc++] = "-";
- break;
- case 'a': /* output full set of values */
- fullout = 1;
- continue;
- case 'I': /* alt. inverse spec. */
- inverse = 1;
- continue;
- case 't': /* set col. one char */
- if (arg[1]) tag = *++arg;
- else emess(1,"missing -t col. 1 tag");
- continue;
- case 'W': /* specify seconds precision */
- case 'w': /* -W for constant field width */
- if ((c = arg[1]) && isdigit(c)) {
- set_rtodms(c - '0', *arg == 'W');
- ++arg;
- } else
- emess(1,"-W argument missing or non-digit");
- continue;
- case 'f': /* alternate output format degrees or xy */
- if (--argc <= 0)
-noargument: emess(1,"missing argument for -%c",*arg);
- oform = *++argv;
- continue;
- case 'F': /* alternate output format degrees or xy */
- if (--argc <= 0) goto noargument;
- osform = *++argv;
- continue;
- case 'l':
- if (!arg[1] || arg[1] == 'e') { /* list of ellipsoids */
- struct PJ_ELLPS *le;
-
- for (le=pj_get_ellps_ref(); le->id ; ++le)
- (void)printf("%9s %-16s %-16s %s\n",
- le->id, le->major, le->ell, le->name);
- } else if (arg[1] == 'u') { /* list of units */
- struct PJ_UNITS *lu;
-
- for (lu = pj_get_units_ref();lu->id ; ++lu)
- (void)printf("%12s %-20s %s\n",
- lu->id, lu->to_meter, lu->name);
- } else
- emess(1,"invalid list option: l%c",arg[1]);
- exit( 0 );
- case 'p': /* output azimuths as positive */
- pos_azi = 1;
- continue;
- default:
- emess(1, "invalid option: -%c",*arg);
- break;
- }
- break;
- } else if (**argv == '+') /* + argument */
- if (pargc < MAX_PARGS)
- pargv[pargc++] = *argv + 1;
- else
- emess(1,"overflowed + argument table");
- else /* assumed to be input file name(s) */
- eargv[eargc++] = *argv;
- }
- /* done with parameter and control input */
- geod_set(pargc, pargv); /* setup projection */
- if ((n_alpha || n_S) && eargc)
- emess(1,"files specified for arc/geodesic mode");
- if (n_alpha)
- do_arc();
- else if (n_S)
- do_geod();
- else { /* process input file list */
- if (eargc == 0) /* if no specific files force sysin */
- eargv[eargc++] = "-";
- for ( ; eargc-- ; ++eargv) {
- if (**eargv == '-') {
- fid = stdin;
- emess_dat.File_name = "<stdin>";
- } else {
- if ((fid = fopen(*eargv, "r")) == NULL) {
- emess(-2, *eargv, "input file");
- continue;
- }
- emess_dat.File_name = *eargv;
- }
- emess_dat.File_line = 0;
- process(fid);
- (void)fclose(fid);
- emess_dat.File_name = (char *)0;
- }
- }
- exit(0); /* normal completion */
-}
diff --git a/src/3rdparty/proj/geod_for.c b/src/3rdparty/proj/geod_for.c
deleted file mode 100644
index fe7c90dd..00000000
--- a/src/3rdparty/proj/geod_for.c
+++ /dev/null
@@ -1,103 +0,0 @@
-# include "projects.h"
-# include "geodesic.h"
-# define MERI_TOL 1e-9
- static double
-th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1;
- static int
-merid, signS;
- void
-geod_pre(void) {
- al12 = adjlon(al12); /* reduce to +- 0-PI */
- signS = fabs(al12) > HALFPI ? 1 : 0;
- th1 = ellipse ? atan(onef * tan(phi1)) : phi1;
- costh1 = cos(th1);
- sinth1 = sin(th1);
- if ((merid = fabs(sina12 = sin(al12)) < MERI_TOL)) {
- sina12 = 0.;
- cosa12 = fabs(al12) < HALFPI ? 1. : -1.;
- M = 0.;
- } else {
- cosa12 = cos(al12);
- M = costh1 * sina12;
- }
- N = costh1 * cosa12;
- if (ellipse) {
- if (merid) {
- c1 = 0.;
- c2 = f4;
- D = 1. - c2;
- D *= D;
- P = c2 / D;
- } else {
- c1 = geod_f * M;
- c2 = f4 * (1. - M * M);
- D = (1. - c2)*(1. - c2 - c1 * M);
- P = (1. + .5 * c1 * M) * c2 / D;
- }
- }
- if (merid) s1 = HALFPI - th1;
- else {
- s1 = (fabs(M) >= 1.) ? 0. : acos(M);
- s1 = sinth1 / sin(s1);
- s1 = (fabs(s1) >= 1.) ? 0. : acos(s1);
- }
-}
- void
-geod_for(void) {
- double d,sind,u,V,X,ds,cosds,sinds,ss,de;
-
- if (ellipse) {
- d = geod_S / (D * geod_a);
- if (signS) d = -d;
- u = 2. * (s1 - d);
- V = cos(u + d);
- X = c2 * c2 * (sind = sin(d)) * cos(d) * (2. * V * V - 1.);
- ds = d + X - 2. * P * V * (1. - 2. * P * cos(u)) * sind;
- ss = s1 + s1 - ds;
- } else {
- ds = geod_S / geod_a;
- if (signS) ds = - ds;
- }
- cosds = cos(ds);
- sinds = sin(ds);
- if (signS) sinds = - sinds;
- al21 = N * cosds - sinth1 * sinds;
- if (merid) {
- phi2 = atan( tan(HALFPI + s1 - ds) / onef);
- if (al21 > 0.) {
- al21 = PI;
- if (signS)
- de = PI;
- else {
- phi2 = - phi2;
- de = 0.;
- }
- } else {
- al21 = 0.;
- if (signS) {
- phi2 = - phi2;
- de = 0;
- } else
- de = PI;
- }
- } else {
- al21 = atan(M / al21);
- if (al21 > 0)
- al21 += PI;
- if (al12 < 0.)
- al21 -= PI;
- al21 = adjlon(al21);
- phi2 = atan(-(sinth1 * cosds + N * sinds) * sin(al21) /
- (ellipse ? onef * M : M));
- de = atan2(sinds * sina12 ,
- (costh1 * cosds - sinth1 * sinds * cosa12));
- if (ellipse)
- if (signS)
- de += c1 * ((1. - c2) * ds +
- c2 * sinds * cos(ss));
- else
- de -= c1 * ((1. - c2) * ds -
- c2 * sinds * cos(ss));
- }
- lam2 = adjlon( lam1 + de );
-}
diff --git a/src/3rdparty/proj/geod_inv.c b/src/3rdparty/proj/geod_inv.c
deleted file mode 100644
index c0c8dbb0..00000000
--- a/src/3rdparty/proj/geod_inv.c
+++ /dev/null
@@ -1,56 +0,0 @@
-# include "projects.h"
-# include "geodesic.h"
-# define DTOL 1e-12
- void
-geod_inv(void) {
- double th1,th2,thm,dthm,dlamm,dlam,sindlamm,costhm,sinthm,cosdthm,
- sindthm,L,E,cosd,d,X,Y,T,sind,tandlammp,u,v,D,A,B;
-
- if (ellipse) {
- th1 = atan(onef * tan(phi1));
- th2 = atan(onef * tan(phi2));
- } else {
- th1 = phi1;
- th2 = phi2;
- }
- thm = .5 * (th1 + th2);
- dthm = .5 * (th2 - th1);
- dlamm = .5 * ( dlam = adjlon(lam2 - lam1) );
- if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) {
- al12 = al21 = geod_S = 0.;
- return;
- }
- sindlamm = sin(dlamm);
- costhm = cos(thm); sinthm = sin(thm);
- cosdthm = cos(dthm); sindthm = sin(dthm);
- L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm)
- * sindlamm * sindlamm;
- d = acos(cosd = 1 - L - L);
- if (ellipse) {
- E = cosd + cosd;
- sind = sin( d );
- Y = sinthm * cosdthm;
- Y *= (Y + Y) / (1. - L);
- T = sindthm * costhm;
- T *= (T + T) / L;
- X = Y + T;
- Y -= T;
- T = d / sind;
- D = 4. * T * T;
- A = D * E;
- B = D + D;
- geod_S = geod_a * sind * (T - f4 * (T * X - Y) +
- f64 * (X * (A + (T - .5 * (A - E)) * X) -
- Y * (B + E * Y) + D * X * Y));
- tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) *
- (f2 * T + f64 * (32. * T - (20. * T - A)
- * X - (B + 4.) * Y)) * tan(dlam)));
- } else {
- geod_S = geod_a * d;
- tandlammp = tan(dlamm);
- }
- u = atan2(sindthm , (tandlammp * costhm));
- v = atan2(cosdthm , (tandlammp * sinthm));
- al12 = adjlon(TWOPI + v - u);
- al21 = adjlon(TWOPI - v - u);
-}
diff --git a/src/3rdparty/proj/geod_set.c b/src/3rdparty/proj/geod_set.c
deleted file mode 100644
index 88217277..00000000
--- a/src/3rdparty/proj/geod_set.c
+++ /dev/null
@@ -1,74 +0,0 @@
-
-#define _IN_GEOD_SET
-
-#include <string.h>
-#include "projects.h"
-#include "geodesic.h"
-#include "emess.h"
- void
-geod_set(int argc, char **argv) {
- paralist *start = 0, *curr;
- double es;
- char *name;
- int i;
-
- /* put arguments into internal linked list */
- if (argc <= 0)
- emess(1, "no arguments in initialization list");
- for (i = 0; i < argc; ++i)
- if (i)
- curr = curr->next = pj_mkparam(argv[i]);
- else
- start = curr = pj_mkparam(argv[i]);
- /* set elliptical parameters */
- if (pj_ell_set(start, &geod_a, &es)) emess(1,"ellipse setup failure");
- /* set units */
- if (name = pj_param(start, "sunits").s) {
- char *s;
- struct PJ_UNITS *unit_list = pj_get_units_ref();
- for (i = 0; (s = unit_list[i].id) && strcmp(name, s) ; ++i) ;
- if (!s)
- emess(1,"%s unknown unit conversion id", name);
- fr_meter = 1. / (to_meter = atof(unit_list[i].to_meter));
- } else
- to_meter = fr_meter = 1.;
- if (ellipse = es != 0.) {
- onef = sqrt(1. - es);
- geod_f = 1 - onef;
- f2 = geod_f/2;
- f4 = geod_f/4;
- f64 = geod_f*geod_f/64;
- } else {
- onef = 1.;
- geod_f = f2 = f4 = f64 = 0.;
- }
- /* check if line or arc mode */
- if (pj_param(start, "tlat_1").i) {
- double del_S;
-#undef f
- phi1 = pj_param(start, "rlat_1").f;
- lam1 = pj_param(start, "rlon_1").f;
- if (pj_param(start, "tlat_2").i) {
- phi2 = pj_param(start, "rlat_2").f;
- lam2 = pj_param(start, "rlon_2").f;
- geod_inv();
- geod_pre();
- } else if (geod_S = pj_param(start, "dS").f) {
- al12 = pj_param(start, "rA").f;
- geod_pre();
- geod_for();
- } else emess(1,"incomplete geodesic/arc info");
- if ((n_alpha = pj_param(start, "in_A").i) > 0) {
- if (!(del_alpha = pj_param(start, "rdel_A").f))
- emess(1,"del azimuth == 0");
- } else if (del_S = fabs(pj_param(start, "ddel_S").f)) {
- n_S = geod_S / del_S + .5;
- } else if ((n_S = pj_param(start, "in_S").i) <= 0)
- emess(1,"no interval divisor selected");
- }
- /* free up linked list */
- for ( ; start; start = curr) {
- curr = start->next;
- pj_dalloc(start);
- }
-}
diff --git a/src/3rdparty/proj/geodesic.h b/src/3rdparty/proj/geodesic.h
deleted file mode 100644
index 268cff59..00000000
--- a/src/3rdparty/proj/geodesic.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef lint
-static char GEODESIC_H_ID[] = "@(#)geodesic.h 4.3 95/08/19 GIE REL";
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef _IN_GEOD_SET
-# define GEOD_EXTERN extern
-#else
-# define GEOD_EXTERN
-#endif
-
-GEOD_EXTERN struct geodesic {
- double A;
- double LAM1, PHI1, ALPHA12;
- double LAM2, PHI2, ALPHA21;
- double DIST;
- double ONEF, FLAT, FLAT2, FLAT4, FLAT64;
- int ELLIPSE;
-} GEODESIC;
-
-# define geod_a GEODESIC.A
-# define lam1 GEODESIC.LAM1
-# define phi1 GEODESIC.PHI1
-# define al12 GEODESIC.ALPHA12
-# define lam2 GEODESIC.LAM2
-# define phi2 GEODESIC.PHI2
-# define al21 GEODESIC.ALPHA21
-# define geod_S GEODESIC.DIST
-# define geod_f GEODESIC.FLAT
-# define onef GEODESIC.ONEF
-# define f2 GEODESIC.FLAT2
-# define f4 GEODESIC.FLAT4
-# define ff2 GEODESIC.FLAT4
-# define f64 GEODESIC.FLAT64
-# define ellipse GEODESIC.ELLIPSE
-
-
-GEOD_EXTERN int n_alpha, n_S;
-GEOD_EXTERN double to_meter, fr_meter, del_alpha;
-
-void geod_set(int, char **);
-void geod_for(void);
-void geod_pre(void);
-void geod_inv(void);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/3rdparty/proj/include/pj_list.h b/src/3rdparty/proj/include/pj_list.h
deleted file mode 100644
index b965cc71..00000000
--- a/src/3rdparty/proj/include/pj_list.h
+++ /dev/null
@@ -1,136 +0,0 @@
-#ifdef DO_PJ_LIST_ID
-static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL";
-#endif
-/* Full list of current projections for Tue Jan 11 12:27:04 EST 1994
-**
-** Copy this file and retain only appropriate lines for subset list
-*/
-PROJ_HEAD(aea, "Albers Equal Area")
-PROJ_HEAD(aeqd, "Azimuthal Equidistant")
-PROJ_HEAD(airy, "Airy")
-PROJ_HEAD(aitoff, "Aitoff")
-PROJ_HEAD(alsk, "Mod. Stererographics of Alaska")
-PROJ_HEAD(apian, "Apian Globular I")
-PROJ_HEAD(august, "August Epicycloidal")
-PROJ_HEAD(bacon, "Bacon Globular")
-PROJ_HEAD(bipc, "Bipolar conic of western hemisphere")
-PROJ_HEAD(boggs, "Boggs Eumorphic")
-PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)")
-PROJ_HEAD(cass, "Cassini")
-PROJ_HEAD(cc, "Central Cylindrical")
-PROJ_HEAD(cea, "Equal Area Cylindrical")
-PROJ_HEAD(chamb, "Chamberlin Trimetric")
-PROJ_HEAD(collg, "Collignon")
-PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)")
-PROJ_HEAD(denoy, "Denoyer Semi-Elliptical")
-PROJ_HEAD(eck1, "Eckert I")
-PROJ_HEAD(eck2, "Eckert II")
-PROJ_HEAD(eck3, "Eckert III")
-PROJ_HEAD(eck4, "Eckert IV")
-PROJ_HEAD(eck5, "Eckert V")
-PROJ_HEAD(eck6, "Eckert VI")
-PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)")
-PROJ_HEAD(eqdc, "Equidistant Conic")
-PROJ_HEAD(euler, "Euler")
-PROJ_HEAD(fahey, "Fahey")
-PROJ_HEAD(fouc, "Foucaut")
-PROJ_HEAD(fouc_s, "Foucaut Sinusoidal")
-PROJ_HEAD(gall, "Gall (Gall Stereographic)")
-PROJ_HEAD(geocent, "Geocentric")
-PROJ_HEAD(geos, "Geostationary Satellite View")
-PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)")
-PROJ_HEAD(gn_sinu, "General Sinusoidal Series")
-PROJ_HEAD(gnom, "Gnomonic")
-PROJ_HEAD(goode, "Goode Homolosine")
-PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.")
-PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.")
-PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff")
-PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area")
-PROJ_HEAD(imw_p, "Internation Map of the World Polyconic")
-PROJ_HEAD(kav5, "Kavraisky V")
-PROJ_HEAD(kav7, "Kavraisky VII")
-PROJ_HEAD(krovak, "Krovak")
-PROJ_HEAD(labrd, "Laborde")
-PROJ_HEAD(laea, "Lambert Azimuthal Equal Area")
-PROJ_HEAD(lagrng, "Lagrange")
-PROJ_HEAD(larr, "Larrivee")
-PROJ_HEAD(lask, "Laskowski")
-PROJ_HEAD(lonlat, "Lat/long (Geodetic)")
-PROJ_HEAD(latlon, "Lat/long (Geodetic alias)")
-PROJ_HEAD(latlong, "Lat/long (Geodetic alias)")
-PROJ_HEAD(longlat, "Lat/long (Geodetic alias)")
-PROJ_HEAD(lcc, "Lambert Conformal Conic")
-PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative")
-PROJ_HEAD(leac, "Lambert Equal Area Conic")
-PROJ_HEAD(lee_os, "Lee Oblated Stereographic")
-PROJ_HEAD(loxim, "Loximuthal")
-PROJ_HEAD(lsat, "Space oblique for LANDSAT")
-PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine")
-PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)")
-PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic")
-PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic")
-PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal")
-PROJ_HEAD(merc, "Mercator")
-PROJ_HEAD(mil_os, "Miller Oblated Stereographic")
-PROJ_HEAD(mill, "Miller Cylindrical")
-PROJ_HEAD(moll, "Mollweide")
-PROJ_HEAD(murd1, "Murdoch I")
-PROJ_HEAD(murd2, "Murdoch II")
-PROJ_HEAD(murd3, "Murdoch III")
-PROJ_HEAD(nell, "Nell")
-PROJ_HEAD(nell_h, "Nell-Hammer")
-PROJ_HEAD(nicol, "Nicolosi Globular")
-PROJ_HEAD(nsper, "Near-sided perspective")
-PROJ_HEAD(nzmg, "New Zealand Map Grid")
-PROJ_HEAD(ob_tran, "General Oblique Transformation")
-PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area")
-PROJ_HEAD(oea, "Oblated Equal Area")
-PROJ_HEAD(omerc, "Oblique Mercator")
-PROJ_HEAD(ortel, "Ortelius Oval")
-PROJ_HEAD(ortho, "Orthographic")
-PROJ_HEAD(pconic, "Perspective Conic")
-PROJ_HEAD(poly, "Polyconic (American)")
-PROJ_HEAD(putp1, "Putnins P1")
-PROJ_HEAD(putp2, "Putnins P2")
-PROJ_HEAD(putp3, "Putnins P3")
-PROJ_HEAD(putp3p, "Putnins P3'")
-PROJ_HEAD(putp4p, "Putnins P4'")
-PROJ_HEAD(putp5, "Putnins P5")
-PROJ_HEAD(putp5p, "Putnins P5'")
-PROJ_HEAD(putp6, "Putnins P6")
-PROJ_HEAD(putp6p, "Putnins P6'")
-PROJ_HEAD(qua_aut, "Quartic Authalic")
-PROJ_HEAD(robin, "Robinson")
-PROJ_HEAD(rouss, "Roussilhe Stereographic")
-PROJ_HEAD(rpoly, "Rectangular Polyconic")
-PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)")
-PROJ_HEAD(somerc, "Swiss. Obl. Mercator")
-PROJ_HEAD(stere, "Stereographic")
-PROJ_HEAD(sterea, "Oblique Stereographic Alternative")
-PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)")
-PROJ_HEAD(tcc, "Transverse Central Cylindrical")
-PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area")
-PROJ_HEAD(tissot, "Tissot Conic")
-PROJ_HEAD(tmerc, "Transverse Mercator")
-PROJ_HEAD(tpeqd, "Two Point Equidistant")
-PROJ_HEAD(tpers, "Tilted perspective")
-PROJ_HEAD(ups, "Universal Polar Stereographic")
-PROJ_HEAD(urm5, "Urmaev V")
-PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal")
-PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)")
-PROJ_HEAD(vandg, "van der Grinten (I)")
-PROJ_HEAD(vandg2, "van der Grinten II")
-PROJ_HEAD(vandg3, "van der Grinten III")
-PROJ_HEAD(vandg4, "van der Grinten IV")
-PROJ_HEAD(vitk1, "Vitkovsky I")
-PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)")
-PROJ_HEAD(wag2, "Wagner II")
-PROJ_HEAD(wag3, "Wagner III")
-PROJ_HEAD(wag4, "Wagner IV")
-PROJ_HEAD(wag5, "Wagner V")
-PROJ_HEAD(wag6, "Wagner VI")
-PROJ_HEAD(wag7, "Wagner VII")
-PROJ_HEAD(weren, "Werenskiold I")
-PROJ_HEAD(wink1, "Winkel I")
-PROJ_HEAD(wink2, "Winkel II")
-PROJ_HEAD(wintri, "Winkel Tripel")
diff --git a/src/3rdparty/proj/include/proj_api.h b/src/3rdparty/proj/include/proj_api.h
deleted file mode 100644
index f4ee46bd..00000000
--- a/src/3rdparty/proj/include/proj_api.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/******************************************************************************
- * $Id: proj_api.h 1631 2009-09-24 02:26:05Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Public (application) include file for PROJ.4 API, and constants.
- * Author: Frank Warmerdam, <warmerdam@pobox.com>
- *
- ******************************************************************************
- * Copyright (c) 2001, Frank Warmerdam <warmerdam@pobox.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-/* General projections header file */
-#ifndef PROJ_API_H
-#define PROJ_API_H
-
-/* standard inclusions */
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Try to update this every version! */
-#define PJ_VERSION 470
-
-extern char const pj_release[]; /* global release id string */
-
-#define RAD_TO_DEG 57.29577951308232
-#define DEG_TO_RAD .0174532925199432958
-
-
-extern int pj_errno; /* global error return code */
-
-#if !defined(PROJECTS_H)
- typedef struct { double u, v; } projUV;
- typedef void *projPJ;
- #define projXY projUV
- #define projLP projUV
-#else
- typedef PJ *projPJ;
-# define projXY XY
-# define projLP LP
-#endif
-
-/* procedure prototypes */
-
-projXY pj_fwd(projLP, projPJ);
-projLP pj_inv(projXY, projPJ);
-
-int pj_transform( projPJ src, projPJ dst, long point_count, int point_offset,
- double *x, double *y, double *z );
-int pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset,
- double *x, double *y, double *z );
-int pj_geocentric_to_geodetic( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-int pj_geodetic_to_geocentric( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-int pj_compare_datums( projPJ srcdefn, projPJ dstdefn );
-int pj_apply_gridshift( const char *, int,
- long point_count, int point_offset,
- double *x, double *y, double *z );
-void pj_deallocate_grids(void);
-int pj_is_latlong(projPJ);
-int pj_is_geocent(projPJ);
-void pj_pr_list(projPJ);
-void pj_free(projPJ);
-void pj_set_finder( const char *(*)(const char *) );
-void pj_set_searchpath ( int count, const char **path );
-projPJ pj_init(int, char **);
-projPJ pj_init_plus(const char *);
-char *pj_get_def(projPJ, int);
-projPJ pj_latlong_from_proj( projPJ );
-void *pj_malloc(size_t);
-void pj_dalloc(void *);
-char *pj_strerrno(int);
-int *pj_get_errno_ref(void);
-const char *pj_get_release(void);
-void pj_acquire_lock(void);
-void pj_release_lock(void);
-void pj_cleanup_lock(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ndef PROJ_API_H */
-
diff --git a/src/3rdparty/proj/include/projects.h b/src/3rdparty/proj/include/projects.h
deleted file mode 100644
index 098a3605..00000000
--- a/src/3rdparty/proj/include/projects.h
+++ /dev/null
@@ -1,434 +0,0 @@
-/******************************************************************************
- * $Id: projects.h 1625 2009-09-23 18:58:15Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Primary (private) include file for PROJ.4 library.
- * Author: Gerald Evenden
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-/* General projections header file */
-#ifndef PROJECTS_H
-#define PROJECTS_H
-
-#ifdef _MSC_VER
-# ifndef _CRT_SECURE_NO_DEPRECATE
-# define _CRT_SECURE_NO_DEPRECATE
-# endif
-# ifndef _CRT_NONSTDC_NO_DEPRECATE
-# define _CRT_NONSTDC_NO_DEPRECATE
-# endif
-#endif
-
-#ifdef __cplusplus
-#define C_NAMESPACE extern "C"
-#define C_NAMESPACE_VAR extern "C"
-extern "C" {
-#else
-#define C_NAMESPACE extern
-#define C_NAMESPACE_VAR
-#endif
-
-/* standard inclusions */
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#ifndef NULL
-# define NULL 0
-#endif
-
-#ifndef FALSE
-# define FALSE 0
-#endif
-
-#ifndef TRUE
-# define TRUE 1
-#endif
-
-#ifndef MAX
-# define MIN(a,b) ((a<b) ? a : b)
-# define MAX(a,b) ((a>b) ? a : b)
-#endif
-
-#ifndef ABS
-# define ABS(x) ((x<0) ? (-1*(x)) : x)
-#endif
-
- /* maximum path/filename */
-#ifndef MAX_PATH_FILENAME
-#define MAX_PATH_FILENAME 1024
-#endif
- /* prototype hypot for systems where absent */
-// Causes trouble on Symbian, can't find a platform where this is needed.
-//#ifndef _WIN32
-//extern double hypot(double, double);
-//#endif
-
-#ifdef _WIN32_WCE
-# include <wce_stdlib.h>
-# include <wce_stdio.h>
-# define rewind wceex_rewind
-# define getenv wceex_getenv
-# define strdup _strdup
-# define hypot _hypot
-#endif
-
- /* some useful constants */
-#define HALFPI 1.5707963267948966
-#define FORTPI 0.78539816339744833
-#define PI 3.14159265358979323846
-#define TWOPI 6.2831853071795864769
-
-/* environment parameter name */
-#ifndef PROJ_LIB
-#define PROJ_LIB "PROJ_LIB"
-#endif
-/* maximum tag id length for +init and default files */
-#ifndef ID_TAG_MAX
-#define ID_TAG_MAX 50
-#endif
-
-/* Use WIN32 as a standard windows 32 bit declaration */
-#if defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE)
-# define WIN32
-#endif
-
-#if defined(_WINDOWS) && !defined(WIN32) && !defined(_WIN32_WCE)
-# define WIN32
-#endif
-
-/* directory delimiter for DOS support */
-#ifdef WIN32
-#define DIR_CHAR '\\'
-#else
-#define DIR_CHAR '/'
-#endif
-
-/* datum_type values */
-#define PJD_UNKNOWN 0
-#define PJD_3PARAM 1
-#define PJD_7PARAM 2
-#define PJD_GRIDSHIFT 3
-#define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */
-
-/* datum system errors */
-#define PJD_ERR_GEOCENTRIC -45
-
-#define USE_PROJUV
-
-typedef struct { double u, v; } projUV;
-typedef struct { double r, i; } COMPLEX;
-
-#ifndef PJ_LIB__
-#define XY projUV
-#define LP projUV
-#else
-typedef struct { double x, y; } XY;
-typedef struct { double lam, phi; } LP;
-#endif
-
-typedef union { double f; int i; char *s; } PVALUE;
-struct PJconsts;
-
-struct PJ_LIST {
- char *id; /* projection keyword */
- struct PJconsts *(*proj)(struct PJconsts*);/* projection entry point */
- char * const *descr; /* description text */
-};
-struct PJ_ELLPS {
- char *id; /* ellipse keyword name */
- char *major; /* a= value */
- char *ell; /* elliptical parameter */
- char *name; /* comments */
-};
-struct PJ_UNITS {
- char *id; /* units keyword */
- char *to_meter; /* multiply by value to get meters */
- char *name; /* comments */
-};
-
-struct PJ_DATUMS {
- char *id; /* datum keyword */
- char *defn; /* ie. "to_wgs84=..." */
- char *ellipse_id; /* ie from ellipse table */
- char *comments; /* EPSG code, etc */
-};
-
-struct PJ_PRIME_MERIDIANS {
- char *id; /* prime meridian keyword */
- char *defn; /* offset from greenwich in DMS format. */
-};
-
-struct DERIVS {
- double x_l, x_p; /* derivatives of x for lambda-phi */
- double y_l, y_p; /* derivatives of y for lambda-phi */
-};
-
-struct FACTORS {
- struct DERIVS der;
- double h, k; /* meridinal, parallel scales */
- double omega, thetap; /* angular distortion, theta prime */
- double conv; /* convergence */
- double s; /* areal scale factor */
- double a, b; /* max-min scale error */
- int code; /* info as to analytics, see following */
-};
-#define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */
-#define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */
-#define IS_ANAL_HK 04 /* h and k analytic */
-#define IS_ANAL_CONV 010 /* convergence analytic */
- /* parameter list struct */
-typedef struct ARG_list {
- struct ARG_list *next;
- char used;
- char param[1]; } paralist;
- /* base projection data structure */
-
-
-typedef struct PJconsts {
- XY (*fwd)(LP, struct PJconsts *);
- LP (*inv)(XY, struct PJconsts *);
- void (*spc)(LP, struct PJconsts *, struct FACTORS *);
- void (*pfree)(struct PJconsts *);
- const char *descr;
- paralist *params; /* parameter list */
- int over; /* over-range flag */
- int geoc; /* geocentric latitude flag */
- int is_latlong; /* proj=latlong ... not really a projection at all */
- int is_geocent; /* proj=geocent ... not really a projection at all */
- double
- a, /* major axis or radius if es==0 */
- a_orig, /* major axis before any +proj related adjustment */
- es, /* e ^ 2 */
- es_orig, /* es before any +proj related adjustment */
- e, /* eccentricity */
- ra, /* 1/A */
- one_es, /* 1 - e^2 */
- rone_es, /* 1/one_es */
- lam0, phi0, /* central longitude, latitude */
- x0, y0, /* easting and northing */
- k0, /* general scaling factor */
- to_meter, fr_meter; /* cartesian scaling */
-
- int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */
- double datum_params[7];
- double from_greenwich; /* prime meridian offset (in radians) */
- double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/
-
-#ifdef PROJ_PARMS__
-PROJ_PARMS__
-#endif /* end of optional extensions */
-} PJ;
-
-/* public API */
-#include "proj_api.h"
-
-/* Generate pj_list external or make list from include file */
-#ifndef PJ_LIST_H
-extern struct PJ_LIST pj_list[];
-#else
-#define PROJ_HEAD(id, name) \
- struct PJconsts *pj_##id(struct PJconsts*); extern char * const pj_s_##id;
-
-#ifndef lint
-#define DO_PJ_LIST_ID
-#endif
-#include PJ_LIST_H
-#ifndef lint
-#undef DO_PJ_LIST_ID
-#endif
-#undef PROJ_HEAD
-#define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id},
- struct PJ_LIST
-pj_list[] = {
-#include PJ_LIST_H
- {0, 0, 0},
- };
-#undef PROJ_HEAD
-#endif
-
-#ifndef PJ_ELLPS__
-extern struct PJ_ELLPS pj_ellps[];
-#endif
-
-#ifndef PJ_UNITS__
-extern struct PJ_UNITS pj_units[];
-#endif
-
-#ifndef PJ_DATUMS__
-extern struct PJ_DATUMS pj_datums[];
-extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[];
-#endif
-
-#ifdef PJ_LIB__
- /* repeatative projection code */
-#define PROJ_HEAD(id, name) static const char des_##id [] = name
-#define ENTRYA(name) \
- C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \
- C_NAMESPACE PJ *pj_##name(PJ *P) { if (!P) { \
- if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \
- P->pfree = freeup; P->fwd = 0; P->inv = 0; \
- P->spc = 0; P->descr = des_##name;
-#define ENTRYX } return P; } else {
-#define ENTRY0(name) ENTRYA(name) ENTRYX
-#define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX
-#define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX
-#define ENDENTRY(p) } return (p); }
-#define E_ERROR(err) { pj_errno = err; freeup(P); return(0); }
-#define E_ERROR_0 { freeup(P); return(0); }
-#define F_ERROR { pj_errno = -20; return(xy); }
-#define I_ERROR { pj_errno = -20; return(lp); }
-#define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0}
-#define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0}
-#define FREEUP static void freeup(PJ *P) {
-#define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac)
-#endif
-#define MAX_TAB_ID 80
-typedef struct { float lam, phi; } FLP;
-typedef struct { int lam, phi; } ILP;
-
-struct CTABLE {
- char id[MAX_TAB_ID]; /* ascii info */
- LP ll; /* lower left corner coordinates */
- LP del; /* size of cells */
- ILP lim; /* limits of conversion matrix */
- FLP *cvs; /* conversion matrix */
-};
-
-typedef struct _pj_gi {
- char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */
- char *filename; /* full path to filename */
-
- const char *format; /* format of this grid, ie "ctable", "ntv1",
- "ntv2" or "missing". */
-
- int grid_offset; /* offset in file, for delayed loading */
-
- struct CTABLE *ct;
-
- struct _pj_gi *next;
- struct _pj_gi *child;
-} PJ_GRIDINFO;
-
-/* procedure prototypes */
-double dmstor(const char *, char **);
-void set_rtodms(int, int);
-char *rtodms(char *, double, int, int);
-double adjlon(double);
-double aacos(double), aasin(double), asqrt(double), aatan2(double, double);
-PVALUE pj_param(paralist *, char *);
-paralist *pj_mkparam(char *);
-int pj_ell_set(paralist *, double *, double *);
-int pj_datum_set(paralist *, PJ *);
-int pj_prime_meridian_set(paralist *, PJ *);
-int pj_angular_units_set(paralist *, PJ *);
-
-paralist *pj_clone_paralist( const paralist* );
-void pj_clear_initcache(void);
-paralist*pj_search_initcache( const char *filekey );
-void pj_insert_initcache( const char *filekey, const paralist *list);
-
-double *pj_enfn(double);
-double pj_mlfn(double, double, double, double *);
-double pj_inv_mlfn(double, double, double *);
-double pj_qsfn(double, double, double);
-double pj_tsfn(double, double, double);
-double pj_msfn(double, double, double);
-double pj_phi2(double, double);
-double pj_qsfn_(double, PJ *);
-double *pj_authset(double);
-double pj_authlat(double, double *);
-COMPLEX pj_zpoly1(COMPLEX, COMPLEX *, int);
-COMPLEX pj_zpolyd1(COMPLEX, COMPLEX *, int, COMPLEX *);
-FILE *pj_open_lib(char *, char *);
-
-int pj_deriv(LP, double, PJ *, struct DERIVS *);
-int pj_factors(LP, PJ *, double, struct FACTORS *);
-
-struct PW_COEF {/* row coefficient structure */
- int m; /* number of c coefficients (=0 for none) */
- double *c; /* power coefficients */
-};
-
-/* Approximation structures and procedures */
-typedef struct { /* Chebyshev or Power series structure */
- projUV a, b; /* power series range for evaluation */
- /* or Chebyshev argument shift/scaling */
- struct PW_COEF *cu, *cv;
- int mu, mv; /* maximum cu and cv index (+1 for count) */
- int power; /* != 0 if power series, else Chebyshev */
-} Tseries;
-Tseries *mk_cheby(projUV, projUV, double, projUV *, projUV (*)(projUV), int, int, int);
-projUV bpseval(projUV, Tseries *);
-projUV bcheval(projUV, Tseries *);
-projUV biveval(projUV, Tseries *);
-void *vector1(int, int);
-void **vector2(int, int, int);
-void freev2(void **v, int nrows);
-int bchgen(projUV, projUV, int, int, projUV **, projUV(*)(projUV));
-int bch2bps(projUV, projUV, projUV **, int, int);
-/* nadcon related protos */
-LP nad_intr(LP, struct CTABLE *);
-LP nad_cvt(LP, int, struct CTABLE *);
-struct CTABLE *nad_init(char *);
-struct CTABLE *nad_ctable_init( FILE * fid );
-int nad_ctable_load( struct CTABLE *, FILE * fid );
-void nad_free(struct CTABLE *);
-
-/* higher level handling of datum grid shift files */
-
-PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *, int * );
-void pj_deallocate_grids();
-
-PJ_GRIDINFO *pj_gridinfo_init( const char * );
-int pj_gridinfo_load( PJ_GRIDINFO * );
-void pj_gridinfo_free( PJ_GRIDINFO * );
-
-void *proj_mdist_ini(double);
-double proj_mdist(double, double, double, const void *);
-double proj_inv_mdist(double, const void *);
-void *pj_gauss_ini(double, double, double *,double *);
-LP pj_gauss(LP, const void *);
-LP pj_inv_gauss(LP, const void *);
-
-extern char const pj_release[];
-
-struct PJ_ELLPS *pj_get_ellps_ref( void );
-struct PJ_DATUMS *pj_get_datums_ref( void );
-struct PJ_UNITS *pj_get_units_ref( void );
-struct PJ_LIST *pj_get_list_ref( void );
-struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void );
-
-#ifndef DISABLE_CVSID
-# define PJ_CVSID(string) static char pj_cvsid[] = string; \
-static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : pj_cvsid ); }
-#else
-# define PJ_CVSID(string)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* end of basic projections header */
diff --git a/src/3rdparty/proj/mk_cheby.c b/src/3rdparty/proj/mk_cheby.c
deleted file mode 100644
index b3019004..00000000
--- a/src/3rdparty/proj/mk_cheby.c
+++ /dev/null
@@ -1,161 +0,0 @@
-#include <projects.h>
- static void /* sum coefficients less than res */
-eval(projUV **w, int nu, int nv, double res, projUV *resid) {
- int i, j;
- double ab;
- projUV *s;
-
- resid->u = resid->v = 0.;
- for (i = 0; i < nu; ++i)
- for (s = w[i], j = 0; j < nv; ++j, ++s) {
- if ((ab = fabs(s->u)) < res)
- resid->u += ab;
- if ((ab = fabs(s->v)) < res)
- resid->v += ab;
- }
-}
- static Tseries * /* create power series structure */
-makeT(int nru, int nrv) {
- Tseries *T;
- int i;
-
- if ((T = (Tseries *)pj_malloc(sizeof(Tseries))) &&
- (T->cu = (struct PW_COEF *)pj_malloc(
- sizeof(struct PW_COEF) * nru)) &&
- (T->cv = (struct PW_COEF *)pj_malloc(
- sizeof(struct PW_COEF) * nrv))) {
- for (i = 0; i < nru; ++i)
- T->cu[i].c = 0;
- for (i = 0; i < nrv; ++i)
- T->cv[i].c = 0;
- return T;
- } else
- return 0;
-}
- Tseries *
-mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV),
- int nu, int nv, int power) {
- int j, i, nru, nrv, *ncu, *ncv;
- Tseries *T;
- projUV **w;
- double cutres;
-
- if (!(w = (projUV **)vector2(nu, nv, sizeof(projUV))) ||
- !(ncu = (int *)vector1(nu + nv, sizeof(int))))
- return 0;
- ncv = ncu + nu;
- if (!bchgen(a, b, nu, nv, w, func)) {
- projUV *s;
- double ab, *p;
-
- /* analyse coefficients and adjust until residual OK */
- cutres = res;
- for (i = 4; i ; --i) {
- eval(w, nu, nv, cutres, resid);
- if (resid->u < res && resid->v < res)
- break;
- cutres *= 0.5;
- }
- if (i <= 0) /* warn of too many tries */
- resid->u = - resid->u;
- /* apply cut resolution and set pointers */
- nru = nrv = 0;
- for (j = 0; j < nu; ++j) {
- ncu[j] = ncv[j] = 0; /* clear column maxes */
- for (s = w[j], i = 0; i < nv; ++i, ++s) {
- if ((ab = fabs(s->u)) < cutres) /* < resolution ? */
- s->u = 0.; /* clear coefficient */
- else
- ncu[j] = i + 1; /* update column max */
- if ((ab = fabs(s->v)) < cutres) /* same for v coef's */
- s->v = 0.;
- else
- ncv[j] = i + 1;
- }
- if (ncu[j]) nru = j + 1; /* update row max */
- if (ncv[j]) nrv = j + 1;
- }
- if (power) { /* convert to bivariate power series */
- if (!bch2bps(a, b, w, nu, nv))
- goto error;
- /* possible change in some row counts, so readjust */
- nru = nrv = 0;
- for (j = 0; j < nu; ++j) {
- ncu[j] = ncv[j] = 0; /* clear column maxes */
- for (s = w[j], i = 0; i < nv; ++i, ++s) {
- if (s->u)
- ncu[j] = i + 1; /* update column max */
- if (s->v)
- ncv[j] = i + 1;
- }
- if (ncu[j]) nru = j + 1; /* update row max */
- if (ncv[j]) nrv = j + 1;
- }
- if (T = makeT(nru, nrv)) {
- T->a = a;
- T->b = b;
- T->mu = nru - 1;
- T->mv = nrv - 1;
- T->power = 1;
- for (i = 0; i < nru; ++i) /* store coefficient rows for u */
- if (T->cu[i].m = ncu[i])
- if ((p = T->cu[i].c =
- (double *)pj_malloc(sizeof(double) * ncu[i])))
- for (j = 0; j < ncu[i]; ++j)
- *p++ = (w[i] + j)->u;
- else
- goto error;
- for (i = 0; i < nrv; ++i) /* same for v */
- if (T->cv[i].m = ncv[i])
- if ((p = T->cv[i].c =
- (double *)pj_malloc(sizeof(double) * ncv[i])))
- for (j = 0; j < ncv[i]; ++j)
- *p++ = (w[i] + j)->v;
- else
- goto error;
- }
- } else if (T = makeT(nru, nrv)) {
- /* else make returned Chebyshev coefficient structure */
- T->mu = nru - 1; /* save row degree */
- T->mv = nrv - 1;
- T->a.u = a.u + b.u; /* set argument scaling */
- T->a.v = a.v + b.v;
- T->b.u = 1. / (b.u - a.u);
- T->b.v = 1. / (b.v - a.v);
- T->power = 0;
- for (i = 0; i < nru; ++i) /* store coefficient rows for u */
- if (T->cu[i].m = ncu[i])
- if ((p = T->cu[i].c =
- (double *)pj_malloc(sizeof(double) * ncu[i])))
- for (j = 0; j < ncu[i]; ++j)
- *p++ = (w[i] + j)->u;
- else
- goto error;
- for (i = 0; i < nrv; ++i) /* same for v */
- if (T->cv[i].m = ncv[i])
- if ((p = T->cv[i].c =
- (double *)pj_malloc(sizeof(double) * ncv[i])))
- for (j = 0; j < ncv[i]; ++j)
- *p++ = (w[i] + j)->v;
- else
- goto error;
- } else
- goto error;
- }
- goto gohome;
-error:
- if (T) { /* pj_dalloc up possible allocations */
- for (i = 0; i <= T->mu; ++i)
- if (T->cu[i].c)
- pj_dalloc(T->cu[i].c);
- for (i = 0; i <= T->mv; ++i)
- if (T->cv[i].c)
- pj_dalloc(T->cv[i].c);
- pj_dalloc(T);
- }
- T = 0;
-gohome:
- freev2((void **) w, nu);
- pj_dalloc(ncu);
- return T;
-}
diff --git a/src/3rdparty/proj/nad2bin.c b/src/3rdparty/proj/nad2bin.c
deleted file mode 100644
index db4bb076..00000000
--- a/src/3rdparty/proj/nad2bin.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Convert bivariate ASCII NAD27 to NAD83 tables to binary structure */
-#include <stdio.h>
-#include <stdlib.h>
-#define PJ_LIB__
-#include <projects.h>
-#define U_SEC_TO_RAD 4.848136811095359935899141023e-12
- static char
-*usage = "<ASCII_dist_table local_bin_table";
-
-int main(int argc, char **argv) {
- struct CTABLE ct;
- FLP *p, t;
- size_t tsize;
- int i, j, ichk;
- long lam, laml, phi, phil;
- FILE *bin;
-
- if (argc != 2) {
- fprintf(stderr,"usage: %s %s\n", argv[0], usage);
- exit(1);
- }
- fgets(ct.id, MAX_TAB_ID, stdin);
- scanf("%d %d %*d %lf %lf %lf %lf", &ct.lim.lam, &ct.lim.phi,
- &ct.ll.lam, &ct.del.lam, &ct.ll.phi, &ct.del.phi);
- if (!(ct.cvs = (FLP *)malloc(tsize = ct.lim.lam * ct.lim.phi *
- sizeof(FLP)))) {
- perror("mem. alloc");
- exit(1);
- }
- ct.ll.lam *= DEG_TO_RAD;
- ct.ll.phi *= DEG_TO_RAD;
- ct.del.lam *= DEG_TO_RAD;
- ct.del.phi *= DEG_TO_RAD;
- /* load table */
- for (p = ct.cvs, i = 0; i < ct.lim.phi; ++i) {
- scanf("%d:%ld %ld", &ichk, &laml, &phil);
- if (ichk != i) {
- fprintf(stderr,"format check on row\n");
- exit(1);
- }
- t.lam = laml * U_SEC_TO_RAD;
- t.phi = phil * U_SEC_TO_RAD;
- *p++ = t;
- for (j = 1; j < ct.lim.lam; ++j) {
- scanf("%ld %ld", &lam, &phi);
- t.lam = (laml += lam) * U_SEC_TO_RAD;
- t.phi = (phil += phi) * U_SEC_TO_RAD;
- *p++ = t;
- }
- }
- if (feof(stdin)) {
- fprintf(stderr, "premature EOF\n");
- exit(1);
- }
- if (!(bin = freopen(argv[1], "wb", stdout))) {
- perror(argv[1]);
- exit(2);
- }
- if (fwrite(&ct, sizeof(ct), 1, stdout) != 1 ||
- fwrite(ct.cvs, tsize, 1, stdout) != 1) {
- fprintf(stderr, "output failure\n");
- exit(2);
- }
- exit(0); /* normal completion */
-}
diff --git a/src/3rdparty/proj/nad2nad.c b/src/3rdparty/proj/nad2nad.c
deleted file mode 100644
index e59877da..00000000
--- a/src/3rdparty/proj/nad2nad.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* <<<< North American Datum Transfer Program >>>> */
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#define PJ_LIST_H <nad_list.h>
-#include <projects.h>
-#include "emess.h"
-
-#define MAX_LINE 1000
-#define MAX_PARGS 100
-#define PJ_INVERS(P) (P->inv ? 1 : 0)
- static int
-echoin = 0, /* echo input data to output line */
-tag = '#'; /* beginning of line tag character */
- static char
-*oform = (char *)0, /* output format for x-y or decimal degrees */
-*oterr = "*\t*", /* output line for unprojectable input */
-*inargs = 0,
-*outargs = 0,
-*czone = 0,
-*usage =
-"%s\nusage: %s [ -eEfihortwW [args] ] [ files ]\n";
- struct CTABLE
-*ctab = 0,
-*htab = 0;
-static struct TAG_LIST {
- char *tag;
- short sw;
-} ops_list[] = {
- "utm=", 0,
- "spcs=", 1,
- "feet", 2,
- "27", 3,
- "83", 4,
- "hp", 5,
- "bin", 6,
- "rev", 7,
- 0, 0,
-};
-static struct IO_CON {
- short rev; /* reverse lon/lat or x/y */
- short bin; /* io binary */
- short ll; /* io lat-lon */
- short t83; /* data in 83 datum */
- short zone; /* <100 utm zone, ==0 geog, else state plane zone */
- short nprojc; /* number of entries in projc */
- char *hp; /* high precision name */
- char *projc[10]; /* params for pj_init */
- PJ *cnv;
-} input = {
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-}, output = {
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
- static void
-set_zone(int in, struct IO_CON *io) {
- char tmp[20];
-
- if (io->hp) {
- io->t83 = 1;
- if (!(htab = nad_init(io->hp)))
- emess(1,"hp datum file: %s, failed: %s", io->hp,
- pj_strerrno(pj_errno));
- }
- if (io->zone > 0) {
- if (io->zone <= 60) { /* UTM zone */
- io->nprojc = 2; /* no other options allowed */
- io->projc[0] = "proj=utm";
- sprintf(tmp, "zone=%d", io->zone);
- io->projc[1] = io->t83 ? "ellps=GRS80" : "ellps=clrk66";
- } else /* SPCS zone */
- sprintf(tmp, "init=nad%s:%d", io->t83 ? "83" : "27", io->zone);
- io->projc[io->nprojc++] = tmp;
- io->projc[io->nprojc++] = "no_defs";
- if (!(io->cnv = pj_init(io->nprojc, io->projc)))
- emess(1,pj_strerrno(pj_errno));
- io->ll = 0;
- }
-}
- static void
-setup() {
- /* check and set zone operations */
- if (input.hp && output.hp)
- emess(1,"both input and output cannot be high precision");
- set_zone(1, &input);
- set_zone(0, &output);
- if (input.cnv && !output.cnv)
- output.ll = 1;
- if (output.cnv && !input.cnv)
- input.ll = 1;
- if (!input.cnv && !output.cnv)
- output.ll = input.ll = 1;
- if (czone) {
- if (!input.hp && !output.hp && input.t83 == output.t83)
- emess(1,"identical datums");
- if (!(ctab = nad_init(czone)))
- emess(1,"datum file: %s, failed: %s", czone, pj_strerrno(pj_errno));
- } else if (input.t83 != output.t83)
- emess(1,"conversion region (-r) not specified");
-}
- static void
-set_ops(char *s, struct IO_CON *io) {
- char *intag;
- struct TAG_LIST *p;
-
- for ( ; intag = strtok(s, " ,\t"); s = 0) {
- for (p = ops_list; p->tag; ++p) {
- if (!strncmp(intag, p->tag, strlen(p->tag)))
- break;
- }
- if (!p->tag)
- emess(1,"invalid selection");
- switch (p->sw) {
- case 0:
- case 1:
- s = strchr(intag, '=') + 1;
- io->zone = atoi(s);
- break;
- case 2:
- if (io->zone <= 60)
- emess(1,"spcs zone must be selected");
- io->projc[io->nprojc++] = "units=us-ft";
- break;
- case 3: io->t83 = 0; break;
- case 4: io->t83 = 1; break;
- case 5:
- if (!(intag = strchr(intag, '=')) || *++intag == '\0')
- emess(1,"hp missing name");
- strcpy(io->hp = (char*)malloc(strlen(intag)+1), intag);
- break;
- case 6: io->bin = 1; break;
- case 7: io->rev = 1; break;
- }
- }
-}
- static void
-process(FILE *fid) {
- char line[MAX_LINE], *s, t, pline[100];
- projUV val;
- double tmp;
-
- for (;;) {
- if (input.bin)
- fread(&val, sizeof(projUV), 1, fid);
- else if (s = fgets(line, MAX_LINE, fid)) {
- if (*s == tag) {
- fputs(line, stdout);
- continue;
- } else if (input.ll) {
- val.u = dmstor(s, &s);
- val.v = dmstor(s, &s);
- } else {
- val.u = strtod(s, &s);
- val.v = strtod(s, &s);
- }
- }
- if (feof(fid))
- break;
- if (input.rev) {
- tmp = val.u;
- val.u = val.v;
- val.v = tmp;
- }
- /* data in, manupulate */
- if (input.cnv)
- val = pj_inv(val, input.cnv);
- if (input.hp)
- val = nad_cvt(val, 1, htab);
- /* nad conversion */
- if (ctab)
- val = nad_cvt(val, input.t83 ? 1 : 0, ctab);
- if (output.hp)
- val = nad_cvt(val, 0, htab);
- if (output.cnv)
- val = pj_fwd(val, output.cnv);
- /* output data */
- if (output.rev) {
- tmp = val.u;
- val.u = val.v;
- val.v = tmp;
- }
- if (output.bin)
- (void)fwrite(&val, sizeof(projUV), 1, stdout);
- else {
- if (echoin) {
- t = *s;
- *s = '\0';
- (void)fputs(line, stdout);
- (void)putchar('\t');
- *s = t;
- }
- if (val.u == HUGE_VAL)
- (void)fputs(oterr, stdout);
- else if (output.ll)
- if (oform) {
- (void)printf(oform, val.u * RAD_TO_DEG);
- (void)putchar('\t');
- (void)printf(oform, val.v * RAD_TO_DEG);
- } else if (output.rev) {
- (void)fputs(rtodms(pline, val.u, 'N', 'S'), stdout);
- (void)putchar('\t');
- (void)fputs(rtodms(pline, val.v, 'E', 'W'), stdout);
- } else {
- (void)fputs(rtodms(pline, val.u, 'E', 'W'), stdout);
- (void)putchar('\t');
- (void)fputs(rtodms(pline, val.v, 'N', 'S'), stdout);
- }
- else {
- (void)printf(oform ? oform : "%.2f", val.u);
- (void)putchar('\t');
- (void)printf(oform ? oform : "%.2f", val.v);
- }
- if (input.bin)
- putchar('\n');
- else
- (void)fputs(s, stdout);
- }
- }
-}
-
-int main(int argc, char **argv) {
- char *arg, **eargv = argv, work[MAX_PARGS];
- FILE *fid;
- int eargc = 0, c;
-
- if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR))
- ++emess_dat.Prog_name;
- else emess_dat.Prog_name = *argv;
- if (argc <= 1 ) {
- (void)fprintf(stderr, usage, pj_release, emess_dat.Prog_name);
- exit (0);
- }
- /* process run line arguments */
- while (--argc > 0) { /* collect run line arguments */
- if(**++argv == '-') for(arg = *argv;;) {
- switch(*++arg) {
- case '\0': /* position of "stdin" */
- if (arg[-1] == '-') eargv[eargc++] = "-";
- break;
- case 'i': /* input control */
- case 'o': /* output control */
- if (--argc <= 0) goto noargument;
- strncpy(work, *++argv, MAX_PARGS);
- set_ops(work, *arg == 'i' ? &input : &output);
- continue;
- case 'r': /* nad27/83 conversion zone */
- if (--argc <= 0) goto noargument;
- czone = *++argv;
- continue;
- case 'E': /* echo ascii input to ascii output */
- echoin = 1;
- continue;
- case 't': /* set col. one char */
- if (arg[1]) tag = *++arg;
- else emess(1,"missing -t col. 1 tag");
- continue;
- case 'W': /* specify seconds precision */
- case 'w': /* -W for constant field width */
- if ((c = arg[1]) != 0 && isdigit(c)) {
- set_rtodms(c - '0', *arg == 'W');
- ++arg;
- } else
- emess(1,"-W argument missing or non-digit");
- continue;
- case 'f': /* alternate output format degrees or xy */
- if (--argc <= 0) goto noargument;
- oform = *++argv;
- continue;
- case 'e': /* error line alternative */
- if (--argc <= 0)
-noargument: emess(1,"missing argument for -%c",*arg);
- oterr = *++argv;
- continue;
- default:
- emess(1, "invalid option: -%c",*arg);
- break;
- }
- break;
- } else /* assumed to be input file name(s) */
- eargv[eargc++] = *argv;
- }
- if (eargc == 0) /* if no specific files force sysin */
- eargv[eargc++] = "-";
- /* done with parameter and control input */
- setup();
- /* process input file list */
- for ( ; eargc-- ; ++eargv) {
- if (**eargv == '-') {
- fid = stdin;
- emess_dat.File_name = "<stdin>";
- } else {
- if ((fid = fopen(*eargv, "r")) == NULL) {
- emess(-2, *eargv, "input file");
- continue;
- }
- emess_dat.File_name = *eargv;
- }
- emess_dat.File_line = 0;
- /* process file */
- process(fid);
- (void)fclose(fid);
- emess_dat.File_name = 0;
- }
- exit(0); /* normal completion */
-}
diff --git a/src/3rdparty/proj/nad_cvt.c b/src/3rdparty/proj/nad_cvt.c
deleted file mode 100644
index 36fe6cb7..00000000
--- a/src/3rdparty/proj/nad_cvt.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#define PJ_LIB__
-#include <projects.h>
-#define MAX_TRY 9
-#define TOL 1e-12
- LP
-nad_cvt(LP in, int inverse, struct CTABLE *ct) {
- LP t, tb;
-
- if (in.lam == HUGE_VAL)
- return in;
- /* normalize input to ll origin */
- tb = in;
- tb.lam -= ct->ll.lam;
- tb.phi -= ct->ll.phi;
- tb.lam = adjlon(tb.lam - PI) + PI;
- t = nad_intr(tb, ct);
- if (inverse) {
- LP del, dif;
- int i = MAX_TRY;
-
- if (t.lam == HUGE_VAL) return t;
- t.lam = tb.lam + t.lam;
- t.phi = tb.phi - t.phi;
-
- do {
- del = nad_intr(t, ct);
-
- /* This case used to return failure, but I have
- changed it to return the first order approximation
- of the inverse shift. This avoids cases where the
- grid shift *into* this grid came from another grid.
- While we aren't returning optimally correct results
- I feel a close result in this case is better than
- no result. NFW
- To demonstrate use -112.5839956 49.4914451 against
- the NTv2 grid shift file from Canada. */
- if (del.lam == HUGE_VAL)
- {
- if( getenv( "PROJ_DEBUG" ) != NULL )
- fprintf( stderr,
- "Inverse grid shift iteration failed, presumably at grid edge.\n"
- "Using first approximation.\n" );
- /* return del */;
- break;
- }
-
- t.lam -= dif.lam = t.lam - del.lam - tb.lam;
- t.phi -= dif.phi = t.phi + del.phi - tb.phi;
- } while (i-- && fabs(dif.lam) > TOL && fabs(dif.phi) > TOL);
- if (i < 0) {
- if( getenv( "PROJ_DEBUG" ) != NULL )
- fprintf( stderr,
- "Inverse grid shift iterator failed to converge.\n" );
- t.lam = t.phi = HUGE_VAL;
- return t;
- }
- in.lam = adjlon(t.lam + ct->ll.lam);
- in.phi = t.phi + ct->ll.phi;
- } else {
- if (t.lam == HUGE_VAL)
- in = t;
- else {
- in.lam -= t.lam;
- in.phi += t.phi;
- }
- }
- return in;
-}
diff --git a/src/3rdparty/proj/nad_init.c b/src/3rdparty/proj/nad_init.c
deleted file mode 100644
index ec74a9c9..00000000
--- a/src/3rdparty/proj/nad_init.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/******************************************************************************
- * $Id: nad_init.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Load datum shift files into memory.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-
-#include <projects.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
-#ifdef _WIN32_WCE
-/* assert.h includes all Windows API headers and causes 'LP' name clash.
- * Here assert we disable assert() for Windows CE.
- * TODO - mloskot: re-implement porting friendly assert
- */
-# define assert(exp) ((void)0)
-#else
-# include <assert.h>
-#endif /* _WIN32_WCE */
-
-/************************************************************************/
-/* nad_ctable_load() */
-/* */
-/* Load the data portion of a ctable formatted grid. */
-/************************************************************************/
-
-int nad_ctable_load( struct CTABLE *ct, FILE *fid )
-
-{
- int a_size;
-
- fseek( fid, sizeof(struct CTABLE), SEEK_SET );
-
- /* read all the actual shift values */
- a_size = ct->lim.lam * ct->lim.phi;
- ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size);
- if( ct->cvs == NULL
- || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size )
- {
- pj_dalloc( ct->cvs );
- ct->cvs = NULL;
-
- if( getenv("PROJ_DEBUG") != NULL )
- {
- fprintf( stderr,
- "ctable loading failed on fread() - binary incompatible?\n" );
- }
-
- pj_errno = -38;
- return 0;
- }
-
- return 1;
-}
-
-/************************************************************************/
-/* nad_ctable_init() */
-/* */
-/* Read the header portion of a "ctable" format grid. */
-/************************************************************************/
-
-struct CTABLE *nad_ctable_init( FILE * fid )
-{
- struct CTABLE *ct;
- int id_end;
-
- /* read the table header */
- ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE));
- if( ct == NULL
- || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 )
- {
- pj_errno = -38;
- return NULL;
- }
-
- /* do some minimal validation to ensure the structure isn't corrupt */
- if( ct->lim.lam < 1 || ct->lim.lam > 100000
- || ct->lim.phi < 1 || ct->lim.phi > 100000 )
- {
- pj_errno = -38;
- return NULL;
- }
-
- /* trim white space and newlines off id */
- for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- )
- {
- if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' )
- ct->id[id_end] = '\0';
- else
- break;
- }
-
- ct->cvs = NULL;
-
- return ct;
-}
-
-/************************************************************************/
-/* nad_init() */
-/* */
-/* Read a datum shift file in any of the supported binary formats. */
-/************************************************************************/
-
-struct CTABLE *nad_init(char *name)
-{
- char fname[MAX_PATH_FILENAME+1];
- struct CTABLE *ct;
- FILE *fid;
- char header[512];
-
- errno = pj_errno = 0;
-
-/* -------------------------------------------------------------------- */
-/* Open the file using the usual search rules. */
-/* -------------------------------------------------------------------- */
- strcpy(fname, name);
- if (!(fid = pj_open_lib(fname, "rb"))) {
- pj_errno = errno;
- return 0;
- }
-
- ct = nad_ctable_init( fid );
- if( ct != NULL )
- {
- if( !nad_ctable_load( ct, fid ) )
- {
- nad_free( ct );
- ct = NULL;
- }
- }
-
- fclose(fid);
- return ct;
-}
-
-/************************************************************************/
-/* nad_free() */
-/* */
-/* Free a CTABLE grid shift structure produced by nad_init(). */
-/************************************************************************/
-
-void nad_free(struct CTABLE *ct)
-{
- if (ct) {
- if( ct->cvs != NULL )
- pj_dalloc(ct->cvs);
-
- pj_dalloc(ct);
- }
-}
diff --git a/src/3rdparty/proj/nad_intr.c b/src/3rdparty/proj/nad_intr.c
deleted file mode 100644
index 299f1806..00000000
--- a/src/3rdparty/proj/nad_intr.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Determine nad table correction value */
-#define PJ_LIB__
-#include <projects.h>
- LP
-nad_intr(LP t, struct CTABLE *ct) {
- LP val, frct;
- ILP indx;
- double m00, m10, m01, m11;
- FLP *f00, *f10, *f01, *f11;
- long index;
- int in;
-
- indx.lam = floor(t.lam /= ct->del.lam);
- indx.phi = floor(t.phi /= ct->del.phi);
- frct.lam = t.lam - indx.lam;
- frct.phi = t.phi - indx.phi;
- val.lam = val.phi = HUGE_VAL;
- if (indx.lam < 0) {
- if (indx.lam == -1 && frct.lam > 0.99999999999) {
- ++indx.lam;
- frct.lam = 0.;
- } else
- return val;
- } else if ((in = indx.lam + 1) >= ct->lim.lam) {
- if (in == ct->lim.lam && frct.lam < 1e-11) {
- --indx.lam;
- frct.lam = 1.;
- } else
- return val;
- }
- if (indx.phi < 0) {
- if (indx.phi == -1 && frct.phi > 0.99999999999) {
- ++indx.phi;
- frct.phi = 0.;
- } else
- return val;
- } else if ((in = indx.phi + 1) >= ct->lim.phi) {
- if (in == ct->lim.phi && frct.phi < 1e-11) {
- --indx.phi;
- frct.phi = 1.;
- } else
- return val;
- }
- index = indx.phi * ct->lim.lam + indx.lam;
- f00 = ct->cvs + index++;
- f10 = ct->cvs + index;
- index += ct->lim.lam;
- f11 = ct->cvs + index--;
- f01 = ct->cvs + index;
- m11 = m10 = frct.lam;
- m00 = m01 = 1. - frct.lam;
- m11 *= frct.phi;
- m01 *= frct.phi;
- frct.phi = 1. - frct.phi;
- m00 *= frct.phi;
- m10 *= frct.phi;
- val.lam = m00 * f00->lam + m10 * f10->lam +
- m01 * f01->lam + m11 * f11->lam;
- val.phi = m00 * f00->phi + m10 * f10->phi +
- m01 * f01->phi + m11 * f11->phi;
- return val;
-}
diff --git a/src/3rdparty/proj/nad_list.h b/src/3rdparty/proj/nad_list.h
deleted file mode 100644
index f82a2ab7..00000000
--- a/src/3rdparty/proj/nad_list.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/* projection list for program nad2nad */
-PROJ_HEAD(lcc, "Lambert Conformal Conic")
-PROJ_HEAD(omerc, "Oblique Mercator")
-PROJ_HEAD(poly, "Polyconic (American)")
-PROJ_HEAD(tmerc, "Transverse Mercator")
-PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)")
diff --git a/src/3rdparty/proj/org_proj4_Projections.h b/src/3rdparty/proj/org_proj4_Projections.h
deleted file mode 100644
index 3841e057..00000000
--- a/src/3rdparty/proj/org_proj4_Projections.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_proj4_Projections */
-
-#ifndef _Included_org_proj4_Projections
-#define _Included_org_proj4_Projections
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_proj4_Projections
- * Method: getProjInfo
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: org_proj4_Projections
- * Method: getEllipsInfo
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: org_proj4_Projections
- * Method: transform
- * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V
- */
-JNIEXPORT void JNICALL Java_org_proj4_Projections_transform
- (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jstring, jstring, jlong, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/3rdparty/proj/p_series.c b/src/3rdparty/proj/p_series.c
deleted file mode 100644
index 7499ab49..00000000
--- a/src/3rdparty/proj/p_series.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* print row coefficients of Tseries structure */
-#include "projects.h"
-#include <stdio.h>
-#include <string.h>
-#define NF 20 /* length of final format string */
-#define CUT 60 /* check length of line */
- void
-p_series(Tseries *T, FILE *file, char *fmt) {
- int i, j, n, L;
- char format[NF+1];
-
- *format = ' ';
- strncpy(format + 1, fmt, NF - 3);
- strcat(format, "%n");
- fprintf(file, "u: %d\n", T->mu+1);
- for (i = 0; i <= T->mu; ++i)
- if (T->cu[i].m) {
- fprintf(file, "%d %d%n", i, T->cu[i].m, &L);
- n = 0;
- for (j = 0; j < T->cu[i].m; ++j) {
- if ((L += n) > CUT)
- fprintf(file, "\n %n", &L);
- fprintf(file, format, T->cu[i].c[j], &n);
- }
- fputc('\n', file);
- }
- fprintf(file, "v: %d\n", T->mv+1);
- for (i = 0; i <= T->mv; ++i)
- if (T->cv[i].m) {
- fprintf(file, "%d %d%n", i, T->cv[i].m, &L);
- n = 0;
- for (j = 0; j < T->cv[i].m; ++j) {
- if ((L += n) > 60)
- fprintf(file, "\n %n", &L);
- fprintf(file, format, T->cv[i].c[j], &n);
- }
- fputc('\n', file);
- }
-}
diff --git a/src/3rdparty/proj/pj_apply_gridshift.c b/src/3rdparty/proj/pj_apply_gridshift.c
deleted file mode 100644
index 9ccfee39..00000000
--- a/src/3rdparty/proj/pj_apply_gridshift.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/******************************************************************************
- * $Id: pj_apply_gridshift.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to
- * NAD83 or the reverse). This module is responsible for keeping
- * a list of loaded grids, and calling with each one that is
- * allowed for a given datum (expressed as the nadgrids= parameter).
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-
-#include <projects.h>
-#include <string.h>
-#include <math.h>
-
-/************************************************************************/
-/* pj_apply_gridshift() */
-/************************************************************************/
-
-int pj_apply_gridshift( const char *nadgrids, int inverse,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- int grid_count = 0;
- PJ_GRIDINFO **tables;
- int i;
- int debug_flag = getenv( "PROJ_DEBUG" ) != NULL;
- static int debug_count = 0;
-
- pj_errno = 0;
-
- tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count);
- if( tables == NULL || grid_count == 0 )
- return pj_errno;
-
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
- LP input, output;
- int itable;
-
- input.phi = y[io];
- input.lam = x[io];
- output.phi = HUGE_VAL;
- output.lam = HUGE_VAL;
-
- /* keep trying till we find a table that works */
- for( itable = 0; itable < grid_count; itable++ )
- {
- PJ_GRIDINFO *gi = tables[itable];
- struct CTABLE *ct = gi->ct;
-
- /* skip tables that don't match our point at all. */
- if( ct->ll.phi > input.phi || ct->ll.lam > input.lam
- || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi
- || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam )
- continue;
-
- /* If we have child nodes, check to see if any of them apply. */
- if( gi->child != NULL )
- {
- PJ_GRIDINFO *child;
-
- for( child = gi->child; child != NULL; child = child->next )
- {
- struct CTABLE *ct1 = child->ct;
-
- if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam
- || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi
- || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam)
- continue;
-
- break;
- }
-
- /* we found a more refined child node to use */
- if( child != NULL )
- {
- gi = child;
- ct = child->ct;
- }
- }
-
- /* load the grid shift info if we don't have it. */
- if( ct->cvs == NULL && !pj_gridinfo_load( gi ) )
- {
- pj_errno = -38;
- return pj_errno;
- }
-
- output = nad_cvt( input, inverse, ct );
- if( output.lam != HUGE_VAL )
- {
- if( debug_flag && debug_count++ < 20 )
- fprintf( stderr,
- "pj_apply_gridshift(): used %s\n",
- ct->id );
- break;
- }
- }
-
- if( output.lam == HUGE_VAL )
- {
- if( debug_flag )
- {
- fprintf( stderr,
- "pj_apply_gridshift(): failed to find a grid shift table for\n"
- " location (%.7fdW,%.7fdN)\n",
- x[io] * RAD_TO_DEG,
- y[io] * RAD_TO_DEG );
- fprintf( stderr,
- " tried: %s\n", nadgrids );
- }
-
- pj_errno = -38;
- return pj_errno;
- }
- else
- {
- y[io] = output.phi;
- x[io] = output.lam;
- }
- }
-
- return 0;
-}
-
diff --git a/src/3rdparty/proj/pj_auth.c b/src/3rdparty/proj/pj_auth.c
deleted file mode 100644
index 599b8f77..00000000
--- a/src/3rdparty/proj/pj_auth.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* determine latitude from authalic latitude */
-#include <projects.h>
-# define P00 .33333333333333333333
-# define P01 .17222222222222222222
-# define P02 .10257936507936507936
-# define P10 .06388888888888888888
-# define P11 .06640211640211640211
-# define P20 .01641501294219154443
-#define APA_SIZE 3
- double *
-pj_authset(double es) {
- double t, *APA;
-
- if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) {
- APA[0] = es * P00;
- t = es * es;
- APA[0] += t * P01;
- APA[1] = t * P10;
- t *= es;
- APA[0] += t * P02;
- APA[1] += t * P11;
- APA[2] = t * P20;
- }
- return APA;
-}
- double
-pj_authlat(double beta, double *APA) {
- double t = beta+beta;
- return(beta + APA[0] * sin(t) + APA[1] * sin(t+t) + APA[2] * sin(t+t+t));
-}
diff --git a/src/3rdparty/proj/pj_datum_set.c b/src/3rdparty/proj/pj_datum_set.c
deleted file mode 100644
index c2b8e1bb..00000000
--- a/src/3rdparty/proj/pj_datum_set.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/******************************************************************************
- * $Id: pj_datum_set.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Apply datum definition to PJ structure from initialization string.
- * Author: Frank Warmerdam, warmerda@home.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#include <projects.h>
-#include <string.h>
-
-/* SEC_TO_RAD = Pi/180/3600 */
-#define SEC_TO_RAD 4.84813681109535993589914102357e-6
-
-/************************************************************************/
-/* pj_datum_set() */
-/************************************************************************/
-
-int pj_datum_set(paralist *pl, PJ *projdef)
-
-{
- const char *name, *towgs84, *nadgrids;
-
- projdef->datum_type = PJD_UNKNOWN;
-
-/* -------------------------------------------------------------------- */
-/* Is there a datum definition in the parameters list? If so, */
-/* add the defining values to the parameter list. Note that */
-/* this will append the ellipse definition as well as the */
-/* towgs84= and related parameters. It should also be pointed */
-/* out that the addition is permanent rather than temporary */
-/* like most other keyword expansion so that the ellipse */
-/* definition will last into the pj_ell_set() function called */
-/* after this one. */
-/* -------------------------------------------------------------------- */
- if( (name = pj_param(pl,"sdatum").s) != NULL )
- {
- paralist *curr;
- const char *s;
- int i;
-
- /* find the end of the list, so we can add to it */
- for (curr = pl; curr && curr->next ; curr = curr->next) {}
-
- /* find the datum definition */
- for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {}
-
- if (!s) { pj_errno = -9; return 1; }
-
- if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 )
- {
- char entry[100];
-
- strcpy( entry, "ellps=" );
- strncat( entry, pj_datums[i].ellipse_id, 80 );
- curr = curr->next = pj_mkparam(entry);
- }
-
- if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 )
- curr = curr->next = pj_mkparam(pj_datums[i].defn);
- }
-
-/* -------------------------------------------------------------------- */
-/* Check for nadgrids parameter. */
-/* -------------------------------------------------------------------- */
- if( (nadgrids = pj_param(pl,"snadgrids").s) != NULL )
- {
- /* We don't actually save the value separately. It will continue
- to exist int he param list for use in pj_apply_gridshift.c */
-
- projdef->datum_type = PJD_GRIDSHIFT;
- }
-
-/* -------------------------------------------------------------------- */
-/* Check for towgs84 parameter. */
-/* -------------------------------------------------------------------- */
- else if( (towgs84 = pj_param(pl,"stowgs84").s) != NULL )
- {
- int parm_count = 0;
- const char *s;
-
- memset( projdef->datum_params, 0, sizeof(double) * 7);
-
- /* parse out the parameters */
- s = towgs84;
- for( s = towgs84; *s != '\0' && parm_count < 7; )
- {
- projdef->datum_params[parm_count++] = atof(s);
- while( *s != '\0' && *s != ',' )
- s++;
- if( *s == ',' )
- s++;
- }
-
- if( projdef->datum_params[3] != 0.0
- || projdef->datum_params[4] != 0.0
- || projdef->datum_params[5] != 0.0
- || projdef->datum_params[6] != 0.0 )
- {
- projdef->datum_type = PJD_7PARAM;
-
- /* transform from arc seconds to radians */
- projdef->datum_params[3] *= SEC_TO_RAD;
- projdef->datum_params[4] *= SEC_TO_RAD;
- projdef->datum_params[5] *= SEC_TO_RAD;
- /* transform from parts per million to scaling factor */
- projdef->datum_params[6] =
- (projdef->datum_params[6]/1000000.0) + 1;
- }
- else
- projdef->datum_type = PJD_3PARAM;
-
- /* Note that pj_init() will later switch datum_type to
- PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */
- }
-
- return 0;
-}
diff --git a/src/3rdparty/proj/pj_datums.c b/src/3rdparty/proj/pj_datums.c
deleted file mode 100644
index be0bb8b0..00000000
--- a/src/3rdparty/proj/pj_datums.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/******************************************************************************
- * $Id: pj_datums.c 1558 2009-04-02 18:25:58Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Built in datum list.
- * Author: Frank Warmerdam, warmerda@home.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_DATUMS__
-
-#include <projects.h>
-
-/*
- * The ellipse code must match one from pj_ellps.c. The datum id should
- * be kept to 12 characters or less if possible. Use the official OGC
- * datum name for the comments if available.
- */
-
-C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = {
-/* id definition ellipse comments */
-/* -- ---------- ------- -------- */
-"WGS84", "towgs84=0,0,0", "WGS84", "",
-"GGRS87", "towgs84=-199.87,74.79,246.62", "GRS80",
- "Greek_Geodetic_Reference_System_1987",
-"NAD83", "towgs84=0,0,0", "GRS80",
- "North_American_Datum_1983",
-"NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
- "clrk66",
- "North_American_Datum_1927",
-"potsdam", "towgs84=606.0,23.0,413.0", "bessel", "Potsdam Rauenberg 1950 DHDN",
-"carthage", "towgs84=-263.0,6.0,431.0", "clark80", "Carthage 1934 Tunisia",
-"hermannskogel", "towgs84=653.0,-212.0,449.0", "bessel", "Hermannskogel",
-"ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", "mod_airy", "Ireland 1965",
-"nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", "intl", "New Zealand Geodetic Datum 1949",
-"OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", "airy", "Airy 1830",
-NULL, NULL, NULL, NULL
-};
-
-struct PJ_DATUMS *pj_get_datums_ref()
-
-{
- return pj_datums;
-}
-
-C_NAMESPACE_VAR struct PJ_PRIME_MERIDIANS pj_prime_meridians[] = {
- /* id definition */
- /* -- ---------- */
- "greenwich", "0dE",
- "lisbon", "9d07'54.862\"W",
- "paris", "2d20'14.025\"E",
- "bogota", "74d04'51.3\"W",
- "madrid", "3d41'16.58\"W",
- "rome", "12d27'8.4\"E",
- "bern", "7d26'22.5\"E",
- "jakarta", "106d48'27.79\"E",
- "ferro", "17d40'W",
- "brussels", "4d22'4.71\"E",
- "stockholm", "18d3'29.8\"E",
- "athens", "23d42'58.815\"E",
- "oslo", "10d43'22.5\"E",
- NULL, NULL
-};
-
-struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref()
-
-{
- return pj_prime_meridians;
-}
-
diff --git a/src/3rdparty/proj/pj_deriv.c b/src/3rdparty/proj/pj_deriv.c
deleted file mode 100644
index 7b4ef627..00000000
--- a/src/3rdparty/proj/pj_deriv.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* dervative of (*P->fwd) projection */
-#define PJ_LIB__
-#include "projects.h"
- int
-pj_deriv(LP lp, double h, PJ *P, struct DERIVS *der) {
- XY t;
-
- lp.lam += h;
- lp.phi += h;
- if (fabs(lp.phi) > HALFPI) return 1;
- h += h;
- t = (*P->fwd)(lp, P);
- if (t.x == HUGE_VAL) return 1;
- der->x_l = t.x; der->y_p = t.y; der->x_p = -t.x; der->y_l = -t.y;
- lp.phi -= h;
- if (fabs(lp.phi) > HALFPI) return 1;
- t = (*P->fwd)(lp, P);
- if (t.x == HUGE_VAL) return 1;
- der->x_l += t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l -= t.y;
- lp.lam -= h;
- t = (*P->fwd)(lp, P);
- if (t.x == HUGE_VAL) return 1;
- der->x_l -= t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l += t.y;
- lp.phi += h;
- t = (*P->fwd)(lp, P);
- if (t.x == HUGE_VAL) return 1;
- der->x_l -= t.x; der->y_p += t.y; der->x_p -= t.x; der->y_l += t.y;
- der->x_l /= (h += h);
- der->y_p /= h;
- der->x_p /= h;
- der->y_l /= h;
- return 0;
-}
diff --git a/src/3rdparty/proj/pj_ell_set.c b/src/3rdparty/proj/pj_ell_set.c
deleted file mode 100644
index 989701ec..00000000
--- a/src/3rdparty/proj/pj_ell_set.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* set ellipsoid parameters a and es */
-#include <projects.h>
-#include <string.h>
-#define SIXTH .1666666666666666667 /* 1/6 */
-#define RA4 .04722222222222222222 /* 17/360 */
-#define RA6 .02215608465608465608 /* 67/3024 */
-#define RV4 .06944444444444444444 /* 5/72 */
-#define RV6 .04243827160493827160 /* 55/1296 */
- int /* initialize geographic shape parameters */
-pj_ell_set(paralist *pl, double *a, double *es) {
- int i;
- double b=0.0, e;
- char *name;
- paralist *start = 0, *curr;
-
- /* check for varying forms of ellipsoid input */
- *a = *es = 0.;
- /* R takes precedence */
- if (pj_param(pl, "tR").i)
- *a = pj_param(pl, "dR").f;
- else { /* probable elliptical figure */
-
- /* check if ellps present and temporarily append its values to pl */
- if (name = pj_param(pl, "sellps").s) {
- char *s;
-
- for (start = pl; start && start->next ; start = start->next) ;
- curr = start;
- for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ;
- if (!s) { pj_errno = -9; return 1; }
- curr = curr->next = pj_mkparam(pj_ellps[i].major);
- curr = curr->next = pj_mkparam(pj_ellps[i].ell);
- }
- *a = pj_param(pl, "da").f;
- if (pj_param(pl, "tes").i) /* eccentricity squared */
- *es = pj_param(pl, "des").f;
- else if (pj_param(pl, "te").i) { /* eccentricity */
- e = pj_param(pl, "de").f;
- *es = e * e;
- } else if (pj_param(pl, "trf").i) { /* recip flattening */
- *es = pj_param(pl, "drf").f;
- if (!*es) {
- pj_errno = -10;
- goto bomb;
- }
- *es = 1./ *es;
- *es = *es * (2. - *es);
- } else if (pj_param(pl, "tf").i) { /* flattening */
- *es = pj_param(pl, "df").f;
- *es = *es * (2. - *es);
- } else if (pj_param(pl, "tb").i) { /* minor axis */
- b = pj_param(pl, "db").f;
- *es = 1. - (b * b) / (*a * *a);
- } /* else *es == 0. and sphere of radius *a */
- if (!b)
- b = *a * sqrt(1. - *es);
- /* following options turn ellipsoid into equivalent sphere */
- if (pj_param(pl, "bR_A").i) { /* sphere--area of ellipsoid */
- *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6));
- *es = 0.;
- } else if (pj_param(pl, "bR_V").i) { /* sphere--vol. of ellipsoid */
- *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6));
- *es = 0.;
- } else if (pj_param(pl, "bR_a").i) { /* sphere--arithmetic mean */
- *a = .5 * (*a + b);
- *es = 0.;
- } else if (pj_param(pl, "bR_g").i) { /* sphere--geometric mean */
- *a = sqrt(*a * b);
- *es = 0.;
- } else if (pj_param(pl, "bR_h").i) { /* sphere--harmonic mean */
- *a = 2. * *a * b / (*a + b);
- *es = 0.;
- } else if ((i = pj_param(pl, "tR_lat_a").i) || /* sphere--arith. */
- pj_param(pl, "tR_lat_g").i) { /* or geom. mean at latitude */
- double tmp;
-
- tmp = sin(pj_param(pl, i ? "rR_lat_a" : "rR_lat_g").f);
- if (fabs(tmp) > HALFPI) {
- pj_errno = -11;
- goto bomb;
- }
- tmp = 1. - *es * tmp * tmp;
- *a *= i ? .5 * (1. - *es + tmp) / ( tmp * sqrt(tmp)) :
- sqrt(1. - *es) / tmp;
- *es = 0.;
- }
-bomb:
- if (start) { /* clean up temporary extension of list */
- pj_dalloc(start->next->next);
- pj_dalloc(start->next);
- start->next = 0;
- }
- if (pj_errno)
- return 1;
- }
- /* some remaining checks */
- if (*es < 0.)
- { pj_errno = -12; return 1; }
- if (*a <= 0.)
- { pj_errno = -13; return 1; }
- return 0;
-}
diff --git a/src/3rdparty/proj/pj_ellps.c b/src/3rdparty/proj/pj_ellps.c
deleted file mode 100644
index 68521926..00000000
--- a/src/3rdparty/proj/pj_ellps.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* definition of standard geoids */
-#define PJ_ELLPS__
-#include "projects.h"
-
-C_NAMESPACE_VAR struct PJ_ELLPS
-pj_ellps[] = {
-"MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983",
-"SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85",
-"GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)",
-"IAU76", "a=6378140.0", "rf=298.257", "IAU 1976",
-"airy", "a=6377563.396", "b=6356256.910", "Airy 1830",
-"APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965",
-"NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965",
-"mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy",
-"andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)",
-"aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969",
-"GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)",
-"bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841",
-"bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)",
-"clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866",
-"clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod.",
-"CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799",
-"delmbr", "a=6376428.", "rf=311.5", "Delambre 1810 (Belgium)",
-"engelis", "a=6378136.05", "rf=298.2566", "Engelis 1985",
-"evrst30", "a=6377276.345", "rf=300.8017", "Everest 1830",
-"evrst48", "a=6377304.063", "rf=300.8017", "Everest 1948",
-"evrst56", "a=6377301.243", "rf=300.8017", "Everest 1956",
-"evrst69", "a=6377295.664", "rf=300.8017", "Everest 1969",
-"evrstSS", "a=6377298.556", "rf=300.8017", "Everest (Sabah & Sarawak)",
-"fschr60", "a=6378166.", "rf=298.3", "Fischer (Mercury Datum) 1960",
-"fschr60m", "a=6378155.", "rf=298.3", "Modified Fischer 1960",
-"fschr68", "a=6378150.", "rf=298.3", "Fischer 1968",
-"helmert", "a=6378200.", "rf=298.3", "Helmert 1906",
-"hough", "a=6378270.0", "rf=297.", "Hough",
-"intl", "a=6378388.0", "rf=297.", "International 1909 (Hayford)",
-"krass", "a=6378245.0", "rf=298.3", "Krassovsky, 1942",
-"kaula", "a=6378163.", "rf=298.24", "Kaula 1961",
-"lerch", "a=6378139.", "rf=298.257", "Lerch 1979",
-"mprts", "a=6397300.", "rf=191.", "Maupertius 1738",
-"new_intl", "a=6378157.5", "b=6356772.2", "New International 1967",
-"plessis", "a=6376523.", "b=6355863.", "Plessis 1817 (France)",
-"SEasia", "a=6378155.0", "b=6356773.3205", "Southeast Asia",
-"walbeck", "a=6376896.0", "b=6355834.8467", "Walbeck",
-"WGS60", "a=6378165.0", "rf=298.3", "WGS 60",
-"WGS66", "a=6378145.0", "rf=298.25", "WGS 66",
-"WGS72", "a=6378135.0", "rf=298.26", "WGS 72",
-"WGS84", "a=6378137.0", "rf=298.257223563", "WGS 84",
-"sphere", "a=6370997.0", "b=6370997.0", "Normal Sphere (r=6370997)",
-0,0,0,0
-};
-
-struct PJ_ELLPS *pj_get_ellps_ref()
-
-{
- return pj_ellps;
-}
diff --git a/src/3rdparty/proj/pj_errno.c b/src/3rdparty/proj/pj_errno.c
deleted file mode 100644
index 8b91ab29..00000000
--- a/src/3rdparty/proj/pj_errno.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* For full ANSI compliance of global variable */
-
-#include <projects.h>
-
-C_NAMESPACE_VAR int pj_errno = 0;
-
-/************************************************************************/
-/* pj_get_errno_ref() */
-/************************************************************************/
-
-int *pj_get_errno_ref()
-
-{
- return &pj_errno;
-}
-
-/* end */
diff --git a/src/3rdparty/proj/pj_factors.c b/src/3rdparty/proj/pj_factors.c
deleted file mode 100644
index ee48cfb7..00000000
--- a/src/3rdparty/proj/pj_factors.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* projection scale factors */
-#define PJ_LIB__
-#include <projects.h>
-#include <errno.h>
-#ifndef DEFAULT_H
-#define DEFAULT_H 1e-5 /* radian default for numeric h */
-#endif
-#define EPS 1.0e-12
- int
-pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) {
- struct DERIVS der;
- double cosphi, t, n, r;
-
- /* check for forward and latitude or longitude overange */
- if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) {
- pj_errno = -14;
- return 1;
- } else { /* proceed */
- errno = pj_errno = 0;
- if (h < EPS)
- h = DEFAULT_H;
- if (fabs(lp.phi) > (HALFPI - h))
- /* adjust to value around pi/2 where derived still exists*/
- lp.phi = lp.phi < 0. ? (-HALFPI+h) : (HALFPI-h);
- else if (P->geoc)
- lp.phi = atan(P->rone_es * tan(lp.phi));
- lp.lam -= P->lam0; /* compute del lp.lam */
- if (!P->over)
- lp.lam = adjlon(lp.lam); /* adjust del longitude */
- if (P->spc) /* get what projection analytic values */
- P->spc(lp, P, fac);
- if (((fac->code & (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) !=
- (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) &&
- pj_deriv(lp, h, P, &der))
- return 1;
- if (!(fac->code & IS_ANAL_XL_YL)) {
- fac->der.x_l = der.x_l;
- fac->der.y_l = der.y_l;
- }
- if (!(fac->code & IS_ANAL_XP_YP)) {
- fac->der.x_p = der.x_p;
- fac->der.y_p = der.y_p;
- }
- cosphi = cos(lp.phi);
- if (!(fac->code & IS_ANAL_HK)) {
- fac->h = hypot(fac->der.x_p, fac->der.y_p);
- fac->k = hypot(fac->der.x_l, fac->der.y_l) / cosphi;
- if (P->es) {
- t = sin(lp.phi);
- t = 1. - P->es * t * t;
- n = sqrt(t);
- fac->h *= t * n / P->one_es;
- fac->k *= n;
- r = t * t / P->one_es;
- } else
- r = 1.;
- } else if (P->es) {
- r = sin(lp.phi);
- r = 1. - P->es * r * r;
- r = r * r / P->one_es;
- } else
- r = 1.;
- /* convergence */
- if (!(fac->code & IS_ANAL_CONV)) {
- fac->conv = - atan2(fac->der.y_l, fac->der.x_l);
- if (fac->code & IS_ANAL_XL_YL)
- fac->code |= IS_ANAL_CONV;
- }
- /* areal scale factor */
- fac->s = (fac->der.y_p * fac->der.x_l - fac->der.x_p * fac->der.y_l) *
- r / cosphi;
- /* meridian-parallel angle theta prime */
- fac->thetap = aasin(fac->s / (fac->h * fac->k));
- /* Tissot ellips axis */
- t = fac->k * fac->k + fac->h * fac->h;
- fac->a = sqrt(t + 2. * fac->s);
- t = (t = t - 2. * fac->s) <= 0. ? 0. : sqrt(t);
- fac->b = 0.5 * (fac->a - t);
- fac->a = 0.5 * (fac->a + t);
- /* omega */
- fac->omega = 2. * aasin((fac->a - fac->b)/(fac->a + fac->b));
- }
- return 0;
-}
diff --git a/src/3rdparty/proj/pj_fwd.c b/src/3rdparty/proj/pj_fwd.c
deleted file mode 100644
index 880a9319..00000000
--- a/src/3rdparty/proj/pj_fwd.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* general forward projection */
-#define PJ_LIB__
-#include <projects.h>
-#include <errno.h>
-# define EPS 1.0e-12
- XY /* forward projection entry */
-pj_fwd(LP lp, PJ *P) {
- XY xy;
- double t;
-
- /* check for forward and latitude or longitude overange */
- if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) {
- xy.x = xy.y = HUGE_VAL;
- pj_errno = -14;
- } else { /* proceed with projection */
- errno = pj_errno = 0;
- if (fabs(t) <= EPS)
- lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
- else if (P->geoc)
- lp.phi = atan(P->rone_es * tan(lp.phi));
- lp.lam -= P->lam0; /* compute del lp.lam */
- if (!P->over)
- lp.lam = adjlon(lp.lam); /* adjust del longitude */
- xy = (*P->fwd)(lp, P); /* project */
- if (pj_errno || (pj_errno = errno))
- xy.x = xy.y = HUGE_VAL;
- /* adjust for major axis and easting/northings */
- else {
- xy.x = P->fr_meter * (P->a * xy.x + P->x0);
- xy.y = P->fr_meter * (P->a * xy.y + P->y0);
- }
- }
- return xy;
-}
diff --git a/src/3rdparty/proj/pj_gauss.c b/src/3rdparty/proj/pj_gauss.c
deleted file mode 100644
index ac794f20..00000000
--- a/src/3rdparty/proj/pj_gauss.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-** libproj -- library of cartographic projections
-**
-** Copyright (c) 2003 Gerald I. Evenden
-*/
-static const char
-LIBPROJ_ID[] = "$Id: pj_gauss.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/*
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be
-** included in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#define PJ_LIB__
-#include <projects.h>
-
-#define MAX_ITER 20
-
-struct GAUSS {
- double C;
- double K;
- double e;
- double ratexp;
-};
-#define EN ((struct GAUSS *)en)
-#define DEL_TOL 1e-14
- static double
-srat(double esinp, double exp) {
- return(pow((1.-esinp)/(1.+esinp), exp));
-}
-
- void *
-pj_gauss_ini(double e, double phi0, double *chi, double *rc) {
- double sphi, cphi, es;
- struct GAUSS *en;
-
- if ((en = (struct GAUSS *)malloc(sizeof(struct GAUSS))) == NULL)
- return (NULL);
- es = e * e;
- EN->e = e;
- sphi = sin(phi0);
- cphi = cos(phi0); cphi *= cphi;
- *rc = sqrt(1. - es) / (1. - es * sphi * sphi);
- EN->C = sqrt(1. + es * cphi * cphi / (1. - es));
- *chi = asin(sphi / EN->C);
- EN->ratexp = 0.5 * EN->C * e;
- EN->K = tan(.5 * *chi + FORTPI) / (
- pow(tan(.5 * phi0 + FORTPI), EN->C) *
- srat(EN->e * sphi, EN->ratexp) );
- return ((void *)en);
-}
- LP
-pj_gauss(LP elp, const void *en) {
- LP slp;
-
- slp.phi = 2. * atan( EN->K *
- pow(tan(.5 * elp.phi + FORTPI), EN->C) *
- srat(EN->e * sin(elp.phi), EN->ratexp) ) - HALFPI;
- slp.lam = EN->C * (elp.lam);
- return(slp);
-}
- LP
-pj_inv_gauss(LP slp, const void *en) {
- LP elp;
- double num;
- int i;
-
- elp.lam = slp.lam / EN->C;
- num = pow(tan(.5 * slp.phi + FORTPI)/EN->K, 1./EN->C);
- for (i = MAX_ITER; i; --i) {
- elp.phi = 2. * atan(num * srat(EN->e * sin(slp.phi), -.5 * EN->e))
- - HALFPI;
- if (fabs(elp.phi - slp.phi) < DEL_TOL) break;
- slp.phi = elp.phi;
- }
- /* convergence failed */
- if (!i)
- pj_errno = -17;
- return (elp);
-}
diff --git a/src/3rdparty/proj/pj_geocent.c b/src/3rdparty/proj/pj_geocent.c
deleted file mode 100644
index e94730f2..00000000
--- a/src/3rdparty/proj/pj_geocent.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/******************************************************************************
- * $Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Stub projection for geocentric. The transformation isn't
- * really done here since this code is 2D. The real transformation
- * is handled by pj_transform.c.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2002, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-#include <projects.h>
-
-PJ_CVSID("$Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-PROJ_HEAD(geocent, "Geocentric") "\n\t";
-
-FORWARD(forward);
- xy.x = lp.lam;
- xy.y = lp.phi;
- return xy;
-}
-INVERSE(inverse);
- lp.phi = xy.y;
- lp.lam = xy.x;
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
-
-ENTRY0(geocent)
- P->is_geocent = 1;
- P->x0 = 0.0;
- P->y0 = 0.0;
- P->inv = inverse; P->fwd = forward;
-ENDENTRY(P)
-
diff --git a/src/3rdparty/proj/pj_gridinfo.c b/src/3rdparty/proj/pj_gridinfo.c
deleted file mode 100644
index 7a4612f1..00000000
--- a/src/3rdparty/proj/pj_gridinfo.c
+++ /dev/null
@@ -1,686 +0,0 @@
-/******************************************************************************
- * $Id: pj_gridinfo.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes
- * loaders for all formats but CTABLE (in nad_init.c).
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-
-#include <projects.h>
-#include <string.h>
-#include <math.h>
-#include <errno.h>
-
-#ifdef _WIN32_WCE
-/* assert.h includes all Windows API headers and causes 'LP' name clash.
- * Here assert we disable assert() for Windows CE.
- * TODO - mloskot: re-implement porting friendly assert
- */
-# define assert(exp) ((void)0)
-#else
-# include <assert.h>
-#endif /* _WIN32_WCE */
-
-/************************************************************************/
-/* swap_words() */
-/* */
-/* Convert the byte order of the given word(s) in place. */
-/************************************************************************/
-
-static int byte_order_test = 1;
-#define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1)
-
-static void swap_words( unsigned char *data, int word_size, int word_count )
-
-{
- int word;
-
- for( word = 0; word < word_count; word++ )
- {
- int i;
-
- for( i = 0; i < word_size/2; i++ )
- {
- int t;
-
- t = data[i];
- data[i] = data[word_size-i-1];
- data[word_size-i-1] = t;
- }
-
- data += word_size;
- }
-}
-
-/************************************************************************/
-/* pj_gridinfo_free() */
-/************************************************************************/
-
-void pj_gridinfo_free( PJ_GRIDINFO *gi )
-
-{
- if( gi == NULL )
- return;
-
- if( gi->child != NULL )
- {
- PJ_GRIDINFO *child, *next;
-
- for( child = gi->child; child != NULL; child=next)
- {
- next=child->next;
- pj_gridinfo_free( child );
- }
- }
-
- if( gi->ct != NULL )
- nad_free( gi->ct );
-
- free( gi->gridname );
- if( gi->filename != NULL )
- free( gi->filename );
-
- pj_dalloc( gi );
-}
-
-/************************************************************************/
-/* pj_gridinfo_load() */
-/* */
-/* This function is intended to implement delayed loading of */
-/* the data contents of a grid file. The header and related */
-/* stuff are loaded by pj_gridinfo_init(). */
-/************************************************************************/
-
-int pj_gridinfo_load( PJ_GRIDINFO *gi )
-
-{
- if( gi == NULL || gi->ct == NULL )
- return 0;
-
-/* -------------------------------------------------------------------- */
-/* ctable is currently loaded on initialization though there is */
-/* no real reason not to support delayed loading for it as well. */
-/* -------------------------------------------------------------------- */
- if( strcmp(gi->format,"ctable") == 0 )
- {
- FILE *fid;
- int result;
-
- fid = pj_open_lib( gi->filename, "rb" );
-
- if( fid == NULL )
- {
- pj_errno = -38;
- return 0;
- }
-
- result = nad_ctable_load( gi->ct, fid );
-
- fclose( fid );
-
- return result;
- }
-
-/* -------------------------------------------------------------------- */
-/* NTv1 format. */
-/* We process one line at a time. Note that the array storage */
-/* direction (e-w) is different in the NTv1 file and what */
-/* the CTABLE is supposed to have. The phi/lam are also */
-/* reversed, and we have to be aware of byte swapping. */
-/* -------------------------------------------------------------------- */
- else if( strcmp(gi->format,"ntv1") == 0 )
- {
- double *row_buf;
- int row;
- FILE *fid;
-
- fid = pj_open_lib( gi->filename, "rb" );
-
- if( fid == NULL )
- {
- pj_errno = -38;
- return 0;
- }
-
- fseek( fid, gi->grid_offset, SEEK_SET );
-
- row_buf = (double *) pj_malloc(gi->ct->lim.lam * sizeof(double) * 2);
- gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP));
- if( row_buf == NULL || gi->ct->cvs == NULL )
- {
- pj_errno = -38;
- return 0;
- }
-
- for( row = 0; row < gi->ct->lim.phi; row++ )
- {
- int i;
- FLP *cvs;
- double *diff_seconds;
-
- if( fread( row_buf, sizeof(double), gi->ct->lim.lam * 2, fid )
- != 2 * gi->ct->lim.lam )
- {
- pj_dalloc( row_buf );
- pj_dalloc( gi->ct->cvs );
- pj_errno = -38;
- return 0;
- }
-
- if( IS_LSB )
- swap_words( (unsigned char *) row_buf, 8, gi->ct->lim.lam*2 );
-
- /* convert seconds to radians */
- diff_seconds = row_buf;
-
- for( i = 0; i < gi->ct->lim.lam; i++ )
- {
- cvs = gi->ct->cvs + (row) * gi->ct->lim.lam
- + (gi->ct->lim.lam - i - 1);
-
- cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0);
- cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0);
- }
- }
-
- pj_dalloc( row_buf );
-
- fclose( fid );
-
- return 1;
- }
-
-/* -------------------------------------------------------------------- */
-/* NTv2 format. */
-/* We process one line at a time. Note that the array storage */
-/* direction (e-w) is different in the NTv2 file and what */
-/* the CTABLE is supposed to have. The phi/lam are also */
-/* reversed, and we have to be aware of byte swapping. */
-/* -------------------------------------------------------------------- */
- else if( strcmp(gi->format,"ntv2") == 0 )
- {
- float *row_buf;
- int row;
- FILE *fid;
-
- if( getenv("PROJ_DEBUG") != NULL )
- {
- fprintf( stderr, "NTv2 - loading grid %s\n", gi->ct->id );
- }
-
- fid = pj_open_lib( gi->filename, "rb" );
-
- if( fid == NULL )
- {
- pj_errno = -38;
- return 0;
- }
-
- fseek( fid, gi->grid_offset, SEEK_SET );
-
- row_buf = (float *) pj_malloc(gi->ct->lim.lam * sizeof(float) * 4);
- gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP));
- if( row_buf == NULL || gi->ct->cvs == NULL )
- {
- pj_errno = -38;
- return 0;
- }
-
- for( row = 0; row < gi->ct->lim.phi; row++ )
- {
- int i;
- FLP *cvs;
- float *diff_seconds;
-
- if( fread( row_buf, sizeof(float), gi->ct->lim.lam*4, fid )
- != 4 * gi->ct->lim.lam )
- {
- pj_dalloc( row_buf );
- pj_dalloc( gi->ct->cvs );
- gi->ct->cvs = NULL;
- pj_errno = -38;
- return 0;
- }
-
- if( !IS_LSB )
- swap_words( (unsigned char *) row_buf, 4,
- gi->ct->lim.lam*4 );
-
- /* convert seconds to radians */
- diff_seconds = row_buf;
-
- for( i = 0; i < gi->ct->lim.lam; i++ )
- {
- cvs = gi->ct->cvs + (row) * gi->ct->lim.lam
- + (gi->ct->lim.lam - i - 1);
-
- cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0);
- cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0);
- diff_seconds += 2; /* skip accuracy values */
- }
- }
-
- pj_dalloc( row_buf );
-
- fclose( fid );
-
- return 1;
- }
-
- else
- {
- return 0;
- }
-}
-
-/************************************************************************/
-/* pj_gridinfo_init_ntv2() */
-/* */
-/* Load a ntv2 (.gsb) file. */
-/************************************************************************/
-
-static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist )
-
-{
- unsigned char header[11*16];
- int num_subfiles, subfile;
-
- assert( sizeof(int) == 4 );
- assert( sizeof(double) == 8 );
- if( sizeof(int) != 4 || sizeof(double) != 8 )
- {
- fprintf( stderr,
- "basic types of inappropraiate size in pj_gridinfo_init_ntv2()\n" );
- pj_errno = -38;
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Read the overview header. */
-/* -------------------------------------------------------------------- */
- if( fread( header, sizeof(header), 1, fid ) != 1 )
- {
- pj_errno = -38;
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Byte swap interesting fields if needed. */
-/* -------------------------------------------------------------------- */
- if( !IS_LSB )
- {
- swap_words( header+8, 4, 1 );
- swap_words( header+8+16, 4, 1 );
- swap_words( header+8+32, 4, 1 );
- swap_words( header+8+7*16, 8, 1 );
- swap_words( header+8+8*16, 8, 1 );
- swap_words( header+8+9*16, 8, 1 );
- swap_words( header+8+10*16, 8, 1 );
- }
-
-/* -------------------------------------------------------------------- */
-/* Get the subfile count out ... all we really use for now. */
-/* -------------------------------------------------------------------- */
- memcpy( &num_subfiles, header+8+32, 4 );
-
-/* ==================================================================== */
-/* Step through the subfiles, creating a PJ_GRIDINFO for each. */
-/* ==================================================================== */
- for( subfile = 0; subfile < num_subfiles; subfile++ )
- {
- struct CTABLE *ct;
- LP ur;
- int gs_count;
- PJ_GRIDINFO *gi;
-
-/* -------------------------------------------------------------------- */
-/* Read header. */
-/* -------------------------------------------------------------------- */
- if( fread( header, sizeof(header), 1, fid ) != 1 )
- {
- pj_errno = -38;
- return 0;
- }
-
- if( strncmp((const char *) header,"SUB_NAME",8) != 0 )
- {
- pj_errno = -38;
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Byte swap interesting fields if needed. */
-/* -------------------------------------------------------------------- */
- if( !IS_LSB )
- {
- swap_words( header+8+16*4, 8, 1 );
- swap_words( header+8+16*5, 8, 1 );
- swap_words( header+8+16*6, 8, 1 );
- swap_words( header+8+16*7, 8, 1 );
- swap_words( header+8+16*8, 8, 1 );
- swap_words( header+8+16*9, 8, 1 );
- swap_words( header+8+16*10, 4, 1 );
- }
-
-/* -------------------------------------------------------------------- */
-/* Initialize a corresponding "ct" structure. */
-/* -------------------------------------------------------------------- */
- ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE));
- strncpy( ct->id, (const char *) header + 8, 8 );
- ct->id[8] = '\0';
-
- ct->ll.lam = - *((double *) (header+7*16+8)); /* W_LONG */
- ct->ll.phi = *((double *) (header+4*16+8)); /* S_LAT */
-
- ur.lam = - *((double *) (header+6*16+8)); /* E_LONG */
- ur.phi = *((double *) (header+5*16+8)); /* N_LAT */
-
- ct->del.lam = *((double *) (header+9*16+8));
- ct->del.phi = *((double *) (header+8*16+8));
-
- ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1;
- ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1;
-
- if( getenv("PROJ_DEBUG") != NULL )
- fprintf( stderr,
- "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n",
- ct->id,
- ct->lim.lam, ct->lim.phi,
- ct->ll.lam/3600.0, ct->ll.phi/3600.0,
- ur.lam/3600.0, ur.phi/3600.0 );
-
- ct->ll.lam *= DEG_TO_RAD/3600.0;
- ct->ll.phi *= DEG_TO_RAD/3600.0;
- ct->del.lam *= DEG_TO_RAD/3600.0;
- ct->del.phi *= DEG_TO_RAD/3600.0;
-
- memcpy( &gs_count, header + 8 + 16*10, 4 );
- if( gs_count != ct->lim.lam * ct->lim.phi )
- {
- fprintf( stderr,
- "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n",
- gs_count, ct->lim.lam, ct->lim.phi,
- ct->lim.lam * ct->lim.phi );
- pj_errno = -38;
- return 0;
- }
-
- ct->cvs = NULL;
-
-/* -------------------------------------------------------------------- */
-/* Create a new gridinfo for this if we aren't processing the */
-/* 1st subfile, and initialize our grid info. */
-/* -------------------------------------------------------------------- */
- if( subfile == 0 )
- gi = gilist;
- else
- {
- gi = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO));
- memset( gi, 0, sizeof(PJ_GRIDINFO) );
-
- gi->gridname = strdup( gilist->gridname );
- gi->filename = strdup( gilist->filename );
- gi->next = NULL;
- }
-
- gi->ct = ct;
- gi->format = "ntv2";
- gi->grid_offset = ftell( fid );
-
-/* -------------------------------------------------------------------- */
-/* Attach to the correct list or sublist. */
-/* -------------------------------------------------------------------- */
- if( strncmp((const char *)header+24,"NONE",4) == 0 )
- {
- if( gi != gilist )
- {
- PJ_GRIDINFO *lnk;
-
- for( lnk = gilist; lnk->next != NULL; lnk = lnk->next ) {}
- lnk->next = gi;
- }
- }
-
- else
- {
- PJ_GRIDINFO *lnk;
- PJ_GRIDINFO *gp = gilist;
-
- while( gp != NULL
- && strncmp(gp->ct->id,(const char*)header+24,8) != 0 )
- gp = gp->next;
-
- if( gp == NULL )
- {
- if( getenv("PROJ_DEBUG") != NULL )
- fprintf( stderr, "pj_gridinfo_init_ntv2(): "
- "failed to find parent %8.8s for %s.\n",
- (const char *) header+24, gi->ct->id );
-
- for( lnk = gp; lnk->next != NULL; lnk = lnk->next ) {}
- lnk->next = gi;
- }
- else if( gp->child == NULL )
- {
- gp->child = gi;
- }
- else
- {
- for( lnk = gp->child; lnk->next != NULL; lnk = lnk->next ) {}
- lnk->next = gi;
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Seek past the data. */
-/* -------------------------------------------------------------------- */
- fseek( fid, gs_count * 16, SEEK_CUR );
- }
-
- return 1;
-}
-
-/************************************************************************/
-/* pj_gridinfo_init_ntv1() */
-/* */
-/* Load an NTv1 style Canadian grid shift file. */
-/************************************************************************/
-
-static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi )
-
-{
- unsigned char header[176];
- struct CTABLE *ct;
- LP ur;
-
- assert( sizeof(int) == 4 );
- assert( sizeof(double) == 8 );
- if( sizeof(int) != 4 || sizeof(double) != 8 )
- {
- fprintf( stderr,
- "basic types of inappropraiate size in nad_load_ntv1()\n" );
- pj_errno = -38;
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Read the header. */
-/* -------------------------------------------------------------------- */
- if( fread( header, sizeof(header), 1, fid ) != 1 )
- {
- pj_errno = -38;
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Regularize fields of interest. */
-/* -------------------------------------------------------------------- */
- if( IS_LSB )
- {
- swap_words( header+8, 4, 1 );
- swap_words( header+24, 8, 1 );
- swap_words( header+40, 8, 1 );
- swap_words( header+56, 8, 1 );
- swap_words( header+72, 8, 1 );
- swap_words( header+88, 8, 1 );
- swap_words( header+104, 8, 1 );
- }
-
- if( *((int *) (header+8)) != 12 )
- {
- pj_errno = -38;
- printf("NTv1 grid shift file has wrong record count, corrupt?\n");
- return 0;
- }
-
-/* -------------------------------------------------------------------- */
-/* Fill in CTABLE structure. */
-/* -------------------------------------------------------------------- */
- ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE));
- strcpy( ct->id, "NTv1 Grid Shift File" );
-
- ct->ll.lam = - *((double *) (header+72));
- ct->ll.phi = *((double *) (header+24));
- ur.lam = - *((double *) (header+56));
- ur.phi = *((double *) (header+40));
- ct->del.lam = *((double *) (header+104));
- ct->del.phi = *((double *) (header+88));
- ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1;
- ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1;
-
- if( getenv("PROJ_DEBUG") != NULL )
- fprintf( stderr,
- "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n",
- ct->lim.lam, ct->lim.phi,
- ct->ll.lam, ct->ll.phi, ur.lam, ur.phi );
-
- ct->ll.lam *= DEG_TO_RAD;
- ct->ll.phi *= DEG_TO_RAD;
- ct->del.lam *= DEG_TO_RAD;
- ct->del.phi *= DEG_TO_RAD;
- ct->cvs = NULL;
-
- gi->ct = ct;
- gi->grid_offset = ftell( fid );
- gi->format = "ntv1";
-
- return 1;
-}
-
-/************************************************************************/
-/* pj_gridinfo_init() */
-/* */
-/* Open and parse header details from a datum gridshift file */
-/* returning a list of PJ_GRIDINFOs for the grids in that */
-/* file. This superceeds use of nad_init() for modern */
-/* applications. */
-/************************************************************************/
-
-PJ_GRIDINFO *pj_gridinfo_init( const char *gridname )
-
-{
- char fname[MAX_PATH_FILENAME+1];
- PJ_GRIDINFO *gilist;
- FILE *fp;
- char header[160];
-
- errno = pj_errno = 0;
-
-/* -------------------------------------------------------------------- */
-/* Initialize a GRIDINFO with stub info we would use if it */
-/* cannot be loaded. */
-/* -------------------------------------------------------------------- */
- gilist = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO));
- memset( gilist, 0, sizeof(PJ_GRIDINFO) );
-
- gilist->gridname = strdup( gridname );
- gilist->filename = NULL;
- gilist->format = "missing";
- gilist->grid_offset = 0;
- gilist->ct = NULL;
- gilist->next = NULL;
-
-/* -------------------------------------------------------------------- */
-/* Open the file using the usual search rules. */
-/* -------------------------------------------------------------------- */
- strcpy(fname, gridname);
- if (!(fp = pj_open_lib(fname, "rb"))) {
- pj_errno = errno;
- return gilist;
- }
-
- gilist->filename = strdup(fname);
-
-/* -------------------------------------------------------------------- */
-/* Load a header, to determine the file type. */
-/* -------------------------------------------------------------------- */
- if( fread( header, sizeof(header), 1, fp ) != 1 )
- {
- fclose( fp );
- pj_errno = -38;
- return gilist;
- }
-
- fseek( fp, SEEK_SET, 0 );
-
-/* -------------------------------------------------------------------- */
-/* Determine file type. */
-/* -------------------------------------------------------------------- */
- if( strncmp(header + 0, "HEADER", 6) == 0
- && strncmp(header + 96, "W GRID", 6) == 0
- && strncmp(header + 144, "TO NAD83 ", 16) == 0 )
- {
- pj_gridinfo_init_ntv1( fp, gilist );
- }
-
- else if( strncmp(header + 0, "NUM_OREC", 8) == 0
- && strncmp(header + 48, "GS_TYPE", 7) == 0 )
- {
- pj_gridinfo_init_ntv2( fp, gilist );
- }
-
- else
- {
- struct CTABLE *ct = nad_ctable_init( fp );
-
- gilist->format = "ctable";
- gilist->ct = ct;
-
- if( getenv("PROJ_DEBUG") != NULL )
- fprintf( stderr,
- "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n",
- ct->id,
- ct->lim.lam, ct->lim.phi,
- ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG,
- (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG,
- (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG );
- }
-
- fclose(fp);
-
- return gilist;
-}
diff --git a/src/3rdparty/proj/pj_gridlist.c b/src/3rdparty/proj/pj_gridlist.c
deleted file mode 100644
index 1d141641..00000000
--- a/src/3rdparty/proj/pj_gridlist.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/******************************************************************************
- * $Id: pj_gridlist.c 1634 2009-09-24 02:40:46Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs
- * See pj_gridinfo.c for details of loading individual grids.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam <warmerdam@pobox.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-
-#include <projects.h>
-#include <string.h>
-#include <math.h>
-
-#ifdef _WIN32_WCE
-/* assert.h includes all Windows API headers and causes 'LP' name clash.
- * Here assert we disable assert() for Windows CE.
- * TODO - mloskot: re-implement porting friendly assert
- */
-# define assert(exp) ((void)0)
-#else
-# include <assert.h>
-#endif /* _WIN32_WCE */
-
-static PJ_GRIDINFO *grid_list = NULL;
-
-/* used only by pj_load_nadgrids() and pj_deallocate_grids() */
-
-static int last_nadgrids_max = 0;
-static int last_nadgrids_count = 0;
-static PJ_GRIDINFO **last_nadgrids_list = NULL;
-static char *last_nadgrids = NULL;
-
-/************************************************************************/
-/* pj_deallocate_grids() */
-/* */
-/* Deallocate all loaded grids. */
-/************************************************************************/
-
-void pj_deallocate_grids()
-
-{
- while( grid_list != NULL )
- {
- PJ_GRIDINFO *item = grid_list;
- grid_list = grid_list->next;
- item->next = NULL;
-
- pj_gridinfo_free( item );
- }
-
- if( last_nadgrids != NULL )
- {
- pj_dalloc( last_nadgrids );
- last_nadgrids = NULL;
-
- pj_dalloc( last_nadgrids_list );
- last_nadgrids_list = NULL;
-
- last_nadgrids_count = 0;
- last_nadgrids_max = 0;
- }
-}
-
-/************************************************************************/
-/* pj_gridlist_merge_grid() */
-/* */
-/* Find/load the named gridfile and merge it into the */
-/* last_nadgrids_list. */
-/************************************************************************/
-
-static int pj_gridlist_merge_gridfile( const char *gridname )
-
-{
- int i, got_match=0;
- PJ_GRIDINFO *this_grid, *tail = NULL;
-
-/* -------------------------------------------------------------------- */
-/* Try to find in the existing list of loaded grids. Add all */
-/* matching grids as with NTv2 we can get many grids from one */
-/* file (one shared gridname). */
-/* -------------------------------------------------------------------- */
- for( this_grid = grid_list; this_grid != NULL; this_grid = this_grid->next)
- {
- if( strcmp(this_grid->gridname,gridname) == 0 )
- {
- got_match = 1;
-
- /* dont add to the list if it is invalid. */
- if( this_grid->ct == NULL )
- return 0;
-
- /* do we need to grow the list? */
- if( last_nadgrids_count >= last_nadgrids_max - 2 )
- {
- PJ_GRIDINFO **new_list;
- int new_max = last_nadgrids_max + 20;
-
- new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max);
- if( last_nadgrids_list != NULL )
- {
- memcpy( new_list, last_nadgrids_list,
- sizeof(void*) * last_nadgrids_max );
- pj_dalloc( last_nadgrids_list );
- }
-
- last_nadgrids_list = new_list;
- last_nadgrids_max = new_max;
- }
-
- /* add to the list */
- last_nadgrids_list[last_nadgrids_count++] = this_grid;
- last_nadgrids_list[last_nadgrids_count] = NULL;
- }
-
- tail = this_grid;
- }
-
- if( got_match )
- return 1;
-
-/* -------------------------------------------------------------------- */
-/* Try to load the named grid. */
-/* -------------------------------------------------------------------- */
- this_grid = pj_gridinfo_init( gridname );
-
- if( this_grid == NULL )
- {
- /* we should get at least a stub grid with a missing "ct" member */
- assert( FALSE );
- return 0;
- }
-
- if( tail != NULL )
- tail->next = this_grid;
- else
- grid_list = this_grid;
-
-/* -------------------------------------------------------------------- */
-/* Recurse to add the grid now that it is loaded. */
-/* -------------------------------------------------------------------- */
- return pj_gridlist_merge_gridfile( gridname );
-}
-
-/************************************************************************/
-/* pj_gridlist_from_nadgrids() */
-/* */
-/* This functions loads the list of grids corresponding to a */
-/* particular nadgrids string into a list, and returns it. The */
-/* list is kept around till a request is made with a different */
-/* string in order to cut down on the string parsing cost, and */
-/* the cost of building the list of tables each time. */
-/************************************************************************/
-
-PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
-
-{
- const char *s;
-
- pj_errno = 0;
- *grid_count = 0;
-
- pj_acquire_lock();
- if( last_nadgrids != NULL
- && strcmp(nadgrids,last_nadgrids) == 0 )
- {
- PJ_GRIDINFO **ret = last_nadgrids_list;
- *grid_count = last_nadgrids_count;
- if( *grid_count == 0 )
- pj_errno = -38;
-
- pj_release_lock();
- return ret;
- }
-
-/* -------------------------------------------------------------------- */
-/* Free old one, if any, and make space for new list. */
-/* -------------------------------------------------------------------- */
- if( last_nadgrids != NULL )
- {
- pj_dalloc(last_nadgrids);
- }
-
- last_nadgrids = (char *) pj_malloc(strlen(nadgrids)+1);
- strcpy( last_nadgrids, nadgrids );
-
- last_nadgrids_count = 0;
-
-/* -------------------------------------------------------------------- */
-/* Loop processing names out of nadgrids one at a time. */
-/* -------------------------------------------------------------------- */
- for( s = nadgrids; *s != '\0'; )
- {
- int end_char;
- int required = 1;
- char name[128];
-
- if( *s == '@' )
- {
- required = 0;
- s++;
- }
-
- for( end_char = 0;
- s[end_char] != '\0' && s[end_char] != ',';
- end_char++ ) {}
-
- if( end_char > sizeof(name) )
- {
- pj_errno = -38;
- pj_release_lock();
- return NULL;
- }
-
- strncpy( name, s, end_char );
- name[end_char] = '\0';
-
- s += end_char;
- if( *s == ',' )
- s++;
-
- if( !pj_gridlist_merge_gridfile( name ) && required )
- {
- pj_errno = -38;
- pj_release_lock();
- return NULL;
- }
- else
- pj_errno = 0;
- }
-
- if( last_nadgrids_count > 0 )
- {
- PJ_GRIDINFO **ret = last_nadgrids_list;
- *grid_count = last_nadgrids_count;
- pj_release_lock();
- return ret;
- }
- else
- {
- pj_release_lock();
- return NULL;
- }
-}
diff --git a/src/3rdparty/proj/pj_init.c b/src/3rdparty/proj/pj_init.c
deleted file mode 100644
index 867fc41c..00000000
--- a/src/3rdparty/proj/pj_init.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/******************************************************************************
- * $Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Initialize projection object from string definition. Includes
- * pj_init(), pj_init_plus() and pj_free() function.
- * Author: Gerald Evenden, Frank Warmerdam <warmerdam@pobox.com>
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-#include <projects.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <locale.h>
-
-PJ_CVSID("$Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $");
-
-extern FILE *pj_open_lib(char *, char *);
-
-/************************************************************************/
-/* get_opt() */
-/************************************************************************/
-static paralist *
-get_opt(paralist **start, FILE *fid, char *name, paralist *next) {
- char sword[302], *word = sword+1;
- int first = 1, len, c;
-
- len = strlen(name);
- *sword = 't';
- while (fscanf(fid, "%300s", word) == 1) {
- if (*word == '#') /* skip comments */
- while((c = fgetc(fid)) != EOF && c != '\n') ;
- else if (*word == '<') { /* control name */
- if (first && !strncmp(name, word + 1, len)
- && word[len + 1] == '>')
- first = 0;
- else if (!first && *word == '<') {
- while((c = fgetc(fid)) != EOF && c != '\n') ;
- break;
- }
- } else if (!first && !pj_param(*start, sword).i) {
- /* don't default ellipse if datum, ellps or any earth model
- information is set. */
- if( strncmp(word,"ellps=",6) != 0
- || (!pj_param(*start, "tdatum").i
- && !pj_param(*start, "tellps").i
- && !pj_param(*start, "ta").i
- && !pj_param(*start, "tb").i
- && !pj_param(*start, "trf").i
- && !pj_param(*start, "tf").i) )
- {
- next = next->next = pj_mkparam(word);
- }
- }
- }
-
- if (errno == 25)
- errno = 0;
- return next;
-}
-
-/************************************************************************/
-/* get_defaults() */
-/************************************************************************/
-static paralist *
-get_defaults(paralist **start, paralist *next, char *name) {
- FILE *fid;
-
- if (fid = pj_open_lib("proj_def.dat", "rt")) {
- next = get_opt(start, fid, "general", next);
- rewind(fid);
- next = get_opt(start, fid, name, next);
- (void)fclose(fid);
- }
- if (errno)
- errno = 0; /* don't care if can't open file */
- return next;
-}
-
-/************************************************************************/
-/* get_init() */
-/************************************************************************/
-static paralist *
-get_init(paralist **start, paralist *next, char *name) {
- char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt;
- FILE *fid;
- paralist *init_items = NULL;
- const paralist *orig_next = next;
-
- (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1);
-
- /*
- ** Search for file/key pair in cache
- */
-
- init_items = pj_search_initcache( name );
- if( init_items != NULL )
- {
- next->next = init_items;
- while( next->next != NULL )
- next = next->next;
- return next;
- }
-
- /*
- ** Otherwise we try to open the file and search for it.
- */
- if (opt = strrchr(fname, ':'))
- *opt++ = '\0';
- else { pj_errno = -3; return(0); }
- if (fid = pj_open_lib(fname, "rt"))
- next = get_opt(start, fid, opt, next);
- else
- return(0);
- (void)fclose(fid);
- if (errno == 25)
- errno = 0; /* unknown problem with some sys errno<-25 */
-
- /*
- ** If we seem to have gotten a result, insert it into the
- ** init file cache.
- */
- if( next != NULL && next != orig_next )
- pj_insert_initcache( name, orig_next->next );
-
- return next;
-}
-
-/************************************************************************/
-/* pj_init_plus() */
-/* */
-/* Same as pj_init() except it takes one argument string with */
-/* individual arguments preceeded by '+', such as "+proj=utm */
-/* +zone=11 +ellps=WGS84". */
-/************************************************************************/
-
-PJ *
-pj_init_plus( const char *definition )
-
-{
-#define MAX_ARG 200
- char *argv[MAX_ARG];
- char *defn_copy;
- int argc = 0, i;
- PJ *result;
-
- /* make a copy that we can manipulate */
- defn_copy = (char *) pj_malloc( strlen(definition)+1 );
- strcpy( defn_copy, definition );
-
- /* split into arguments based on '+' and trim white space */
-
- for( i = 0; defn_copy[i] != '\0'; i++ )
- {
- switch( defn_copy[i] )
- {
- case '+':
- if( i == 0 || defn_copy[i-1] == '\0' )
- {
- if( argc+1 == MAX_ARG )
- {
- pj_errno = -44;
- return NULL;
- }
-
- argv[argc++] = defn_copy + i + 1;
- }
- break;
-
- case ' ':
- case '\t':
- case '\n':
- defn_copy[i] = '\0';
- break;
-
- default:
- /* do nothing */;
- }
- }
-
- /* perform actual initialization */
- result = pj_init( argc, argv );
-
- pj_dalloc( defn_copy );
-
- return result;
-}
-
-/************************************************************************/
-/* pj_init() */
-/* */
-/* Main entry point for initialing a PJ projections */
-/* definition. Note that the projection specific function is */
-/* called to do the initial allocation so it can be created */
-/* large enough to hold projection specific parameters. */
-/************************************************************************/
-
-PJ *
-pj_init(int argc, char **argv) {
- char *s, *name;
- paralist *start = NULL;
- PJ *(*proj)(PJ *);
- paralist *curr;
- int i;
- PJ *PIN = 0;
- const char *old_locale;
-
- errno = pj_errno = 0;
- start = NULL;
-
- old_locale = setlocale(LC_NUMERIC, NULL);
- setlocale(LC_NUMERIC,"C");
-
- /* put arguments into internal linked list */
- if (argc <= 0) { pj_errno = -1; goto bum_call; }
- for (i = 0; i < argc; ++i)
- if (i)
- curr = curr->next = pj_mkparam(argv[i]);
- else
- start = curr = pj_mkparam(argv[i]);
- if (pj_errno) goto bum_call;
-
- /* check if +init present */
- if (pj_param(start, "tinit").i) {
- paralist *last = curr;
-
- if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s)))
- goto bum_call;
- if (curr == last) { pj_errno = -2; goto bum_call; }
- }
-
- /* find projection selection */
- if (!(name = pj_param(start, "sproj").s))
- { pj_errno = -4; goto bum_call; }
- for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ;
- if (!s) { pj_errno = -5; goto bum_call; }
-
- /* set defaults, unless inhibited */
- if (!pj_param(start, "bno_defs").i)
- curr = get_defaults(&start, curr, name);
- proj = (PJ *(*)(PJ *)) pj_list[i].proj;
-
- /* allocate projection structure */
- if (!(PIN = (*proj)(0))) goto bum_call;
- PIN->params = start;
- PIN->is_latlong = 0;
- PIN->is_geocent = 0;
- PIN->long_wrap_center = 0.0;
-
- /* set datum parameters */
- if (pj_datum_set(start, PIN)) goto bum_call;
-
- /* set ellipsoid/sphere parameters */
- if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call;
-
- PIN->a_orig = PIN->a;
- PIN->es_orig = PIN->es;
-
- PIN->e = sqrt(PIN->es);
- PIN->ra = 1. / PIN->a;
- PIN->one_es = 1. - PIN->es;
- if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; }
- PIN->rone_es = 1./PIN->one_es;
-
- /* Now that we have ellipse information check for WGS84 datum */
- if( PIN->datum_type == PJD_3PARAM
- && PIN->datum_params[0] == 0.0
- && PIN->datum_params[1] == 0.0
- && PIN->datum_params[2] == 0.0
- && PIN->a == 6378137.0
- && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/
- {
- PIN->datum_type = PJD_WGS84;
- }
-
- /* set PIN->geoc coordinate system */
- PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i);
-
- /* over-ranging flag */
- PIN->over = pj_param(start, "bover").i;
-
- /* longitude center for wrapping */
- PIN->long_wrap_center = pj_param(start, "rlon_wrap").f;
-
- /* central meridian */
- PIN->lam0=pj_param(start, "rlon_0").f;
-
- /* central latitude */
- PIN->phi0 = pj_param(start, "rlat_0").f;
-
- /* false easting and northing */
- PIN->x0 = pj_param(start, "dx_0").f;
- PIN->y0 = pj_param(start, "dy_0").f;
-
- /* general scaling factor */
- if (pj_param(start, "tk_0").i)
- PIN->k0 = pj_param(start, "dk_0").f;
- else if (pj_param(start, "tk").i)
- PIN->k0 = pj_param(start, "dk").f;
- else
- PIN->k0 = 1.;
- if (PIN->k0 <= 0.) {
- pj_errno = -31;
- goto bum_call;
- }
-
- /* set units */
- s = 0;
- if (name = pj_param(start, "sunits").s) {
- for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ;
- if (!s) { pj_errno = -7; goto bum_call; }
- s = pj_units[i].to_meter;
- }
- if (s || (s = pj_param(start, "sto_meter").s)) {
- PIN->to_meter = strtod(s, &s);
- if (*s == '/') /* ratio number */
- PIN->to_meter /= strtod(++s, 0);
- PIN->fr_meter = 1. / PIN->to_meter;
- } else
- PIN->to_meter = PIN->fr_meter = 1.;
-
- /* prime meridian */
- s = 0;
- if (name = pj_param(start, "spm").s) {
- const char *value = NULL;
- char *next_str = NULL;
-
- for (i = 0; pj_prime_meridians[i].id != NULL; ++i )
- {
- if( strcmp(name,pj_prime_meridians[i].id) == 0 )
- {
- value = pj_prime_meridians[i].defn;
- break;
- }
- }
-
- if( value == NULL
- && (dmstor(name,&next_str) != 0.0 || *name == '0')
- && *next_str == '\0' )
- value = name;
-
- if (!value) { pj_errno = -46; goto bum_call; }
- PIN->from_greenwich = dmstor(value,NULL);
- }
- else
- PIN->from_greenwich = 0.0;
-
- /* projection specific initialization */
- if (!(PIN = (*proj)(PIN)) || errno || pj_errno) {
-bum_call: /* cleanup error return */
- if (!pj_errno)
- pj_errno = errno;
- if (PIN)
- pj_free(PIN);
- else
- for ( ; start; start = curr) {
- curr = start->next;
- pj_dalloc(start);
- }
- PIN = 0;
- }
- setlocale(LC_NUMERIC,old_locale);
-
- return PIN;
-}
-
-/************************************************************************/
-/* pj_free() */
-/* */
-/* This is the application callable entry point for destroying */
-/* a projection definition. It does work generic to all */
-/* projection types, and then calls the projection specific */
-/* free function (P->pfree()) to do local work. This maps to */
-/* the FREEUP code in the individual projection source files. */
-/************************************************************************/
-
-void
-pj_free(PJ *P) {
- if (P) {
- paralist *t = P->params, *n;
-
- /* free parameter list elements */
- for (t = P->params; t; t = n) {
- n = t->next;
- pj_dalloc(t);
- }
-
- /* free projection parameters */
- P->pfree(P);
- }
-}
-
-
diff --git a/src/3rdparty/proj/pj_initcache.c b/src/3rdparty/proj/pj_initcache.c
deleted file mode 100644
index 5dd46fad..00000000
--- a/src/3rdparty/proj/pj_initcache.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/******************************************************************************
- * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: init file definition cache.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2009, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#include <projects.h>
-#include <string.h>
-
-PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-static int cache_count = 0;
-static int cache_alloc = 0;
-static char **cache_key = NULL;
-static paralist **cache_paralist = NULL;
-
-/************************************************************************/
-/* pj_clone_paralist() */
-/* */
-/* Allocate a copy of a parameter list. */
-/************************************************************************/
-
-paralist *pj_clone_paralist( const paralist *list)
-{
- paralist *list_copy = NULL, *next_copy = NULL;
-
- for( ; list != NULL; list = list->next )
- {
- paralist *newitem = (paralist *)
- pj_malloc(sizeof(paralist) + strlen(list->param));
-
- newitem->used = 0;
- newitem->next = 0;
- strcpy( newitem->param, list->param );
-
- if( list_copy == NULL )
- list_copy = newitem;
- else
- next_copy->next = newitem;
-
- next_copy = newitem;
- }
-
- return list_copy;
-}
-
-/************************************************************************/
-/* pj_clear_initcache() */
-/* */
-/* Clear out all memory held in the init file cache. */
-/************************************************************************/
-
-void pj_clear_initcache()
-{
- if( cache_alloc > 0 )
- {
- int i;
-
- pj_acquire_lock();
-
- for( i = 0; i < cache_count; i++ )
- {
- paralist *n, *t = cache_paralist[i];
-
- pj_dalloc( cache_key[i] );
-
- /* free parameter list elements */
- for (; t != NULL; t = n) {
- n = t->next;
- pj_dalloc(t);
- }
- }
-
- pj_dalloc( cache_key );
- pj_dalloc( cache_paralist );
- cache_count = 0;
- cache_alloc= 0;
- cache_key = NULL;
- cache_paralist = NULL;
-
- pj_release_lock();
- }
-}
-
-/************************************************************************/
-/* pj_search_initcache() */
-/* */
-/* Search for a matching definition in the init cache. */
-/************************************************************************/
-
-paralist *pj_search_initcache( const char *filekey )
-
-{
- int i;
- paralist *result = NULL;
-
- pj_acquire_lock();
-
- for( i = 0; result == NULL && i < cache_count; i++)
- {
- if( strcmp(filekey,cache_key[i]) == 0 )
- {
- result = pj_clone_paralist( cache_paralist[i] );
- }
- }
-
- pj_release_lock();
-
- return result;
-}
-
-/************************************************************************/
-/* pj_insert_initcache() */
-/* */
-/* Insert a paralist definition in the init file cache. */
-/************************************************************************/
-
-void pj_insert_initcache( const char *filekey, const paralist *list )
-
-{
- pj_acquire_lock();
-
- /*
- ** Grow list if required.
- */
- if( cache_count == cache_alloc )
- {
- char **cache_key_new;
- paralist **cache_paralist_new;
-
- cache_alloc = cache_alloc * 2 + 15;
-
- cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc);
- memcpy( cache_key, cache_key_new, sizeof(char*) * cache_count);
- pj_dalloc( cache_key );
- cache_key = cache_key_new;
-
- cache_paralist_new = (paralist **)
- pj_malloc(sizeof(paralist*) * cache_alloc);
- memcpy( cache_paralist_new, cache_paralist,
- sizeof(paralist*) * cache_count );
- pj_dalloc( cache_paralist );
- cache_paralist = cache_paralist_new;
- }
-
- /*
- ** Duplicate the filekey and paralist, and insert in cache.
- */
- cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1);
- strcpy( cache_key[cache_count], filekey );
-
- cache_paralist[cache_count] = pj_clone_paralist( list );
-
- cache_count++;
-
- pj_release_lock();
-}
-
diff --git a/src/3rdparty/proj/pj_inv.c b/src/3rdparty/proj/pj_inv.c
deleted file mode 100644
index ee2b44f8..00000000
--- a/src/3rdparty/proj/pj_inv.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* general inverse projection */
-#define PJ_LIB__
-#include <projects.h>
-#include <errno.h>
-# define EPS 1.0e-12
- LP /* inverse projection entry */
-pj_inv(XY xy, PJ *P) {
- LP lp;
-
- /* can't do as much preliminary checking as with forward */
- if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) {
- lp.lam = lp.phi = HUGE_VAL;
- pj_errno = -15;
- }
- errno = pj_errno = 0;
- xy.x = (xy.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */
- xy.y = (xy.y * P->to_meter - P->y0) * P->ra;
- lp = (*P->inv)(xy, P); /* inverse project */
- if (pj_errno || (pj_errno = errno))
- lp.lam = lp.phi = HUGE_VAL;
- else {
- lp.lam += P->lam0; /* reduce from del lp.lam */
- if (!P->over)
- lp.lam = adjlon(lp.lam); /* adjust longitude to CM */
- if (P->geoc && fabs(fabs(lp.phi)-HALFPI) > EPS)
- lp.phi = atan(P->one_es * tan(lp.phi));
- }
- return lp;
-}
diff --git a/src/3rdparty/proj/pj_latlong.c b/src/3rdparty/proj/pj_latlong.c
deleted file mode 100644
index 1ade364c..00000000
--- a/src/3rdparty/proj/pj_latlong.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/******************************************************************************
- * $Id: pj_latlong.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Stub projection implementation for lat/long coordinates. We
- * don't actually change the coordinates, but we want proj=latlong
- * to act sort of like a projection.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-/* very loosely based upon DMA code by Bradford W. Drew */
-#define PJ_LIB__
-#include <projects.h>
-PROJ_HEAD(lonlat, "Lat/long (Geodetic)") "\n\t";
-PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") "\n\t";
-PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") "\n\t";
-PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") "\n\t";
-
-FORWARD(forward);
-
- xy.x = lp.lam / P->a;
- xy.y = lp.phi / P->a;
- return xy;
-}
-INVERSE(inverse);
-
- lp.phi = xy.y * P->a;
- lp.lam = xy.x * P->a;
- return lp;
-}
-FREEUP; if (P) pj_dalloc(P); }
-
-ENTRY0(latlong)
- P->is_latlong = 1;
- P->x0 = 0.0;
- P->y0 = 0.0;
- P->inv = inverse; P->fwd = forward;
-ENDENTRY(P)
-
-ENTRY0(longlat)
- P->is_latlong = 1;
- P->x0 = 0.0;
- P->y0 = 0.0;
- P->inv = inverse; P->fwd = forward;
-ENDENTRY(P)
-
-ENTRY0(latlon)
- P->is_latlong = 1;
- P->x0 = 0.0;
- P->y0 = 0.0;
- P->inv = inverse; P->fwd = forward;
-ENDENTRY(P)
-
-ENTRY0(lonlat)
- P->is_latlong = 1;
- P->x0 = 0.0;
- P->y0 = 0.0;
- P->inv = inverse; P->fwd = forward;
-ENDENTRY(P)
diff --git a/src/3rdparty/proj/pj_list.c b/src/3rdparty/proj/pj_list.c
deleted file mode 100644
index 7d35811b..00000000
--- a/src/3rdparty/proj/pj_list.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Projection System: default list of projections
-** Use local definition of PJ_LIST_H for subset.
-*/
-#define PJ_LIST_H "pj_list.h"
-#include "projects.h"
-
-struct PJ_LIST *pj_get_list_ref()
-
-{
- return pj_list;
-}
diff --git a/src/3rdparty/proj/pj_malloc.c b/src/3rdparty/proj/pj_malloc.c
deleted file mode 100644
index b6400eba..00000000
--- a/src/3rdparty/proj/pj_malloc.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* allocate and deallocate memory */
-/* These routines are used so that applications can readily replace
-** projection system memory allocation/deallocation call with custom
-** application procedures. */
-#include <projects.h>
-#include <errno.h>
-
- void *
-pj_malloc(size_t size) {
-// Currently, pj_malloc is a hack to solve an errno problem.
-// The problem is described in more details at
-// https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420.
-// It seems, that pj_init and similar functions incorrectly
-// (under debian/glibs-2.3.2) assume that pj_malloc resets
-// errno after success. pj_malloc tries to mimic this.
- int old_errno = errno;
- void *res = malloc(size);
- if ( res && !old_errno )
- errno = 0;
- return res;
-}
- void
-pj_dalloc(void *ptr) {
- free(ptr);
-}
diff --git a/src/3rdparty/proj/pj_mlfn.c b/src/3rdparty/proj/pj_mlfn.c
deleted file mode 100644
index afd18b19..00000000
--- a/src/3rdparty/proj/pj_mlfn.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <projects.h>
-/* meridinal distance for ellipsoid and inverse
-** 8th degree - accurate to < 1e-5 meters when used in conjuction
-** with typical major axis values.
-** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds.
-*/
-#define C00 1.
-#define C02 .25
-#define C04 .046875
-#define C06 .01953125
-#define C08 .01068115234375
-#define C22 .75
-#define C44 .46875
-#define C46 .01302083333333333333
-#define C48 .00712076822916666666
-#define C66 .36458333333333333333
-#define C68 .00569661458333333333
-#define C88 .3076171875
-#define EPS 1e-11
-#define MAX_ITER 10
-#define EN_SIZE 5
- double *
-pj_enfn(double es) {
- double t, *en;
-
- if (en = (double *)pj_malloc(EN_SIZE * sizeof(double))) {
- en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
- en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
- en[2] = (t = es * es) * (C44 - es * (C46 + es * C48));
- en[3] = (t *= es) * (C66 - es * C68);
- en[4] = t * es * C88;
- } /* else return NULL if unable to allocate memory */
- return en;
-}
- double
-pj_mlfn(double phi, double sphi, double cphi, double *en) {
- cphi *= sphi;
- sphi *= sphi;
- return(en[0] * phi - cphi * (en[1] + sphi*(en[2]
- + sphi*(en[3] + sphi*en[4]))));
-}
- double
-pj_inv_mlfn(double arg, double es, double *en) {
- double s, t, phi, k = 1./(1.-es);
- int i;
-
- phi = arg;
- for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */
- s = sin(phi);
- t = 1. - es * s * s;
- phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k;
- if (fabs(t) < EPS)
- return phi;
- }
- pj_errno = -17;
- return phi;
-}
diff --git a/src/3rdparty/proj/pj_msfn.c b/src/3rdparty/proj/pj_msfn.c
deleted file mode 100644
index 5b49f416..00000000
--- a/src/3rdparty/proj/pj_msfn.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* determine constant small m */
-#include <math.h>
-#include <projects.h>
- double
-pj_msfn(double sinphi, double cosphi, double es) {
- return (cosphi / sqrt (1. - es * sinphi * sinphi));
-}
diff --git a/src/3rdparty/proj/pj_mutex.c b/src/3rdparty/proj/pj_mutex.c
deleted file mode 100644
index 22b181e4..00000000
--- a/src/3rdparty/proj/pj_mutex.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/******************************************************************************
- * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Mutex (thread lock) functions.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2009, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-
-/* projects.h and windows.h conflict - avoid this! */
-
-#ifndef _WIN32
-#include <projects.h>
-PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $");
-#else
-#include <proj_api.h>
-#endif
-
-#if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32)
-# define MUTEX_stub
-#endif
-
-static void pj_init_lock();
-
-/************************************************************************/
-/* ==================================================================== */
-/* stub mutex implementation */
-/* ==================================================================== */
-/************************************************************************/
-
-#ifdef MUTEX_stub
-
-/************************************************************************/
-/* pj_acquire_lock() */
-/* */
-/* Acquire the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_acquire_lock()
-{
-}
-
-/************************************************************************/
-/* pj_release_lock() */
-/* */
-/* Release the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_release_lock()
-{
-}
-
-/************************************************************************/
-/* pj_cleanup_lock() */
-/************************************************************************/
-void pj_cleanup_lock()
-{
-}
-
-/************************************************************************/
-/* pj_init_lock() */
-/************************************************************************/
-
-static void pj_init_lock()
-
-{
-}
-
-#endif // def MUTEX_stub
-
-/************************************************************************/
-/* ==================================================================== */
-/* pthread mutex implementation */
-/* ==================================================================== */
-/************************************************************************/
-
-#ifdef MUTEX_pthread
-
-#include "pthread.h"
-
-static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER;
-
-/************************************************************************/
-/* pj_acquire_lock() */
-/* */
-/* Acquire the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_acquire_lock()
-{
- pthread_mutex_lock( &core_lock);
-}
-
-/************************************************************************/
-/* pj_release_lock() */
-/* */
-/* Release the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_release_lock()
-{
- pthread_mutex_unlock( &core_lock );
-}
-
-/************************************************************************/
-/* pj_cleanup_lock() */
-/************************************************************************/
-void pj_cleanup_lock()
-{
-}
-
-/************************************************************************/
-/* pj_init_lock() */
-/************************************************************************/
-
-static void pj_init_lock()
-
-{
-}
-
-#endif // def MUTEX_pthread
-
-/************************************************************************/
-/* ==================================================================== */
-/* win32 mutex implementation */
-/* ==================================================================== */
-/************************************************************************/
-
-#ifdef MUTEX_win32
-
-#include <windows.h>
-
-static HANDLE mutex_lock = NULL;
-
-/************************************************************************/
-/* pj_acquire_lock() */
-/* */
-/* Acquire the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_acquire_lock()
-{
- if( mutex_lock == NULL )
- pj_init_lock();
-
- WaitForSingleObject( mutex_lock, INFINITE );
-}
-
-/************************************************************************/
-/* pj_release_lock() */
-/* */
-/* Release the PROJ.4 lock. */
-/************************************************************************/
-
-void pj_release_lock()
-{
- if( mutex_lock == NULL )
- pj_init_lock();
-
- ReleaseMutex( mutex_lock );
-}
-
-/************************************************************************/
-/* pj_cleanup_lock() */
-/************************************************************************/
-void pj_cleanup_lock()
-{
- if( mutex_lock != NULL )
- {
- CloseHandle( mutex_lock );
- mutex_lock = NULL;
- }
-}
-
-/************************************************************************/
-/* pj_init_lock() */
-/************************************************************************/
-
-static void pj_init_lock()
-
-{
- if( mutex_lock == NULL )
- mutex_lock = CreateMutex( NULL, TRUE, NULL );
-}
-
-#endif // def MUTEX_win32
-
diff --git a/src/3rdparty/proj/pj_open_lib_qt.cpp b/src/3rdparty/proj/pj_open_lib_qt.cpp
deleted file mode 100644
index ac6baf9b..00000000
--- a/src/3rdparty/proj/pj_open_lib_qt.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/******************************************************************************
- * Project: PROJ.4
- * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These
- * provide a standard interface for opening projections support
- * data files.
- * Author: Gerald Evenden, Frank Warmerdam <warmerdam@pobox.com>,
- * Nokia Corporation (qt-info@nokia.com)
- *
- ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
- * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com>
- * Copyright (c) 2010, Nokia Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-extern "C" {
-#include <projects.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-}
-
-#include <QString>
-#include <QFile>
-#include <QList>
-
-class PJLibTracker
-{
-public:
- ~PJLibTracker();
-
- QList<QFile*> files;
-};
-
-PJLibTracker::~PJLibTracker()
-{
- foreach (QFile *f, files)
- delete f;
-}
-
-static PJLibTracker tracker;
-
-
-void pj_set_finder( const char *(*new_finder)(const char *) )
-{
-}
-
-void pj_set_searchpath ( int count, const char **path )
-{
-}
-
-FILE *pj_open_lib(char *name, char *mode)
-{
- if (QFile::exists(QString(":/proj_data/%1").arg(name))) {
- QFile *f = new QFile(QString(":/proj_data/%1").arg(name));
- f->open(QIODevice::ReadOnly);
-
- if (f->handle() == -1) {
- delete f;
- return NULL;
- }
-
- tracker.files.append(f);
- return fdopen(f->handle(), "r");
- } else {
- return NULL;
- }
-}
diff --git a/src/3rdparty/proj/pj_param.c b/src/3rdparty/proj/pj_param.c
deleted file mode 100644
index 4dce136a..00000000
--- a/src/3rdparty/proj/pj_param.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* put parameters in linked list and retrieve */
-#include <projects.h>
-#include <stdio.h>
-#include <string.h>
- paralist * /* create parameter list entry */
-pj_mkparam(char *str) {
- paralist *newitem;
-
- if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) {
- newitem->used = 0;
- newitem->next = 0;
- if (*str == '+')
- ++str;
- (void)strcpy(newitem->param, str);
- }
- return newitem;
-}
-
-/************************************************************************/
-/* pj_param() */
-/* */
-/* Test for presence or get parameter value. The first */
-/* character in `opt' is a parameter type which can take the */
-/* values: */
-/* */
-/* `t' - test for presence, return TRUE/FALSE in PVALUE.i */
-/* `i' - integer value returned in PVALUE.i */
-/* `d' - simple valued real input returned in PVALUE.f */
-/* `r' - degrees (DMS translation applied), returned as */
-/* radians in PVALUE.f */
-/* `s' - string returned in PVALUE.s */
-/* `b' - test for t/T/f/F, return in PVALUE.i */
-/* */
-/************************************************************************/
-
- PVALUE /* test for presence or get parameter value */
-pj_param(paralist *pl, char *opt) {
- int type;
- unsigned l;
- PVALUE value;
-
- type = *opt++;
- /* simple linear lookup */
- l = strlen(opt);
- while (pl && !(!strncmp(pl->param, opt, l) &&
- (!pl->param[l] || pl->param[l] == '=')))
- pl = pl->next;
- if (type == 't')
- value.i = pl != 0;
- else if (pl) {
- pl->used |= 1;
- opt = pl->param + l;
- if (*opt == '=')
- ++opt;
- switch (type) {
- case 'i': /* integer input */
- value.i = atoi(opt);
- break;
- case 'd': /* simple real input */
- value.f = atof(opt);
- break;
- case 'r': /* degrees input */
- value.f = dmstor(opt, 0);
- break;
- case 's': /* char string */
- value.s = opt;
- break;
- case 'b': /* boolean */
- switch (*opt) {
- case 'F': case 'f':
- value.i = 0;
- break;
- case '\0': case 'T': case 't':
- value.i = 1;
- break;
- default:
- pj_errno = -8;
- value.i = 0;
- break;
- }
- break;
- default:
-bum_type: /* note: this is an error in parameter, not a user error */
- fprintf(stderr, "invalid request to pj_param, fatal\n");
- exit(1);
- }
- } else /* not given */
- switch (type) {
- case 'b':
- case 'i':
- value.i = 0;
- break;
- case 'd':
- case 'r':
- value.f = 0.;
- break;
- case 's':
- value.s = 0;
- break;
- default:
- goto bum_type;
- }
- return value;
-}
diff --git a/src/3rdparty/proj/pj_phi2.c b/src/3rdparty/proj/pj_phi2.c
deleted file mode 100644
index 0900350e..00000000
--- a/src/3rdparty/proj/pj_phi2.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* determine latitude angle phi-2 */
-#include <projects.h>
-
-#define HALFPI 1.5707963267948966
-#define TOL 1.0e-10
-#define N_ITER 15
-
- double
-pj_phi2(double ts, double e) {
- double eccnth, Phi, con, dphi;
- int i;
-
- eccnth = .5 * e;
- Phi = HALFPI - 2. * atan (ts);
- i = N_ITER;
- do {
- con = e * sin (Phi);
- dphi = HALFPI - 2. * atan (ts * pow((1. - con) /
- (1. + con), eccnth)) - Phi;
- Phi += dphi;
- } while ( fabs(dphi) > TOL && --i);
- if (i <= 0)
- pj_errno = -18;
- return Phi;
-}
diff --git a/src/3rdparty/proj/pj_pr_list.c b/src/3rdparty/proj/pj_pr_list.c
deleted file mode 100644
index d4a908cd..00000000
--- a/src/3rdparty/proj/pj_pr_list.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* print projection's list of parameters */
-#include <projects.h>
-#include <stdio.h>
-#include <string.h>
-#define LINE_LEN 72
- static int
-pr_list(PJ *P, int not_used) {
- paralist *t;
- int l, n = 1, flag = 0;
-
- (void)putchar('#');
- for (t = P->params; t; t = t->next)
- if ((!not_used && t->used) || (not_used && !t->used)) {
- l = strlen(t->param) + 1;
- if (n + l > LINE_LEN) {
- (void)fputs("\n#", stdout);
- n = 2;
- }
- (void)putchar(' ');
- if (*(t->param) != '+')
- (void)putchar('+');
- (void)fputs(t->param, stdout);
- n += l;
- } else
- flag = 1;
- if (n > 1)
- (void)putchar('\n');
- return flag;
-}
- void /* print link list of projection parameters */
-pj_pr_list(PJ *P) {
- char const *s;
-
- (void)putchar('#');
- for (s = P->descr; *s ; ++s) {
- (void)putchar(*s);
- if (*s == '\n')
- (void)putchar('#');
- }
- (void)putchar('\n');
- if (pr_list(P, 0)) {
- (void)fputs("#--- following specified but NOT used\n", stdout);
- (void)pr_list(P, 1);
- }
-}
-
-/************************************************************************/
-/* pj_get_def() */
-/* */
-/* Returns the PROJ.4 command string that would produce this */
-/* definition expanded as much as possible. For instance, */
-/* +init= calls and +datum= defintions would be expanded. */
-/************************************************************************/
-
-char *pj_get_def( PJ *P, int options )
-
-{
- paralist *t;
- int l;
- char *definition;
- int def_max = 10;
-
- definition = (char *) pj_malloc(def_max);
- definition[0] = '\0';
-
- for (t = P->params; t; t = t->next)
- {
- /* skip unused parameters ... mostly appended defaults and stuff */
- if (!t->used)
- continue;
-
- /* grow the resulting string if needed */
- l = strlen(t->param) + 1;
- if( strlen(definition) + l + 5 > def_max )
- {
- char *def2;
-
- def_max = def_max * 2 + l + 5;
- def2 = (char *) pj_malloc(def_max);
- strcpy( def2, definition );
- pj_dalloc( definition );
- definition = def2;
- }
-
- /* append this parameter */
- strcat( definition, " +" );
- strcat( definition, t->param );
- }
-
- return definition;
-}
diff --git a/src/3rdparty/proj/pj_qsfn.c b/src/3rdparty/proj/pj_qsfn.c
deleted file mode 100644
index ccb12308..00000000
--- a/src/3rdparty/proj/pj_qsfn.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* determine small q */
-#include <math.h>
-#include <projects.h>
-
-# define EPSILON 1.0e-7
- double
-pj_qsfn(double sinphi, double e, double one_es) {
- double con;
-
- if (e >= EPSILON) {
- con = e * sinphi;
- return (one_es * (sinphi / (1. - con * con) -
- (.5 / e) * log ((1. - con) / (1. + con))));
- } else
- return (sinphi + sinphi);
-}
diff --git a/src/3rdparty/proj/pj_release.c b/src/3rdparty/proj/pj_release.c
deleted file mode 100644
index d1e22095..00000000
--- a/src/3rdparty/proj/pj_release.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* <<< Release Notice for library >>> */
-
-#include <projects.h>
-
-char const pj_release[]="Rel. 4.7.1, 23 September 2009";
-
-const char *pj_get_release()
-
-{
- return pj_release;
-}
diff --git a/src/3rdparty/proj/pj_strerrno.c b/src/3rdparty/proj/pj_strerrno.c
deleted file mode 100644
index 4db1fb9a..00000000
--- a/src/3rdparty/proj/pj_strerrno.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* list of projection system pj_errno values */
-#include "projects.h"
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
- static char *
-pj_err_list[] = {
- "no arguments in initialization list", /* -1 */
- "no options found in 'init' file", /* -2 */
- "no colon in init= string", /* -3 */
- "projection not named", /* -4 */
- "unknown projection id", /* -5 */
- "effective eccentricity = 1.", /* -6 */
- "unknown unit conversion id", /* -7 */
- "invalid boolean param argument", /* -8 */
- "unknown elliptical parameter name", /* -9 */
- "reciprocal flattening (1/f) = 0", /* -10 */
- "|radius reference latitude| > 90", /* -11 */
- "squared eccentricity < 0", /* -12 */
- "major axis or radius = 0 or not given", /* -13 */
- "latitude or longitude exceeded limits", /* -14 */
- "invalid x or y", /* -15 */
- "improperly formed DMS value", /* -16 */
- "non-convergent inverse meridinal dist", /* -17 */
- "non-convergent inverse phi2", /* -18 */
- "acos/asin: |arg| >1.+1e-14", /* -19 */
- "tolerance condition error", /* -20 */
- "conic lat_1 = -lat_2", /* -21 */
- "lat_1 >= 90", /* -22 */
- "lat_1 = 0", /* -23 */
- "lat_ts >= 90", /* -24 */
- "no distance between control points", /* -25 */
- "projection not selected to be rotated", /* -26 */
- "W <= 0 or M <= 0", /* -27 */
- "lsat not in 1-5 range", /* -28 */
- "path not in range", /* -29 */
- "h <= 0", /* -30 */
- "k <= 0", /* -31 */
- "lat_0 = 0 or 90 or alpha = 90", /* -32 */
- "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */
- "elliptical usage required", /* -34 */
- "invalid UTM zone number", /* -35 */
- "arg(s) out of range for Tcheby eval", /* -36 */
- "failed to find projection to be rotated", /* -37 */
- "failed to load NAD27-83 correction file", /* -38 */
- "both n & m must be spec'd and > 0", /* -39 */
- "n <= 0, n > 1 or not specified", /* -40 */
- "lat_1 or lat_2 not specified", /* -41 */
- "|lat_1| == |lat_2|", /* -42 */
- "lat_0 is pi/2 from mean lat", /* -43 */
- "unparseable coordinate system definition", /* -44 */
- "geocentric transformation missing z or ellps", /* -45 */
- "unknown prime meridian conversion id", /* -46 */
-};
- char *
-pj_strerrno(int err)
-{
- static char note[50];
-
- if (err > 0)
-#ifdef HAVE_STRERROR
- return strerror(err);
-#else
- {
- sprintf(note,"no system list, errno: %d\n", err);
- return note;
- }
-#endif
- else if (err < 0) {
- int adjusted_err = - err - 1;
- if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *)))
- return(pj_err_list[adjusted_err]);
- else
- {
- sprintf( note, "invalid projection system error (%d)",
- err );
- return note;
- }
- } else
- return NULL;
-}
diff --git a/src/3rdparty/proj/pj_transform.c b/src/3rdparty/proj/pj_transform.c
deleted file mode 100644
index 7aacbd4a..00000000
--- a/src/3rdparty/proj/pj_transform.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/******************************************************************************
- * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Perform overall coordinate system to coordinate system
- * transformations (pj_transform() function) including reprojection
- * and datum shifting.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#include <projects.h>
-#include <string.h>
-#include <math.h>
-#include "geocent.h"
-
-PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $");
-
-#ifndef SRS_WGS84_SEMIMAJOR
-#define SRS_WGS84_SEMIMAJOR 6378137.0
-#endif
-
-#ifndef SRS_WGS84_ESQUARED
-#define SRS_WGS84_ESQUARED 0.0066943799901413165
-#endif
-
-#define Dx_BF (defn->datum_params[0])
-#define Dy_BF (defn->datum_params[1])
-#define Dz_BF (defn->datum_params[2])
-#define Rx_BF (defn->datum_params[3])
-#define Ry_BF (defn->datum_params[4])
-#define Rz_BF (defn->datum_params[5])
-#define M_BF (defn->datum_params[6])
-
-/*
-** This table is intended to indicate for any given error code in
-** the range 0 to -44, whether that error will occur for all locations (ie.
-** it is a problem with the coordinate system as a whole) in which case the
-** value would be 0, or if the problem is with the point being transformed
-** in which case the value is 1.
-**
-** At some point we might want to move this array in with the error message
-** list or something, but while experimenting with it this should be fine.
-*/
-
-static const int transient_error[45] = {
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
- /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- /* 40 to 44 */ 0, 0, 0, 0, 0 };
-
-/************************************************************************/
-/* pj_transform() */
-/* */
-/* Currently this function doesn't recognise if two projections */
-/* are identical (to short circuit reprojection) because it is */
-/* difficult to compare PJ structures (since there are some */
-/* projection specific components). */
-/************************************************************************/
-
-int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- long i;
- int need_datum_shift;
-
- pj_errno = 0;
-
- if( point_offset == 0 )
- point_offset = 1;
-
-/* -------------------------------------------------------------------- */
-/* Transform geocentric source coordinates to lat/long. */
-/* -------------------------------------------------------------------- */
- if( srcdefn->is_geocent )
- {
- if( z == NULL )
- {
- pj_errno = PJD_ERR_GEOCENTRIC;
- return PJD_ERR_GEOCENTRIC;
- }
-
- if( srcdefn->to_meter != 1.0 )
- {
- for( i = 0; i < point_count; i++ )
- {
- if( x[point_offset*i] != HUGE_VAL )
- {
- x[point_offset*i] *= srcdefn->to_meter;
- y[point_offset*i] *= srcdefn->to_meter;
- }
- }
- }
-
- if( pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig,
- point_count, point_offset,
- x, y, z ) != 0)
- return pj_errno;
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform source points to lat/long, if they aren't */
-/* already. */
-/* -------------------------------------------------------------------- */
- else if( !srcdefn->is_latlong )
- {
- if( srcdefn->inv == NULL )
- {
- pj_errno = -17; /* this isn't correct, we need a no inverse err */
- if( getenv( "PROJ_DEBUG" ) != NULL )
- {
- fprintf( stderr,
- "pj_transform(): source projection not invertable\n" );
- }
- return pj_errno;
- }
-
- for( i = 0; i < point_count; i++ )
- {
- XY projected_loc;
- LP geodetic_loc;
-
- projected_loc.u = x[point_offset*i];
- projected_loc.v = y[point_offset*i];
-
- if( projected_loc.u == HUGE_VAL )
- continue;
-
- geodetic_loc = pj_inv( projected_loc, srcdefn );
- if( pj_errno != 0 )
- {
- if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ )
- && (pj_errno > 0 || pj_errno < -44 || point_count == 1
- || transient_error[-pj_errno] == 0 ) )
- return pj_errno;
- else
- {
- geodetic_loc.u = HUGE_VAL;
- geodetic_loc.v = HUGE_VAL;
- }
- }
-
- x[point_offset*i] = geodetic_loc.u;
- y[point_offset*i] = geodetic_loc.v;
- }
- }
-/* -------------------------------------------------------------------- */
-/* But if they are already lat long, adjust for the prime */
-/* meridian if there is one in effect. */
-/* -------------------------------------------------------------------- */
- if( srcdefn->from_greenwich != 0.0 )
- {
- for( i = 0; i < point_count; i++ )
- {
- if( x[point_offset*i] != HUGE_VAL )
- x[point_offset*i] += srcdefn->from_greenwich;
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Convert datums if needed, and possible. */
-/* -------------------------------------------------------------------- */
- if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset,
- x, y, z ) != 0 )
- return pj_errno;
-
-/* -------------------------------------------------------------------- */
-/* But if they are staying lat long, adjust for the prime */
-/* meridian if there is one in effect. */
-/* -------------------------------------------------------------------- */
- if( dstdefn->from_greenwich != 0.0 )
- {
- for( i = 0; i < point_count; i++ )
- {
- if( x[point_offset*i] != HUGE_VAL )
- x[point_offset*i] -= dstdefn->from_greenwich;
- }
- }
-
-
-/* -------------------------------------------------------------------- */
-/* Transform destination latlong to geocentric if required. */
-/* -------------------------------------------------------------------- */
- if( dstdefn->is_geocent )
- {
- if( z == NULL )
- {
- pj_errno = PJD_ERR_GEOCENTRIC;
- return PJD_ERR_GEOCENTRIC;
- }
-
- pj_geodetic_to_geocentric( dstdefn->a_orig, dstdefn->es_orig,
- point_count, point_offset, x, y, z );
-
- if( dstdefn->fr_meter != 1.0 )
- {
- for( i = 0; i < point_count; i++ )
- {
- if( x[point_offset*i] != HUGE_VAL )
- {
- x[point_offset*i] *= dstdefn->fr_meter;
- y[point_offset*i] *= dstdefn->fr_meter;
- }
- }
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform destination points to projection coordinates, if */
-/* desired. */
-/* -------------------------------------------------------------------- */
- else if( !dstdefn->is_latlong )
- {
- for( i = 0; i < point_count; i++ )
- {
- XY projected_loc;
- LP geodetic_loc;
-
- geodetic_loc.u = x[point_offset*i];
- geodetic_loc.v = y[point_offset*i];
-
- if( geodetic_loc.u == HUGE_VAL )
- continue;
-
- projected_loc = pj_fwd( geodetic_loc, dstdefn );
- if( pj_errno != 0 )
- {
- if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ )
- && (pj_errno > 0 || pj_errno < -44 || point_count == 1
- || transient_error[-pj_errno] == 0 ) )
- return pj_errno;
- else
- {
- projected_loc.u = HUGE_VAL;
- projected_loc.v = HUGE_VAL;
- }
- }
-
- x[point_offset*i] = projected_loc.u;
- y[point_offset*i] = projected_loc.v;
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* If a wrapping center other than 0 is provided, rewrap around */
-/* the suggested center (for latlong coordinate systems only). */
-/* -------------------------------------------------------------------- */
- else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 )
- {
- for( i = 0; i < point_count; i++ )
- {
- if( x[point_offset*i] == HUGE_VAL )
- continue;
-
- while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI )
- x[point_offset*i] += PI;
- while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI )
- x[point_offset*i] -= PI;
- }
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_geodetic_to_geocentric() */
-/************************************************************************/
-
-int pj_geodetic_to_geocentric( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- double b;
- int i;
- GeocentricInfo gi;
-
- pj_errno = 0;
-
- if( es == 0.0 )
- b = a;
- else
- b = a * sqrt(1-es);
-
- if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 )
- {
- pj_errno = PJD_ERR_GEOCENTRIC;
- return pj_errno;
- }
-
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io],
- x+io, y+io, z+io ) != 0 )
- {
- pj_errno = -14;
- x[io] = y[io] = HUGE_VAL;
- /* but keep processing points! */
- }
- }
-
- return pj_errno;
-}
-
-/************************************************************************/
-/* pj_geodetic_to_geocentric() */
-/************************************************************************/
-
-int pj_geocentric_to_geodetic( double a, double es,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- double b;
- int i;
- GeocentricInfo gi;
-
- if( es == 0.0 )
- b = a;
- else
- b = a * sqrt(1-es);
-
- if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 )
- {
- pj_errno = PJD_ERR_GEOCENTRIC;
- return pj_errno;
- }
-
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io],
- y+io, x+io, z+io );
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_compare_datums() */
-/* */
-/* Returns TRUE if the two datums are identical, otherwise */
-/* FALSE. */
-/************************************************************************/
-
-int pj_compare_datums( PJ *srcdefn, PJ *dstdefn )
-
-{
- if( srcdefn->datum_type != dstdefn->datum_type )
- {
- return 0;
- }
- else if( srcdefn->a_orig != dstdefn->a_orig
- || ABS(srcdefn->es_orig - dstdefn->es_orig) > 0.000000000050 )
- {
- /* the tolerence for es is to ensure that GRS80 and WGS84 are
- considered identical */
- return 0;
- }
- else if( srcdefn->datum_type == PJD_3PARAM )
- {
- return (srcdefn->datum_params[0] == dstdefn->datum_params[0]
- && srcdefn->datum_params[1] == dstdefn->datum_params[1]
- && srcdefn->datum_params[2] == dstdefn->datum_params[2]);
- }
- else if( srcdefn->datum_type == PJD_7PARAM )
- {
- return (srcdefn->datum_params[0] == dstdefn->datum_params[0]
- && srcdefn->datum_params[1] == dstdefn->datum_params[1]
- && srcdefn->datum_params[2] == dstdefn->datum_params[2]
- && srcdefn->datum_params[3] == dstdefn->datum_params[3]
- && srcdefn->datum_params[4] == dstdefn->datum_params[4]
- && srcdefn->datum_params[5] == dstdefn->datum_params[5]
- && srcdefn->datum_params[6] == dstdefn->datum_params[6]);
- }
- else if( srcdefn->datum_type == PJD_GRIDSHIFT )
- {
- return strcmp( pj_param(srcdefn->params,"snadgrids").s,
- pj_param(dstdefn->params,"snadgrids").s ) == 0;
- }
- else
- return 1;
-}
-
-/************************************************************************/
-/* pj_geocentic_to_wgs84() */
-/************************************************************************/
-
-int pj_geocentric_to_wgs84( PJ *defn,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- int i;
-
- pj_errno = 0;
-
- if( defn->datum_type == PJD_3PARAM )
- {
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- x[io] = x[io] + Dx_BF;
- y[io] = y[io] + Dy_BF;
- z[io] = z[io] + Dz_BF;
- }
- }
- else if( defn->datum_type == PJD_7PARAM )
- {
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
- double x_out, y_out, z_out;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF;
- y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF;
- z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF;
-
- x[io] = x_out;
- y[io] = y_out;
- z[io] = z_out;
- }
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_geocentic_from_wgs84() */
-/************************************************************************/
-
-int pj_geocentric_from_wgs84( PJ *defn,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- int i;
-
- pj_errno = 0;
-
- if( defn->datum_type == PJD_3PARAM )
- {
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- x[io] = x[io] - Dx_BF;
- y[io] = y[io] - Dy_BF;
- z[io] = z[io] - Dz_BF;
- }
- }
- else if( defn->datum_type == PJD_7PARAM )
- {
- for( i = 0; i < point_count; i++ )
- {
- long io = i * point_offset;
- double x_tmp, y_tmp, z_tmp;
-
- if( x[io] == HUGE_VAL )
- continue;
-
- x_tmp = (x[io] - Dx_BF) / M_BF;
- y_tmp = (y[io] - Dy_BF) / M_BF;
- z_tmp = (z[io] - Dz_BF) / M_BF;
-
- x[io] = x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp;
- y[io] = -Rz_BF*x_tmp + y_tmp + Rx_BF*z_tmp;
- z[io] = Ry_BF*x_tmp - Rx_BF*y_tmp + z_tmp;
- }
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_datum_transform() */
-/* */
-/* The input should be long/lat/z coordinates in radians in the */
-/* source datum, and the output should be long/lat/z */
-/* coordinates in radians in the destination datum. */
-/************************************************************************/
-
-int pj_datum_transform( PJ *srcdefn, PJ *dstdefn,
- long point_count, int point_offset,
- double *x, double *y, double *z )
-
-{
- double src_a, src_es, dst_a, dst_es;
- int z_is_temp = FALSE;
-
- pj_errno = 0;
-
-/* -------------------------------------------------------------------- */
-/* We cannot do any meaningful datum transformation if either */
-/* the source or destination are of an unknown datum type */
-/* (ie. only a +ellps declaration, no +datum). This is new */
-/* behavior for PROJ 4.6.0. */
-/* -------------------------------------------------------------------- */
- if( srcdefn->datum_type == PJD_UNKNOWN
- || dstdefn->datum_type == PJD_UNKNOWN )
- return 0;
-
-/* -------------------------------------------------------------------- */
-/* Short cut if the datums are identical. */
-/* -------------------------------------------------------------------- */
- if( pj_compare_datums( srcdefn, dstdefn ) )
- return 0;
-
- src_a = srcdefn->a_orig;
- src_es = srcdefn->es_orig;
-
- dst_a = dstdefn->a_orig;
- dst_es = dstdefn->es_orig;
-
-/* -------------------------------------------------------------------- */
-/* Create a temporary Z array if one is not provided. */
-/* -------------------------------------------------------------------- */
- if( z == NULL )
- {
- int bytes = sizeof(double) * point_count * point_offset;
- z = (double *) pj_malloc(bytes);
- memset( z, 0, bytes );
- z_is_temp = TRUE;
- }
-
-#define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return pj_errno; }}
-
-/* -------------------------------------------------------------------- */
-/* If this datum requires grid shifts, then apply it to geodetic */
-/* coordinates. */
-/* -------------------------------------------------------------------- */
- if( srcdefn->datum_type == PJD_GRIDSHIFT )
- {
- pj_apply_gridshift( pj_param(srcdefn->params,"snadgrids").s, 0,
- point_count, point_offset, x, y, z );
- CHECK_RETURN;
-
- src_a = SRS_WGS84_SEMIMAJOR;
- src_es = SRS_WGS84_ESQUARED;
- }
-
- if( dstdefn->datum_type == PJD_GRIDSHIFT )
- {
- dst_a = SRS_WGS84_SEMIMAJOR;
- dst_es = SRS_WGS84_ESQUARED;
- }
-
-/* ==================================================================== */
-/* Do we need to go through geocentric coordinates? */
-/* ==================================================================== */
- if( src_es != dst_es || src_a != dst_a
- || srcdefn->datum_type == PJD_3PARAM
- || srcdefn->datum_type == PJD_7PARAM
- || dstdefn->datum_type == PJD_3PARAM
- || dstdefn->datum_type == PJD_7PARAM)
- {
-/* -------------------------------------------------------------------- */
-/* Convert to geocentric coordinates. */
-/* -------------------------------------------------------------------- */
- pj_geodetic_to_geocentric( src_a, src_es,
- point_count, point_offset, x, y, z );
- CHECK_RETURN;
-
-/* -------------------------------------------------------------------- */
-/* Convert between datums. */
-/* -------------------------------------------------------------------- */
- if( srcdefn->datum_type == PJD_3PARAM
- || srcdefn->datum_type == PJD_7PARAM )
- {
- pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z);
- CHECK_RETURN;
- }
-
- if( dstdefn->datum_type == PJD_3PARAM
- || dstdefn->datum_type == PJD_7PARAM )
- {
- pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z);
- CHECK_RETURN;
- }
-
-/* -------------------------------------------------------------------- */
-/* Convert back to geodetic coordinates. */
-/* -------------------------------------------------------------------- */
- pj_geocentric_to_geodetic( dst_a, dst_es,
- point_count, point_offset, x, y, z );
- CHECK_RETURN;
- }
-
-/* -------------------------------------------------------------------- */
-/* Apply grid shift to destination if required. */
-/* -------------------------------------------------------------------- */
- if( dstdefn->datum_type == PJD_GRIDSHIFT )
- {
- pj_apply_gridshift( pj_param(dstdefn->params,"snadgrids").s, 1,
- point_count, point_offset, x, y, z );
- CHECK_RETURN;
- }
-
- if( z_is_temp )
- pj_dalloc( z );
-
- return 0;
-}
-
diff --git a/src/3rdparty/proj/pj_tsfn.c b/src/3rdparty/proj/pj_tsfn.c
deleted file mode 100644
index d9dc0bc4..00000000
--- a/src/3rdparty/proj/pj_tsfn.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* determine small t */
-#include <math.h>
-#include <projects.h>
-#define HALFPI 1.5707963267948966
- double
-pj_tsfn(double phi, double sinphi, double e) {
- sinphi *= e;
- return (tan (.5 * (HALFPI - phi)) /
- pow((1. - sinphi) / (1. + sinphi), .5 * e));
-}
diff --git a/src/3rdparty/proj/pj_units.c b/src/3rdparty/proj/pj_units.c
deleted file mode 100644
index bb39f91b..00000000
--- a/src/3rdparty/proj/pj_units.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* definition of standard cartesian units */
-#define PJ_UNITS__
-#include <projects.h>
-/* Field 2 that contains the multiplier to convert named units to meters
-** may be expressed by either a simple floating point constant or a
-** numerator/denomenator values (e.g. 1/1000) */
-C_NAMESPACE_VAR struct PJ_UNITS
-pj_units[] = {
- "km", "1000.", "Kilometer",
- "m", "1.", "Meter",
- "dm", "1/10", "Decimeter",
- "cm", "1/100", "Centimeter",
- "mm", "1/1000", "Millimeter",
- "kmi", "1852.0", "International Nautical Mile",
- "in", "0.0254", "International Inch",
- "ft", "0.3048", "International Foot",
- "yd", "0.9144", "International Yard",
- "mi", "1609.344", "International Statute Mile",
- "fath", "1.8288", "International Fathom",
- "ch", "20.1168", "International Chain",
- "link", "0.201168", "International Link",
- "us-in", "1./39.37", "U.S. Surveyor's Inch",
- "us-ft", "0.304800609601219", "U.S. Surveyor's Foot",
- "us-yd", "0.914401828803658", "U.S. Surveyor's Yard",
- "us-ch", "20.11684023368047", "U.S. Surveyor's Chain",
- "us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile",
- "ind-yd", "0.91439523", "Indian Yard",
- "ind-ft", "0.30479841", "Indian Foot",
- "ind-ch", "20.11669506", "Indian Chain",
-(char *)0, (char *)0, (char *)0
-};
-
-struct PJ_UNITS *pj_get_units_ref()
-
-{
- return pj_units;
-}
diff --git a/src/3rdparty/proj/pj_utils.c b/src/3rdparty/proj/pj_utils.c
deleted file mode 100644
index f9f66847..00000000
--- a/src/3rdparty/proj/pj_utils.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/******************************************************************************
- * $Id: pj_utils.c 1504 2009-01-06 02:11:57Z warmerdam $
- *
- * Project: PROJ.4
- * Purpose: Some utility functions we don't want to bother putting in
- * their own source files.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2001, Frank Warmerdam
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *****************************************************************************/
-
-#define PJ_LIB__
-
-#include <projects.h>
-#include <string.h>
-#include <math.h>
-
-/************************************************************************/
-/* pj_is_latlong() */
-/* */
-/* Returns TRUE if this coordinate system object is */
-/* geographic. */
-/************************************************************************/
-
-int pj_is_latlong( PJ *pj )
-
-{
- return pj == NULL || pj->is_latlong;
-}
-
-/************************************************************************/
-/* pj_is_geocent() */
-/* */
-/* Returns TRUE if this coordinate system object is geocentric. */
-/************************************************************************/
-
-int pj_is_geocent( PJ *pj )
-
-{
- return pj != NULL && pj->is_geocent;
-}
-
-/************************************************************************/
-/* pj_latlong_from_proj() */
-/* */
-/* Return a PJ* definition defining the lat/long coordinate */
-/* system on which a projection is based. If the coordinate */
-/* system passed in is latlong, a clone of the same will be */
-/* returned. */
-/************************************************************************/
-
-PJ *pj_latlong_from_proj( PJ *pj_in )
-
-{
- char defn[512];
- int got_datum = FALSE;
-
- pj_errno = 0;
- strcpy( defn, "+proj=latlong" );
-
- if( pj_param(pj_in->params, "tdatum").i )
- {
- got_datum = TRUE;
- sprintf( defn+strlen(defn), " +datum=%s",
- pj_param(pj_in->params,"sdatum").s );
- }
- else if( pj_param(pj_in->params, "tellps").i )
- {
- sprintf( defn+strlen(defn), " +ellps=%s",
- pj_param(pj_in->params,"sellps").s );
- }
- else if( pj_param(pj_in->params, "ta").i )
- {
- sprintf( defn+strlen(defn), " +a=%s",
- pj_param(pj_in->params,"sa").s );
-
- if( pj_param(pj_in->params, "tb").i )
- sprintf( defn+strlen(defn), " +b=%s",
- pj_param(pj_in->params,"sb").s );
- else if( pj_param(pj_in->params, "tes").i )
- sprintf( defn+strlen(defn), " +es=%s",
- pj_param(pj_in->params,"ses").s );
- else if( pj_param(pj_in->params, "tf").i )
- sprintf( defn+strlen(defn), " +f=%s",
- pj_param(pj_in->params,"sf").s );
- else
- sprintf( defn+strlen(defn), " +es=%.16g",
- pj_in->es );
- }
- else
- {
- pj_errno = -13;
-
- return NULL;
- }
-
- if( !got_datum )
- {
- if( pj_param(pj_in->params, "ttowgs84").i )
- sprintf( defn+strlen(defn), " +towgs84=%s",
- pj_param(pj_in->params,"stowgs84").s );
-
- if( pj_param(pj_in->params, "tnadgrids").i )
- sprintf( defn+strlen(defn), " +nadgrids=%s",
- pj_param(pj_in->params,"snadgrids").s );
- }
-
- /* copy over some other information related to ellipsoid */
- if( pj_param(pj_in->params, "tR").i )
- sprintf( defn+strlen(defn), " +R=%s",
- pj_param(pj_in->params,"sR").s );
-
- if( pj_param(pj_in->params, "tR_A").i )
- sprintf( defn+strlen(defn), " +R_A" );
-
- if( pj_param(pj_in->params, "tR_V").i )
- sprintf( defn+strlen(defn), " +R_V" );
-
- if( pj_param(pj_in->params, "tR_a").i )
- sprintf( defn+strlen(defn), " +R_a" );
-
- if( pj_param(pj_in->params, "tR_lat_a").i )
- sprintf( defn+strlen(defn), " +R_lat_a=%s",
- pj_param(pj_in->params,"sR_lat_a").s );
-
- if( pj_param(pj_in->params, "tR_lat_g").i )
- sprintf( defn+strlen(defn), " +R_lat_g=%s",
- pj_param(pj_in->params,"sR_lat_g").s );
-
- /* copy over prime meridian */
- if( pj_param(pj_in->params, "tpm").i )
- sprintf( defn+strlen(defn), " +pm=%s",
- pj_param(pj_in->params,"spm").s );
-
- return pj_init_plus( defn );
-}
-
diff --git a/src/3rdparty/proj/pj_zpoly1.c b/src/3rdparty/proj/pj_zpoly1.c
deleted file mode 100644
index fa163deb..00000000
--- a/src/3rdparty/proj/pj_zpoly1.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* evaluate complex polynomial */
-#include <projects.h>
-/* note: coefficients are always from C_1 to C_n
-** i.e. C_0 == (0., 0)
-** n should always be >= 1 though no checks are made
-*/
- COMPLEX
-pj_zpoly1(COMPLEX z, COMPLEX *C, int n) {
- COMPLEX a;
- double t;
-
- a = *(C += n);
- while (n-- > 0) {
- a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
- a.i = C->i + z.r * a.i + z.i * t;
- }
- a.r = z.r * (t = a.r) - z.i * a.i;
- a.i = z.r * a.i + z.i * t;
- return a;
-}
-/* evaluate complex polynomial and derivative */
- COMPLEX
-pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) {
- COMPLEX a, b;
- double t;
- int first = 1;
-
- a = *(C += n);
- while (n-- > 0) {
- if (first) {
- first = 0;
- b = a;
- } else {
- b.r = a.r + z.r * (t = b.r) - z.i * b.i;
- b.i = a.i + z.r * b.i + z.i * t;
- }
- a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
- a.i = C->i + z.r * a.i + z.i * t;
- }
- b.r = a.r + z.r * (t = b.r) - z.i * b.i;
- b.i = a.i + z.r * b.i + z.i * t;
- a.r = z.r * (t = a.r) - z.i * a.i;
- a.i = z.r * a.i + z.i * t;
- *der = b;
- return a;
-}
diff --git a/src/3rdparty/proj/proj.c b/src/3rdparty/proj/proj.c
deleted file mode 100644
index 81616f9e..00000000
--- a/src/3rdparty/proj/proj.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/* <<<< Cartographic projection filter program >>>> */
-#include "projects.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-#include "emess.h"
-
-/* TK 1999-02-13 */
-#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__WIN32__)
-# include <fcntl.h>
-# include <io.h>
-# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
-#else
-# define SET_BINARY_MODE(file)
-#endif
-/* ! TK 1999-02-13 */
-
-#define MAX_LINE 1000
-#define MAX_PARGS 100
-#define PJ_INVERS(P) (P->inv ? 1 : 0)
- static PJ
-*Proj;
- static projUV
-(*proj)(projUV, PJ *);
- static int
-reversein = 0, /* != 0 reverse input arguments */
-reverseout = 0, /* != 0 reverse output arguments */
-bin_in = 0, /* != 0 then binary input */
-bin_out = 0, /* != 0 then binary output */
-echoin = 0, /* echo input data to output line */
-tag = '#', /* beginning of line tag character */
-inverse = 0, /* != 0 then inverse projection */
-prescale = 0, /* != 0 apply cartesian scale factor */
-dofactors = 0, /* determine scale factors */
-facs_bad = 0, /* return condition from pj_factors */
-very_verby = 0, /* very verbose mode */
-postscale = 0;
- static char
-*cheby_str, /* string controlling Chebychev evaluation */
-*oform = (char *)0, /* output format for x-y or decimal degrees */
-*oterr = "*\t*", /* output line for unprojectable input */
-*usage =
-"%s\nusage: %s [ -beEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]\n";
- static struct FACTORS
-facs;
- static double
-(*informat)(const char *, char **), /* input data deformatter function */
-fscale = 0.; /* cartesian scale factor */
- static projUV
-int_proj(projUV data) {
- if (prescale) { data.u *= fscale; data.v *= fscale; }
- data = (*proj)(data, Proj);
- if (postscale && data.u != HUGE_VAL)
- { data.u *= fscale; data.v *= fscale; }
- return(data);
-}
- static void /* file processing function */
-process(FILE *fid) {
- char line[MAX_LINE+3], *s, pline[40];
- projUV data;
-
- for (;;) {
- ++emess_dat.File_line;
- if (bin_in) { /* binary input */
- if (fread(&data, sizeof(projUV), 1, fid) != 1)
- break;
- } else { /* ascii input */
- if (!(s = fgets(line, MAX_LINE, fid)))
- break;
- if (!strchr(s, '\n')) { /* overlong line */
- int c;
- (void)strcat(s, "\n");
- /* gobble up to newline */
- while ((c = fgetc(fid)) != EOF && c != '\n') ;
- }
- if (*s == tag) {
- if (!bin_out)
- (void)fputs(line, stdout);
- continue;
- }
- if (reversein) {
- data.v = (*informat)(s, &s);
- data.u = (*informat)(s, &s);
- } else {
- data.u = (*informat)(s, &s);
- data.v = (*informat)(s, &s);
- }
- if (data.v == HUGE_VAL)
- data.u = HUGE_VAL;
- if (!*s && (s > line)) --s; /* assumed we gobbled \n */
- if (!bin_out && echoin) {
- int t;
- t = *s;
- *s = '\0';
- (void)fputs(line, stdout);
- *s = t;
- putchar('\t');
- }
- }
- if (data.u != HUGE_VAL) {
- if (prescale) { data.u *= fscale; data.v *= fscale; }
- if (dofactors && !inverse)
- facs_bad = pj_factors(data, Proj, 0., &facs);
- data = (*proj)(data, Proj);
- if (dofactors && inverse)
- facs_bad = pj_factors(data, Proj, 0., &facs);
- if (postscale && data.u != HUGE_VAL)
- { data.u *= fscale; data.v *= fscale; }
- }
- if (bin_out) { /* binary output */
- (void)fwrite(&data, sizeof(projUV), 1, stdout);
- continue;
- } else if (data.u == HUGE_VAL) /* error output */
- (void)fputs(oterr, stdout);
- else if (inverse && !oform) { /*ascii DMS output */
- if (reverseout) {
- (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout);
- putchar('\t');
- (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout);
- } else {
- (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout);
- putchar('\t');
- (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout);
- }
- } else { /* x-y or decimal degree ascii output */
- if (inverse) {
- data.v *= RAD_TO_DEG;
- data.u *= RAD_TO_DEG;
- }
- if (reverseout) {
- (void)printf(oform,data.v); putchar('\t');
- (void)printf(oform,data.u);
- } else {
- (void)printf(oform,data.u); putchar('\t');
- (void)printf(oform,data.v);
- }
- }
- if (dofactors) /* print scale factor data */
- if (!facs_bad)
- (void)printf("\t<%g %g %g %g %g %g>",
- facs.h, facs.k, facs.s,
- facs.omega * RAD_TO_DEG, facs.a, facs.b);
- else
- (void)fputs("\t<* * * * * *>", stdout);
- (void)fputs(bin_in ? "\n" : s, stdout);
- }
-}
- static void /* file processing function --- verbosely */
-vprocess(FILE *fid) {
- char line[MAX_LINE+3], *s, pline[40];
- projUV dat_ll, dat_xy;
- int linvers;
-
- if (!oform)
- oform = "%.3f";
- if (bin_in || bin_out)
- emess(1,"binary I/O not available in -V option");
- for (;;) {
- ++emess_dat.File_line;
- if (!(s = fgets(line, MAX_LINE, fid)))
- break;
- if (!strchr(s, '\n')) { /* overlong line */
- int c;
- (void)strcat(s, "\n");
- /* gobble up to newline */
- while ((c = fgetc(fid)) != EOF && c != '\n') ;
- }
- if (*s == tag) { /* pass on data */
- (void)fputs(s, stdout);
- continue;
- }
- /* check to override default input mode */
- if (*s == 'I' || *s == 'i') {
- linvers = 1;
- ++s;
- } else if (*s == 'I' || *s == 'i') {
- linvers = 0;
- ++s;
- } else
- linvers = inverse;
- if (linvers) {
- if (!PJ_INVERS(Proj)) {
- emess(-1,"inverse for this projection not avail.\n");
- continue;
- }
- dat_xy.u = strtod(s, &s);
- dat_xy.v = strtod(s, &s);
- if (dat_xy.u == HUGE_VAL || dat_xy.v == HUGE_VAL) {
- emess(-1,"lon-lat input conversion failure\n");
- continue;
- }
- if (prescale) { dat_xy.u *= fscale; dat_xy.v *= fscale; }
- dat_ll = pj_inv(dat_xy, Proj);
- } else {
- dat_ll.u = dmstor(s, &s);
- dat_ll.v = dmstor(s, &s);
- if (dat_ll.u == HUGE_VAL || dat_ll.v == HUGE_VAL) {
- emess(-1,"lon-lat input conversion failure\n");
- continue;
- }
- dat_xy = pj_fwd(dat_ll, Proj);
- if (postscale) { dat_xy.u *= fscale; dat_xy.v *= fscale; }
- }
- if (pj_errno) {
- emess(-1, pj_strerrno(pj_errno));
- continue;
- }
- if (!*s && (s > line)) --s; /* assumed we gobbled \n */
- if (pj_factors(dat_ll, Proj, 0., &facs)) {
- emess(-1,"failed to conpute factors\n\n");
- continue;
- }
- if (*s != '\n')
- (void)fputs(s, stdout);
- (void)fputs("Longitude: ", stdout);
- (void)fputs(rtodms(pline, dat_ll.u, 'E', 'W'), stdout);
- (void)printf(" [ %.11g ]\n", dat_ll.u * RAD_TO_DEG);
- (void)fputs("Latitude: ", stdout);
- (void)fputs(rtodms(pline, dat_ll.v, 'N', 'S'), stdout);
- (void)printf(" [ %.11g ]\n", dat_ll.v * RAD_TO_DEG);
- (void)fputs("Easting (x): ", stdout);
- (void)printf(oform, dat_xy.u); putchar('\n');
- (void)fputs("Northing (y): ", stdout);
- (void)printf(oform, dat_xy.v); putchar('\n');
- (void)printf("Meridian scale (h)%c: %.8f ( %.4g %% error )\n",
- facs.code & IS_ANAL_HK ? '*' : ' ', facs.h, (facs.h-1.)*100.);
- (void)printf("Parallel scale (k)%c: %.8f ( %.4g %% error )\n",
- facs.code & IS_ANAL_HK ? '*' : ' ', facs.k, (facs.k-1.)*100.);
- (void)printf("Areal scale (s): %.8f ( %.4g %% error )\n",
- facs.s, (facs.s-1.)*100.);
- (void)printf("Angular distortion (w): %.3f\n", facs.omega *
- RAD_TO_DEG);
- (void)printf("Meridian/Parallel angle: %.5f\n",
- facs.thetap * RAD_TO_DEG);
- (void)printf("Convergence%c: ",facs.code & IS_ANAL_CONV ? '*' : ' ');
- (void)fputs(rtodms(pline, facs.conv, 0, 0), stdout);
- (void)printf(" [ %.8f ]\n", facs.conv * RAD_TO_DEG);
- (void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n",
- facs.a, facs.b);
- }
-}
-
-int main(int argc, char **argv) {
- char *arg, **eargv = argv, *pargv[MAX_PARGS], **iargv = argv;
- FILE *fid;
- int pargc = 0, iargc = argc, eargc = 0, c, mon = 0;
-
- if (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR))
- ++emess_dat.Prog_name;
- else emess_dat.Prog_name = *argv;
- inverse = ! strncmp(emess_dat.Prog_name, "inv", 3);
- if (argc <= 1 ) {
- (void)fprintf(stderr, usage, pj_get_release(), emess_dat.Prog_name);
- exit (0);
- }
- /* process run line arguments */
- while (--argc > 0) { /* collect run line arguments */
- if(**++argv == '-') for(arg = *argv;;) {
- switch(*++arg) {
- case '\0': /* position of "stdin" */
- if (arg[-1] == '-') eargv[eargc++] = "-";
- break;
- case 'b': /* binary I/O */
- bin_in = bin_out = 1;
- continue;
- case 'v': /* monitor dump of initialization */
- mon = 1;
- continue;
- case 'i': /* input binary */
- bin_in = 1;
- continue;
- case 'o': /* output binary */
- bin_out = 1;
- continue;
- case 'I': /* alt. method to spec inverse */
- inverse = 1;
- continue;
- case 'E': /* echo ascii input to ascii output */
- echoin = 1;
- continue;
- case 'V': /* very verbose processing mode */
- very_verby = 1;
- mon = 1;
- case 'S': /* compute scale factors */
- dofactors = 1;
- continue;
- case 't': /* set col. one char */
- if (arg[1]) tag = *++arg;
- else emess(1,"missing -t col. 1 tag");
- continue;
- case 'l': /* list projections, ellipses or units */
- if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') {
- /* list projections */
- struct PJ_LIST *lp;
- int do_long = arg[1] == 'P', c;
- char *str;
-
- for (lp = pj_get_list_ref() ; lp->id ; ++lp) {
- if( strcmp(lp->id,"latlong") == 0
- || strcmp(lp->id,"longlat") == 0
- || strcmp(lp->id,"geocent") == 0 )
- continue;
-
- (void)printf("%s : ", lp->id);
- if (do_long) /* possibly multiline description */
- (void)puts(*lp->descr);
- else { /* first line, only */
- str = *lp->descr;
- while ((c = *str++) && c != '\n')
- putchar(c);
- putchar('\n');
- }
- }
- } else if (arg[1] == '=') { /* list projection 'descr' */
- struct PJ_LIST *lp;
-
- arg += 2;
- for (lp = pj_get_list_ref(); lp->id ; ++lp)
- if (!strcmp(lp->id, arg)) {
- (void)printf("%9s : %s\n", lp->id, *lp->descr);
- break;
- }
- } else if (arg[1] == 'e') { /* list ellipses */
- struct PJ_ELLPS *le;
-
- for (le = pj_get_ellps_ref(); le->id ; ++le)
- (void)printf("%9s %-16s %-16s %s\n",
- le->id, le->major, le->ell, le->name);
- } else if (arg[1] == 'u') { /* list units */
- struct PJ_UNITS *lu;
-
- for (lu = pj_get_units_ref(); lu->id ; ++lu)
- (void)printf("%12s %-20s %s\n",
- lu->id, lu->to_meter, lu->name);
- } else if (arg[1] == 'd') { /* list datums */
- struct PJ_DATUMS *ld;
-
- printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" );
- for (ld = pj_get_datums_ref(); ld->id ; ++ld)
- {
- printf("%12s %-12s %-30s\n",
- ld->id, ld->ellipse_id, ld->defn);
- if( ld->comments != NULL && strlen(ld->comments) > 0 )
- printf( "%25s %s\n", " ", ld->comments );
- }
- } else
- emess(1,"invalid list option: l%c",arg[1]);
- exit(0);
- continue; /* artificial */
- case 'e': /* error line alternative */
- if (--argc <= 0)
- noargument:
- emess(1,"missing argument for -%c",*arg);
- oterr = *++argv;
- continue;
- case 'T': /* generate Chebyshev coefficients */
- if (--argc <= 0) goto noargument;
- cheby_str = *++argv;
- continue;
- case 'm': /* cartesian multiplier */
- if (--argc <= 0) goto noargument;
- postscale = 1;
- if (!strncmp("1/",*++argv,2) ||
- !strncmp("1:",*argv,2)) {
- if((fscale = atof((*argv)+2)) == 0.)
- goto badscale;
- fscale = 1. / fscale;
- } else
- if ((fscale = atof(*argv)) == 0.) {
- badscale:
- emess(1,"invalid scale argument");
- }
- continue;
- case 'W': /* specify seconds precision */
- case 'w': /* -W for constant field width */
- if ((c = arg[1]) != 0 && isdigit(c)) {
- set_rtodms(c - '0', *arg == 'W');
- ++arg;
- } else
- emess(1,"-W argument missing or non-digit");
- continue;
- case 'f': /* alternate output format degrees or xy */
- if (--argc <= 0) goto noargument;
- oform = *++argv;
- continue;
- case 'r': /* reverse input */
- reversein = 1;
- continue;
- case 's': /* reverse output */
- reverseout = 1;
- continue;
- default:
- emess(1, "invalid option: -%c",*arg);
- break;
- }
- break;
- } else if (**argv == '+') { /* + argument */
- if (pargc < MAX_PARGS)
- pargv[pargc++] = *argv + 1;
- else
- emess(1,"overflowed + argument table");
- } else /* assumed to be input file name(s) */
- eargv[eargc++] = *argv;
- }
- if (eargc == 0 && !cheby_str) /* if no specific files force sysin */
- eargv[eargc++] = "-";
- else if (eargc > 0 && cheby_str) /* warning */
- emess(4, "data files when generating Chebychev prohibited");
- /* done with parameter and control input */
- if (inverse && postscale) {
- prescale = 1;
- postscale = 0;
- fscale = 1./fscale;
- }
- if (!(Proj = pj_init(pargc, pargv)))
- emess(3,"projection initialization failure\ncause: %s",
- pj_strerrno(pj_errno));
-
- if( pj_is_latlong( Proj ) )
- {
- emess( 3, "+proj=latlong unsuitable for use with proj program." );
- exit( 0 );
- }
-
- if (inverse) {
- if (!Proj->inv)
- emess(3,"inverse projection not available");
- proj = pj_inv;
- } else
- proj = pj_fwd;
- if (cheby_str) {
- extern void gen_cheb(int, projUV(*)(projUV), char *, PJ *, int, char **);
-
- gen_cheb(inverse, int_proj, cheby_str, Proj, iargc, iargv);
- exit(0);
- }
- /* set input formating control */
- if (mon) {
- pj_pr_list(Proj);
- if (very_verby) {
- (void)printf("#Final Earth figure: ");
- if (Proj->es) {
- (void)printf("ellipsoid\n# Major axis (a): ");
- (void)printf(oform ? oform : "%.3f", Proj->a);
- (void)printf("\n# 1/flattening: %.6f\n",
- 1./(1. - sqrt(1. - Proj->es)));
- (void)printf("# squared eccentricity: %.12f\n", Proj->es);
- } else {
- (void)printf("sphere\n# Radius: ");
- (void)printf(oform ? oform : "%.3f", Proj->a);
- (void)putchar('\n');
- }
- }
- }
- if (inverse)
- informat = strtod;
- else {
- informat = dmstor;
- if (!oform)
- oform = "%.2f";
- }
-
- if (bin_out)
- {
- SET_BINARY_MODE(stdout);
- }
-
- /* process input file list */
- for ( ; eargc-- ; ++eargv) {
- if (**eargv == '-') {
- fid = stdin;
- emess_dat.File_name = "<stdin>";
-
- if (bin_in)
- {
- SET_BINARY_MODE(stdin);
- }
-
- } else {
- if ((fid = fopen(*eargv, "rb")) == NULL) {
- emess(-2, *eargv, "input file");
- continue;
- }
- emess_dat.File_name = *eargv;
- }
- emess_dat.File_line = 0;
- if (very_verby)
- vprocess(fid);
- else
- process(fid);
- (void)fclose(fid);
- emess_dat.File_name = 0;
- }
- if( Proj )
- pj_free(Proj);
- exit(0); /* normal completion */
-}
diff --git a/src/3rdparty/proj/proj.def b/src/3rdparty/proj/proj.def
deleted file mode 100644
index 5170f927..00000000
--- a/src/3rdparty/proj/proj.def
+++ /dev/null
@@ -1,41 +0,0 @@
-VERSION 1.2
-EXPORTS
- pj_init @1
- pj_fwd @2
- pj_inv @3
- pj_free @4
- pj_transform @5
- pj_geocentric_to_geodetic @6
- pj_geodetic_to_geocentric @7
- pj_deallocate_grids @8
- pj_init_plus @9
- pj_latlong_from_proj @10
- pj_is_latlong @11
- pj_get_errno_ref @12
- pj_set_finder @13
- pj_strerrno @14
- pj_errno @15
- pj_get_def @16
- pj_dalloc @17
- pj_is_geocent @18
- pj_get_release @19
- pj_malloc @20
- pj_pr_list @21
- pj_compare_datums @22
- pj_apply_gridshift @23
- pj_datum_transform @24
- pj_set_searchpath @25
- dmstor @26
- pj_get_ellps_ref @27
- pj_get_datums_ref @28
- pj_get_units_ref @29
- pj_get_list_ref @30
- pj_get_prime_meridians_ref @31
- rtodms @32
- set_rtodms @33
- pj_factors @34
- mk_cheby @35
- adjlon @36
- pj_param @37
- pj_ell_set @38
- pj_mkparam @39
diff --git a/src/3rdparty/proj/proj_data/GL27 b/src/3rdparty/proj/proj_data/GL27
deleted file mode 100644
index dd927bd2..00000000
--- a/src/3rdparty/proj/proj_data/GL27
+++ /dev/null
@@ -1,22 +0,0 @@
-# SCCSID @(#)GL27 1.1 93/08/25 GIE REL
-# Great Lakes Grids
-<erie-etal> # Lake Erie, Ontario and St. Lawrence River.
- proj=omerc ellps=clrk66 k_0=0.9999
- lonc=78d00'W lat_0=44d00'N alpha=55d40'
- x_0=-3950000 y_0=-3430000
- no_defs <>
-<huron> # Lake Huron
- proj=omerc ellps=clrk66 k_0=0.9999
- lonc=82d00'W lat_0=43d00'N alpha=350d37'
- x_0=1200000 y_0=-3500000
- no_defs <>
-<michigan> # Lake Michigan
- proj=omerc ellps=clrk66 k_0=0.9999
- lonc=87d00'W lat_0=44d00'N alpha=15d00'
- x_0=-1000000 y_0=-4300000
- no_defs <>
-<superior> # Lake Superior, Lake of the Woods
- proj=omerc ellps=clrk66 k_0=0.9999
- lonc=88d50'0.256"W lat_0=47d12'21.554"N alpha=285d41'42.593"
- x_0=9000000 y_0=-1600000
- no_defs <>
diff --git a/src/3rdparty/proj/proj_data/IGNF b/src/3rdparty/proj/proj_data/IGNF
deleted file mode 100644
index 47aa87b1..00000000
--- a/src/3rdparty/proj/proj_data/IGNF
+++ /dev/null
@@ -1,469 +0,0 @@
-# W [AMANU49]
-# W [AMANU63]
-# W [AMST63]
-# W [ANAA47]
-<ANAA92> +title=MOP92 (Anaa) Tuamotu +proj=geocent +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <>
-# W [APAT48]
-# W [APAT49]
-<APAT86> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=geocent +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<ATI> +title=Ancienne Triangulation des Ingenieurs +proj=geocent +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <>
-# W [BASSAS]
-# W [BIEN55]
-<CAD97> +title=Cadastre 1997 +proj=geocent +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [CADA80]
-# W [CASS1733]
-<CIOBIH> +title=CIO-BIH +proj=geocent +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-# W [CLIP67]
-<CROZ63> +title=Crozet 1963 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<CSG67> +title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<ED50> +title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<EFATE57> +title=EFATE-IGN 1957 +proj=geocent +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [EUROPA54]
-# W [FAKA50]
-# W [FANGA50]
-# W [FANGA64]
-# W [FANGA651]
-# W [FANGA652]
-# W [FANGA66]
-<FANGA84> +title=MOP84 (Fangataufa 1984) +proj=geocent +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [GLOR77CAR]
-<GUAD48> +title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<GUADFM49> +title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [HAO49]
-# W [HAO58]
-# W [HAO67]
-# W [HARA49]
-# W [HIKU50]
-# W [HIVA60]
-# W [HIVA67]
-<IGN63> +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<IGN72> +title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [JULES55]
-<KAUE70> +title=MHPF70 (Kauehi) Tuamotu +proj=geocent +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<KERG62CAR> +title=Kerguelen - K0 +proj=geocent +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<LIFOU56> +title=Lifou - Iles Loyaute (IGN56) +proj=geocent +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<LUREF> +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=geocent +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MAKE50]
-# W [MANGA51]
-<MARE53> +title=Mare - Iles Loyaute (IGN53) +proj=geocent +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MARQUI72> +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=geocent +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MART38> +title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MAUPITI]
-<MAYO50> +title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MHEFO55F> +title=MHEFO 1955 (Fatu Huku) +proj=geocent +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MHEFO55M]
-<MHPF67> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=geocent +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MOOREA87> +title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MOP90> +title=MOP90 (Tetiaroa) Iles de la Societe +proj=geocent +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MURU51]
-# W [MURU59]
-# W [MURU62]
-# W [MURU78]
-# W [NC51]
-# W [NOVA53]
-<NTF> +title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <>
-<NUKU72> +title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<NUKU94> +title=SAT94 (Nukutavake) Tuamotu +proj=geocent +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<OUVEA72CAR> +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=geocent +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<PETRELS72> +title=Petrels - IGN 1972 +proj=geocent +towgs84=365.0000,194.0000,166.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [PMAR55]
-<RAIA53> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=geocent +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [RAIV54]
-# W [RAIV66]
-# W [RANGI47]
-# W [RANGI59]
-# W [RANGI68]
-# W [RAPA55]
-# W [RAPA80]
-<REUN47> +title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [REUN49]
-# W [REUN92]
-<RGF93> +title=Reseau geodesique francais 1993 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGFG95> +title=Reseau geodesique francais de Guyane 1995 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGM04> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGNC> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGPF> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGR92> +title=Reseau geodesique Reunion 1992 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGSPM06> +title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RRAF91> +title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<SAT84> +title=SAT84 (Rurutu) Iles Australes +proj=geocent +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<SHOM84> +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=geocent +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [STPL69]
-<STPM50> +title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <>
-# W [SYSLNCAR]
-<TAHAA> +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TAHI51> +title=Tahiti-Terme Nord 1951 +proj=geocent +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TAHI79> +title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TAKA69]
-<TANNA> +title=Tanna Bloc Sud +proj=geocent +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TERA50> +title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TIKE50]
-# W [TIKE60]
-# W [TROM56]
-<TUBU69> +title=MHPF 1969 (Tubuai) Iles Australes +proj=geocent +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TURI69]
-# W [WALL76]
-<WALL78> +title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<WGS72> +title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <>
-<WGS84> +title=World Geodetic System 1984 +proj=geocent +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-# W [AMANU49GEO]
-# W [AMANU63GEO]
-# W [AMST63GEO]
-# W [ANAA47GEO]
-<ANAA92GEO> +title=MOP92 (Anaa) Tuamotu +proj=longlat +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <>
-# W [APAT48GEO]
-# W [APAT49GEO]
-<APAT86GEO> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=longlat +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<ATIGEO> +title=Ancienne Triangulation des Ingenieurs +proj=longlat +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <>
-# W [BASSASGEO]
-# W [BIEN55GEO]
-<CAD97GEO> +title=Cadastre 1997 +proj=longlat +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [CADA80GEO]
-# W [CASS1733GEO]
-# W [CLIP67GEO]
-<CROZ63GEO> +title=Crozet 1963 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<CSG67GEO> +title=Guyane CSG67 UTM fuseau 21 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<ED50G> +title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<EFATE57GEO> +title=EFATE-IGN 1957 +proj=longlat +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [EUROPA54GEO]
-# W [FAKA50GEO]
-# W [FANGA50GEO]
-# W [FANGA64GEO]
-# W [FANGA651GEO]
-# W [FANGA652GEO]
-# W [FANGA66GEO]
-<FANGA84GEO> +title=MOP84 (Fangataufa 1984) +proj=longlat +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [GLOR77GEO]
-<GUAD48GEO> +title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<GUADFM49GEO> +title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [HAO49GEO]
-# W [HAO58GEO]
-# W [HAO67GEO]
-# W [HARA49GEO]
-# W [HIKU50GEO]
-# W [HIVA60GEO]
-# W [HIVA67GEO]
-<IGN63GEO> +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<IGN72GEO> +title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [JULES55GEO]
-<KAUE70GEO> +title=MHPF70 (Kauehi) Tuamotu +proj=longlat +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<KERG62GEO> +title=Kerguelen - K0 +proj=longlat +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<LIFOU56GEO> +title=Lifou - Iles Loyaute (IGN56) +proj=longlat +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<LUXGEO> +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=longlat +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MAKE50GEO]
-# W [MANGA51GEO]
-<MARE53GEO> +title=Mare - Iles Loyaute (IGN53) +proj=longlat +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MARQUI72GEO> +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=longlat +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MART38GEO> +title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MAUPITIGEO]
-<MAYO50GEO> +title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MHEFO55FGEO> +title=MHEFO 1955 (Fatu Huku) +proj=longlat +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MHEFO55MGEO]
-<MHPF67GEO> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=longlat +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MOOREA87GEO> +title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<MOP90GEO> +title=MOP90 (Tetiaroa) Iles de la Societe +proj=longlat +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [MURU51GEO]
-# W [MURU59GEO]
-# W [MURU62GEO]
-# W [MURU78GEO]
-# W [NC51GEO]
-# W [NOVA53GEO]
-<NTFG> +title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <>
-<NTFP> +title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs <>
-<NUKU72GEO> +title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<NUKU94GEO> +title=SAT94 (Nukutavake) Tuamotu +proj=longlat +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<OUVEA72GEO> +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=longlat +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [PMAR55GEO]
-<RAIA53GEO> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=longlat +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [RAIV54GEO]
-# W [RAIV66GEO]
-# W [RANGI47GEO]
-# W [RANGI59GEO]
-# W [RANGI68GEO]
-# W [RAPA55GEO]
-# W [RAPA80GEO]
-<REUN47GEO> +title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [REUN49GEO]
-# W [REUN92GEO]
-<RGF93G> +title=Reseau geodesique francais 1993 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGFG95GEO> +title=Reseau geodesique francais de Guyane 1995 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGM04GEO> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGNCGEO> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGPFGEO> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGR92GEO> +title=Reseau geodesique de la Reunion 1992 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGSPM06GEO> +title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<SAT84GEO> +title=SAT84 (Rurutu) Iles Australes +proj=longlat +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<SHOM84GEO> +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=longlat +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [STPL69GEO]
-<STPM50GEO> +title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <>
-# W [SYSLNGEO]
-<TAHAAGEO> +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TAHI51GEO> +title=Tahiti-Terme Nord 1951 +proj=longlat +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TAHI79GEO> +title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TAKA69GEO]
-<TANNAGEO> +title=Tanna Bloc Sud +proj=longlat +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TERA50GEO> +title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TIKE50GEO]
-# W [TIKE60GEO]
-# W [TROM56GEO]
-<TUBU69GEO> +title=MHPF 1969 (Tubuai) Iles Australes +proj=longlat +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-# W [TURI69GEO]
-# W [VAITAPEGEO]
-# W [WALL76GEO]
-<WALL78GEO> +title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<WGS72G> +title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <>
-<WGS84G> +title=World Geodetic System 1984 +proj=longlat +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<WGS84RRAFGEO> +title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<XGEO> +title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-# W [AMANU63UTM7S]
-# W [AMST63UTM43S]
-# W [ANAA47UTM6S]
-<ANAA92UTM6S> +title=MOP92 (Anaa) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<APAT86UTM6S> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<APAT86UTM7S> +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 7 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [BASSASUTM37S]
-<CAD97UTM38S> +title=Cadastre 1997 - UTM fuseau 38 Sud +proj=tmerc +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [CADA80UTM7S]
-# W [CLIP57UTM12]
-<CROZ63UTM39S> +title=Crozet 1963 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<CSG67UTM21> +title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<CSG67UTM22> +title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<EFATE57UT59S> +title=EFATE-IGN 1957 - UTM fuseau 59 Sud +proj=tmerc +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [FAKA50UTM6S]
-# W [FANGA64UTM7S]
-# W [FANGA651U7S]
-# W [FANGA652U7S]
-# W [FANGA66UTM7S]
-<FANGA84UTM7S> +title=Fangataufa 1984 - UTM fuseau 7 Sud +proj=tmerc +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<GEOPORTALANF> +title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALCRZ> +title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALFXX> +title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALGUF> +title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALKER> +title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALMYT> +title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALNCL> +title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALPYF> +title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALREU> +title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALSPM> +title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALWLF> +title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-# W [GLOR77UTM38S]
-<GUAD48UTM20> +title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<GUADFM49U20> +title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-# W [HAO58UTM7S]
-# W [HAO67UTM7S]
-# W [HARA49UTM7S]
-# W [HIKU50UTM7S]
-# W [HIVA60UTM7S]
-# W [HIVA67UTM7S]
-<IGN63UTM7S> +title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<IGN72LAM> +title=IGN 1972 - Lambert Nouvelle Caledonie +proj=lcc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <>
-<IGN72UTM58S> +title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<KAUE70UTM6S> +title=MHPF70 (Kauehi) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<KERG62UTM42S> +title=Kerguelen 1962 +proj=tmerc +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<LAMB1> +title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <>
-<LAMB1C> +title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs <>
-<LAMB2> +title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <>
-<LAMB2C> +title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <>
-<LAMB3> +title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <>
-<LAMB3C> +title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs <>
-<LAMB4> +title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs <>
-<LAMB4C> +title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs <>
-<LAMB93> +title=Lambert 93 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs <>
-<LAMBE> +title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <>
-<LAMBGC> +title=Lambert grand champ +proj=lcc +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=47.000000000 +lon_0=0.000000000 +lat_1=45.000000000 +lat_2=49.000000000 +x_0=600000.000 +y_0=600000.000 +units=m +no_defs <>
-<LUXGAUSSK> +title=Luxembourg 1929 +proj=tmerc +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=49.833333333 +lon_0=6.166666667 +k_0=1.00000000 +x_0=80000.000 +y_0=100000.000 +units=m +no_defs <>
-# W [MAKE50UTM7S]
-# W [MANGA51U8S]
-<MARE53UTM58S> +title=Mare - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<MART38UTM20> +title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-# W [MAUPITIUTM5S]
-<MAYO50UTM38S> +title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<MHPF67UTM8S> +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) - UTM 8 S +proj=tmerc +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<MILLER> +title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<MOOREA87U6S> +title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<MOP90UTM6S> +title=MOP90 (Tetiaroa) Iles de la Societe - UTM fuseau 6 Sud +proj=tmerc +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [MURU59UTM7S]
-# W [MURU62UTM7S]
-# W [MURU78UTM7S]
-# W [NC51UTM58S]
-# W [NOVA53UTM38S]
-<NUKU72U7S> +title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<NUKU94UTM7S> +title=IGN 1994 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<OUVEA72U58S> +title=Ouvea - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RAIA53UTM5S> +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine - UTM fuseau 5 +proj=tmerc +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [RAIV54UTM6S]
-# W [RAIV66UTM6S]
-# W [RANGI47U6S]
-# W [RANGI59U6S]
-# W [RANGI68U6S]
-<REUN47GAUSSL> +title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs <>
-<RGF93CC42> +title=Projection conique conforme Zone 1 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.250000000 +lat_2=42.750000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs <>
-<RGF93CC43> +title=Projection conique conforme Zone 2 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.250000000 +lat_2=43.750000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs <>
-<RGF93CC44> +title=Projection conique conforme Zone 3 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.250000000 +lat_2=44.750000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs <>
-<RGF93CC45> +title=Projection conique conforme Zone 4 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.250000000 +lat_2=45.750000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs <>
-<RGF93CC46> +title=Projection conique conforme Zone 5 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.250000000 +lat_2=46.750000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs <>
-<RGF93CC47> +title=Projection conique conforme Zone 6 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.250000000 +lat_2=47.750000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs <>
-<RGF93CC48> +title=Projection conique conforme Zone 7 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.250000000 +lat_2=48.750000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs <>
-<RGF93CC49> +title=Projection conique conforme Zone 8 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.250000000 +lat_2=49.750000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs <>
-<RGF93CC50> +title=Projection conique conforme Zone 9 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.250000000 +lat_2=50.750000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs <>
-<RGM04UTM38S> +title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGNCLAM> +title=Reseau Geodesique de Nouvelle-Caledonie - Lambert Nouvelle Caledonie +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <>
-<RGNCUTM57S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGNCUTM58S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGNCUTM59S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGPFUTM5S> +title=RGPF - UTM fuseau 5 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGPFUTM6S> +title=RGPF - UTM fuseau 6 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGPFUTM7S> +title=RGPF - UTM fuseau 7 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGR92UTM40S> +title=RGR92 UTM fuseau 40 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<RGSPM06U21> +title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<SAT84UTM5S> +title=SAT84 (Rurutu) Iles Australes - UTM fuseau 5 Sud +proj=tmerc +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<STEREOSX> +title=Stereographique polaire Sud +proj=sterea +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <>
-# W [STPL69UTM43S]
-<STPM50UTM21> +title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<TAHAAUTM05S> +title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<TAHI51UTM06S> +title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<TAHI79UTM6S> +title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [TAKA69UTM6S]
-<TANNAUTM59S> +title=Tanna Bloc Sud - UTM fuseau 59 Sud +proj=tmerc +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<TERA50SPTA> +title=Terre Adelie Stereo polaire Terre Adelie +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-67.000000000 +lon_0=140.000000000 +k=1.00000000 +x_0=300000.000 +y_0=200000.000 +units=m +no_defs <>
-<TERA50STEREO> +title=Terre Adelie 1950 +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <>
-# W [TIKE50UTM6S]
-# W [TIKE60UTM6S]
-<TUBU69UTM6S> +title=Tubuai - Iles Australes - UTM fuseau 6 Sud +proj=tmerc +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-# W [TURI69UTM7S]
-<UTM01SW72> +title=World Geodetic System 1972 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM01SW84> +title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM01W84> +title=World Geodetic System 1984 UTM fuseau 01 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM02SW84> +title=World Geodetic System 1984 UTM fuseau 02 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM02W84> +title=World Geodetic System 1984 UTM fuseau 02 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM03SW84> +title=World Geodetic System 1984 UTM fuseau 03 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM03W84> +title=World Geodetic System 1984 UTM fuseau 03 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM04SW84> +title=World Geodetic System 1984 UTM fuseau 04 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM04W84> +title=World Geodetic System 1984 UTM fuseau 04 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM05SW84> +title=World Geodetic System 1984 UTM fuseau 05 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM05W84> +title=World Geodetic System 1984 UTM fuseau 05 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM06SW84> +title=World Geodetic System 1984 UTM fuseau 06 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM06W84> +title=World Geodetic System 1984 UTM fuseau 06 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM07SW84> +title=World Geodetic System 1984 UTM fuseau 07 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM07W84> +title=World Geodetic System 1984 UTM fuseau 07 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM08SW84> +title=World Geodetic System 1984 UTM fuseau 08 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM08W84> +title=World Geodetic System 1984 UTM fuseau 08 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM09SW84> +title=World Geodetic System 1984 UTM fuseau 09 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM09W84> +title=World Geodetic System 1984 UTM fuseau 09 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM10SW84> +title=World Geodetic System 1984 UTM fuseau 10 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM10W84> +title=World Geodetic System 1984 UTM fuseau 10 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM11SW84> +title=World Geodetic System 1984 UTM fuseau 11 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM11W84> +title=World Geodetic System 1984 UTM fuseau 11 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM12SW84> +title=World Geodetic System 1984 UTM fuseau 12 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM12W84> +title=World Geodetic System 1984 UTM fuseau 12 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM13SW84> +title=World Geodetic System 1984 UTM fuseau 13 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM13W84> +title=World Geodetic System 1984 UTM fuseau 13 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM14SW84> +title=World Geodetic System 1984 UTM fuseau 14 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM14W84> +title=World Geodetic System 1984 UTM fuseau 14 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM15SW84> +title=World Geodetic System 1984 UTM fuseau 15 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM15W84> +title=World Geodetic System 1984 UTM fuseau 15 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM16SW84> +title=World Geodetic System 1984 UTM fuseau 16 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM16W84> +title=World Geodetic System 1984 UTM fuseau 16 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM17SW84> +title=World Geodetic System 1984 UTM fuseau 17 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM17W84> +title=World Geodetic System 1984 UTM fuseau 17 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM18SW84> +title=World Geodetic System 1984 UTM fuseau 18 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM18W84> +title=World Geodetic System 1984 UTM fuseau 18 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM19SW84> +title=World Geodetic System 1984 UTM fuseau 19 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM19W84> +title=World Geodetic System 1984 UTM fuseau 19 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM20SW84> +title=World Geodetic System 1984 UTM fuseau 20 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM20W84> +title=World Geodetic System 1984 UTM fuseau 20 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM20W84GUAD> +title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM20W84MART> +title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM21SW84> +title=World Geodetic System 1984 UTM fuseau 21 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM21W84> +title=World Geodetic System 1984 UTM fuseau 21 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM22RGFG95> +title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM22SW84> +title=World Geodetic System 1984 UTM fuseau 22 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM22W84> +title=World Geodetic System 1984 UTM fuseau 22 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM23SW84> +title=World Geodetic System 1984 UTM fuseau 23 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM23W84> +title=World Geodetic System 1984 UTM fuseau 23 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM24SW84> +title=World Geodetic System 1984 UTM fuseau 24 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM24W84> +title=World Geodetic System 1984 UTM fuseau 24 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM25SW84> +title=World Geodetic System 1984 UTM fuseau 25 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM25W84> +title=World Geodetic System 1984 UTM fuseau 25 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM26SW84> +title=World Geodetic System 1984 UTM fuseau 26 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM26W84> +title=World Geodetic System 1984 UTM fuseau 26 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM27SW84> +title=World Geodetic System 1984 UTM fuseau 27 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM27W84> +title=World Geodetic System 1984 UTM fuseau 27 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM28SW84> +title=World Geodetic System 1984 UTM fuseau 28 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM28W84> +title=World Geodetic System 1984 UTM fuseau 28 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM29SW84> +title=World Geodetic System 1984 UTM fuseau 29 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM29W84> +title=World Geodetic System 1984 UTM fuseau 29 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM30> +title=European Datum 1950 UTM fuseau 30 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM30RGF93> +title=RGF93 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM30SW84> +title=World Geodetic System 1984 UTM fuseau 30 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM30W72> +title=World Geodetic System 1972 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM30W84> +title=World Geodetic System 1984 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM31> +title=European Datum 1950 UTM fuseau 31 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM31RGF93> +title=RGF93 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM31SW84> +title=World Geodetic System 1984 UTM fuseau 31 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM31W72> +title=World Geodetic System 1972 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM31W84> +title=World Geodetic System 1984 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM32> +title=European Datum 1950 UTM fuseau 32 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM32RGF93> +title=RGF93 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM32SW84> +title=World Geodetic System 1984 UTM fuseau 32 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM32W72> +title=World Geodetic System 1972 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM32W84> +title=World Geodetic System 1984 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM33SW84> +title=World Geodetic System 1984 UTM fuseau 33 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM33W84> +title=World Geodetic System 1984 UTM fuseau 33 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM34SW84> +title=World Geodetic System 1984 UTM fuseau 34 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM34W84> +title=World Geodetic System 1984 UTM fuseau 34 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM35SW84> +title=World Geodetic System 1984 UTM fuseau 35 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM35W84> +title=World Geodetic System 1984 UTM fuseau 35 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM36SW84> +title=World Geodetic System 1984 UTM fuseau 36 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM36W84> +title=World Geodetic System 1984 UTM fuseau 36 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM37SW84> +title=World Geodetic System 1984 UTM fuseau 37 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM37W84> +title=World Geodetic System 1984 UTM fuseau 37 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM38SW84> +title=World Geodetic System 1984 UTM fuseau 38 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM38W84> +title=World Geodetic System 1984 UTM fuseau 38 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM39SW84> +title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM39W84> +title=World Geodetic System 1984 UTM fuseau 39 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM40SW84> +title=World Geodetic System 1984 UTM fuseau 40 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM40W84> +title=World Geodetic System 1984 UTM fuseau 40 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM41SW84> +title=World Geodetic System 1984 UTM fuseau 41 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM41W84> +title=World Geodetic System 1984 UTM fuseau 41 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM42SW84> +title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM42W84> +title=World Geodetic System 1984 UTM fuseau 42 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM43SW84> +title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM43W84> +title=World Geodetic System 1984 UTM fuseau 43 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM44SW84> +title=World Geodetic System 1984 UTM fuseau 44 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM44W84> +title=World Geodetic System 1984 UTM fuseau 44 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM45SW84> +title=World Geodetic System 1984 UTM fuseau 45 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM45W84> +title=World Geodetic System 1984 UTM fuseau 45 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM46SW84> +title=World Geodetic System 1984 UTM fuseau 46 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM46W84> +title=World Geodetic System 1984 UTM fuseau 46 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM47SW84> +title=World Geodetic System 1984 UTM fuseau 47 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM47W84> +title=World Geodetic System 1984 UTM fuseau 47 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM48SW84> +title=World Geodetic System 1984 UTM fuseau 48 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM48W84> +title=World Geodetic System 1984 UTM fuseau 48 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM49SW84> +title=World Geodetic System 1984 UTM fuseau 49 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM49W84> +title=World Geodetic System 1984 UTM fuseau 49 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM50SW84> +title=World Geodetic System 1984 UTM fuseau 50 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM50W84> +title=World Geodetic System 1984 UTM fuseau 50 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM51SW84> +title=World Geodetic System 1984 UTM fuseau 51 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM51W84> +title=World Geodetic System 1984 UTM fuseau 51 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM52SW84> +title=World Geodetic System 1984 UTM fuseau 52 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM52W84> +title=World Geodetic System 1984 UTM fuseau 52 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM53SW84> +title=World Geodetic System 1984 UTM fuseau 53 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM53W84> +title=World Geodetic System 1984 UTM fuseau 53 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM54SW84> +title=World Geodetic System 1984 UTM fuseau 54 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM54W84> +title=World Geodetic System 1984 UTM fuseau 54 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM55SW84> +title=World Geodetic System 1984 UTM fuseau 55 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM55W84> +title=World Geodetic System 1984 UTM fuseau 55 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM56SW84> +title=World Geodetic System 1984 UTM fuseau 56 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM56W84> +title=World Geodetic System 1984 UTM fuseau 56 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM57SW84> +title=World Geodetic System 1984 UTM fuseau 57 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM57W84> +title=World Geodetic System 1984 UTM fuseau 57 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM58SW84> +title=World Geodetic System 1984 UTM fuseau 58 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM58W84> +title=World Geodetic System 1984 UTM fuseau 58 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM59SW84> +title=World Geodetic System 1984 UTM fuseau 59 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM59W84> +title=World Geodetic System 1984 UTM fuseau 59 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM60SW84> +title=World Geodetic System 1984 UTM fuseau 60 Sud +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM60W84> +title=World Geodetic System 1984 UTM fuseau 60 +proj=tmerc +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-# W [VAITAPEUTM5S]
-# W [WALL76UTM1S]
-<WALL78UTM1S> +title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
diff --git a/src/3rdparty/proj/proj_data/epsg b/src/3rdparty/proj/proj_data/epsg
deleted file mode 100644
index fbb2c9a8..00000000
--- a/src/3rdparty/proj/proj_data/epsg
+++ /dev/null
@@ -1,7631 +0,0 @@
-# HD1909
-<3819> +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <>
-# TWD67
-<3821> +proj=longlat +ellps=aust_SA +no_defs <>
-# TWD97
-<3824> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# IGRS
-<3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# MGI 1901
-<3906> +proj=longlat +ellps=bessel +no_defs <>
-# Unknown datum based upon the Airy 1830 ellipsoid
-<4001> +proj=longlat +ellps=airy +no_defs <>
-# Unknown datum based upon the Airy Modified 1849 ellipsoid
-<4002> +proj=longlat +ellps=mod_airy +no_defs <>
-# Unknown datum based upon the Australian National Spheroid
-<4003> +proj=longlat +ellps=aust_SA +no_defs <>
-# Unknown datum based upon the Bessel 1841 ellipsoid
-<4004> +proj=longlat +ellps=bessel +no_defs <>
-# Unknown datum based upon the Bessel Modified ellipsoid
-<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs <>
-# Unknown datum based upon the Bessel Namibia ellipsoid
-<4006> +proj=longlat +ellps=bess_nam +no_defs <>
-# Unknown datum based upon the Clarke 1858 ellipsoid
-<4007> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <>
-# Unknown datum based upon the Clarke 1866 ellipsoid
-<4008> +proj=longlat +ellps=clrk66 +no_defs <>
-# Unknown datum based upon the Clarke 1866 Michigan ellipsoid
-<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <>
-# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid
-<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs <>
-# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid
-<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid
-<4012> +proj=longlat +ellps=clrk80 +no_defs <>
-# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid
-<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <>
-# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid
-<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs <>
-# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid
-<4015> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <>
-# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid
-<4016> +proj=longlat +ellps=evrstSS +no_defs <>
-# Unknown datum based upon the Everest 1830 Modified ellipsoid
-<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs <>
-# Unknown datum based upon the GRS 1980 ellipsoid
-<4019> +proj=longlat +ellps=GRS80 +no_defs <>
-# Unknown datum based upon the Helmert 1906 ellipsoid
-<4020> +proj=longlat +ellps=helmert +no_defs <>
-# Unknown datum based upon the Indonesian National Spheroid
-<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <>
-# Unknown datum based upon the International 1924 ellipsoid
-<4022> +proj=longlat +ellps=intl +no_defs <>
-# MOLDREF99
-<4023> +proj=longlat +ellps=GRS80 +no_defs <>
-# Unknown datum based upon the Krassowsky 1940 ellipsoid
-<4024> +proj=longlat +ellps=krass +no_defs <>
-# Unknown datum based upon the NWL 9D ellipsoid
-<4025> +proj=longlat +ellps=WGS66 +no_defs <>
-# Unknown datum based upon the Plessis 1817 ellipsoid
-<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs <>
-# Unknown datum based upon the Struve 1860 ellipsoid
-<4028> +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs <>
-# Unknown datum based upon the War Office ellipsoid
-<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <>
-# Unknown datum based upon the WGS 84 ellipsoid
-<4030> +proj=longlat +ellps=WGS84 +no_defs <>
-# Unknown datum based upon the GEM 10C ellipsoid
-<4031> +proj=longlat +ellps=WGS84 +no_defs <>
-# Unknown datum based upon the OSU86F ellipsoid
-<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs <>
-# Unknown datum based upon the OSU91A ellipsoid
-<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs <>
-# Unknown datum based upon the Clarke 1880 ellipsoid
-<4034> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <>
-# Unknown datum based upon the Authalic Sphere
-<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs <>
-# Unknown datum based upon the GRS 1967 ellipsoid
-<4036> +proj=longlat +ellps=GRS67 +no_defs <>
-# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid
-<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <>
-# Unknown datum based upon the Everest (1830 Definition) ellipsoid
-<4042> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <>
-# Unknown datum based upon the WGS 72 ellipsoid
-<4043> +proj=longlat +ellps=WGS72 +no_defs <>
-# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid
-<4044> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <>
-# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid
-<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs <>
-# RGRDC 2005
-<4046> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Unspecified datum based upon the GRS 1980 Authalic Sphere
-<4047> +proj=longlat +a=6371007 +b=6371007 +no_defs <>
-# Unspecified datum based upon the Clarke 1866 Authalic Sphere
-<4052> +proj=longlat +a=6370997 +b=6370997 +no_defs <>
-# Unspecified datum based upon the International 1924 Authalic Sphere
-<4053> +proj=longlat +a=6371228 +b=6371228 +no_defs <>
-# Unspecified datum based upon the Hughes 1980 ellipsoid
-<4054> +proj=longlat +a=6378273 +b=6356889.449 +no_defs <>
-# Popular Visualisation CRS
-<4055> +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# SREF98
-<4075> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# REGCAN95
-<4081> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Greek
-<4120> +proj=longlat +ellps=bessel +no_defs <>
-# GGRS87
-<4121> +proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs <>
-# ATS77
-<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <>
-# KKJ
-<4123> +proj=longlat +ellps=intl +no_defs <>
-# RT90
-<4124> +proj=longlat +ellps=bessel +no_defs <>
-# Samboja
-<4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs <>
-# LKS94 (ETRS89)
-<4126> +proj=longlat +ellps=GRS80 +no_defs <>
-# Tete
-<4127> +proj=longlat +ellps=clrk66 +no_defs <>
-# Madzansua
-<4128> +proj=longlat +ellps=clrk66 +no_defs <>
-# Observatario
-<4129> +proj=longlat +ellps=clrk66 +no_defs <>
-# Moznet
-<4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs <>
-# Indian 1960
-<4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <>
-# FD58
-<4132> +proj=longlat +ellps=clrk80 +no_defs <>
-# EST92
-<4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs <>
-# PSD93
-<4134> +proj=longlat +ellps=clrk80 +no_defs <>
-# Old Hawaiian
-<4135> +proj=longlat +ellps=clrk66 +no_defs <>
-# St. Lawrence Island
-<4136> +proj=longlat +ellps=clrk66 +no_defs <>
-# St. Paul Island
-<4137> +proj=longlat +ellps=clrk66 +no_defs <>
-# St. George Island
-<4138> +proj=longlat +ellps=clrk66 +no_defs <>
-# Puerto Rico
-<4139> +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs <>
-# NAD83(CSRS98)
-<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Israel
-<4141> +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs <>
-# Locodjo 1965
-<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs <>
-# Abidjan 1987
-<4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs <>
-# Kalianpur 1937
-<4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <>
-# Kalianpur 1962
-<4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <>
-# Kalianpur 1975
-<4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs <>
-# Hanoi 1972
-<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs <>
-# Hartebeesthoek94
-<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# CH1903
-<4149> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <>
-# CH1903+
-<4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <>
-# CHTRF95
-<4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# NAD83(HARN)
-<4152> +proj=longlat +ellps=GRS80 +no_defs <>
-# Rassadiran
-<4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs <>
-# ED50(ED77)
-<4154> +proj=longlat +ellps=intl +no_defs <>
-# Dabola 1981
-<4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs <>
-# S-JTSK
-<4156> +proj=longlat +ellps=bessel +no_defs <>
-# Mount Dillon
-<4157> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <>
-# Naparima 1955
-<4158> +proj=longlat +ellps=intl +no_defs <>
-# ELD79
-<4159> +proj=longlat +ellps=intl +no_defs <>
-# Chos Malal 1914
-<4160> +proj=longlat +ellps=intl +no_defs <>
-# Pampa del Castillo
-<4161> +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs <>
-# Korean 1985
-<4162> +proj=longlat +ellps=bessel +no_defs <>
-# Yemen NGN96
-<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# South Yemen
-<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs <>
-# Bissau
-<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs <>
-# Korean 1995
-<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# NZGD2000
-<4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Accra
-<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <>
-# American Samoa 1962
-<4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs <>
-# SIRGAS 1995
-<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# RGF93
-<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# POSGAR
-<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# IRENET95
-<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Sierra Leone 1924
-<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <>
-# Sierra Leone 1968
-<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs <>
-# Australian Antarctic
-<4176> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Pulkovo 1942(83)
-<4178> +proj=longlat +ellps=krass +no_defs <>
-# Pulkovo 1942(58)
-<4179> +proj=longlat +ellps=krass +no_defs <>
-# EST97
-<4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Luxembourg 1930
-<4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs <>
-# Azores Occidental 1939
-<4182> +proj=longlat +ellps=intl +no_defs <>
-# Azores Central 1948
-<4183> +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs <>
-# Azores Oriental 1940
-<4184> +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs <>
-# Madeira 1936
-<4185> +proj=longlat +ellps=intl +no_defs <>
-# OSNI 1952
-<4188> +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <>
-# REGVEN
-<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# POSGAR 98
-<4190> +proj=longlat +ellps=GRS80 +no_defs <>
-# Albanian 1987
-<4191> +proj=longlat +ellps=krass +no_defs <>
-# Douala 1948
-<4192> +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs <>
-# Manoca 1962
-<4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <>
-# Qornoq 1927
-<4194> +proj=longlat +ellps=intl +no_defs <>
-# Scoresbysund 1952
-<4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs <>
-# Ammassalik 1958
-<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs <>
-# Garoua
-<4197> +proj=longlat +ellps=clrk80 +no_defs <>
-# Kousseri
-<4198> +proj=longlat +ellps=clrk80 +no_defs <>
-# Egypt 1930
-<4199> +proj=longlat +ellps=intl +no_defs <>
-# Pulkovo 1995
-<4200> +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs <>
-# Adindan
-<4201> +proj=longlat +ellps=clrk80 +no_defs <>
-# AGD66
-<4202> +proj=longlat +ellps=aust_SA +no_defs <>
-# AGD84
-<4203> +proj=longlat +ellps=aust_SA +no_defs <>
-# Ain el Abd
-<4204> +proj=longlat +ellps=intl +no_defs <>
-# Afgooye
-<4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs <>
-# Agadez
-<4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Lisbon
-<4207> +proj=longlat +ellps=intl +no_defs <>
-# Aratu
-<4208> +proj=longlat +ellps=intl +no_defs <>
-# Arc 1950
-<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <>
-# Arc 1960
-<4210> +proj=longlat +ellps=clrk80 +no_defs <>
-# Batavia
-<4211> +proj=longlat +ellps=bessel +no_defs <>
-# Barbados 1938
-<4212> +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs <>
-# Beduaram
-<4213> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs <>
-# Beijing 1954
-<4214> +proj=longlat +ellps=krass +no_defs <>
-# Belge 1950
-<4215> +proj=longlat +ellps=intl +no_defs <>
-# Bermuda 1957
-<4216> +proj=longlat +ellps=clrk66 +no_defs <>
-# Bogota 1975
-<4218> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs <>
-# Bukit Rimpah
-<4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs <>
-# Camacupa
-<4220> +proj=longlat +ellps=clrk80 +no_defs <>
-# Campo Inchauspe
-<4221> +proj=longlat +ellps=intl +no_defs <>
-# Cape
-<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <>
-# Carthage
-<4223> +proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +no_defs <>
-# Chua
-<4224> +proj=longlat +ellps=intl +no_defs <>
-# Corrego Alegre
-<4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs <>
-# Cote d'Ivoire
-<4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Deir ez Zor
-<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Douala
-<4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Egypt 1907
-<4229> +proj=longlat +ellps=helmert +no_defs <>
-# ED50
-<4230> +proj=longlat +ellps=intl +no_defs <>
-# ED87
-<4231> +proj=longlat +ellps=intl +no_defs <>
-# Fahud
-<4232> +proj=longlat +ellps=clrk80 +no_defs <>
-# Gandajika 1970
-<4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <>
-# Garoua
-<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Guyane Francaise
-<4235> +proj=longlat +ellps=intl +no_defs <>
-# Hu Tzu Shan 1950
-<4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs <>
-# HD72
-<4237> +proj=longlat +ellps=GRS67 +no_defs <>
-# ID74
-<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <>
-# Indian 1954
-<4239> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs <>
-# Indian 1975
-<4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <>
-# Jamaica 1875
-<4241> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <>
-# JAD69
-<4242> +proj=longlat +ellps=clrk66 +no_defs <>
-# Kalianpur 1880
-<4243> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <>
-# Kandawala
-<4244> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs <>
-# Kertau 1968
-<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs <>
-# KOC
-<4246> +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs <>
-# La Canoa
-<4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs <>
-# PSAD56
-<4248> +proj=longlat +ellps=intl +no_defs <>
-# Lake
-<4249> +proj=longlat +ellps=intl +no_defs <>
-# Leigon
-<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs <>
-# Liberia 1964
-<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs <>
-# Lome
-<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Luzon 1911
-<4253> +proj=longlat +ellps=clrk66 +no_defs <>
-# Hito XVIII 1963
-<4254> +proj=longlat +ellps=intl +no_defs <>
-# Herat North
-<4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs <>
-# Mahe 1971
-<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs <>
-# Makassar
-<4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs <>
-# ETRS89
-<4258> +proj=longlat +ellps=GRS80 +no_defs <>
-# Malongo 1987
-<4259> +proj=longlat +ellps=intl +no_defs <>
-# Manoca
-<4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <>
-# Merchich
-<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs <>
-# Massawa
-<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <>
-# Minna
-<4263> +proj=longlat +ellps=clrk80 +no_defs <>
-# Mhast
-<4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs <>
-# Monte Mario
-<4265> +proj=longlat +ellps=intl +no_defs <>
-# M'poraloko
-<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# NAD27
-<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs <>
-# NAD27 Michigan
-<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <>
-# NAD83
-<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs <>
-# Nahrwan 1967
-<4270> +proj=longlat +ellps=clrk80 +no_defs <>
-# Naparima 1972
-<4271> +proj=longlat +ellps=intl +no_defs <>
-# NZGD49
-<4272> +proj=longlat +ellps=intl +datum=nzgd49 +no_defs <>
-# NGO 1948
-<4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs <>
-# Datum 73
-<4274> +proj=longlat +ellps=intl +no_defs <>
-# NTF
-<4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs <>
-# NSWC 9Z-2
-<4276> +proj=longlat +ellps=WGS66 +no_defs <>
-# OSGB 1936
-<4277> +proj=longlat +ellps=airy +datum=OSGB36 +no_defs <>
-# OSGB70
-<4278> +proj=longlat +ellps=airy +no_defs <>
-# OS(SN)80
-<4279> +proj=longlat +ellps=airy +no_defs <>
-# Padang
-<4280> +proj=longlat +ellps=bessel +no_defs <>
-# Palestine 1923
-<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs <>
-# Pointe Noire
-<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# GDA94
-<4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Pulkovo 1942
-<4284> +proj=longlat +ellps=krass +no_defs <>
-# Qatar 1974
-<4285> +proj=longlat +ellps=intl +no_defs <>
-# Qatar 1948
-<4286> +proj=longlat +ellps=helmert +no_defs <>
-# Qornoq
-<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <>
-# Loma Quintana
-<4288> +proj=longlat +ellps=intl +no_defs <>
-# Amersfoort
-<4289> +proj=longlat +ellps=bessel +no_defs <>
-# SAD69
-<4291> +proj=longlat +ellps=GRS67 +no_defs <>
-# Sapper Hill 1943
-<4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs <>
-# Schwarzeck
-<4293> +proj=longlat +ellps=bess_nam +no_defs <>
-# Segora
-<4294> +proj=longlat +ellps=bessel +no_defs <>
-# Serindung
-<4295> +proj=longlat +ellps=bessel +no_defs <>
-# Sudan
-<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Tananarive
-<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <>
-# Timbalai 1948
-<4298> +proj=longlat +ellps=evrstSS +no_defs <>
-# TM65
-<4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs <>
-# TM75
-<4300> +proj=longlat +ellps=mod_airy +no_defs <>
-# Tokyo
-<4301> +proj=longlat +ellps=bessel +no_defs <>
-# Trinidad 1903
-<4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <>
-# TC(1948)
-<4303> +proj=longlat +ellps=helmert +no_defs <>
-# Voirol 1875
-<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs <>
-# Bern 1938
-<4306> +proj=longlat +ellps=bessel +no_defs <>
-# Nord Sahara 1959
-<4307> +proj=longlat +ellps=clrk80 +no_defs <>
-# RT38
-<4308> +proj=longlat +ellps=bessel +no_defs <>
-# Yacare
-<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs <>
-# Yoff
-<4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Zanderij
-<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <>
-# MGI
-<4312> +proj=longlat +ellps=bessel +datum=hermannskogel +no_defs <>
-# Belge 1972
-<4313> +proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs <>
-# DHDN
-<4314> +proj=longlat +ellps=bessel +datum=potsdam +no_defs <>
-# Conakry 1905
-<4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs <>
-# Dealul Piscului 1930
-<4316> +proj=longlat +ellps=intl +no_defs <>
-# Dealul Piscului 1970
-<4317> +proj=longlat +ellps=krass +no_defs <>
-# NGN
-<4318> +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs <>
-# KUDAMS
-<4319> +proj=longlat +ellps=GRS80 +no_defs <>
-# WGS 72
-<4322> +proj=longlat +ellps=WGS72 +no_defs <>
-# WGS 72BE
-<4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs <>
-# WGS 84
-<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <>
-# Anguilla 1957
-<4600> +proj=longlat +ellps=clrk80 +no_defs <>
-# Antigua 1943
-<4601> +proj=longlat +ellps=clrk80 +no_defs <>
-# Dominica 1945
-<4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs <>
-# Grenada 1953
-<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs <>
-# Montserrat 1958
-<4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs <>
-# St. Kitts 1955
-<4605> +proj=longlat +ellps=clrk80 +no_defs <>
-# St. Lucia 1955
-<4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs <>
-# St. Vincent 1945
-<4607> +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs <>
-# NAD27(76)
-<4608> +proj=longlat +ellps=clrk66 +no_defs <>
-# NAD27(CGQ77)
-<4609> +proj=longlat +ellps=clrk66 +no_defs <>
-# Xian 1980
-<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs <>
-# Hong Kong 1980
-<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs <>
-# JGD2000
-<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Segara
-<4613> +proj=longlat +ellps=bessel +no_defs <>
-# QND95
-<4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs <>
-# Porto Santo
-<4615> +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs <>
-# Selvagem Grande
-<4616> +proj=longlat +ellps=intl +no_defs <>
-# NAD83(CSRS)
-<4617> +proj=longlat +ellps=GRS80 +no_defs <>
-# SAD69
-<4618> +proj=longlat +ellps=aust_SA +no_defs <>
-# SWEREF99
-<4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Point 58
-<4620> +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs <>
-# Fort Marigot
-<4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <>
-# Guadeloupe 1948
-<4622> +proj=longlat +ellps=intl +no_defs <>
-# CSG67
-<4623> +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs <>
-# RGFG95
-<4624> +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs <>
-# Martinique 1938
-<4625> +proj=longlat +ellps=intl +no_defs <>
-# Reunion 1947
-<4626> +proj=longlat +ellps=intl +no_defs <>
-# RGR92
-<4627> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Tahiti 52
-<4628> +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs <>
-# Tahaa 54
-<4629> +proj=longlat +ellps=intl +no_defs <>
-# IGN72 Nuku Hiva
-<4630> +proj=longlat +ellps=intl +no_defs <>
-# K0 1949
-<4631> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <>
-# Combani 1950
-<4632> +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs <>
-# IGN56 Lifou
-<4633> +proj=longlat +ellps=intl +no_defs <>
-# IGN72 Grand Terre
-<4634> +proj=longlat +ellps=intl +no_defs <>
-# ST87 Ouvea
-<4635> +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs <>
-# Petrels 1972
-<4636> +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs <>
-# Perroud 1950
-<4637> +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs <>
-# Saint Pierre et Miquelon 1950
-<4638> +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs <>
-# MOP78
-<4639> +proj=longlat +ellps=intl +no_defs <>
-# RRAF 1991
-<4640> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# IGN53 Mare
-<4641> +proj=longlat +ellps=intl +no_defs <>
-# ST84 Ile des Pins
-<4642> +proj=longlat +ellps=intl +no_defs <>
-# ST71 Belep
-<4643> +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs <>
-# NEA74 Noumea
-<4644> +proj=longlat +ellps=intl +no_defs <>
-# RGNC 1991
-<4645> +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Grand Comoros
-<4646> +proj=longlat +ellps=intl +no_defs <>
-# Reykjavik 1900
-<4657> +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs <>
-# Hjorsey 1955
-<4658> +proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs <>
-# ISN93
-<4659> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Helle 1954
-<4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs <>
-# LKS92
-<4661> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# IGN72 Grande Terre
-<4662> +proj=longlat +ellps=intl +no_defs <>
-# Porto Santo 1995
-<4663> +proj=longlat +ellps=intl +no_defs <>
-# Azores Oriental 1995
-<4664> +proj=longlat +ellps=intl +no_defs <>
-# Azores Central 1995
-<4665> +proj=longlat +ellps=intl +no_defs <>
-# Lisbon 1890
-<4666> +proj=longlat +ellps=bessel +no_defs <>
-# IKBD-92
-<4667> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# ED79
-<4668> +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs <>
-# LKS94
-<4669> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# IGM95
-<4670> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Voirol 1879
-<4671> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <>
-# Chatham Islands 1971
-<4672> +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs <>
-# Chatham Islands 1979
-<4673> +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs <>
-# SIRGAS 2000
-<4674> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Guam 1963
-<4675> +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs <>
-# Vientiane 1982
-<4676> +proj=longlat +ellps=krass +no_defs <>
-# Lao 1993
-<4677> +proj=longlat +ellps=krass +no_defs <>
-# Lao 1997
-<4678> +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs <>
-# Jouik 1961
-<4679> +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs <>
-# Nouakchott 1965
-<4680> +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs <>
-# Mauritania 1999
-<4681> +proj=longlat +ellps=clrk80 +no_defs <>
-# Gulshan 303
-<4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <>
-# PRS92
-<4683> +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs <>
-# Gan 1970
-<4684> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <>
-# Gandajika
-<4685> +proj=longlat +ellps=intl +no_defs <>
-# MAGNA-SIRGAS
-<4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# RGPF
-<4687> +proj=longlat +ellps=GRS80 +no_defs <>
-# Fatu Iva 72
-<4688> +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs <>
-# IGN63 Hiva Oa
-<4689> +proj=longlat +ellps=intl +no_defs <>
-# Tahiti 79
-<4690> +proj=longlat +ellps=intl +no_defs <>
-# Moorea 87
-<4691> +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs <>
-# Maupiti 83
-<4692> +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs <>
-# Nakhl-e Ghanem
-<4693> +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs <>
-# POSGAR 94
-<4694> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Katanga 1955
-<4695> +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs <>
-# Kasai 1953
-<4696> +proj=longlat +ellps=clrk80 +no_defs <>
-# IGC 1962 6th Parallel South
-<4697> +proj=longlat +ellps=clrk80 +no_defs <>
-# IGN 1962 Kerguelen
-<4698> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <>
-# Le Pouce 1934
-<4699> +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs <>
-# IGN Astro 1960
-<4700> +proj=longlat +ellps=clrk80 +no_defs <>
-# IGCB 1955
-<4701> +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs <>
-# Mauritania 1999
-<4702> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Mhast 1951
-<4703> +proj=longlat +ellps=clrk80 +no_defs <>
-# Mhast (onshore)
-<4704> +proj=longlat +ellps=intl +no_defs <>
-# Mhast (offshore)
-<4705> +proj=longlat +ellps=intl +no_defs <>
-# Egypt Gulf of Suez S-650 TL
-<4706> +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs <>
-# Tern Island 1961
-<4707> +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs <>
-# Cocos Islands 1965
-<4708> +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs <>
-# Iwo Jima 1945
-<4709> +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs <>
-# St. Helena 1971
-<4710> +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs <>
-# Marcus Island 1952
-<4711> +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs <>
-# Ascension Island 1958
-<4712> +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs <>
-# Ayabelle Lighthouse
-<4713> +proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs <>
-# Bellevue
-<4714> +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs <>
-# Camp Area Astro
-<4715> +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs <>
-# Phoenix Islands 1966
-<4716> +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs <>
-# Cape Canaveral
-<4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <>
-# Solomon 1968
-<4718> +proj=longlat +ellps=intl +no_defs <>
-# Easter Island 1967
-<4719> +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs <>
-# Fiji 1986
-<4720> +proj=longlat +ellps=WGS72 +no_defs <>
-# Fiji 1956
-<4721> +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs <>
-# South Georgia 1968
-<4722> +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs <>
-# Grand Cayman 1959
-<4723> +proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs <>
-# Diego Garcia 1969
-<4724> +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs <>
-# Johnston Island 1961
-<4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <>
-# Little Cayman 1961
-<4726> +proj=longlat +ellps=clrk66 +no_defs <>
-# Midway 1961
-<4727> +proj=longlat +ellps=intl +no_defs <>
-# Pico de las Nieves 1984
-<4728> +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs <>
-# Pitcairn 1967
-<4729> +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs <>
-# Santo 1965
-<4730> +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs <>
-# Viti Levu 1916
-<4731> +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs <>
-# Marshall Islands 1960
-<4732> +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs <>
-# Wake Island 1952
-<4733> +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs <>
-# Tristan 1968
-<4734> +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs <>
-# Kusaie 1951
-<4735> +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs <>
-# Deception Island
-<4736> +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs <>
-# Korea 2000
-<4737> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Hong Kong 1963
-<4738> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <>
-# Hong Kong 1963(67)
-<4739> +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs <>
-# PZ-90
-<4740> +proj=longlat +a=6378136 +b=6356751.361745712 +no_defs <>
-# FD54
-<4741> +proj=longlat +ellps=intl +no_defs <>
-# GDM2000
-<4742> +proj=longlat +ellps=GRS80 +no_defs <>
-# Karbala 1979
-<4743> +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs <>
-# Nahrwan 1934
-<4744> +proj=longlat +ellps=clrk80 +no_defs <>
-# RD/83
-<4745> +proj=longlat +ellps=bessel +no_defs <>
-# PD/83
-<4746> +proj=longlat +ellps=bessel +no_defs <>
-# GR96
-<4747> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Vanua Levu 1915
-<4748> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <>
-# RGNC91-93
-<4749> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# ST87 Ouvea
-<4750> +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs <>
-# Kertau (RSO)
-<4751> +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs <>
-# Viti Levu 1912
-<4752> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <>
-# fk89
-<4753> +proj=longlat +ellps=intl +no_defs <>
-# LGD2006
-<4754> +proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs <>
-# DGN95
-<4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# VN-2000
-<4756> +proj=longlat +ellps=WGS84 +no_defs <>
-# SVY21
-<4757> +proj=longlat +ellps=WGS84 +no_defs <>
-# JAD2001
-<4758> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# NAD83(NSRS2007)
-<4759> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# WGS 66
-<4760> +proj=longlat +ellps=WGS66 +no_defs <>
-# HTRS96
-<4761> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# BDA2000
-<4762> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Pitcairn 2006
-<4763> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# RSRGD2000
-<4764> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Slovenia 1996
-<4765> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
-# Bern 1898 (Bern)
-<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs <>
-# Bogota 1975 (Bogota)
-<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs <>
-# Lisbon (Lisbon)
-<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs <>
-# Makassar (Jakarta)
-<4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs <>
-# MGI (Ferro)
-<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs <>
-# Monte Mario (Rome)
-<4806> +proj=longlat +ellps=intl +pm=rome +no_defs <>
-# NTF (Paris)
-<4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs <>
-# Padang (Jakarta)
-<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <>
-# Belge 1950 (Brussels)
-<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs <>
-# Tananarive (Paris)
-<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs <>
-# Voirol 1875 (Paris)
-<4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs <>
-# Batavia (Jakarta)
-<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <>
-# RT38 (Stockholm)
-<4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs <>
-# Greek (Athens)
-<4815> +proj=longlat +ellps=bessel +pm=athens +no_defs <>
-# Carthage (Paris)
-<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <>
-# NGO 1948 (Oslo)
-<4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs <>
-# S-JTSK (Ferro)
-<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs <>
-# Nord Sahara 1959 (Paris)
-<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs <>
-# Segara (Jakarta)
-<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <>
-# Voirol 1879 (Paris)
-<4821> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <>
-# unnamed ellipse
-<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs <>
-# NDG (Paris)
-<4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs <>
-# Madrid 1870 (Madrid)
-<4903> +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs <>
-# Lisbon 1890 (Lisbon)
-<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs <>
-# Anguilla 1957 / British West Indies Grid
-<2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# Antigua 1943 / British West Indies Grid
-<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# Dominica 1945 / British West Indies Grid
-<2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs <>
-# Grenada 1953 / British West Indies Grid
-<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs <>
-# Montserrat 1958 / British West Indies Grid
-<2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs <>
-# St. Kitts 1955 / British West Indies Grid
-<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# St. Lucia 1955 / British West Indies Grid
-<2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs <>
-# St. Vincent 45 / British West Indies Grid
-<2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 2
-<2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 3
-<2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 4
-<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 5
-<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 6
-<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 7
-<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 8
-<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 9
-<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 10
-<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 8
-<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 9
-<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 10
-<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 11
-<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 12
-<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 13
-<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 14
-<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 15
-<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 16
-<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / MTM zone 17
-<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / UTM zone 15N
-<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / UTM zone 16N
-<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / UTM zone 17N
-<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(76) / UTM zone 18N
-<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / UTM zone 17N
-<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / UTM zone 18N
-<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / UTM zone 19N
-<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / UTM zone 20N
-<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <>
-# NAD27(CGQ77) / UTM zone 21N
-<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs <>
-# NAD83(CSRS98) / New Brunswick Stereo (deprecated)
-<2036> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 19N (deprecated)
-<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 20N (deprecated)
-<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Israel / Israeli TM Grid
-<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs <>
-# Locodjo 1965 / UTM zone 30N
-<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <>
-# Abidjan 1987 / UTM zone 30N
-<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <>
-# Locodjo 1965 / UTM zone 29N
-<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <>
-# Abidjan 1987 / UTM zone 29N
-<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <>
-# Hanoi 1972 / Gauss-Kruger zone 18
-<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <>
-# Hanoi 1972 / Gauss-Kruger zone 19
-<2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <>
-# Hartebeesthoek94 / Lo15
-# Unable to translate coordinate system EPSG:2046 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo17
-# Unable to translate coordinate system EPSG:2047 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo19
-# Unable to translate coordinate system EPSG:2048 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo21
-# Unable to translate coordinate system EPSG:2049 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo23
-# Unable to translate coordinate system EPSG:2050 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo25
-# Unable to translate coordinate system EPSG:2051 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo27
-# Unable to translate coordinate system EPSG:2052 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo29
-# Unable to translate coordinate system EPSG:2053 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo31
-# Unable to translate coordinate system EPSG:2054 into PROJ.4 format.
-#
-# Hartebeesthoek94 / Lo33
-# Unable to translate coordinate system EPSG:2055 into PROJ.4 format.
-#
-# CH1903+ / LV95
-<2056> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <>
-# Rassadiran / Nakhl e Taqi
-<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <>
-# ED50(ED77) / UTM zone 38N
-<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <>
-# ED50(ED77) / UTM zone 39N
-<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <>
-# ED50(ED77) / UTM zone 40N
-<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <>
-# ED50(ED77) / UTM zone 41N
-<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs <>
-# Madrid 1870 (Madrid) / Spain
-<2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs <>
-# Dabola 1981 / UTM zone 28N (deprecated)
-<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <>
-# Dabola 1981 / UTM zone 29N (deprecated)
-<2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <>
-# S-JTSK (Ferro) / Krovak
-<2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# Mount Dillon / Tobago Grid
-<2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <>
-# Naparima 1955 / UTM zone 20N
-<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 5
-<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 6
-<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 7
-<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 8
-<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 9
-<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 10
-<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 11
-<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 12
-<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / Libya zone 13
-<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ELD79 / UTM zone 32N
-<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <>
-# ELD79 / UTM zone 33N
-<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <>
-# ELD79 / UTM zone 34N
-<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <>
-# ELD79 / UTM zone 35N
-<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <>
-# Chos Malal 1914 / Argentina zone 2
-<2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Pampa del Castillo / Argentina zone 2
-<2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs <>
-# Hito XVIII 1963 / Argentina zone 2
-<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Hito XVIII 1963 / UTM zone 19S
-<2084> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <>
-# NAD27 / Cuba Norte (deprecated)
-<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Cuba Sur (deprecated)
-<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# ELD79 / TM 12 NE
-<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Carthage / TM 11 NE
-<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <>
-# Yemen NGN96 / UTM zone 38N
-<2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Yemen NGN96 / UTM zone 39N
-<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# South Yemen / Gauss Kruger zone 8 (deprecated)
-<2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <>
-# South Yemen / Gauss Kruger zone 9 (deprecated)
-<2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <>
-# Hanoi 1972 / GK 106 NE
-<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <>
-# WGS 72BE / TM 106 NE
-<2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# Bissau / UTM zone 28N
-<2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs <>
-# Korean 1985 / Korea East Belt
-<2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <>
-# Korean 1985 / Korea Central Belt
-<2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <>
-# Korean 1985 / Korea West Belt
-<2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <>
-# Qatar 1948 / Qatar Grid
-<2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs <>
-# GGRS87 / Greek Grid
-<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs <>
-# Lake / Maracaibo Grid M1
-<2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs <>
-# Lake / Maracaibo Grid
-<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs <>
-# Lake / Maracaibo Grid M3
-<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs <>
-# Lake / Maracaibo La Rosa Grid
-<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs <>
-# NZGD2000 / Mount Eden 2000
-<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Bay of Plenty 2000
-<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Poverty Bay 2000
-<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Hawkes Bay 2000
-<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Taranaki 2000
-<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Tuhirangi 2000
-<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Wanganui 2000
-<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Wairarapa 2000
-<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Wellington 2000
-<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Collingwood 2000
-<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Nelson 2000
-<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Karamea 2000
-<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Buller 2000
-<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Grey 2000
-<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Amuri 2000
-<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Marlborough 2000
-<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Hokitika 2000
-<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Okarito 2000
-<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Jacksons Bay 2000
-<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Mount Pleasant 2000
-<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Gawler 2000
-<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Timaru 2000
-<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Lindis Peak 2000
-<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Mount Nicholas 2000
-<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Mount York 2000
-<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Observation Point 2000
-<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / North Taieri 2000
-<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Bluff 2000
-<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / UTM zone 58S
-<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / UTM zone 59S
-<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / UTM zone 60S
-<2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Accra / Ghana National Grid
-<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <>
-# Accra / TM 1 NW
-<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs <>
-# NAD27(CGQ77) / Quebec Lambert
-<2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# NAD83(CSRS98) / SCoPQ zone 2 (deprecated)
-<2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 3 (deprecated)
-<2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 4 (deprecated)
-<2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 5 (deprecated)
-<2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 6 (deprecated)
-<2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 7 (deprecated)
-<2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 8 (deprecated)
-<2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 9 (deprecated)
-<2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / MTM zone 10 (deprecated)
-<2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 21N (deprecated)
-<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 18N (deprecated)
-<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 17N (deprecated)
-<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 13N (deprecated)
-<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 12N (deprecated)
-<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS98) / UTM zone 11N (deprecated)
-<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / Lambert-93
-<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# American Samoa 1962 / American Samoa Lambert (deprecated)
-<2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(HARN) / UTM zone 59S (deprecated)
-<2156> +proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs <>
-# IRENET95 / Irish Transverse Mercator
-<2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IRENET95 / UTM zone 29N
-<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Sierra Leone 1924 / New Colony Grid
-<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <>
-# Sierra Leone 1924 / New War Office Grid
-<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <>
-# Sierra Leone 1968 / UTM zone 28N
-<2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <>
-# Sierra Leone 1968 / UTM zone 29N
-<2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <>
-# unnamed
-<2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs <>
-# Locodjo 1965 / TM 5 NW
-<2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <>
-# Abidjan 1987 / TM 5 NW
-<2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated)
-<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated)
-<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated)
-<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Luxembourg 1930 / Gauss
-<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs <>
-# MGI / Slovenia Grid (deprecated)
-<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone I (deprecated)
-<2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone II
-<2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone III
-<2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone IV
-<2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone V
-<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_defs <>
-# ETRS89 / Poland CS2000 zone 5
-<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Poland CS2000 zone 6
-<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Poland CS2000 zone 7
-<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Poland CS2000 zone 8
-<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Poland CS92
-<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs <>
-# Azores Occidental 1939 / UTM zone 25N
-<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs <>
-# Azores Central 1948 / UTM zone 26N
-<2189> +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs <>
-# Azores Oriental 1940 / UTM zone 26N
-<2190> +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs <>
-# Madeira 1936 / UTM zone 28N (deprecated)
-<2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <>
-# ED50 / France EuroLambert
-<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs <>
-# NZGD2000 / New Zealand Transverse Mercator 2000
-<2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# American Samoa 1962 / American Samoa Lambert (deprecated)
-<2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(HARN) / UTM zone 2S
-<2195> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Kp2000 Jutland
-<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Kp2000 Zealand
-<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Kp2000 Bornholm
-<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Albanian 1987 / Gauss Kruger zone 4 (deprecated)
-<2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# ATS77 / New Brunswick Stereographic (ATS77)
-<2200> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# REGVEN / UTM zone 18N
-<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# REGVEN / UTM zone 19N
-<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# REGVEN / UTM zone 20N
-<2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD27 / Tennessee
-<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD83 / Kentucky North
-<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 9
-<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 10
-<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 11
-<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 12
-<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 13
-<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 14
-<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 15
-<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ETRS89 / TM 30 NE
-<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Douala 1948 / AOF west (deprecated)
-<2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <>
-# Manoca 1962 / UTM zone 32N
-<2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs <>
-# Qornoq 1927 / UTM zone 22N
-<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs <>
-# Qornoq 1927 / UTM zone 23N
-<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs <>
-# Scoresbysund 1952 / Greenland zone 5 east
-# Unable to translate coordinate system EPSG:2218 into PROJ.4 format.
-#
-# ATS77 / UTM zone 19N
-<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# ATS77 / UTM zone 20N
-<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# Scoresbysund 1952 / Greenland zone 6 east
-# Unable to translate coordinate system EPSG:2221 into PROJ.4 format.
-#
-# NAD83 / Arizona East (ft)
-<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Arizona Central (ft)
-<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Arizona West (ft)
-<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / California zone 1 (ftUS)
-<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / California zone 2 (ftUS)
-<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / California zone 3 (ftUS)
-<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / California zone 4 (ftUS)
-<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / California zone 5 (ftUS)
-<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / California zone 6 (ftUS)
-<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Colorado North (ftUS)
-<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Colorado Central (ftUS)
-<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Colorado South (ftUS)
-<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Connecticut (ftUS)
-<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Delaware (ftUS)
-<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Florida East (ftUS)
-<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Florida West (ftUS)
-<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Florida North (ftUS)
-<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Georgia East (ftUS)
-<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Georgia West (ftUS)
-<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Idaho East (ftUS)
-<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Idaho Central (ftUS)
-<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Idaho West (ftUS)
-<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Indiana East (ftUS) (deprecated)
-<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Indiana West (ftUS) (deprecated)
-<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Kentucky North (ftUS)
-<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Kentucky South (ftUS)
-<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Maryland (ftUS)
-<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Massachusetts Mainland (ftUS)
-<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Massachusetts Island (ftUS)
-<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Michigan North (ft)
-<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Michigan Central (ft)
-<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Michigan South (ft)
-<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Mississippi East (ftUS)
-<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Mississippi West (ftUS)
-<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Montana (ft)
-<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / New Mexico East (ftUS)
-<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New Mexico Central (ftUS)
-<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New Mexico West (ftUS)
-<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New York East (ftUS)
-<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New York Central (ftUS)
-<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New York West (ftUS)
-<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New York Long Island (ftUS)
-<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / North Carolina (ftUS)
-<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / North Dakota North (ft)
-<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / North Dakota South (ft)
-<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Oklahoma North (ftUS)
-<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Oklahoma South (ftUS)
-<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Oregon North (ft)
-<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Oregon South (ft)
-<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Pennsylvania North (ftUS)
-<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Pennsylvania South (ftUS)
-<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / South Carolina (ft)
-<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Tennessee (ftUS)
-<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Texas North (ftUS)
-<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Texas North Central (ftUS)
-<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Texas Central (ftUS)
-<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Texas South Central (ftUS)
-<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Texas South (ftUS)
-<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Utah North (ft)
-<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Utah Central (ft)
-<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Utah South (ft)
-<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83 / Virginia North (ftUS)
-<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Virginia South (ftUS)
-<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Washington North (ftUS)
-<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Washington South (ftUS)
-<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wisconsin North (ftUS)
-<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wisconsin Central (ftUS)
-<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wisconsin South (ftUS)
-<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# ATS77 / Prince Edward Isl. Stereographic (ATS77)
-<2290> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)
-<2291> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated)
-<2292> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ATS77 / MTM Nova Scotia zone 4
-<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# ATS77 / MTM Nova Scotia zone 5
-<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <>
-# Ammassalik 1958 / Greenland zone 7 east
-# Unable to translate coordinate system EPSG:2296 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 1 east (deprecated)
-# Unable to translate coordinate system EPSG:2297 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 2 east (deprecated)
-# Unable to translate coordinate system EPSG:2298 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 2 west
-# Unable to translate coordinate system EPSG:2299 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 3 east (deprecated)
-# Unable to translate coordinate system EPSG:2300 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 3 west
-# Unable to translate coordinate system EPSG:2301 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 4 east (deprecated)
-# Unable to translate coordinate system EPSG:2302 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 4 west
-# Unable to translate coordinate system EPSG:2303 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 5 west
-# Unable to translate coordinate system EPSG:2304 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 6 west
-# Unable to translate coordinate system EPSG:2305 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 7 west
-# Unable to translate coordinate system EPSG:2306 into PROJ.4 format.
-#
-# Qornoq 1927 / Greenland zone 8 east
-# Unable to translate coordinate system EPSG:2307 into PROJ.4 format.
-#
-# Batavia / TM 109 SE
-<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs <>
-# WGS 84 / TM 116 SE
-<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / TM 132 SE
-<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / TM 6 NE
-<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# Garoua / UTM zone 33N
-<2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <>
-# Kousseri / UTM zone 33N
-<2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <>
-# Trinidad 1903 / Trinidad Grid (ftCla)
-<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <>
-# Campo Inchauspe / UTM zone 19S
-<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / UTM zone 20S
-<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / ICN Regional
-<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / Aramco Lambert
-<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM27
-<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM30
-<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM33
-<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM36
-<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM39
-<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM42
-<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM45
-<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Hong Kong 1980 Grid System
-<2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 13
-<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 14
-<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 15
-<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 16
-<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 17
-<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 18
-<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 19
-<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 20
-<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 21
-<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 22
-<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger zone 23
-<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 75E
-<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 81E
-<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 87E
-<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 93E
-<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 99E
-<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 105E
-<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 111E
-<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 117E
-<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 123E
-<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 129E
-<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / Gauss-Kruger CM 135E
-<2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 25
-<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 26
-<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 27
-<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 28
-<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 29
-<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 30
-<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 31
-<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 32
-<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 33
-<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 34
-<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 35
-<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 36
-<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 37
-<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 38
-<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 39
-<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 40
-<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 41
-<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 42
-<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 43
-<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 44
-<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 45
-<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 75E
-<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 78E
-<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 81E
-<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 84E
-<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 87E
-<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 90E
-<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 93E
-<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 96E
-<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 99E
-<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 102E
-<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 105E
-<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 108E
-<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 111E
-<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 114E
-<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 117E
-<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 120E
-<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 123E
-<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 126E
-<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 129E
-<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 132E
-<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 135E
-<2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <>
-# KKJ / Finland zone 1
-<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# KKJ / Finland zone 2
-<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# KKJ / Finland Uniform Coordinate System
-<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# KKJ / Finland zone 4
-<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# South Yemen / Gauss-Kruger zone 8
-<2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <>
-# South Yemen / Gauss-Kruger zone 9
-<2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3
-<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4
-<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5
-<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# RT90 2.5 gon W (deprecated)
-<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 25
-<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 26
-<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 27
-<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 28
-<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 29
-<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 30
-<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 31
-<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 32
-<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 33
-<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 34
-<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 35
-<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 36
-<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 37
-<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 38
-<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 39
-<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 40
-<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 41
-<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 42
-<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 43
-<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 44
-<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 45
-<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 75E
-<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 78E
-<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 81E
-<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 84E
-<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 87E
-<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 90E
-<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 93E
-<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 96E
-<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 99E
-<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 102E
-<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 105E
-<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 108E
-<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 111E
-<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 114E
-<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 117E
-<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 120E
-<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 123E
-<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 126E
-<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 129E
-<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 132E
-<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 135E
-<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS I
-<2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS II
-<2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS III
-<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS IV
-<2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS V
-<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VI
-<2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VII
-<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VIII
-<2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS IX
-<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS X
-<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XI
-<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XII
-<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIII
-<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIV
-<2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XV
-<2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVI
-<2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVII
-<2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVIII
-<2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIX
-<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Albanian 1987 / Gauss-Kruger zone 4
-<2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 21E
-<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 27E
-<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 33E
-<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 39E
-<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 45E
-<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 51E
-<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 57E
-<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 63E
-<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 69E
-<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 75E
-<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 81E
-<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 87E
-<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 93E
-<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 99E
-<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 105E
-<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 111E
-<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 117E
-<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 123E
-<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 129E
-<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 135E
-<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 141E
-<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 147E
-<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 153E
-<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 159E
-<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 165E
-<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 171E
-<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 177E
-<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 177W
-<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 171W
-<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated)
-<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated)
-<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 21E
-<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 27E
-<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 33E
-<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 39E
-<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 45E
-<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 51E
-<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 57E
-<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 63E
-<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 69E
-<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 75E
-<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 81E
-<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 87E
-<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 93E
-<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 99E
-<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 105E
-<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 111E
-<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 117E
-<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 123E
-<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 129E
-<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 135E
-<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 141E
-<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 147E
-<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 153E
-<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 159E
-<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 165E
-<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 171E
-<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 177E
-<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 177W
-<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 171W
-<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 7
-<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 8
-<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 9
-<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 10
-<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 11
-<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 12
-<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 13
-<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 14
-<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 15
-<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 16
-<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 17
-<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 18
-<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 19
-<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 20
-<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 21
-<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 22
-<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 23
-<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 24
-<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 25
-<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 26
-<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 27
-<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 28
-<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 29
-<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 30
-<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 31
-<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 32
-<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 33
-<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Samboja / UTM zone 50S (deprecated)
-<2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 34
-<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 35
-<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 36
-<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 37
-<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 38
-<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 39
-<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 40
-<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 41
-<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 42
-<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 43
-<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 44
-<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 45
-<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 46
-<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 47
-<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 48
-<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 49
-<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 50
-<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 51
-<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 52
-<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 53
-<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 54
-<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 55
-<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 56
-<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 57
-<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 58
-<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 59
-<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated)
-<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 61
-<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 62
-<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 63
-<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 64
-<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E
-<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E
-<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E
-<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E
-<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E
-<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E
-<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E
-<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E
-<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E
-<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E
-<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E
-<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E
-<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E
-<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E
-<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E
-<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E
-<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E
-<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E
-<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Lietuvos Koordinoei Sistema 1994 (deprecated)
-<2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E
-<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E
-<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E
-<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E
-<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E
-<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E
-<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E
-<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E
-<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E
-<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E
-<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E
-<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E
-<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E
-<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E
-<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E
-<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E
-<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E
-<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E
-<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E
-<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E
-<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E
-<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E
-<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E
-<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E
-<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E
-<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E
-<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E
-<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E
-<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E
-<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E
-<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E
-<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E
-<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E
-<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E
-<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E
-<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E
-<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W
-<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W
-<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W
-<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W
-<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 7
-<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 8
-<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 9
-<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 10
-<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 11
-<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 12
-<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 13
-<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 14
-<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 15
-<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 16
-<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 17
-<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 18
-<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 19
-<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 20
-<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 21
-<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 22
-<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 23
-<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 24
-<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 25
-<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 26
-<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 27
-<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 28
-<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 29
-<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 30
-<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 31
-<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 32
-<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 33
-<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 34
-<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 35
-<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 36
-<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 37
-<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 38
-<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 39
-<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 40
-<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 41
-<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 42
-<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 43
-<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 44
-<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 45
-<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 46
-<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 47
-<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 48
-<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 49
-<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 50
-<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 51
-<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 52
-<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 53
-<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 54
-<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 55
-<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 56
-<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 57
-<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 58
-<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 59
-<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated)
-<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 61
-<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 62
-<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 63
-<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 64
-<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E
-<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E
-<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E
-<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E
-<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E
-<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E
-<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E
-<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E
-<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E
-<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E
-<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E
-<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E
-<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E
-<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E
-<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E
-<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E
-<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E
-<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E
-<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E
-<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E
-<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E
-<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E
-<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E
-<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E
-<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E
-<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E
-<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E
-<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E
-<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E
-<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E
-<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E
-<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E
-<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E
-<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E
-<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E
-<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E
-<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E
-<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Tete / UTM zone 36S
-<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs <>
-# Tete / UTM zone 37S
-<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E
-<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E
-<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E
-<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E
-<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E
-<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E
-<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E
-<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E
-<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E
-<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E
-<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E
-<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E
-<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E
-<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E
-<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E
-<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E
-<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E
-<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W
-<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W
-<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W
-<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W
-<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# NAD83(HARN) / Alabama East
-<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Alabama West
-<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arizona East
-<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arizona Central
-<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arizona West
-<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arkansas North
-<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arkansas South
-<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 1
-<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 2
-<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 3
-<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 4
-<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 5
-<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / California zone 6
-<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Colorado North
-<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Colorado Central
-<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Colorado South
-<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Connecticut
-<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Delaware
-<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Florida East
-<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Florida West
-<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Florida North
-<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Georgia East
-<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Georgia West
-<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Hawaii zone 1
-<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Hawaii zone 2
-<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Hawaii zone 3
-<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Hawaii zone 4
-<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Hawaii zone 5
-<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Idaho East
-<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Idaho Central
-<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Idaho West
-<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Illinois East
-<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Illinois West
-<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Indiana East
-<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Indiana West
-<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Iowa North
-<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Iowa South
-<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Kansas North
-<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Kansas South
-<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Kentucky North
-<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Kentucky South
-<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Louisiana North
-<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Louisiana South
-<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maine East
-<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maine West
-<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maryland
-<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Massachusetts Mainland
-<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Massachusetts Island
-<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Michigan North
-<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Michigan Central
-<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Michigan South
-<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota North
-<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota Central
-<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota South
-<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Mississippi East
-<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Mississippi West
-<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Missouri East
-<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Missouri Central
-<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Missouri West
-<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Montana
-<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Nebraska
-<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Nevada East
-<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Nevada Central
-<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Nevada West
-<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New Hampshire
-<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New Jersey
-<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New Mexico East
-<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New Mexico Central
-<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New Mexico West
-<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New York East
-<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New York Central
-<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New York West
-<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / New York Long Island
-<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / North Dakota North
-<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / North Dakota South
-<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Ohio North
-<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Ohio South
-<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Oklahoma North
-<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Oklahoma South
-<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Oregon North
-<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Oregon South
-<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Rhode Island
-<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / South Dakota North
-<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / South Dakota South
-<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Tennessee
-<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas North
-<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas North Central
-<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas Central
-<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas South Central
-<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas South
-<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Utah North
-<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Utah Central
-<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Utah South
-<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Vermont
-<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Virginia North
-<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Virginia South
-<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Washington North
-<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Washington South
-<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / West Virginia North
-<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / West Virginia South
-<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wisconsin North
-<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wisconsin Central
-<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wisconsin South
-<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wyoming East
-<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wyoming East Central
-<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wyoming West Central
-<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Wyoming West
-<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Puerto Rico and Virgin Is.
-<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Arizona East (ft)
-<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Arizona Central (ft)
-<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Arizona West (ft)
-<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / California zone 1 (ftUS)
-<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / California zone 2 (ftUS)
-<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / California zone 3 (ftUS)
-<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / California zone 4 (ftUS)
-<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / California zone 5 (ftUS)
-<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / California zone 6 (ftUS)
-<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Colorado North (ftUS)
-<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Colorado Central (ftUS)
-<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Colorado South (ftUS)
-<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Connecticut (ftUS)
-<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Delaware (ftUS)
-<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Florida East (ftUS)
-<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Florida West (ftUS)
-<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Florida North (ftUS)
-<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Georgia East (ftUS)
-<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Georgia West (ftUS)
-<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Idaho East (ftUS)
-<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Idaho Central (ftUS)
-<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Idaho West (ftUS)
-<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Indiana East (ftUS) (deprecated)
-<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Indiana West (ftUS) (deprecated)
-<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Kentucky North (ftUS)
-<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Kentucky South (ftUS)
-<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Maryland (ftUS)
-<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Massachusetts Mainland (ftUS)
-<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Massachusetts Island (ftUS)
-<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Michigan North (ft)
-<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Michigan Central (ft)
-<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Michigan South (ft)
-<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Mississippi East (ftUS)
-<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Mississippi West (ftUS)
-<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Montana (ft)
-<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / New Mexico East (ftUS)
-<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New Mexico Central (ftUS)
-<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New Mexico West (ftUS)
-<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New York East (ftUS)
-<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New York Central (ftUS)
-<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New York West (ftUS)
-<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New York Long Island (ftUS)
-<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / North Dakota North (ft)
-<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / North Dakota South (ft)
-<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Oklahoma North (ftUS)
-<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Oklahoma South (ftUS)
-<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Oregon North (ft)
-<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Oregon South (ft)
-<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Tennessee (ftUS)
-<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Texas North (ftUS)
-<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Texas North Central (ftUS)
-<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Texas Central (ftUS)
-<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Texas South Central (ftUS)
-<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Texas South (ftUS)
-<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Utah North (ft)
-<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Utah Central (ft)
-<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Utah South (ft)
-<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Virginia North (ftUS)
-<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Virginia South (ftUS)
-<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Washington North (ftUS)
-<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Washington South (ftUS)
-<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wisconsin North (ftUS)
-<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wisconsin Central (ftUS)
-<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wisconsin South (ftUS)
-<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# Beduaram / TM 13 NE
-<2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs <>
-# QND95 / Qatar National Grid
-<2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs <>
-# Segara / UTM zone 50S
-<2933> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <>
-# Segara (Jakarta) / NEIEZ (deprecated)
-<2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone A1
-<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone A2
-<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone A3
-<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone A4
-<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone K2
-<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone K3
-<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone K4
-<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Porto Santo / UTM zone 28N
-<2942> +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs <>
-# Selvagem Grande / UTM zone 28N
-<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <>
-# NAD83(CSRS) / SCoPQ zone 2
-<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 3
-<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 4
-<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 5
-<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 6
-<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 7
-<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 8
-<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 9
-<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 10
-<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / New Brunswick Stereographic
-<2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)
-<2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 11N
-<2955> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 12N
-<2956> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 13N
-<2957> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 17N
-<2958> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 18N
-<2959> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 19N
-<2960> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 20N
-<2961> +proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 21N
-<2962> +proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs <>
-# Lisbon 1890 (Lisbon) / Portugal Bonne
-# Unable to translate coordinate system EPSG:2963 into PROJ.4 format.
-#
-# NAD27 / Alaska Albers
-<2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD83 / Indiana East (ftUS)
-<2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Indiana West (ftUS)
-<2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Indiana East (ftUS)
-<2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Indiana West (ftUS)
-<2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <>
-# Fort Marigot / UTM zone 20N
-<2969> +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs <>
-# Guadeloupe 1948 / UTM zone 20N
-<2970> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <>
-# CSG67 / UTM zone 22N
-<2971> +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <>
-# RGFG95 / UTM zone 22N
-<2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <>
-# Martinique 1938 / UTM zone 20N
-<2973> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <>
-# RGR92 / UTM zone 40S
-<2975> +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Tahiti 52 / UTM zone 6S
-<2976> +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs <>
-# Tahaa 54 / UTM zone 5S
-<2977> +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs <>
-# IGN72 Nuku Hiva / UTM zone 7S
-<2978> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <>
-# K0 1949 / UTM zone 42S (deprecated)
-<2979> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <>
-# Combani 1950 / UTM zone 38S
-<2980> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <>
-# IGN56 Lifou / UTM zone 58S
-<2981> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# IGN72 Grand Terre / UTM zone 58S (deprecated)
-<2982> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# ST87 Ouvea / UTM zone 58S (deprecated)
-<2983> +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs <>
-# RGNC 1991 / Lambert New Caledonia (deprecated)
-<2984> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Petrels 1972 / Terre Adelie Polar Stereographic
-# Unable to translate coordinate system EPSG:2985 into PROJ.4 format.
-#
-# Perroud 1950 / Terre Adelie Polar Stereographic
-# Unable to translate coordinate system EPSG:2986 into PROJ.4 format.
-#
-# Saint Pierre et Miquelon 1950 / UTM zone 21N
-<2987> +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs <>
-# MOP78 / UTM zone 1S
-<2988> +proj=utm +zone=1 +south +ellps=intl +units=m +no_defs <>
-# RRAF 1991 / UTM zone 20N
-<2989> +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Reunion 1947 / TM Reunion (deprecated)
-<2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs <>
-# NAD83 / Oregon Lambert
-<2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Oregon Lambert (ft)
-<2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <>
-# NAD83(HARN) / Oregon Lambert
-<2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Oregon Lambert (ft)
-<2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# IGN53 Mare / UTM zone 58S
-<2995> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# ST84 Ile des Pins / UTM zone 58S
-<2996> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# ST71 Belep / UTM zone 58S
-<2997> +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs <>
-# NEA74 Noumea / UTM zone 58S
-<2998> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# Grand Comoros / UTM zone 38S
-<2999> +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs <>
-# Segara / NEIEZ
-<3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <>
-# Batavia / NEIEZ
-<3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <>
-# Makassar / NEIEZ
-<3002> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs <>
-# Monte Mario / Italy zone 1
-<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Monte Mario / Italy zone 2
-<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# NAD83 / BC Albers
-<3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# SWEREF99 TM
-<3006> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 12 00
-<3007> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 13 30
-<3008> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 15 00
-<3009> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 16 30
-<3010> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 18 00
-<3011> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 14 15
-<3012> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 15 45
-<3013> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 17 15
-<3014> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 18 45
-<3015> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 20 15
-<3016> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 21 45
-<3017> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 23 15
-<3018> +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RT90 7.5 gon V
-<3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT90 5 gon V
-<3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT90 2.5 gon V
-<3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT90 0 gon
-<3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT90 2.5 gon O
-<3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT90 5 gon O
-<3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 7.5 gon V
-<3025> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 5 gon V
-<3026> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 2.5 gon V
-<3027> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 0 gon
-<3028> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 2.5 gon O
-<3029> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RT38 5 gon O
-<3030> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# WGS 84 / Antarctic Polar Stereographic
-<3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / Australian Antarctic Polar Stereographic
-<3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / Australian Antarctic Lambert
-<3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# ETRS89 / ETRS-LCC
-<3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-LAEA
-<3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs <>
-# Moznet / UTM zone 36S
-<3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <>
-# Moznet / UTM zone 37S
-<3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <>
-# ETRS89 / ETRS-TM26
-<3038> +proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM27
-<3039> +proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM28
-<3040> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM29
-<3041> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM30
-<3042> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM31
-<3043> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM32
-<3044> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM33
-<3045> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM34
-<3046> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM35
-<3047> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM36
-<3048> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM37
-<3049> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM38
-<3050> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-TM39
-<3051> +proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs <>
-# Reykjavik 1900 / Lambert 1900
-# Unable to translate coordinate system EPSG:3052 into PROJ.4 format.
-#
-# Hjorsey 1955 / Lambert 1955
-# Unable to translate coordinate system EPSG:3053 into PROJ.4 format.
-#
-# Hjorsey 1955 / UTM zone 26N
-<3054> +proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <>
-# Hjorsey 1955 / UTM zone 27N
-<3055> +proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <>
-# Hjorsey 1955 / UTM zone 28N
-<3056> +proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <>
-# ISN93 / Lambert 1993
-<3057> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Helle 1954 / Jan Mayen Grid
-<3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs <>
-# LKS92 / Latvia TM
-<3059> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGN72 Grande Terre / UTM zone 58S
-<3060> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <>
-# Porto Santo 1995 / UTM zone 28N
-<3061> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <>
-# Azores Oriental 1995 / UTM zone 26N
-<3062> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <>
-# Azores Central 1995 / UTM zone 26N
-<3063> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <>
-# IGM95 / UTM zone 32N
-<3064> +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGM95 / UTM zone 33N
-<3065> +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ED50 / Jordan TM
-<3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs <>
-# ETRS89 / ETRS-TM35FIN
-<3067> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <>
-# DHDN / Soldner Berlin
-<3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# NAD27 / Wisconsin Transverse Mercator
-<3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / Wisconsin Transverse Mercator
-<3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Wisconsin Transverse Mercator
-<3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Maine CS2000 East
-<3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maine CS2000 Central (deprecated)
-<3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maine CS2000 West
-<3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Maine CS2000 East
-<3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maine CS2000 Central (deprecated)
-<3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maine CS2000 West
-<3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Michigan Oblique Mercator
-<3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Michigan Oblique Mercator
-<3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs <>
-# NAD27 / Shackleford
-<3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs <>
-# NAD83 / Texas State Mapping System
-<3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas Centric Lambert Conformal
-<3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas Centric Albers Equal Area
-<3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Texas Centric Lambert Conformal
-<3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Texas Centric Albers Equal Area
-<3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Florida GDL Albers
-<3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Florida GDL Albers
-<3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Kentucky Single Zone
-<3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Kentucky Single Zone (ftUS)
-<3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Kentucky Single Zone
-<3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Kentucky Single Zone (ftUS)
-<3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <>
-# Tokyo / UTM zone 51N
-<3092> +proj=utm +zone=51 +ellps=bessel +units=m +no_defs <>
-# Tokyo / UTM zone 52N
-<3093> +proj=utm +zone=52 +ellps=bessel +units=m +no_defs <>
-# Tokyo / UTM zone 53N
-<3094> +proj=utm +zone=53 +ellps=bessel +units=m +no_defs <>
-# Tokyo / UTM zone 54N
-<3095> +proj=utm +zone=54 +ellps=bessel +units=m +no_defs <>
-# Tokyo / UTM zone 55N
-<3096> +proj=utm +zone=55 +ellps=bessel +units=m +no_defs <>
-# JGD2000 / UTM zone 51N
-<3097> +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / UTM zone 52N
-<3098> +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / UTM zone 53N
-<3099> +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / UTM zone 54N
-<3100> +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JGD2000 / UTM zone 55N
-<3101> +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# American Samoa 1962 / American Samoa Lambert
-<3102> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <>
-# Mauritania 1999 / UTM zone 28N (deprecated)
-<3103> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <>
-# Mauritania 1999 / UTM zone 29N (deprecated)
-<3104> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <>
-# Mauritania 1999 / UTM zone 30N (deprecated)
-<3105> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <>
-# Gulshan 303 / Bangladesh Transverse Mercator
-<3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# GDA94 / SA Lambert
-<3107> +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ETRS89 / Guernsey Grid
-<3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Jersey Transverse Mercator
-<3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs <>
-# AGD66 / Vicgrid66
-<3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs <>
-# GDA94 / Vicgrid94
-<3111> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / Geoscience Australia Lambert
-<3112> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / BCSG02
-<3113> +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# MAGNA-SIRGAS / Colombia Far West zone
-<3114> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# MAGNA-SIRGAS / Colombia West zone
-<3115> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# MAGNA-SIRGAS / Colombia Bogota zone
-<3116> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# MAGNA-SIRGAS / Colombia East Central zone
-<3117> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# MAGNA-SIRGAS / Colombia East zone
-<3118> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Douala 1948 / AEF west
-<3119> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942(58) / Poland zone I
-<3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +no_defs <>
-# PRS92 / Philippines zone 1
-<3121> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <>
-# PRS92 / Philippines zone 2
-<3122> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <>
-# PRS92 / Philippines zone 3
-<3123> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <>
-# PRS92 / Philippines zone 4
-<3124> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <>
-# PRS92 / Philippines zone 5
-<3125> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <>
-# ETRS89 / ETRS-GK19FIN
-<3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK20FIN
-<3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK21FIN
-<3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK22FIN
-<3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK23FIN
-<3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK24FIN
-<3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK25FIN
-<3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK26FIN
-<3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK27FIN
-<3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK28FIN
-<3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK29FIN
-<3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK30FIN
-<3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / ETRS-GK31FIN
-<3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Vanua Levu 1915 / Vanua Levu Grid
-# Unable to translate coordinate system EPSG:3139 into PROJ.4 format.
-#
-# Viti Levu 1912 / Viti Levu Grid
-<3140> +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs <>
-# Fiji 1956 / UTM zone 60S
-<3141> +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <>
-# Fiji 1956 / UTM zone 1S
-<3142> +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <>
-# Fiji 1986 / Fiji Map Grid (deprecated)
-<3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <>
-# FD54 / Faroe Lambert
-# Unable to translate coordinate system EPSG:3144 into PROJ.4 format.
-#
-# ETRS89 / Faroe Lambert
-# Unable to translate coordinate system EPSG:3145 into PROJ.4 format.
-#
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 6
-<3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E
-<3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Indian 1960 / UTM zone 48N
-<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Indian 1960 / UTM zone 49N
-<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 6
-<3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E
-<3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# ST74
-<3152> +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(CSRS) / BC Albers
-<3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 7N
-<3154> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 8N
-<3155> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 9N
-<3156> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 10N
-<3157> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 14N
-<3158> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 15N
-<3159> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / UTM zone 16N
-<3160> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Ontario MNR Lambert
-<3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Ontario MNR Lambert
-<3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs <>
-# RGNC91-93 / Lambert New Caledonia
-<3163> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ST87 Ouvea / UTM zone 58S
-<3164> +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs <>
-# NEA74 Noumea / Noumea Lambert
-<3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs <>
-# NEA74 Noumea / Noumea Lambert 2
-<3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs <>
-# Kertau (RSO) / RSO Malaya (ch)
-<3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <>
-# Kertau (RSO) / RSO Malaya (m)
-<3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <>
-# RGNC91-93 / UTM zone 57S
-<3169> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGNC91-93 / UTM zone 58S
-<3170> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGNC91-93 / UTM zone 59S
-<3171> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGN53 Mare / UTM zone 59S
-<3172> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs <>
-# fk89 / Faroe Lambert FK89
-# Unable to translate coordinate system EPSG:3173 into PROJ.4 format.
-#
-# NAD83 / Great Lakes Albers
-<3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Great Lakes and St Lawrence Albers
-<3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# Indian 1960 / TM 106 NE
-<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# LGD2006 / Libya TM
-<3177> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 18N
-<3178> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 19N
-<3179> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 20N
-<3180> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 21N
-<3181> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 22N
-<3182> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 23N
-<3183> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 24N
-<3184> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 25N
-<3185> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 26N
-<3186> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 27N
-<3187> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 28N
-<3188> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GR96 / UTM zone 29N
-<3189> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 5
-<3190> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 6
-<3191> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 7
-<3192> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 8
-<3193> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 9
-<3194> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 10
-<3195> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 11
-<3196> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 12
-<3197> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / Libya TM zone 13
-<3198> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / UTM zone 32N
-<3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# FD58 / Iraq zone
-<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <>
-# LGD2006 / UTM zone 33N
-<3201> +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / UTM zone 34N
-<3202> +proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# LGD2006 / UTM zone 35N
-<3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SP19-20
-<3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SP21-22
-<3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SP23-24
-<3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ01-02
-<3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ19-20
-<3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ21-22
-<3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ37-38
-<3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ39-40
-<3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ41-42
-<3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ43-44
-<3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ45-46
-<3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ47-48
-<3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ49-50
-<3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ51-52
-<3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ53-54
-<3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ55-56
-<3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SQ57-58
-<3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR13-14
-<3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR15-16
-<3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR17-18
-<3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR19-20
-<3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR27-28
-<3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR29-30
-<3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR31-32
-<3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR33-34
-<3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR35-36
-<3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR37-38
-<3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR39-40
-<3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR41-42
-<3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR43-44
-<3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR45-46
-<3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR47-48
-<3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR49-50
-<3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR51-52
-<3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR53-54
-<3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR55-56
-<3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR57-58
-<3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SR59-60
-<3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS04-06
-<3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS07-09
-<3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS10-12
-<3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS13-15
-<3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS16-18
-<3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS19-21
-<3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS25-27
-<3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS28-30
-<3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS31-33
-<3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS34-36
-<3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS37-39
-<3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS40-42
-<3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS43-45
-<3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS46-48
-<3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS49-51
-<3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS52-54
-<3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS55-57
-<3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SS58-60
-<3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST01-04
-<3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST05-08
-<3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST09-12
-<3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST13-16
-<3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST17-20
-<3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST21-24
-<3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST25-28
-<3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST29-32
-<3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST33-36
-<3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST37-40
-<3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST41-44
-<3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST45-48
-<3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST49-52
-<3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST53-56
-<3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW ST57-60
-<3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU01-05
-<3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU06-10
-<3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU11-15
-<3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU16-20
-<3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU21-25
-<3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU26-30
-<3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU31-35
-<3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU36-40
-<3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU41-45
-<3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU46-50
-<3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU51-55
-<3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SU56-60
-<3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV01-10
-<3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV11-20
-<3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV21-30
-<3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV31-40
-<3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV41-50
-<3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SV51-60
-<3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / SCAR IMW SW01-60
-<3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / USGS Transantarctic Mountains
-<3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# Guam 1963 / Yap Islands
-# Unable to translate coordinate system EPSG:3295 into PROJ.4 format.
-#
-# RGPF / UTM zone 5S
-<3296> +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs <>
-# RGPF / UTM zone 6S
-<3297> +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs <>
-# RGPF / UTM zone 7S
-<3298> +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs <>
-# RGPF / UTM zone 8S
-<3299> +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs <>
-# Estonian Coordinate System of 1992
-<3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs <>
-# Estonian Coordinate System of 1997
-<3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGN63 Hiva Oa / UTM zone 7S
-<3302> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <>
-# Fatu Iva 72 / UTM zone 7S
-<3303> +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs <>
-# Tahiti 79 / UTM zone 6S
-<3304> +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs <>
-# Moorea 87 / UTM zone 6S
-<3305> +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs <>
-# Maupiti 83 / UTM zone 5S
-<3306> +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs <>
-# Nakhl-e Ghanem / UTM zone 39N
-<3307> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs <>
-# GDA94 / NSW Lambert
-<3308> +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD27 / California Albers
-<3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / California Albers
-<3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / California Albers
-<3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs <>
-# CSG67 / UTM zone 21N
-<3312> +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <>
-# RGFG95 / UTM zone 21N
-<3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga Lambert (deprecated)
-<3314> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga TM (deprecated)
-<3315> +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Kasai 1953 / Congo TM zone 22
-<3316> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# Kasai 1953 / Congo TM zone 24
-<3317> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 12
-<3318> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 14
-<3319> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 16
-<3320> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 18
-<3321> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 20
-<3322> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 22
-<3323> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 24
-<3324> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 26
-<3325> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 28
-<3326> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# IGC 1962 / Congo TM zone 30
-<3327> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# Pulkovo 1942(58) / GUGiK-80
-<3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5
-<3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6
-<3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7
-<3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8
-<3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Gauss-Kruger zone 3
-<3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Gauss-Kruger zone 4
-<3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Gauss-Kruger zone 5
-<3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# IGN 1962 Kerguelen / UTM zone 42S
-<3336> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <>
-# Le Pouce 1934 / Mauritius Grid
-<3337> +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Alaska Albers
-<3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# IGCB 1955 / Congo TM zone 12
-<3339> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <>
-# IGCB 1955 / Congo TM zone 14
-<3340> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <>
-# IGCB 1955 / Congo TM zone 16
-<3341> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <>
-# IGCB 1955 / UTM zone 33S
-<3342> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <>
-# Mauritania 1999 / UTM zone 28N
-<3343> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Mauritania 1999 / UTM zone 29N
-<3344> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Mauritania 1999 / UTM zone 30N
-<3345> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# LKS94 / Lithuania TM
-<3346> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Statistics Canada Lambert
-<3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Statistics Canada Lambert
-<3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <>
-# WGS 84 / PDC Mercator (deprecated)
-<3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone C0
-<3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone C1
-<3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / CS63 zone C2
-<3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Mhast (onshore) / UTM zone 32S
-<3353> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <>
-# Mhast (offshore) / UTM zone 32S
-<3354> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <>
-# Egypt Gulf of Suez S-650 TL / Red Belt
-<3355> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs <>
-# Grand Cayman 1959 / UTM zone 17N
-<3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs <>
-# Little Cayman 1961 / UTM zone 17N
-<3357> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <>
-# NAD83(HARN) / North Carolina
-<3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / North Carolina (ftUS) (deprecated)
-<3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / South Carolina
-<3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / South Carolina (ft)
-<3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=ft +no_defs <>
-# NAD83(HARN) / Pennsylvania North
-<3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Pennsylvania North (ftUS)
-<3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Pennsylvania South
-<3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Pennsylvania South (ftUS)
-<3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# Hong Kong 1963 Grid System (deprecated)
-<3366> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <>
-# IGN Astro 1960 / UTM zone 28N
-<3367> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <>
-# IGN Astro 1960 / UTM zone 29N
-<3368> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <>
-# IGN Astro 1960 / UTM zone 30N
-<3369> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <>
-# NAD27 / UTM zone 59N
-<3370> +proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 60N
-<3371> +proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / UTM zone 59N
-<3372> +proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 60N
-<3373> +proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# FD54 / UTM zone 29N
-<3374> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <>
-# GDM2000 / Peninsula RSO
-<3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / East Malaysia BRSO
-<3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Johor Grid
-<3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Sembilan and Melaka Grid
-<3378> +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / PahangGrid
-<3379> +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Selangor Grid
-<3380> +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Terengganu Grid
-<3381> +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Pinang Grid
-<3382> +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Kedah and Perlis Grid
-<3383> +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Perak Grid
-<3384> +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs <>
-# GDM2000 / Kelantan Grid
-<3385> +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs <>
-# KKJ / Finland zone 0
-<3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# KKJ / Finland zone 5
-<3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Pulkovo 1942 / Caspian Sea Mercator
-<3388> +proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60
-<3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60
-<3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Karbala 1979 / UTM zone 37N
-<3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <>
-# Karbala 1979 / UTM zone 38N
-<3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <>
-# Karbala 1979 / UTM zone 39N
-<3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <>
-# Nahrwan 1934 / Iraq zone
-<3394> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <>
-# WGS 84 / World Mercator
-<3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# PD/83 / 3-degree Gauss-Kruger zone 3
-<3396> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# PD/83 / 3-degree Gauss-Kruger zone 4
-<3397> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RD/83 / 3-degree Gauss-Kruger zone 4
-<3398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# RD/83 / 3-degree Gauss-Kruger zone 5
-<3399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# NAD83 / Alberta 10-TM (Forest)
-<3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alberta 10-TM (Resource)
-<3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 10-TM (Forest)
-<3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 10-TM (Resource)
-<3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / North Carolina (ftUS)
-<3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# VN-2000 / UTM zone 48N
-<3405> +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs <>
-# VN-2000 / UTM zone 49N
-<3406> +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs <>
-# Hong Kong 1963 Grid System
-<3407> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <>
-# unnamed
-<3408> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <>
-# unnamed
-<3409> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <>
-# NSIDC EASE-Grid Global
-<3410> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <>
-# NSIDC Sea Ice Polar Stereographic North
-<3411> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <>
-# NSIDC Sea Ice Polar Stereographic South
-<3412> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <>
-# WGS 84 / NSIDC Sea Ice Polar Stereographic North
-<3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# SVY21 / Singapore TM
-<3414> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs <>
-# WGS 72BE / South China Sea Lambert
-<3415> +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# ETRS89 / Austria Lambert
-<3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Iowa North (ft US)
-<3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Iowa South (ft US)
-<3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Kansas North (ft US)
-<3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Kansas South (ft US)
-<3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Nevada East (ft US)
-<3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Nevada Central (ft US)
-<3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Nevada West (ft US)
-<3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New Jersey (ft US)
-<3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Iowa North (ft US)
-<3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Iowa South (ft US)
-<3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Kansas North (ft US)
-<3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Kansas South (ft US)
-<3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Nevada East (ft US)
-<3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Nevada Central (ft US)
-<3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Nevada West (ft US)
-<3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New Jersey (ft US)
-<3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83 / Arkansas North (ftUS)
-<3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Arkansas South (ftUS)
-<3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Illinois East (ftUS)
-<3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Illinois West (ftUS)
-<3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / New Hampshire (ftUS)
-<3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Rhode Island (ftUS)
-<3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# PSD93 / UTM zone 39N
-<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <>
-# PSD93 / UTM zone 40N
-<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <>
-# NAD83(HARN) / Arkansas North (ftUS)
-<3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Arkansas South (ftUS)
-<3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Illinois East (ftUS)
-<3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Illinois West (ftUS)
-<3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / New Hampshire (ftUS)
-<3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Rhode Island (ftUS)
-<3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# ETRS89 / Belgian Lambert 2005
-<3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs <>
-# JAD2001 / Jamaica Metric Grid
-<3448> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JAD2001 / UTM zone 17N
-<3449> +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# JAD2001 / UTM zone 18N
-<3450> +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Louisiana North (ftUS)
-<3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Louisiana South (ftUS)
-<3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Louisiana Offshore (ftUS)
-<3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / South Dakota North (ftUS)
-<3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / South Dakota South (ftUS)
-<3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Louisiana North (ftUS)
-<3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Louisiana South (ftUS)
-<3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / South Dakota North (ftUS)
-<3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / South Dakota South (ftUS)
-<3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# Fiji 1986 / Fiji Map Grid
-<3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <>
-# Dabola 1981 / UTM zone 28N
-<3461> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <>
-# Dabola 1981 / UTM zone 29N
-<3462> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Maine CS2000 Central
-<3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Maine CS2000 Central
-<3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alabama East
-<3465> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alabama West
-<3466> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska Albers
-<3467> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 1
-<3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 2
-<3469> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 3
-<3470> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 4
-<3471> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 5
-<3472> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 6
-<3473> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 7
-<3474> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 8
-<3475> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 9
-<3476> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Alaska zone 10
-<3477> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arizona Central
-<3478> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arizona Central (ft)
-<3479> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Arizona East
-<3480> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arizona East (ft)
-<3481> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Arizona West
-<3482> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arizona West (ft)
-<3483> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Arkansas North
-<3484> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arkansas North (ftUS)
-<3485> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Arkansas South
-<3486> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Arkansas South (ftUS)
-<3487> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California Albers
-<3488> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 1
-<3489> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 1 (ftUS)
-<3490> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California zone 2
-<3491> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 2 (ftUS)
-<3492> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California zone 3
-<3493> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 3 (ftUS)
-<3494> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California zone 4
-<3495> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 4 (ftUS)
-<3496> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California zone 5
-<3497> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 5 (ftUS)
-<3498> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / California zone 6
-<3499> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / California zone 6 (ftUS)
-<3500> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Colorado Central
-<3501> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Colorado Central (ftUS)
-<3502> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Colorado North
-<3503> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Colorado North (ftUS)
-<3504> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Colorado South
-<3505> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Colorado South (ftUS)
-<3506> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Connecticut
-<3507> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Connecticut (ftUS)
-<3508> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Delaware
-<3509> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Delaware (ftUS)
-<3510> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Florida East
-<3511> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Florida East (ftUS)
-<3512> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Florida GDL Albers
-<3513> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Florida North
-<3514> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Florida North (ftUS)
-<3515> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Florida West
-<3516> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Florida West (ftUS)
-<3517> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Georgia East
-<3518> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Georgia East (ftUS)
-<3519> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Georgia West
-<3520> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Georgia West (ftUS)
-<3521> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Idaho Central
-<3522> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Idaho Central (ftUS)
-<3523> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Idaho East
-<3524> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Idaho East (ftUS)
-<3525> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Idaho West
-<3526> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Idaho West (ftUS)
-<3527> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Illinois East
-<3528> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Illinois East (ftUS)
-<3529> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Illinois West
-<3530> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Illinois West (ftUS)
-<3531> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Indiana East
-<3532> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Indiana East (ftUS)
-<3533> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Indiana West
-<3534> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Indiana West (ftUS)
-<3535> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Iowa North
-<3536> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Iowa North (ft US)
-<3537> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Iowa South
-<3538> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Iowa South (ft US)
-<3539> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Kansas North
-<3540> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Kansas North (ft US)
-<3541> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Kansas South
-<3542> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Kansas South (ft US)
-<3543> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Kentucky North
-<3544> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Kentucky North (ftUS)
-<3545> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Kentucky Single Zone
-<3546> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Kentucky Single Zone (ftUS)
-<3547> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Kentucky South
-<3548> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Kentucky South (ftUS)
-<3549> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Louisiana North
-<3550> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Louisiana North (ftUS)
-<3551> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Louisiana South
-<3552> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Louisiana South (ftUS)
-<3553> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Maine CS2000 Central
-<3554> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine CS2000 East
-<3555> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine CS2000 West
-<3556> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine East
-<3557> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine West
-<3558> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maryland
-<3559> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Utah North (ftUS)
-<3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# Old Hawaiian / Hawaii zone 1
-<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <>
-# Old Hawaiian / Hawaii zone 2
-<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <>
-# Old Hawaiian / Hawaii zone 3
-<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <>
-# Old Hawaiian / Hawaii zone 4
-<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <>
-# Old Hawaiian / Hawaii zone 5
-<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <>
-# NAD83 / Utah Central (ftUS)
-<3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Utah South (ftUS)
-<3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Utah North (ftUS)
-<3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Utah Central (ftUS)
-<3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Utah South (ftUS)
-<3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <>
-# WGS 84 / North Pole LAEA Bering Sea
-<3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / North Pole LAEA Alaska
-<3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / North Pole LAEA Canada
-<3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / North Pole LAEA Atlantic
-<3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / North Pole LAEA Europe
-<3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / North Pole LAEA Russia
-<3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# GDA94 / Australian Albers
-<3577> +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Yukon Albers
-<3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Yukon Albers
-<3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / NWT Lambert
-<3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / NWT Lambert
-<3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maryland (ftUS)
-<3582> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Massachusetts Island
-<3583> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Massachusetts Island (ftUS)
-<3584> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Massachusetts Mainland
-<3585> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Massachusetts Mainland (ftUS)
-<3586> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Michigan Central
-<3587> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Michigan Central (ft)
-<3588> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Michigan North
-<3589> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Michigan North (ft)
-<3590> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Michigan Oblique Mercator
-<3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Michigan South
-<3592> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Michigan South (ft)
-<3593> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Minnesota Central
-<3594> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Minnesota North
-<3595> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Minnesota South
-<3596> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Mississippi East
-<3597> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Mississippi East (ftUS)
-<3598> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Mississippi West
-<3599> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Mississippi West (ftUS)
-<3600> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Missouri Central
-<3601> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Missouri East
-<3602> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Missouri West
-<3603> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Montana
-<3604> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Montana (ft)
-<3605> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Nebraska
-<3606> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Nevada Central
-<3607> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Nevada Central (ft US)
-<3608> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Nevada East
-<3609> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Nevada East (ft US)
-<3610> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Nevada West
-<3611> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Nevada West (ft US)
-<3612> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New Hampshire
-<3613> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New Hampshire (ftUS)
-<3614> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New Jersey
-<3615> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New Jersey (ft US)
-<3616> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New Mexico Central
-<3617> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New Mexico Central (ftUS)
-<3618> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New Mexico East
-<3619> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New Mexico East (ftUS)
-<3620> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New Mexico West
-<3621> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New Mexico West (ftUS)
-<3622> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New York Central
-<3623> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New York Central (ftUS)
-<3624> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New York East
-<3625> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New York East (ftUS)
-<3626> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New York Long Island
-<3627> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New York Long Island (ftUS)
-<3628> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / New York West
-<3629> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / New York West (ftUS)
-<3630> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / North Carolina
-<3631> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / North Carolina (ftUS)
-<3632> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / North Dakota North
-<3633> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / North Dakota North (ft)
-<3634> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / North Dakota South
-<3635> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / North Dakota South (ft)
-<3636> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Ohio North
-<3637> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Ohio South
-<3638> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oklahoma North
-<3639> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oklahoma North (ftUS)
-<3640> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Oklahoma South
-<3641> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oklahoma South (ftUS)
-<3642> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Oregon Lambert
-<3643> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oregon Lambert (ft)
-<3644> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Oregon North
-<3645> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oregon North (ft)
-<3646> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Oregon South
-<3647> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Oregon South (ft)
-<3648> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Pennsylvania North
-<3649> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Pennsylvania North (ftUS)
-<3650> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Pennsylvania South
-<3651> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Pennsylvania South (ftUS)
-<3652> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Rhode Island
-<3653> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Rhode Island (ftUS)
-<3654> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / South Carolina
-<3655> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / South Carolina (ft)
-<3656> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / South Dakota North
-<3657> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / South Dakota North (ftUS)
-<3658> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / South Dakota South
-<3659> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / South Dakota South (ftUS)
-<3660> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Tennessee
-<3661> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Tennessee (ftUS)
-<3662> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Texas Central
-<3663> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas Central (ftUS)
-<3664> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Texas Centric Albers Equal Area
-<3665> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas Centric Lambert Conformal
-<3666> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas North
-<3667> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas North (ftUS)
-<3668> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Texas North Central
-<3669> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas North Central (ftUS)
-<3670> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Texas South
-<3671> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas South (ftUS)
-<3672> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Texas South Central
-<3673> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Texas South Central (ftUS)
-<3674> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Utah Central
-<3675> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Utah Central (ft)
-<3676> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Utah Central (ftUS)
-<3677> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Utah North
-<3678> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Utah North (ft)
-<3679> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Utah North (ftUS)
-<3680> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Utah South
-<3681> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Utah South (ft)
-<3682> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <>
-# NAD83(NSRS2007) / Utah South (ftUS)
-<3683> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Vermont
-<3684> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Virginia North
-<3685> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Virginia North (ftUS)
-<3686> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Virginia South
-<3687> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Virginia South (ftUS)
-<3688> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Washington North
-<3689> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Washington North (ftUS)
-<3690> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Washington South
-<3691> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Washington South (ftUS)
-<3692> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / West Virginia North
-<3693> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / West Virginia South
-<3694> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wisconsin Central
-<3695> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wisconsin Central (ftUS)
-<3696> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wisconsin North
-<3697> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wisconsin North (ftUS)
-<3698> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wisconsin South
-<3699> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wisconsin South (ftUS)
-<3700> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wisconsin Transverse Mercator
-<3701> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wyoming East
-<3702> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wyoming East Central
-<3703> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wyoming West Central
-<3704> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Wyoming West
-<3705> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 59N
-<3706> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 60N
-<3707> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 1N
-<3708> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 2N
-<3709> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 3N
-<3710> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 4N
-<3711> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 5N
-<3712> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 6N
-<3713> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 7N
-<3714> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 8N
-<3715> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 9N
-<3716> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 10N
-<3717> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 11N
-<3718> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 12N
-<3719> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 13N
-<3720> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 14N
-<3721> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 15N
-<3722> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 16N
-<3723> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 17N
-<3724> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 18N
-<3725> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / UTM zone 19N
-<3726> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Reunion 1947 / TM Reunion
-<3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs <>
-# NAD83(NSRS2007) / Ohio North (ftUS)
-<3728> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Ohio South (ftUS)
-<3729> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wyoming East (ftUS)
-<3730> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wyoming East Central (ftUS)
-<3731> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wyoming West Central (ftUS)
-<3732> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Wyoming West (ftUS)
-<3733> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83 / Ohio North (ftUS)
-<3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Ohio South (ftUS)
-<3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wyoming East (ftUS)
-<3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wyoming East Central (ftUS)
-<3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wyoming West Central (ftUS)
-<3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Wyoming West (ftUS)
-<3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / UTM zone 10N
-<3740> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 11N
-<3741> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 12N
-<3742> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 13N
-<3743> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 14N
-<3744> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 15N
-<3745> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 16N
-<3746> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 17N
-<3747> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 18N
-<3748> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 19N
-<3749> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 4N
-<3750> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / UTM zone 5N
-<3751> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <>
-# WGS 84 / Mercator 41 (deprecated)
-<3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# NAD83(HARN) / Ohio North (ftUS)
-<3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Ohio South (ftUS)
-<3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wyoming East (ftUS)
-<3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wyoming East Central (ftUS)
-<3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wyoming West Central (ftUS)
-<3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Wyoming West (ftUS)
-<3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83 / Hawaii zone 3 (ftUS)
-<3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Hawaii zone 3 (ftUS)
-<3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(CSRS) / UTM zone 22N
-<3761> +proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs <>
-# WGS 84 / South Georgia Lambert
-<3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# ETRS89 / Portugal TM06
-<3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NZGD2000 / Chatham Island Circuit 2000
-<3764> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# HTRS96 / Croatia TM
-<3765> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# HTRS96 / Croatia LCC
-<3766> +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# HTRS96 / UTM zone 33N
-<3767> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# HTRS96 / UTM zone 34N
-<3768> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Bermuda 1957 / UTM zone 20N
-<3769> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <>
-# BDA2000 / Bermuda 2000 National Grid
-<3770> +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD27 / Alberta 3TM ref merid 111 W
-<3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Alberta 3TM ref merid 114 W
-<3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Alberta 3TM ref merid 117 W
-<3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Alberta 3TM ref merid 120 W (deprecated)
-<3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / Alberta 3TM ref merid 111 W
-<3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alberta 3TM ref merid 114 W
-<3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alberta 3TM ref merid 117 W
-<3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alberta 3TM ref merid 120 W (deprecated)
-<3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 3TM ref merid 111 W
-<3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 3TM ref merid 114 W
-<3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 3TM ref merid 117 W
-<3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated)
-<3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Pitcairn 2006 / Pitcairn TM 2006
-<3783> +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Pitcairn 1967 / UTM zone 9S
-<3784> +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs <>
-# Popular Visualisation CRS / Mercator (deprecated)
-<3785> +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 <>
-# World Equidistant Cylindrical (Sphere) (deprecated)
-<3786> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs <>
-# MGI / Slovene National Grid (deprecated)
-<3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# NZGD2000 / Auckland Islands TM 2000
-<3788> +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Campbell Island TM 2000
-<3789> +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Antipodes Islands TM 2000
-<3790> +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Raoul Island TM 2000
-<3791> +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / Chatham Islands TM 2000
-<3793> +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Slovenia 1996 / Slovene National Grid
-<3794> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD27 / Cuba Norte
-<3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Cuba Sur
-<3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTQ Lambert
-<3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / MTQ Lambert
-<3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / MTQ Lambert
-<3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD27 / Alberta 3TM ref merid 120 W
-<3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD83 / Alberta 3TM ref merid 120 W
-<3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Alberta 3TM ref merid 120 W
-<3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / Belgian Lambert 2008
-<3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / Mississippi TM
-<3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Mississippi TM
-<3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(NSRS2007) / Mississippi TM
-<3816> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# TWD97 / TM2 zone 119
-<3825> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# TWD97 / TM2 zone 121
-<3826> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# TWD67 / TM2 zone 119
-<3827> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <>
-# TWD67 / TM2 zone 121
-<3828> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <>
-# Hu Tzu Shan / UTM zone 51N
-<3829> +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs <>
-# WGS 84 / PDC Mercator
-<3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# Pulkovo 1942(58) / Gauss-Kruger zone 2
-<3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 2
-<3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 3
-<3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 4
-<3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3
-<3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4
-<3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9
-<3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10
-<3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6
-<3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7
-<3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8
-<3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942(58) / Stereo70
-<3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <>
-# SWEREF99 / RT90 7.5 gon V emulation
-<3845> +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 / RT90 5 gon V emulation
-<3846> +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 / RT90 2.5 gon V emulation
-<3847> +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 / RT90 0 gon emulation
-<3848> +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 / RT90 2.5 gon O emulation
-<3849> +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SWEREF99 / RT90 5 gon O emulation
-<3850> +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NZGD2000 / NZCS2000
-<3851> +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RSRGD2000 / DGLC2000
-<3852> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# County ST74
-<3854> +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# WGS 84 / Pseudo-Mercator
-<3857> +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 <>
-# IGRS / UTM zone 37N
-<3890> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGRS / UTM zone 38N
-<3891> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# IGRS / UTM zone 39N
-<3892> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ED50 / Iraq National Grid
-<3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# MGI 1901 / Balkans zone 5
-<3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# MGI 1901 / Balkans zone 6
-<3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# MGI 1901 / Balkans zone 7
-<3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# MGI 1901 / Balkans zone 8
-<3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# MGI 1901 / Slovenia Grid
-<3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# MGI 1901 / Slovene National Grid
-<3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +no_defs <>
-# Puerto Rico / UTM zone 20N
-<3920> +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC42
-<3942> +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC43
-<3943> +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC44
-<3944> +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC45
-<3945> +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC46
-<3946> +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC47
-<3947> +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC48
-<3948> +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC49
-<3949> +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGF93 / CC50
-<3950> +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Virginia Lambert
-<3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Virginia Lambert
-<3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(NSRS2007) / Virginia Lambert
-<3970> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# WGS 84 / NSIDC EASE-Grid North
-# Unable to translate coordinate system EPSG:3973 into PROJ.4 format.
-#
-# WGS 84 / NSIDC EASE-Grid South
-# Unable to translate coordinate system EPSG:3974 into PROJ.4 format.
-#
-# WGS 84 / NSIDC EASE-Grid Global
-<3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / NSIDC Sea Ice Polar Stereographic South
-<3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# NAD83 / Canada Atlas Lambert
-<3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(CSRS) / Canada Atlas Lambert
-<3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Katanga 1955 / Katanga Lambert
-<3985> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga Gauss zone A
-<3986> +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga Gauss zone B
-<3987> +proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga Gauss zone C
-<3988> +proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Katanga 1955 / Katanga Gauss zone D
-<3989> +proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <>
-# Puerto Rico State Plane CS of 1927
-<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <>
-# Puerto Rico / St. Croix
-<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <>
-# Guam 1963 / Guam SPCS
-# Unable to translate coordinate system EPSG:3993 into PROJ.4 format.
-#
-# WGS 84 / Mercator 41
-<3994> +proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / Arctic Polar Stereographic
-<3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / IBCAO Polar Stereographic
-<3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / Dubai Local TM
-<3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# MOLDREF99 / Moldova TM
-<4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs <>
-# WGS 84 / TMzn35N
-<4037> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / TMzn36N
-<4038> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 12
-<4048> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 14
-<4049> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 16
-<4050> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 18
-<4051> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 20
-<4056> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 22
-<4057> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 24
-<4058> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 26
-<4059> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / Congo TM zone 28
-<4060> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / UTM zone 33S
-<4061> +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / UTM zone 34S
-<4062> +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# RGRDC 2005 / UTM zone 35S
-<4063> +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Chua / UTM zone 23S
-<4071> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <>
-# REGCAN95 / UTM zone 27N
-<4082> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# REGCAN95 / UTM zone 28N
-<4083> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# WGS 84 / World Equidistant Cylindrical
-# Unable to translate coordinate system EPSG:4087 into PROJ.4 format.
-#
-# World Equidistant Cylindrical (Sphere)
-# Unable to translate coordinate system EPSG:4088 into PROJ.4 format.
-#
-# EPSG topocentric example A
-# Unable to translate coordinate system EPSG:5819 into PROJ.4 format.
-#
-# EPSG topocentric example B
-# Unable to translate coordinate system EPSG:5820 into PROJ.4 format.
-#
-# EPSG vertical perspective example
-# Unable to translate coordinate system EPSG:5821 into PROJ.4 format.
-#
-# Pulkovo 1995 / Gauss-Kruger zone 4
-<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 5
-<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 6
-<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 7
-<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 8
-<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 9
-<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 10
-<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 11
-<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 12
-<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 13
-<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 14
-<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 15
-<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 16
-<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 17
-<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 18
-<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 19
-<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 20
-<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 21
-<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 22
-<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 23
-<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 24
-<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 25
-<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 26
-<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 27
-<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 28
-<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 29
-<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 30
-<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 31
-<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 32
-<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 4N (deprecated)
-<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 5N (deprecated)
-<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 6N (deprecated)
-<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 7N (deprecated)
-<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 8N (deprecated)
-<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 9N (deprecated)
-<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 10N (deprecated)
-<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 11N (deprecated)
-<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 12N (deprecated)
-<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 13N (deprecated)
-<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 14N (deprecated)
-<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 15N (deprecated)
-<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 16N (deprecated)
-<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 17N (deprecated)
-<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 18N (deprecated)
-<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 19N (deprecated)
-<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 20N (deprecated)
-<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 21N (deprecated)
-<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 22N (deprecated)
-<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 23N (deprecated)
-<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 24N (deprecated)
-<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 25N (deprecated)
-<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 26N (deprecated)
-<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 27N (deprecated)
-<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 28N (deprecated)
-<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 29N (deprecated)
-<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 30N (deprecated)
-<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 31N (deprecated)
-<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 32N (deprecated)
-<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <>
-# Adindan / UTM zone 35N
-<20135> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <>
-# Adindan / UTM zone 36N
-<20136> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <>
-# Adindan / UTM zone 37N
-<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <>
-# Adindan / UTM zone 38N
-<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <>
-# AGD66 / AMG zone 48
-<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 49
-<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 50
-<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 51
-<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 52
-<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 53
-<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 54
-<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 55
-<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 56
-<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 57
-<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD66 / AMG zone 58
-<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 48
-<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 49
-<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 50
-<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 51
-<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 52
-<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 53
-<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 54
-<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 55
-<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 56
-<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 57
-<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <>
-# AGD84 / AMG zone 58
-<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <>
-# Ain el Abd / UTM zone 36N
-<20436> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / UTM zone 37N
-<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / UTM zone 38N
-<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / UTM zone 39N
-<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / UTM zone 40N
-<20440> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <>
-# Ain el Abd / Bahrain Grid
-<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <>
-# Afgooye / UTM zone 38N
-<20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <>
-# Afgooye / UTM zone 39N
-<20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <>
-# Lisbon (Lisbon) / Portuguese National Grid
-<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs <>
-# Lisbon (Lisbon) / Portuguese Grid
-<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs <>
-# Aratu / UTM zone 22S
-<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <>
-# Aratu / UTM zone 23S
-<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <>
-# Aratu / UTM zone 24S
-<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <>
-# Arc 1950 / UTM zone 34S
-<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Arc 1950 / UTM zone 35S
-<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Arc 1950 / UTM zone 36S
-<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Arc 1960 / UTM zone 35S
-<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs <>
-# Arc 1960 / UTM zone 36S
-<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs <>
-# Arc 1960 / UTM zone 37S
-<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs <>
-# Arc 1960 / UTM zone 35N
-<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <>
-# Arc 1960 / UTM zone 36N
-<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <>
-# Arc 1960 / UTM zone 37N
-<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <>
-# Batavia (Jakarta) / NEIEZ (deprecated)
-<21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <>
-# Batavia / UTM zone 48S
-<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs <>
-# Batavia / UTM zone 49S
-<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs <>
-# Batavia / UTM zone 50S
-<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <>
-# Barbados 1938 / British West Indies Grid
-<21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <>
-# Barbados 1938 / Barbados National Grid
-<21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 13
-<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 14
-<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 15
-<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 16
-<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 17
-<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 18
-<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 19
-<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 20
-<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 21
-<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 22
-<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 23
-<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 75E
-<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 81E
-<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 87E
-<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 93E
-<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 99E
-<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 105E
-<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 111E
-<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 117E
-<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 123E
-<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 129E
-<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 135E
-<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 13N (deprecated)
-<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 14N (deprecated)
-<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 15N (deprecated)
-<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 16N (deprecated)
-<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 17N (deprecated)
-<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 18N (deprecated)
-<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 19N (deprecated)
-<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 20N (deprecated)
-<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 21N (deprecated)
-<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 22N (deprecated)
-<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Beijing 1954 / Gauss-Kruger 23N (deprecated)
-<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Belge 1950 (Brussels) / Belge Lambert 50
-<21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs <>
-# Bern 1898 (Bern) / LV03C
-<21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs <>
-# CH1903 / LV03
-<21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <>
-# CH1903 / LV03C-G
-<21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / UTM zone 17N (deprecated)
-<21817> +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / UTM zone 18N
-<21818> +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia West zone (deprecated)
-<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia Bogota zone (deprecated)
-<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia East Central zone (deprecated)
-<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia East (deprecated)
-<21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia West zone
-<21896> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia Bogota zone
-<21897> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia East Central zone
-<21898> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Bogota 1975 / Colombia East
-<21899> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <>
-# Camacupa / UTM zone 32S
-<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs <>
-# Camacupa / UTM zone 33S
-<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs <>
-# Camacupa / TM 11.30 SE
-<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# Camacupa / TM 12 SE
-<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 1
-<22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 2
-<22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 3
-<22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 4
-<22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 5
-<22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 6
-<22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 98 / Argentina 7
-<22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# POSGAR 94 / Argentina 1
-<22181> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 2
-<22182> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 3
-<22183> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 4
-<22184> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 5
-<22185> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 6
-<22186> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# POSGAR 94 / Argentina 7
-<22187> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Campo Inchauspe / Argentina 1
-<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 2
-<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 3
-<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 4
-<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 5
-<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 6
-<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Campo Inchauspe / Argentina 7
-<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Cape / UTM zone 34S
-<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Cape / UTM zone 35S
-<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Cape / UTM zone 36S
-<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <>
-# Cape / Lo15
-# Unable to translate coordinate system EPSG:22275 into PROJ.4 format.
-#
-# Cape / Lo17
-# Unable to translate coordinate system EPSG:22277 into PROJ.4 format.
-#
-# Cape / Lo19
-# Unable to translate coordinate system EPSG:22279 into PROJ.4 format.
-#
-# Cape / Lo21
-# Unable to translate coordinate system EPSG:22281 into PROJ.4 format.
-#
-# Cape / Lo23
-# Unable to translate coordinate system EPSG:22283 into PROJ.4 format.
-#
-# Cape / Lo25
-# Unable to translate coordinate system EPSG:22285 into PROJ.4 format.
-#
-# Cape / Lo27
-# Unable to translate coordinate system EPSG:22287 into PROJ.4 format.
-#
-# Cape / Lo29
-# Unable to translate coordinate system EPSG:22289 into PROJ.4 format.
-#
-# Cape / Lo31
-# Unable to translate coordinate system EPSG:22291 into PROJ.4 format.
-#
-# Cape / Lo33
-# Unable to translate coordinate system EPSG:22293 into PROJ.4 format.
-#
-# Carthage (Paris) / Tunisia Mining Grid
-# Unable to translate coordinate system EPSG:22300 into PROJ.4 format.
-#
-# Carthage / UTM zone 32N
-<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <>
-# Carthage / Nord Tunisie
-<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <>
-# Carthage / Sud Tunisie
-<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <>
-# Corrego Alegre / UTM zone 21S
-<22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <>
-# Corrego Alegre / UTM zone 22S
-<22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <>
-# Corrego Alegre / UTM zone 23S
-<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <>
-# Corrego Alegre / UTM zone 24S
-<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <>
-# Corrego Alegre / UTM zone 25S
-<22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <>
-# Deir ez Zor / Levant Zone
-<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Deir ez Zor / Syria Lambert
-<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Deir ez Zor / Levant Stereographic
-<22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Douala / UTM zone 32N (deprecated)
-<22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Egypt 1907 / Blue Belt
-<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs <>
-# Egypt 1907 / Red Belt
-<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs <>
-# Egypt 1907 / Purple Belt
-<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs <>
-# Egypt 1907 / Extended Purple Belt
-<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs <>
-# ED50 / UTM zone 28N
-<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 29N
-<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 30N
-<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 31N
-<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 32N
-<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 33N
-<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 34N
-<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 35N
-<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 36N
-<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 37N
-<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <>
-# ED50 / UTM zone 38N
-<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <>
-# ED50 / TM 0 N
-<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# ED50 / TM 5 NE
-<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <>
-# Fahud / UTM zone 39N
-<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <>
-# Fahud / UTM zone 40N
-<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <>
-# Garoua / UTM zone 33N (deprecated)
-<23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# HD72 / EOV
-<23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 46.2
-<23830> +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 47.1
-<23831> +proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 47.2
-<23832> +proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 48.1
-<23833> +proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 48.2
-<23834> +proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 49.1
-<23835> +proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 49.2
-<23836> +proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 50.1
-<23837> +proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 50.2
-<23838> +proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 51.1
-<23839> +proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 51.2
-<23840> +proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 52.1
-<23841> +proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 52.2
-<23842> +proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 53.1
-<23843> +proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 53.2
-<23844> +proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / Indonesia TM-3 zone 54.1
-<23845> +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ID74 / UTM zone 46N
-<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 47N
-<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 48N
-<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 49N
-<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 50N
-<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 51N
-<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 52N
-<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 53N (deprecated)
-<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# DGN95 / UTM zone 46N
-<23866> +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 47N
-<23867> +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 48N
-<23868> +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 49N
-<23869> +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 50N
-<23870> +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 51N
-<23871> +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 52N
-<23872> +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 47S
-<23877> +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 48S
-<23878> +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 49S
-<23879> +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 50S
-<23880> +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 51S
-<23881> +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 52S
-<23882> +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 53S
-<23883> +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# DGN95 / UTM zone 54S
-<23884> +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# ID74 / UTM zone 46S (deprecated)
-<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 47S
-<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 48S
-<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 49S
-<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 50S
-<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 51S
-<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 52S
-<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 53S
-<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# ID74 / UTM zone 54S
-<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <>
-# Indian 1954 / UTM zone 46N
-<23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <>
-# Indian 1954 / UTM zone 47N
-<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <>
-# Indian 1954 / UTM zone 48N
-<23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <>
-# Indian 1975 / UTM zone 47N
-<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Indian 1975 / UTM zone 48N
-<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Jamaica 1875 / Jamaica (Old Grid)
-<24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs <>
-# JAD69 / Jamaica National Grid
-<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs <>
-# Kalianpur 1937 / UTM zone 45N
-<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Kalianpur 1937 / UTM zone 46N
-<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Kalianpur 1962 / UTM zone 41N
-<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <>
-# Kalianpur 1962 / UTM zone 42N
-<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <>
-# Kalianpur 1962 / UTM zone 43N
-<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 42N
-<24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 43N
-<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 44N
-<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 45N
-<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 46N
-<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / UTM zone 47N
-<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1880 / India zone 0
-<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1880 / India zone I
-<24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1880 / India zone IIa
-<24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1880 / India zone III
-<24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1880 / India zone IV
-<24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1937 / India zone IIb
-<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <>
-# Kalianpur 1962 / India zone I
-<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <>
-# Kalianpur 1962 / India zone IIa
-<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <>
-# Kalianpur 1975 / India zone I
-<24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / India zone IIa
-<24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / India zone IIb
-<24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1975 / India zone III
-<24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kalianpur 1880 / India zone IIb
-<24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <>
-# Kalianpur 1975 / India zone IV
-<24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <>
-# Kertau 1968 / Singapore Grid
-<24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <>
-# Kertau 1968 / UTM zone 47N
-<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <>
-# Kertau 1968 / UTM zone 48N
-<24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <>
-# Kertau / R.S.O. Malaya (ch) (deprecated)
-<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <>
-# KOC Lambert
-<24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs <>
-# La Canoa / UTM zone 18N
-<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <>
-# La Canoa / UTM zone 19N
-<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <>
-# La Canoa / UTM zone 20N
-<24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <>
-# PSAD56 / UTM zone 17N
-<24817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 18N
-<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 19N
-<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 20N
-<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 21N
-<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 17S
-<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 18S
-<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 19S
-<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 20S
-<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 21S
-<24881> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / UTM zone 22S
-<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <>
-# PSAD56 / Peru west zone
-<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs <>
-# PSAD56 / Peru central zone
-<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs <>
-# PSAD56 / Peru east zone
-<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs <>
-# Leigon / Ghana Metre Grid
-<25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs <>
-# Lome / UTM zone 31N
-<25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Luzon 1911 / Philippines zone I
-<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# Luzon 1911 / Philippines zone II
-<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# Luzon 1911 / Philippines zone III
-<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# Luzon 1911 / Philippines zone IV
-<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# Luzon 1911 / Philippines zone V
-<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <>
-# Makassar (Jakarta) / NEIEZ (deprecated)
-<25700> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <>
-# ETRS89 / UTM zone 28N
-<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 29N
-<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 30N
-<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 31N
-<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 32N
-<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 33N
-<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 34N
-<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 35N
-<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 36N
-<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 37N
-<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / UTM zone 38N
-<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <>
-# ETRS89 / TM Baltic93
-<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# Malongo 1987 / UTM zone 32S
-<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <>
-# Merchich / Nord Maroc
-<26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <>
-# Merchich / Sud Maroc
-<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <>
-# Merchich / Sahara (deprecated)
-<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <>
-# Merchich / Sahara Nord
-<26194> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <>
-# Merchich / Sahara Sud
-<26195> +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <>
-# Massawa / UTM zone 37N
-<26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs <>
-# Minna / UTM zone 31N
-<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <>
-# Minna / UTM zone 32N
-<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <>
-# Minna / Nigeria West Belt
-<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# Minna / Nigeria Mid Belt
-<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# Minna / Nigeria East Belt
-<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs <>
-# Mhast / UTM zone 32S (deprecated)
-<26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs <>
-# Monte Mario (Rome) / Italy zone 1 (deprecated)
-<26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <>
-# Monte Mario (Rome) / Italy zone 2 (deprecated)
-<26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <>
-# M'poraloko / UTM zone 32N
-<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# M'poraloko / UTM zone 32S
-<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# NAD27 / UTM zone 1N
-<26701> +proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 2N
-<26702> +proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 3N
-<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 4N
-<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 5N
-<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 6N
-<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 7N
-<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 8N
-<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 9N
-<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 10N
-<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 11N
-<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 12N
-<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 13N
-<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 14N
-<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 15N
-<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 16N
-<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 17N
-<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 18N
-<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 19N
-<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 20N
-<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 21N
-<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / UTM zone 22N
-<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Alabama East
-<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alabama West
-<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 1
-<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 2
-<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 3
-<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 4
-<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 5
-<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 6
-<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 7
-<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 8
-<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 9
-<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Alaska zone 10
-<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone I
-<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone II
-<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone III
-<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone IV
-<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone V
-<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone VI
-<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone VII (deprecated)
-<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Arizona East
-<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Arizona Central
-<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Arizona West
-<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Arkansas North
-<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Arkansas South
-<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Colorado North
-<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Colorado Central
-<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Colorado South
-<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Connecticut
-<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Delaware
-<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Florida East
-<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Florida West
-<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Florida North
-<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Georgia East
-<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Georgia West
-<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Idaho East
-<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Idaho Central
-<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Idaho West
-<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Illinois East
-<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Illinois West
-<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Indiana East
-<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Indiana West
-<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Iowa North
-<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Iowa South
-<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Kansas North
-<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Kansas South
-<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Kentucky North
-<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Kentucky South
-<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Louisiana North
-<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Louisiana South
-<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Maine East
-<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Maine West
-<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Maryland
-<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Massachusetts Mainland
-<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Massachusetts Island
-<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Minnesota North
-<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Minnesota Central
-<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Minnesota South
-<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Mississippi East
-<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Mississippi West
-<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Missouri East
-<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Missouri Central
-<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Missouri West
-<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / California zone VII
-<26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan East
-<26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan Old Central
-<26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan West
-<26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan North
-<26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan Central
-<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD Michigan / Michigan South
-<26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <>
-# NAD83 / Maine East (ftUS) (deprecated)
-<26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maine West (ftUS) (deprecated)
-<26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota North (ftUS) (deprecated)
-<26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota Central (ftUS) (deprecated)
-<26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota South (ftUS) (deprecated)
-<26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Nebraska (ftUS) (deprecated)
-<26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / West Virginia North (ftUS) (deprecated)
-<26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / West Virginia South (ftUS) (deprecated)
-<26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83(HARN) / Maine East (ftUS) (deprecated)
-<26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Maine West (ftUS) (deprecated)
-<26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota North (ftUS) (deprecated)
-<26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota Central (ftUS) (deprecated)
-<26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Minnesota South (ftUS) (deprecated)
-<26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / Nebraska (ftUS) (deprecated)
-<26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / West Virginia North (ftUS) (deprecated)
-<26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(HARN) / West Virginia South (ftUS) (deprecated)
-<26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine East (ftUS) (deprecated)
-<26836> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Maine West (ftUS) (deprecated)
-<26837> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated)
-<26841> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated)
-<26842> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated)
-<26843> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / Nebraska (ftUS) (deprecated)
-<26844> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated)
-<26845> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated)
-<26846> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD83 / Maine East (ftUS)
-<26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Maine West (ftUS)
-<26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Minnesota North (ftUS)
-<26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Minnesota Central (ftUS)
-<26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Minnesota South (ftUS)
-<26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / Nebraska (ftUS)
-<26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / West Virginia North (ftUS)
-<26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / West Virginia South (ftUS)
-<26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83(HARN) / Maine East (ftUS)
-<26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Maine West (ftUS)
-<26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Minnesota North (ftUS)
-<26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Minnesota Central (ftUS)
-<26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Minnesota South (ftUS)
-<26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / Nebraska (ftUS)
-<26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / West Virginia North (ftUS)
-<26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(HARN) / West Virginia South (ftUS)
-<26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Maine East (ftUS)
-<26863> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Maine West (ftUS)
-<26864> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Minnesota North (ftUS)
-<26865> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Minnesota Central (ftUS)
-<26866> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Minnesota South (ftUS)
-<26867> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / Nebraska (ftUS)
-<26868> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / West Virginia North (ftUS)
-<26869> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(NSRS2007) / West Virginia South (ftUS)
-<26870> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <>
-# NAD83(CSRS) / MTM zone 11
-<26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 12
-<26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 13
-<26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 14
-<26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 15
-<26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 16
-<26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 17
-<26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 1
-<26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83(CSRS) / MTM zone 2
-<26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# NAD83 / UTM zone 1N
-<26901> +proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 2N
-<26902> +proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 3N
-<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 4N
-<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 5N
-<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 6N
-<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 7N
-<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 8N
-<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 9N
-<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 10N
-<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 11N
-<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 12N
-<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 13N
-<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 14N
-<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 15N
-<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 16N
-<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 17N
-<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 18N
-<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 19N
-<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 20N
-<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 21N
-<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 22N
-<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / UTM zone 23N
-<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alabama East
-<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alabama West
-<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 1
-<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 2
-<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 3
-<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 4
-<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 5
-<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 6
-<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 7
-<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 8
-<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 9
-<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Alaska zone 10
-<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 1
-<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 2
-<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 3
-<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 4
-<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 5
-<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / California zone 6
-<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Arizona East
-<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Arizona Central
-<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Arizona West
-<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Arkansas North
-<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Arkansas South
-<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Colorado North
-<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Colorado Central
-<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Colorado South
-<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Connecticut
-<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Delaware
-<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Florida East
-<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Florida West
-<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Florida North
-<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Hawaii zone 1
-<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Hawaii zone 2
-<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Hawaii zone 3
-<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Hawaii zone 4
-<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Hawaii zone 5
-<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Georgia East
-<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Georgia West
-<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Idaho East
-<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Idaho Central
-<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Idaho West
-<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Illinois East
-<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Illinois West
-<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Indiana East
-<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Indiana West
-<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Iowa North
-<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Iowa South
-<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Kansas North
-<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Kansas South
-<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Kentucky North (deprecated)
-<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Kentucky South
-<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Louisiana North
-<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Louisiana South
-<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maine East
-<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maine West
-<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Maryland
-<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Massachusetts Mainland
-<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Massachusetts Island
-<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Michigan North
-<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Michigan Central
-<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Michigan South
-<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota North
-<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota Central
-<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Minnesota South
-<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Mississippi East
-<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Mississippi West
-<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Missouri East
-<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Missouri Central
-<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Missouri West
-<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# Nahrwan 1967 / UTM zone 37N
-<27037> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <>
-# Nahrwan 1967 / UTM zone 38N
-<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <>
-# Nahrwan 1967 / UTM zone 39N
-<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <>
-# Nahrwan 1967 / UTM zone 40N
-<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <>
-# Naparima 1972 / UTM zone 20N
-<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <>
-# NZGD49 / New Zealand Map Grid
-<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Mount Eden Circuit
-<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Bay of Plenty Circuit
-<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Poverty Bay Circuit
-<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Hawkes Bay Circuit
-<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Taranaki Circuit
-<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Tuhirangi Circuit
-<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Wanganui Circuit
-<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Wairarapa Circuit
-<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Wellington Circuit
-<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Collingwood Circuit
-<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Nelson Circuit
-<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Karamea Circuit
-<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Buller Circuit
-<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Grey Circuit
-<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Amuri Circuit
-<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Marlborough Circuit
-<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Hokitika Circuit
-<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Okarito Circuit
-<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Jacksons Bay Circuit
-<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Mount Pleasant Circuit
-<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Gawler Circuit
-<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Timaru Circuit
-<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Lindis Peak Circuit
-<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Mount Nicholas Circuit
-<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Mount York Circuit
-<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Observation Point Circuit
-<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / North Taieri Circuit
-<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / Bluff Circuit
-<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / UTM zone 58S
-<27258> +proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / UTM zone 59S
-<27259> +proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / UTM zone 60S
-<27260> +proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <>
-# NZGD49 / North Island Grid
-<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <>
-# NZGD49 / South Island Grid
-<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <>
-# NGO 1948 (Oslo) / NGO zone I
-<27391> +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone II
-<27392> +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone III
-<27393> +proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone IV
-<27394> +proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone V
-<27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone VI
-<27396> +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone VII
-<27397> +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# NGO 1948 (Oslo) / NGO zone VIII
-<27398> +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <>
-# Datum 73 / UTM zone 29N
-<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <>
-# Datum 73 / Modified Portuguese Grid (deprecated)
-<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <>
-# Datum 73 / Modified Portuguese Grid
-<27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <>
-# unnamed
-<27500> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs <>
-# NTF (Paris) / Lambert Nord France
-<27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert Centre France
-<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert Sud France
-<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert Corse
-<27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert zone I
-<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert zone II
-<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert zone III
-<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Lambert zone IV
-<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / France I (deprecated)
-<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / France II (deprecated)
-<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / France III (deprecated)
-<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / France IV (deprecated)
-<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Nord France (deprecated)
-<27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Centre France (deprecated)
-<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Sud France (deprecated)
-<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# NTF (Paris) / Corse (deprecated)
-<27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <>
-# OSGB 1936 / British National Grid
-<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <>
-# Palestine 1923 / Palestine Grid
-<28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <>
-# Palestine 1923 / Palestine Belt
-<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <>
-# Palestine 1923 / Israeli CS Grid
-<28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <>
-# Pointe Noire / UTM zone 32S
-<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# GDA94 / MGA zone 48
-<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 49
-<28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 50
-<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 51
-<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 52
-<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 53
-<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 54
-<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 55
-<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 56
-<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 57
-<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# GDA94 / MGA zone 58
-<28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated)
-<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated)
-<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 4
-<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 5
-<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 6
-<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 7
-<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 8
-<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 9
-<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 10
-<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 11
-<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 12
-<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 13
-<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 14
-<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 15
-<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 16
-<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 17
-<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 18
-<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 19
-<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 20
-<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 21
-<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 22
-<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 23
-<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 24
-<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 25
-<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 26
-<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 27
-<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 28
-<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 29
-<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 30
-<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 31
-<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 32
-<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 2N (deprecated)
-<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 3N (deprecated)
-<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 4N (deprecated)
-<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 5N (deprecated)
-<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 6N (deprecated)
-<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 7N (deprecated)
-<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 8N (deprecated)
-<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 9N (deprecated)
-<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 10N (deprecated)
-<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 11N (deprecated)
-<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 12N (deprecated)
-<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 13N (deprecated)
-<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 14N (deprecated)
-<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 15N (deprecated)
-<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 16N (deprecated)
-<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 17N (deprecated)
-<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 18N (deprecated)
-<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 19N (deprecated)
-<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 20N (deprecated)
-<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 21N (deprecated)
-<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 22N (deprecated)
-<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 23N (deprecated)
-<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 24N (deprecated)
-<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 25N (deprecated)
-<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 26N (deprecated)
-<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 27N (deprecated)
-<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 28N (deprecated)
-<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 29N (deprecated)
-<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 30N (deprecated)
-<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 31N (deprecated)
-<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 32N (deprecated)
-<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <>
-# Qatar 1974 / Qatar National Grid
-<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs <>
-# Amersfoort / RD Old
-<28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Amersfoort / RD New
-<28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs <>
-# SAD69 / Brazil Polyconic (deprecated)
-<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / Brazil Polyconic
-<29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 18N (deprecated)
-<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 19N (deprecated)
-<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 20N (deprecated)
-<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 21N (deprecated)
-<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 22N (deprecated)
-<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 18N
-<29168> +proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 19N
-<29169> +proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 20N
-<29170> +proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 21N
-<29171> +proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 22N
-<29172> +proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 17S (deprecated)
-<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 18S (deprecated)
-<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 19S (deprecated)
-<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 20S (deprecated)
-<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 21S (deprecated)
-<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 22S (deprecated)
-<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 23S (deprecated)
-<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 24S (deprecated)
-<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 25S (deprecated)
-<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs <>
-# SAD69 / UTM zone 17S
-<29187> +proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 18S
-<29188> +proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 19S
-<29189> +proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 20S
-<29190> +proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 21S
-<29191> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 22S
-<29192> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 23S
-<29193> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 24S
-<29194> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <>
-# SAD69 / UTM zone 25S
-<29195> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <>
-# Sapper Hill 1943 / UTM zone 20S
-<29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <>
-# Sapper Hill 1943 / UTM zone 21S
-<29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <>
-# Schwarzeck / UTM zone 33S
-<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs <>
-# Schwarzeck / Lo22/11
-# Unable to translate coordinate system EPSG:29371 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/13
-# Unable to translate coordinate system EPSG:29373 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/15
-# Unable to translate coordinate system EPSG:29375 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/17
-# Unable to translate coordinate system EPSG:29377 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/19
-# Unable to translate coordinate system EPSG:29379 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/21
-# Unable to translate coordinate system EPSG:29381 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/23
-# Unable to translate coordinate system EPSG:29383 into PROJ.4 format.
-#
-# Schwarzeck / Lo22/25
-# Unable to translate coordinate system EPSG:29385 into PROJ.4 format.
-#
-# Sudan / UTM zone 35N (deprecated)
-<29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Sudan / UTM zone 36N (deprecated)
-<29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Tananarive (Paris) / Laborde Grid (deprecated)
-<29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <>
-# Tananarive (Paris) / Laborde Grid
-# Unable to translate coordinate system EPSG:29701 into PROJ.4 format.
-#
-# Tananarive (Paris) / Laborde Grid approximation
-<29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <>
-# Tananarive / UTM zone 38S
-<29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <>
-# Tananarive / UTM zone 39S
-<29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <>
-# Timbalai 1948 / UTM zone 49N
-<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs <>
-# Timbalai 1948 / UTM zone 50N
-<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs <>
-# Timbalai 1948 / RSO Borneo (ch)
-<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs <>
-# Timbalai 1948 / RSO Borneo (ft)
-<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs <>
-# Timbalai 1948 / RSO Borneo (m)
-<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs <>
-# TM65 / Irish National Grid (deprecated)
-<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <>
-# OSNI 1952 / Irish National Grid
-<29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <>
-# TM65 / Irish Grid
-<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <>
-# TM75 / Irish Grid
-<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS I
-<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS II
-<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS III
-<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS IV
-<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS V
-<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS VI
-<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS VII
-<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS VIII
-<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS IX
-<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS X
-<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XI
-<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XII
-<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIII
-<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIV
-<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XV
-<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVI
-<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVII
-<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVIII
-<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIX
-<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Trinidad 1903 / Trinidad Grid
-<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <>
-# TC(1948) / UTM zone 39N
-<30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs <>
-# TC(1948) / UTM zone 40N
-<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs <>
-# Voirol 1875 / Nord Algerie (ancienne)
-<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <>
-# Voirol 1875 / Sud Algerie (ancienne)
-<30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <>
-# Voirol 1879 / Nord Algerie (ancienne)
-<30493> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Voirol 1879 / Sud Algerie (ancienne)
-<30494> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Nord Sahara 1959 / UTM zone 29N
-<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <>
-# Nord Sahara 1959 / UTM zone 30N
-<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <>
-# Nord Sahara 1959 / UTM zone 31N
-<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <>
-# Nord Sahara 1959 / UTM zone 32N
-<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <>
-# Nord Sahara 1959 / Voirol Unifie Nord
-<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <>
-# Nord Sahara 1959 / Voirol Unifie Sud
-<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <>
-# RT38 2.5 gon W (deprecated)
-<30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <>
-# Yoff / UTM zone 28N
-<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs <>
-# Zanderij / UTM zone 21N
-<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <>
-# Zanderij / TM 54 NW
-<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <>
-# Zanderij / Suriname Old TM
-<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <>
-# Zanderij / Suriname TM
-<31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <>
-# MGI (Ferro) / Austria GK West Zone
-<31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria GK Central Zone
-<31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria GK East Zone
-<31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI / Austria GK West
-<31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria GK Central
-<31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria GK East
-<31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria GK M28
-<31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria GK M31
-<31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria GK M34
-<31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / 3-degree Gauss zone 5 (deprecated)
-<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / 3-degree Gauss zone 6 (deprecated)
-<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / 3-degree Gauss zone 7 (deprecated)
-<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / 3-degree Gauss zone 8 (deprecated)
-<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Balkans zone 5 (deprecated)
-<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Balkans zone 6 (deprecated)
-<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Balkans zone 7 (deprecated)
-<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Balkans zone 8 (deprecated)
-<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Balkans zone 8 (deprecated)
-<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI (Ferro) / Austria West Zone
-<31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria Central Zone
-<31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria East Zone
-<31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI / Austria M28
-<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria M31
-<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria M34
-<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria Lambert
-<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI (Ferro) / M28
-<31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / M31
-<31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / M34
-<31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria West Zone (deprecated)
-<31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria Central Zone (deprecated)
-<31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI (Ferro) / Austria East Zone (deprecated)
-<31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <>
-# MGI / M28 (deprecated)
-<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / M31 (deprecated)
-<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / M34 (deprecated)
-<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# MGI / Austria Lambert (deprecated)
-<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <>
-# Belge 1972 / Belge Lambert 72
-<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <>
-# Belge 1972 / Belgian Lambert 72
-<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <>
-# DHDN / 3-degree Gauss zone 1 (deprecated)
-<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss zone 2 (deprecated)
-<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss zone 3 (deprecated)
-<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss zone 4 (deprecated)
-<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss zone 5 (deprecated)
-<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss-Kruger zone 2
-<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss-Kruger zone 3
-<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss-Kruger zone 4
-<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# DHDN / 3-degree Gauss-Kruger zone 5
-<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
-# Conakry 1905 / UTM zone 28N
-<31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <>
-# Conakry 1905 / UTM zone 29N
-<31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <>
-# Dealul Piscului 1930 / Stereo 33
-<31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs <>
-# Dealul Piscului 1970/ Stereo 70 (deprecated)
-<31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <>
-# NGN / UTM zone 38N
-<31838> +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <>
-# NGN / UTM zone 39N
-<31839> +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <>
-# KUDAMS / KTM (deprecated)
-<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# KUDAMS / KTM
-<31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 11N
-<31965> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 12N
-<31966> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 13N
-<31967> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 14N
-<31968> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 15N
-<31969> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 16N
-<31970> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 17N
-<31971> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 18N
-<31972> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 19N
-<31973> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 20N
-<31974> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 21N
-<31975> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 22N
-<31976> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 17S
-<31977> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 18S
-<31978> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 19S
-<31979> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 20S
-<31980> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 21S
-<31981> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 22S
-<31982> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 23S
-<31983> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 24S
-<31984> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 2000 / UTM zone 25S
-<31985> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 17N
-<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 18N
-<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 19N
-<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 20N
-<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 21N
-<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 22N
-<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 17S
-<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 18S
-<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 19S
-<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 20S
-<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 21S
-<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 22S
-<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 23S
-<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 24S
-<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# SIRGAS 1995 / UTM zone 25S
-<32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
-# NAD27 / Montana North
-<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Montana Central
-<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Montana South
-<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Nebraska North
-<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Nebraska South
-<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Nevada East
-<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Nevada Central
-<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Nevada West
-<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New Hampshire
-<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New Jersey
-<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New Mexico East
-<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New Mexico Central
-<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New Mexico West
-<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New York East
-<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New York Central
-<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New York West
-<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / New York Long Island
-<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / North Carolina
-<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / North Dakota North
-<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / North Dakota South
-<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Ohio North
-<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Ohio South
-<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Oklahoma North
-<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Oklahoma South
-<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Oregon North
-<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Oregon South
-<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Pennsylvania North
-<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Pennsylvania South
-<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Rhode Island
-<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / South Carolina North
-<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / South Carolina South
-<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / South Dakota North
-<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / South Dakota South
-<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Tennessee (deprecated)
-<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Texas North
-<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Texas North Central
-<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Texas Central
-<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Texas South Central
-<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Texas South
-<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Utah North
-<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Utah Central
-<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Utah South
-<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Vermont
-<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Virginia North
-<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Virginia South
-<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Washington North
-<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Washington South
-<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / West Virginia North
-<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / West Virginia South
-<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wisconsin North
-<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wisconsin Central
-<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wisconsin South
-<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wyoming East
-<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wyoming East Central
-<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wyoming West Central
-<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Wyoming West
-<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / Guatemala Norte
-<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Guatemala Sur
-<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / BLM 14N (ftUS)
-<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 15N (ftUS)
-<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 16N (ftUS)
-<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 17N (ftUS)
-<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 14N (feet) (deprecated)
-<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 15N (feet) (deprecated)
-<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 16N (feet) (deprecated)
-<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / BLM 17N (feet) (deprecated)
-<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD27 / MTM zone 1
-<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTM zone 2
-<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTM zone 3
-<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTM zone 4
-<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTM zone 5
-<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / MTM zone 6
-<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Quebec Lambert
-<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <>
-# NAD27 / Louisiana Offshore
-<32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <>
-# NAD83 / Montana
-<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Nebraska
-<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Nevada East
-<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Nevada Central
-<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Nevada West
-<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New Hampshire
-<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New Jersey
-<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New Mexico East
-<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New Mexico Central
-<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New Mexico West
-<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New York East
-<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New York Central
-<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New York West
-<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / New York Long Island
-<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / North Carolina
-<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / North Dakota North
-<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / North Dakota South
-<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Ohio North
-<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Ohio South
-<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Oklahoma North
-<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Oklahoma South
-<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Oregon North
-<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Oregon South
-<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Pennsylvania North
-<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Pennsylvania South
-<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Rhode Island
-<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / South Carolina
-<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / South Dakota North
-<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / South Dakota South
-<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Tennessee
-<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas North
-<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas North Central
-<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas Central
-<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas South Central
-<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Texas South
-<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Utah North
-<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Utah Central
-<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Utah South
-<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Vermont
-<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Virginia North
-<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Virginia South
-<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Washington North
-<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Washington South
-<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / West Virginia North
-<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / West Virginia South
-<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wisconsin North
-<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wisconsin Central
-<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wisconsin South
-<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wyoming East
-<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wyoming East Central
-<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wyoming West Central
-<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Wyoming West
-<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Puerto Rico & Virgin Is.
-<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / BLM 14N (ftUS)
-<32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / BLM 15N (ftUS)
-<32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / BLM 16N (ftUS)
-<32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / BLM 17N (ftUS)
-<32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <>
-# NAD83 / SCoPQ zone 2
-<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 1
-<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 2
-<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 3
-<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 4
-<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 5
-<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 6
-<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 7
-<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 8
-<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 9
-<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 10
-<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 11
-<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 12
-<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 13
-<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 14
-<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 15
-<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 16
-<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / MTM zone 17
-<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Quebec Lambert
-<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# NAD83 / Louisiana Offshore
-<32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <>
-# WGS 72 / UTM zone 1N
-<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 2N
-<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 3N
-<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 4N
-<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 5N
-<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 6N
-<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 7N
-<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 8N
-<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 9N
-<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 10N
-<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 11N
-<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 12N
-<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 13N
-<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 14N
-<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 15N
-<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 16N
-<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 17N
-<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 18N
-<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 19N
-<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 20N
-<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 21N
-<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 22N
-<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 23N
-<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 24N
-<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 25N
-<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 26N
-<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 27N
-<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 28N
-<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 29N
-<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 30N
-<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 31N
-<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 32N
-<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 33N
-<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 34N
-<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 35N
-<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 36N
-<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 37N
-<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 38N
-<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 39N
-<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 40N
-<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 41N
-<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 42N
-<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 43N
-<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 44N
-<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 45N
-<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 46N
-<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 47N
-<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 48N
-<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 49N
-<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 50N
-<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 51N
-<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 52N
-<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 53N
-<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 54N
-<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 55N
-<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 56N
-<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 57N
-<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 58N
-<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 59N
-<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 60N
-<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 1S
-<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 2S
-<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 3S
-<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 4S
-<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 5S
-<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 6S
-<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 7S
-<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 8S
-<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 9S
-<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 10S
-<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 11S
-<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 12S
-<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 13S
-<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 14S
-<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 15S
-<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 16S
-<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 17S
-<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 18S
-<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 19S
-<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 20S
-<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 21S
-<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 22S
-<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 23S
-<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 24S
-<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 25S
-<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 26S
-<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 27S
-<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 28S
-<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 29S
-<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 30S
-<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 31S
-<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 32S
-<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 33S
-<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 34S
-<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 35S
-<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 36S
-<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 37S
-<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 38S
-<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 39S
-<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 40S
-<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 41S
-<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 42S
-<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 43S
-<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 44S
-<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 45S
-<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 46S
-<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 47S
-<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 48S
-<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 49S
-<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 50S
-<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 51S
-<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 52S
-<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 53S
-<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 54S
-<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 55S
-<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 56S
-<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 57S
-<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 58S
-<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 59S
-<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72 / UTM zone 60S
-<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs <>
-# WGS 72BE / UTM zone 1N
-<32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 2N
-<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 3N
-<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 4N
-<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 5N
-<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 6N
-<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 7N
-<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 8N
-<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 9N
-<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 10N
-<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 11N
-<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 12N
-<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 13N
-<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 14N
-<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 15N
-<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 16N
-<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 17N
-<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 18N
-<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 19N
-<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 20N
-<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 21N
-<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 22N
-<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 23N
-<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 24N
-<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 25N
-<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 26N
-<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 27N
-<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 28N
-<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 29N
-<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 30N
-<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 31N
-<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 32N
-<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 33N
-<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 34N
-<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 35N
-<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 36N
-<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 37N
-<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 38N
-<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 39N
-<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 40N
-<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 41N
-<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 42N
-<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 43N
-<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 44N
-<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 45N
-<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 46N
-<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 47N
-<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 48N
-<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 49N
-<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 50N
-<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 51N
-<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 52N
-<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 53N
-<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 54N
-<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 55N
-<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 56N
-<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 57N
-<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 58N
-<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 59N
-<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 60N
-<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 1S
-<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 2S
-<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 3S
-<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 4S
-<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 5S
-<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 6S
-<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 7S
-<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 8S
-<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 9S
-<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 10S
-<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 11S
-<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 12S
-<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 13S
-<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 14S
-<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 15S
-<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 16S
-<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 17S
-<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 18S
-<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 19S
-<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 20S
-<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 21S
-<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 22S
-<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 23S
-<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 24S
-<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 25S
-<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 26S
-<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 27S
-<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 28S
-<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 29S
-<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 30S
-<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 31S
-<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 32S
-<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 33S
-<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 34S
-<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 35S
-<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 36S
-<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 37S
-<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 38S
-<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 39S
-<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 40S
-<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 41S
-<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 42S
-<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 43S
-<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 44S
-<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 45S
-<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 46S
-<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 47S
-<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 48S
-<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 49S
-<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 50S
-<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 51S
-<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 52S
-<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 53S
-<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 54S
-<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 55S
-<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 56S
-<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 57S
-<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 58S
-<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 59S
-<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 72BE / UTM zone 60S
-<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <>
-# WGS 84 / UTM grid system (northern hemisphere)
-# Unable to translate coordinate system EPSG:32600 into PROJ.4 format.
-#
-# WGS 84 / UTM zone 1N
-<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 2N
-<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 3N
-<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 4N
-<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 5N
-<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 6N
-<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 7N
-<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 8N
-<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 9N
-<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 10N
-<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 11N
-<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 12N
-<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 13N
-<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 14N
-<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 15N
-<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 16N
-<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 17N
-<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 18N
-<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 19N
-<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 20N
-<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 21N
-<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 22N
-<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 23N
-<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 24N
-<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 25N
-<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 26N
-<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 27N
-<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 28N
-<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 29N
-<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 30N
-<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 31N
-<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 32N
-<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 33N
-<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 34N
-<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 35N
-<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 36N
-<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 37N
-<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 38N
-<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 39N
-<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 40N
-<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 41N
-<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 42N
-<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 43N
-<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 44N
-<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 45N
-<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 46N
-<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 47N
-<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 48N
-<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 49N
-<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 50N
-<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 51N
-<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 52N
-<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 53N
-<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 54N
-<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 55N
-<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 56N
-<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 57N
-<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 58N
-<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 59N
-<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 60N
-<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UPS North
-<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / Plate Carree (deprecated)
-<32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / World Equidistant Cylindrical (deprecated)
-# Unable to translate coordinate system EPSG:32663 into PROJ.4 format.
-#
-# WGS 84 / BLM 14N (ftUS)
-<32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <>
-# WGS 84 / BLM 15N (ftUS)
-<32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <>
-# WGS 84 / BLM 16N (ftUS)
-<32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <>
-# WGS 84 / BLM 17N (ftUS)
-<32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <>
-# WGS 84 / UTM grid system (southern hemisphere)
-# Unable to translate coordinate system EPSG:32700 into PROJ.4 format.
-#
-# WGS 84 / UTM zone 1S
-<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 2S
-<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 3S
-<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 4S
-<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 5S
-<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 6S
-<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 7S
-<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 8S
-<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 9S
-<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 10S
-<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 11S
-<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 12S
-<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 13S
-<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 14S
-<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 15S
-<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 16S
-<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 17S
-<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 18S
-<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 19S
-<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 20S
-<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 21S
-<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 22S
-<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 23S
-<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 24S
-<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 25S
-<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 26S
-<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 27S
-<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 28S
-<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 29S
-<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 30S
-<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 31S
-<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 32S
-<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 33S
-<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 34S
-<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 35S
-<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 36S
-<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 37S
-<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 38S
-<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 39S
-<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 40S
-<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 41S
-<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 42S
-<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 43S
-<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 44S
-<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 45S
-<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 46S
-<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 47S
-<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 48S
-<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 49S
-<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 50S
-<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 51S
-<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 52S
-<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 53S
-<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 54S
-<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 55S
-<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 56S
-<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 57S
-<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 58S
-<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 59S
-<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UTM zone 60S
-<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / UPS South
-<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
-# WGS 84 / TM 36 SE
-<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <>
diff --git a/src/3rdparty/proj/proj_data/esri b/src/3rdparty/proj/proj_data/esri
deleted file mode 100644
index ddee64b1..00000000
--- a/src/3rdparty/proj/proj_data/esri
+++ /dev/null
@@ -1,5937 +0,0 @@
-# Anguilla 1957 / British West Indies Grid
-<2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Antigua 1943 / British West Indies Grid
-<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs no_defs <>
-# Dominica 1945 / British West Indies Grid
-<2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs no_defs <>
-# Grenada 1953 / British West Indies Grid
-<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs no_defs <>
-# Montserrat 58 / British West Indies Grid
-<2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs no_defs <>
-# St Kitts 1955 / British West Indies Grid
-<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs no_defs <>
-# St Lucia 1955 / British West Indies Grid
-<2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs no_defs <>
-# St Vincent 45 / British West Indies Grid
-<2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 2
-<2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 3
-<2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 4
-<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 5
-<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 6
-<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 7
-<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 8
-<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 9
-<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / SCoPQ zone 10
-<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 8
-<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 9
-<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 10
-<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 11
-<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 12
-<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 13
-<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 14
-<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 15
-<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 16
-<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / MTM zone 17
-<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / UTM zone 15N
-<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / UTM zone 16N
-<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / UTM zone 17N
-<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(76) / UTM zone 18N
-<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / UTM zone 17N
-<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / UTM zone 18N
-<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / UTM zone 19N
-<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / UTM zone 20N
-<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / UTM zone 21N
-<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / New Brunswick Stereo
-<2036> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 19N
-<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 20N
-<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Israel / Israeli TM Grid
-<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.000007 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs no_defs <>
-# Locodjo 1965 / UTM zone 30N
-<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <>
-# Abidjan 1987 / UTM zone 30N
-<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <>
-# Locodjo 1965 / UTM zone 29N
-<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <>
-# Abidjan 1987 / UTM zone 29N
-<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <>
-# Hanoi 1972 / Gauss-Kruger zone 18
-<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <>
-# Hanoi 1972 / Gauss-Kruger zone 19
-<2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <>
-# Hartebeesthoek94 / Lo15
-# Hartebeesthoek94 / Lo17
-# Hartebeesthoek94 / Lo19
-# Hartebeesthoek94 / Lo21
-# Hartebeesthoek94 / Lo23
-# Hartebeesthoek94 / Lo25
-# Hartebeesthoek94 / Lo27
-# Hartebeesthoek94 / Lo29
-# Hartebeesthoek94 / Lo31
-# Hartebeesthoek94 / Lo33
-# CH1903+ / LV95
-<2056> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs no_defs <>
-# Rassadiran / Nakhl e Taqi
-<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs no_defs <>
-# ED50(ED77) / UTM zone 38N
-<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <>
-# ED50(ED77) / UTM zone 39N
-<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <>
-# ED50(ED77) / UTM zone 40N
-<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs no_defs <>
-# ED50(ED77) / UTM zone 41N
-<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs no_defs <>
-# Madrid 1870 (Madrid) / Spain
-<2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=-3.687938888888889 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669562 +pm=madrid +units=m +no_defs no_defs <>
-# Dabola 1981 / UTM zone 28N
-<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <>
-# Dabola 1981 / UTM zone 29N
-<2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <>
-# S-JTSK (Ferro) / Krovak
-<2065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# Mount Dillon / Tobago Grid
-<2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66154375 +y_0=36209.915082 +a=6378293.63683822 +b=6356617.979337744 +to_meter=0.2011661949 +no_defs no_defs <>
-# Naparima 1955 / UTM zone 20N
-<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 5
-<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 6
-<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 7
-<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 8
-<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 9
-<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 10
-<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 11
-<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 12
-<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / Libya zone 13
-<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / UTM zone 32N
-<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / UTM zone 33N
-<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / UTM zone 34N
-<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <>
-# ELD79 / UTM zone 35N
-<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <>
-# Chos Malal 1914 / Argentina zone 2
-<2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Pampa del Castillo / Argentina zone 2
-<2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Hito XVIII 1963 / Argentina zone 2
-<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <>
-# Hito XVIII 1963 / UTM zone 19S
-<2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <>
-# NAD27 / Cuba Norte
-<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / Cuba Sur
-<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# ELD79 / TM 12 NE
-<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Carthage / TM 11 NE
-<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999600 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Yemen NGN96 / UTM zone 38N
-<2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Yemen NGN96 / UTM zone 39N
-<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# South Yemen / Gauss Kruger zone 8
-<2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <>
-# South Yemen / Gauss Kruger zone 9
-<2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <>
-# Hanoi 1972 / GK 106 NE
-<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <>
-# WGS 72BE / TM 106 NE
-<2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# Bissau / UTM zone 28N
-<2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs no_defs <>
-# Korean 1985 / Korea East Belt
-<2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <>
-# Korean 1985 / Korea Central Belt
-<2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <>
-# Korean 1985 / Korea West Belt
-<2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <>
-# Qatar 1948 / Qatar Grid
-<2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs no_defs <>
-# GGRS87 / Greek Grid
-<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs no_defs <>
-# Lake / Maracaibo Grid M1
-<2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs no_defs <>
-# Lake / Maracaibo Grid
-<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs no_defs <>
-# Lake / Maracaibo Grid M3
-<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs no_defs <>
-# Lake / Maracaibo La Rosa Grid
-<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD2000 / Mount Eden Circuit 2000
-<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.999900 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Bay of Plenty Circuit 2000
-<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Poverty Bay Circuit 2000
-<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Hawkes Bay Circuit 2000
-<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Taranaki Circuit 2000
-<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Tuhirangi Circuit 2000
-<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Wanganui Circuit 2000
-<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Wairarapa Circuit 2000
-<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Wellington Circuit 2000
-<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Collingwood Circuit 2000
-<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Nelson Circuit 2000
-<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Karamea Circuit 2000
-<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Buller Circuit 2000
-<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Grey Circuit 2000
-<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Amuri Circuit 2000
-<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Marlborough Circuit 2000
-<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Hokitika Circuit 2000
-<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Okarito Circuit 2000
-<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Jacksons Bay Circuit 2000
-<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Mount Pleasant Circuit 2000
-<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Gawler Circuit 2000
-<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Timaru Circuit 2000
-<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Lindis Peak Circuit 2000
-<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Mount Nicholas Circuit 2000
-<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Mount York Circuit 2000
-<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Observation Point Circuit 2000
-<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / North Taieri Circuit 2000
-<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.999960 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / Bluff Circuit 2000
-<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / UTM zone 58S
-<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / UTM zone 59S
-<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NZGD2000 / UTM zone 60S
-<2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Accra / Ghana National Grid
-<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs no_defs <>
-# Accra / TM 1 NW
-<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.999600 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD27(CGQ77) / Quebec Lambert
-<2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / SCoPQ zone 2
-<2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 3
-<2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 4
-<2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 5
-<2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 6
-<2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 7
-<2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 8
-<2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 9
-<2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / MTM zone 10
-<2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 21N
-<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 18N
-<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 17N
-<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 13N
-<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 12N
-<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / UTM zone 11N
-<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# RGF93 / Lambert-93
-<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# American Samoa 1962 / American Samoa Lambert
-<2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / UTM zone 59S
-<2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# IRENET95 / Irish Transverse Mercator
-<2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.999820 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# IRENET95 / UTM zone 29N
-<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Sierra Leone 1924 / New Colony Grid
-<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <>
-# Sierra Leone 1924 / New War Office Grid
-<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <>
-# Sierra Leone 1968 / UTM zone 28N
-<2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <>
-# Sierra Leone 1968 / UTM zone 29N
-<2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <>
-# US National Atlas Equal Area
-<2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs no_defs <>
-# Locodjo 1965 / TM 5 NW
-<2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <>
-# Abidjan 1987 / TM 5 NW
-<2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 3
-<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 4
-<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss Kruger zone 5
-<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# Luxembourg 1930 / Gauss
-<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1.000000 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs no_defs <>
-# MGI / Slovenia Grid
-<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Pulkovo 1942(58) / Poland zone I
-<2171> +proj=stere +lat_0=50.625 +lon_0=21.08333333333333 +k=0.999800 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <>
-# Pulkovo 1942(58) / Poland zone II
-<2172> +proj=stere +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.999800 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <>
-# Pulkovo 1942(58) / Poland zone III
-<2173> +proj=stere +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.999800 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <>
-# Pulkovo 1942(58) / Poland zone IV
-<2174> +proj=stere +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.999800 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <>
-# Pulkovo 1942(58) / Poland zone V
-<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <>
-# ETRS89 / Poland CS2000 zone 5
-<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Poland CS2000 zone 6
-<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Poland CS2000 zone 7
-<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Poland CS2000 zone 8
-<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Poland CS92
-<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999300 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs no_defs <>
-# Azores Occidental 1939 / UTM zone 25N
-<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs no_defs <>
-# Azores Central 1948 / UTM zone 26N
-<2189> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <>
-# Azores Oriental 1940 / UTM zone 26N
-<2190> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <>
-# Madeira 1936 / UTM zone 28N
-<2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / France EuroLambert
-<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD2000 / New Zealand Transverse Mercator
-<2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.999600 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# American Samoa 1962 / American Samoa Lambert
-<2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / UTM zone 2S
-<2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# ETRS89 / Kp2000 Jutland
-<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.999950 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Kp2000 Zealand
-<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999950 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / Kp2000 Bornholm
-<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# Albanian 1987 / Gauss Kruger zone 4
-<2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# ATS77 / New Brunswick Stereographic (ATS77)
-<2200> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# REGVEN / UTM zone 18N
-<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# REGVEN / UTM zone 19N
-<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# REGVEN / UTM zone 20N
-<2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD27 / Tennessee
-<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Kentucky North
-<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 9
-<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 10
-<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 11
-<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 12
-<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 13
-<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 14
-<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / 3-degree Gauss-Kruger zone 15
-<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ETRS89 / TM 30 NE
-<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# Douala 1948 / AOF west
-<2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Manoca 1962 / UTM zone 32N
-<2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs no_defs <>
-# Qornoq 1927 / UTM zone 22N
-<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs no_defs <>
-# Qornoq 1927 / UTM zone 23N
-<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs no_defs <>
-# ATS77 / UTM zone 19N
-<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# ATS77 / UTM zone 20N
-<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# NAD83 / Arizona East (ft)
-<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Arizona Central (ft)
-<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Arizona West (ft)
-<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / California zone 1 (ftUS)
-<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / California zone 2 (ftUS)
-<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / California zone 3 (ftUS)
-<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / California zone 4 (ftUS)
-<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / California zone 5 (ftUS)
-<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / California zone 6 (ftUS)
-<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Colorado North (ftUS)
-<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Colorado Central (ftUS)
-<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Colorado South (ftUS)
-<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Connecticut (ftUS)
-<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Delaware (ftUS)
-<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Florida East (ftUS)
-<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Florida West (ftUS)
-<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Florida North (ftUS)
-<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Georgia East (ftUS)
-<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Georgia West (ftUS)
-<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Idaho East (ftUS)
-<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Idaho Central (ftUS)
-<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Idaho West (ftUS)
-<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Indiana East (ftUS)
-<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Indiana West (ftUS)
-<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Kentucky North (ftUS)
-<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Kentucky South (ftUS)
-<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Maryland (ftUS)
-<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Massachusetts Mainland (ftUS)
-<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Massachusetts Island (ftUS)
-<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Michigan North (ft)
-<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Michigan Central (ft)
-<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Michigan South (ft)
-<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Mississippi East (ftUS)
-<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Mississippi West (ftUS)
-<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Montana (ft)
-<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / New Mexico East (ftUS)
-<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New Mexico Central (ftUS)
-<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New Mexico West (ftUS)
-<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New York East (ftUS)
-<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New York Central (ftUS)
-<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New York West (ftUS)
-<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / New York Long Island (ftUS)
-<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / North Carolina (ftUS)
-<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / North Dakota North (ft)
-<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / North Dakota South (ft)
-<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Oklahoma North (ftUS)
-<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Oklahoma South (ftUS)
-<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Oregon North (ft)
-<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Oregon South (ft)
-<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Pennsylvania North (ftUS)
-<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Pennsylvania South (ftUS)
-<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / South Carolina (ft)
-<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Tennessee (ftUS)
-<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Texas North (ftUS)
-<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Texas North Central (ftUS)
-<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Texas Central (ftUS)
-<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Texas South Central (ftUS)
-<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Texas South (ftUS)
-<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Utah North (ft)
-<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Utah Central (ft)
-<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Utah South (ft)
-<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83 / Virginia North (ftUS)
-<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Virginia South (ftUS)
-<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Washington North (ftUS)
-<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Washington South (ftUS)
-<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Wisconsin North (ftUS)
-<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Wisconsin Central (ftUS)
-<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / Wisconsin South (ftUS)
-<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# ATS77 / Prince Edward Isl. Stereographic (ATS77)
-<2290> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83)
-<2291> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83)
-<2292> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# ATS77 / MTM Nova Scotia zone 4
-<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# ATS77 / MTM Nova Scotia zone 5
-<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <>
-# Batavia / TM 109 SE
-<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs no_defs <>
-# WGS 84 / TM 116 SE
-<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / TM 132 SE
-<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / TM 6 NE
-<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# Garoua / UTM zone 33N
-<2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Kousseri / UTM zone 33N
-<2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Trinidad 1903 / Trinidad Grid (ftCla)
-<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380699999 +y_0=65379.01334249999 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.304797265 +no_defs no_defs <>
-# Campo Inchauspe / UTM zone 19S
-<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / UTM zone 20S
-<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / ICN Regional
-<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Ain el Abd / Aramco Lambert
-<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM27
-<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM30
-<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM33
-<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM36
-<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM39
-<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM42
-<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM45
-<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Hong Kong 1980 Grid System
-<2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 13
-<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 14
-<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 15
-<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 16
-<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 17
-<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 18
-<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 19
-<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 20
-<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 21
-<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 22
-<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger zone 23
-<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 75E
-<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 81E
-<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 87E
-<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 93E
-<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 99E
-<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 105E
-<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 111E
-<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 117E
-<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 123E
-<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 129E
-<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / Gauss-Kruger CM 135E
-<2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 25
-<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 26
-<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 27
-<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 28
-<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 29
-<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 30
-<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 31
-<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 32
-<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 33
-<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 34
-<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 35
-<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 36
-<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 37
-<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 38
-<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 39
-<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 40
-<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 41
-<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 42
-<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 43
-<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 44
-<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger zone 45
-<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 75E
-<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 78E
-<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 81E
-<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 84E
-<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 87E
-<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 90E
-<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 93E
-<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 96E
-<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 99E
-<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 102E
-<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 105E
-<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 108E
-<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 111E
-<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 114E
-<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 117E
-<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 120E
-<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 123E
-<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 126E
-<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 129E
-<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 132E
-<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# Xian 1980 / 3-degree Gauss-Kruger CM 135E
-<2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <>
-# KKJ / Finland zone 1
-<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>
-# KKJ / Finland zone 2
-<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>
-# KKJ / Finland Uniform Coordinate System
-<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>
-# KKJ / Finland zone 4
-<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>
-# South Yemen / Gauss-Kruger zone 8
-<2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <>
-# South Yemen / Gauss-Kruger zone 9
-<2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 3
-<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 4
-<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# Pulkovo 1942(83) / Gauss-Kruger zone 5
-<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <>
-# RT90 2.5 gon W
-<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 25
-<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 26
-<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 27
-<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 28
-<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 29
-<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 30
-<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 31
-<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 32
-<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 33
-<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 34
-<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 35
-<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 36
-<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 37
-<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 38
-<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 39
-<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 40
-<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 41
-<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 42
-<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 43
-<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 44
-<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger zone 45
-<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 75E
-<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 78E
-<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 81E
-<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 84E
-<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 87E
-<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 90E
-<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 93E
-<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 96E
-<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 99E
-<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 102E
-<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 105E
-<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 108E
-<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 111E
-<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 114E
-<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 117E
-<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 120E
-<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 123E
-<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 126E
-<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 129E
-<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 132E
-<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / 3-degree Gauss-Kruger CM 135E
-<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS I
-<2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS II
-<2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS III
-<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS IV
-<2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS V
-<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VI
-<2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VII
-<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS VIII
-<2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS IX
-<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS X
-<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XI
-<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XII
-<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIII
-<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIV
-<2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XV
-<2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVI
-<2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVII
-<2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XVIII
-<2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# JGD2000 / Japan Plane Rectangular CS XIX
-<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Albanian 1987 / Gauss-Kruger zone 4
-<2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 21E
-<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 27E
-<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 33E
-<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 39E
-<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 45E
-<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 51E
-<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 57E
-<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 63E
-<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 69E
-<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 75E
-<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 81E
-<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 87E
-<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 93E
-<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 99E
-<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 105E
-<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 111E
-<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 117E
-<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 123E
-<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 129E
-<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 135E
-<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 141E
-<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 147E
-<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 153E
-<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 159E
-<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 165E
-<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 171E
-<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 177E
-<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 177W
-<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger CM 171W
-<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 9E
-<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 15E
-<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 21E
-<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 27E
-<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 33E
-<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 39E
-<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 45E
-<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 51E
-<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 57E
-<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 63E
-<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 69E
-<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 75E
-<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 81E
-<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 87E
-<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 93E
-<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 99E
-<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 105E
-<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 111E
-<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 117E
-<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 123E
-<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 129E
-<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 135E
-<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 141E
-<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 147E
-<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 153E
-<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 159E
-<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 165E
-<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 171E
-<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 177E
-<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 177W
-<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger CM 171W
-<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 7
-<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 8
-<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 9
-<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 10
-<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 11
-<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 12
-<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 13
-<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 14
-<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 15
-<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 16
-<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 17
-<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 18
-<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 19
-<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 20
-<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 21
-<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 22
-<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 23
-<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 24
-<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 25
-<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 26
-<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 27
-<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 28
-<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 29
-<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 30
-<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 31
-<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 32
-<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 33
-<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Samboja / UTM zone 50S
-<2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 34
-<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 35
-<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 36
-<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 37
-<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 38
-<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 39
-<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 40
-<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 41
-<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 42
-<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 43
-<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 44
-<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 45
-<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 46
-<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 47
-<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 48
-<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 49
-<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 50
-<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 51
-<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 52
-<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 53
-<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 54
-<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 55
-<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 56
-<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 57
-<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 58
-<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 59
-<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60
-<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 61
-<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 62
-<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 63
-<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger zone 64
-<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E
-<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E
-<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E
-<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E
-<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E
-<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E
-<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E
-<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E
-<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E
-<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E
-<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E
-<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E
-<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E
-<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E
-<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E
-<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E
-<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E
-<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E
-<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Lietuvos Koordinoei Sistema 1994
-<2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999800 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E
-<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E
-<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E
-<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E
-<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E
-<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E
-<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E
-<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E
-<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E
-<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E
-<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E
-<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E
-<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E
-<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E
-<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E
-<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E
-<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E
-<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E
-<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E
-<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E
-<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E
-<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E
-<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E
-<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E
-<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E
-<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E
-<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E
-<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E
-<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E
-<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E
-<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E
-<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E
-<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E
-<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E
-<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E
-<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E
-<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W
-<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W
-<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W
-<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W
-<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 7
-<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 8
-<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 9
-<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 10
-<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 11
-<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 12
-<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 13
-<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 14
-<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 15
-<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 16
-<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 17
-<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 18
-<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 19
-<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 20
-<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 21
-<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 22
-<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 23
-<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 24
-<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 25
-<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 26
-<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 27
-<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 28
-<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 29
-<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 30
-<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 31
-<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 32
-<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 33
-<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 34
-<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 35
-<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 36
-<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 37
-<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 38
-<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 39
-<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 40
-<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 41
-<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 42
-<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 43
-<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 44
-<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 45
-<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 46
-<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 47
-<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 48
-<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 49
-<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 50
-<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 51
-<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 52
-<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 53
-<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 54
-<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 55
-<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 56
-<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 57
-<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 58
-<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 59
-<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60
-<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 61
-<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 62
-<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 63
-<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger zone 64
-<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E
-<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E
-<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E
-<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E
-<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E
-<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E
-<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E
-<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E
-<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E
-<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E
-<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E
-<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E
-<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E
-<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E
-<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E
-<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E
-<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E
-<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E
-<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E
-<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E
-<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E
-<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E
-<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E
-<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E
-<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E
-<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E
-<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E
-<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E
-<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E
-<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E
-<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E
-<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E
-<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E
-<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E
-<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E
-<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E
-<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E
-<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Tete / UTM zone 36S
-<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs no_defs <>
-# Tete / UTM zone 37S
-<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E
-<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E
-<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E
-<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E
-<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E
-<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E
-<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E
-<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E
-<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E
-<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E
-<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E
-<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E
-<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E
-<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E
-<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E
-<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E
-<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E
-<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W
-<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W
-<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W
-<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W
-<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# NAD83(HARN) / Alabama East
-<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Alabama West
-<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arizona East
-<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arizona Central
-<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arizona West
-<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arkansas North
-<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arkansas South
-<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 1
-<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 2
-<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 3
-<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 4
-<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 5
-<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / California zone 6
-<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Colorado North
-<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Colorado Central
-<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Colorado South
-<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Connecticut
-<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Delaware
-<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Florida East
-<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Florida West
-<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Florida North
-<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Georgia East
-<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Georgia West
-<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Hawaii zone 1
-<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Hawaii zone 2
-<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Hawaii zone 3
-<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Hawaii zone 4
-<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Hawaii zone 5
-<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Idaho East
-<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Idaho Central
-<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Idaho West
-<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Illinois East
-<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Illinois West
-<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Indiana East
-<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Indiana West
-<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Iowa North
-<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Iowa South
-<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Kansas North
-<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Kansas South
-<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Kentucky North
-<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Kentucky South
-<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Louisiana North
-<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Louisiana South
-<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Maine East
-<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Maine West
-<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Maryland
-<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Massachusetts Mainland
-<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Massachusetts Island
-<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Michigan North
-<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Michigan Central
-<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Michigan South
-<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Minnesota North
-<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Minnesota Central
-<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Minnesota South
-<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Mississippi East
-<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Mississippi West
-<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Missouri East
-<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Missouri Central
-<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Missouri West
-<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Montana
-<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Nebraska
-<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Nevada East
-<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Nevada Central
-<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Nevada West
-<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New Hampshire
-<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New Jersey
-<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New Mexico East
-<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New Mexico Central
-<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New Mexico West
-<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New York East
-<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New York Central
-<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New York West
-<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / New York Long Island
-<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / North Dakota North
-<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / North Dakota South
-<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Ohio North
-<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Ohio South
-<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Oklahoma North
-<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Oklahoma South
-<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Oregon North
-<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Oregon South
-<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Rhode Island
-<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / South Dakota North
-<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / South Dakota South
-<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Tennessee
-<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Texas North
-<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Texas North Central
-<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Texas Central
-<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Texas South Central
-<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Texas South
-<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Utah North
-<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Utah Central
-<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Utah South
-<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Vermont
-<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Virginia North
-<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Virginia South
-<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Washington North
-<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Washington South
-<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / West Virginia North
-<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / West Virginia South
-<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin North
-<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin Central
-<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin South
-<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wyoming East
-<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wyoming East Central
-<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wyoming West Central
-<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Wyoming West
-<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Puerto Rico & Virgin Is.
-<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(HARN) / Arizona East (ft)
-<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Arizona Central (ft)
-<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Arizona West (ft)
-<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / California zone 1 (ftUS)
-<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / California zone 2 (ftUS)
-<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / California zone 3 (ftUS)
-<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / California zone 4 (ftUS)
-<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / California zone 5 (ftUS)
-<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / California zone 6 (ftUS)
-<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Colorado North (ftUS)
-<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Colorado Central (ftUS)
-<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Colorado South (ftUS)
-<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Connecticut (ftUS)
-<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Delaware (ftUS)
-<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Florida East (ftUS)
-<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Florida West (ftUS)
-<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Florida North (ftUS)
-<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Georgia East (ftUS)
-<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Georgia West (ftUS)
-<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Idaho East (ftUS)
-<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Idaho Central (ftUS)
-<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Idaho West (ftUS)
-<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Indiana East (ftUS)
-<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Indiana West (ftUS)
-<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Kentucky North (ftUS)
-<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Kentucky South (ftUS)
-<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Maryland (ftUS)
-<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Massachusetts Mainland (ftUS)
-<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Massachusetts Island (ftUS)
-<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Michigan North (ft)
-<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Michigan Central (ft)
-<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Michigan South (ft)
-<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Mississippi East (ftUS)
-<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Mississippi West (ftUS)
-<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Montana (ft)
-<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / New Mexico East (ftUS)
-<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New Mexico Central (ftUS)
-<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New Mexico West (ftUS)
-<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New York East (ftUS)
-<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New York Central (ftUS)
-<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New York West (ftUS)
-<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / New York Long Island (ftUS)
-<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / North Dakota North (ft)
-<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / North Dakota South (ft)
-<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Oklahoma North (ftUS)
-<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Oklahoma South (ftUS)
-<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Oregon North (ft)
-<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Oregon South (ft)
-<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Tennessee (ftUS)
-<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Texas North (ftUS)
-<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Texas North Central (ftUS)
-<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Texas Central (ftUS)
-<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Texas South Central (ftUS)
-<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Texas South (ftUS)
-<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Utah North (ft)
-<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Utah Central (ft)
-<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Utah South (ft)
-<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <>
-# NAD83(HARN) / Virginia North (ftUS)
-<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Virginia South (ftUS)
-<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Washington North (ftUS)
-<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Washington South (ftUS)
-<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin North (ftUS)
-<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin Central (ftUS)
-<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83(HARN) / Wisconsin South (ftUS)
-<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Beduaram / TM 13 NE
-<2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999600 +x_0=500000.0000000001 +y_0=0 +a=6378249.2 +b=6356515 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# QND95 / Qatar National Grid
-<2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs no_defs <>
-# Segara / UTM zone 50S
-<2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <>
-# Segara (Jakarta) / NEIEZ
-<2934> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone A1
-<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1.000000 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone A2
-<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone A3
-<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone A4
-<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone K2
-<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone K3
-<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / CS63 zone K4
-<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Porto Santo / UTM zone 28N
-<2942> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <>
-# Selvagem Grande / UTM zone 28N
-<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <>
-# NAD83(CSRS) / SCoPQ zone 2
-<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 3
-<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 4
-<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 5
-<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 6
-<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 7
-<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 8
-<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 9
-<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / MTM zone 10
-<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / New Brunswick Stereo
-<2953> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)
-<2954> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 11N
-<2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 12N
-<2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 13N
-<2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 17N
-<2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 18N
-<2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 19N
-<2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 20N
-<2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD83(CSRS) / UTM zone 21N
-<2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Moznet / UTM zone 36S
-<3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <>
-# Moznet / UTM zone 37S
-<3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <>
-# Indian 1960 / UTM zone 48N
-<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Indian 1960 / UTM zone 49N
-<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Indian 1960 / TM 106 NE
-<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# FD58 / Iraq zone
-<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Estonian Coordinate System of 1992
-<3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs no_defs <>
-# Estonian Coordinate System of 1997
-<3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# PSD93 / UTM zone 39N
-<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <>
-# PSD93 / UTM zone 40N
-<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Old Hawaiian / Hawaii zone 1
-<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Old Hawaiian / Hawaii zone 2
-<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Old Hawaiian / Hawaii zone 3
-<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Old Hawaiian / Hawaii zone 4
-<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Old Hawaiian / Hawaii zone 5
-<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Puerto Rico / UTM zone 20N
-<3920> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Puerto Rico State Plane CS of 1927
-<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Puerto Rico / St. Croix
-<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# Unknown datum based upon the Airy 1830 ellipsoid
-<4001> +proj=longlat +ellps=airy +no_defs no_defs <>
-# Unknown datum based upon the Airy Modified 1849 ellipsoid
-<4002> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <>
-# Unknown datum based upon the Australian National Spheroid
-<4003> +proj=longlat +ellps=aust_SA +no_defs no_defs <>
-# Unknown datum based upon the Bessel 1841 ellipsoid
-<4004> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Unknown datum based upon the Bessel Modified ellipsoid
-<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs no_defs <>
-# Unknown datum based upon the Bessel Namibia ellipsoid
-<4006> +proj=longlat +ellps=bess_nam +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1858 ellipsoid
-<4007> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1866 ellipsoid
-<4008> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1866 Michigan ellipsoid
-<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid
-<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid
-<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid
-<4012> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid
-<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid
-<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs no_defs <>
-# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid
-<4015> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <>
-# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid
-<4016> +proj=longlat +ellps=evrstSS +no_defs no_defs <>
-# Unknown datum based upon the Everest 1830 Modified ellipsoid
-<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs no_defs <>
-# Unknown datum based upon the GRS 1980 ellipsoid
-<4019> +proj=longlat +ellps=GRS80 +no_defs no_defs <>
-# Unknown datum based upon the Helmert 1906 ellipsoid
-<4020> +proj=longlat +ellps=helmert +no_defs no_defs <>
-# Unknown datum based upon the Indonesian National Spheroid
-<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <>
-# Unknown datum based upon the International 1924 ellipsoid
-<4022> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Unknown datum based upon the Krassowsky 1940 ellipsoid
-<4024> +proj=longlat +ellps=krass +no_defs no_defs <>
-# Unknown datum based upon the NWL 9D ellipsoid
-<4025> +proj=longlat +ellps=WGS66 +no_defs no_defs <>
-# Unknown datum based upon the Plessis 1817 ellipsoid
-<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs no_defs <>
-# Unknown datum based upon the Struve 1860 ellipsoid
-<4028> +proj=longlat +a=6378298.3 +b=6356657.142669562 +no_defs no_defs <>
-# Unknown datum based upon the War Office ellipsoid
-<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <>
-# Unknown datum based upon the WGS 84 ellipsoid
-<4030> +proj=longlat +ellps=WGS84 +no_defs no_defs <>
-# Unknown datum based upon the GEM 10C ellipsoid
-<4031> +proj=longlat +ellps=WGS84 +no_defs no_defs <>
-# Unknown datum based upon the OSU86F ellipsoid
-<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs no_defs <>
-# Unknown datum based upon the OSU91A ellipsoid
-<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs no_defs <>
-# Unknown datum based upon the Clarke 1880 ellipsoid
-<4034> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Unknown datum based upon the Authalic Sphere
-<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs no_defs <>
-# Unknown datum based upon the GRS 1967 ellipsoid
-<4036> +proj=longlat +ellps=GRS67 +no_defs no_defs <>
-# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid
-<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <>
-# Unknown datum based upon the Everest (1830 Definition) ellipsoid
-<4042> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <>
-# Unknown datum based upon the WGS 72 ellipsoid
-<4043> +proj=longlat +ellps=WGS72 +no_defs no_defs <>
-# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid
-<4044> +proj=longlat +a=6377301.243 +b=6356100.230165385 +no_defs no_defs <>
-# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid
-<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs no_defs <>
-# Unspecified based upon the GRS 1980 Authalic Sphere
-<4047> +proj=longlat +a=6370997 +b=6370997 +no_defs no_defs <>
-# Greek
-<4120> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# GGRS87
-<4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs no_defs <>
-# ATS77
-<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <>
-# KKJ
-<4123> +proj=longlat +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +no_defs no_defs <>
-# RT90
-<4124> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Samboja
-<4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <>
-# LKS94 (ETRS89)
-<4126> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Tete
-<4127> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Madzansua
-<4128> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Observatario
-<4129> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Moznet
-<4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs no_defs <>
-# Indian 1960
-<4131> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <>
-# FD58
-<4132> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# EST92
-<4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs no_defs <>
-# PDO Survey Datum 1993
-<4134> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Old Hawaiian
-<4135> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# St. Lawrence Island
-<4136> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# St. Paul Island
-<4137> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# St. George Island
-<4138> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Puerto Rico
-<4139> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# NAD83(CSRS98)
-<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Israel
-<4141> +proj=longlat +ellps=GRS80 +no_defs no_defs <>
-# Locodjo 1965
-<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs no_defs <>
-# Abidjan 1987
-<4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs no_defs <>
-# Kalianpur 1937
-<4144> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <>
-# Kalianpur 1962
-<4145> +proj=longlat +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +no_defs no_defs <>
-# Kalianpur 1975
-<4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs no_defs <>
-# Hanoi 1972
-<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs no_defs <>
-# Hartebeesthoek94
-<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# CH1903
-<4149> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# CH1903+
-<4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs no_defs <>
-# CHTRF95
-<4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# NAD83(HARN)
-<4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Rassadiran
-<4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs no_defs <>
-# ED50(ED77)
-<4154> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Dabola 1981
-<4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs no_defs <>
-# S-JTSK
-<4156> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Mount Dillon
-<4157> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <>
-# Naparima 1955
-<4158> +proj=longlat +ellps=intl +no_defs no_defs <>
-# ELD79
-<4159> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Chos Malal 1914
-<4160> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Pampa del Castillo
-<4161> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Korean 1985
-<4162> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Yemen NGN96
-<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# South Yemen
-<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs no_defs <>
-# Bissau
-<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs no_defs <>
-# Korean 1995
-<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# NZGD2000
-<4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Accra
-<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs no_defs <>
-# American Samoa 1962
-<4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs no_defs <>
-# SIRGAS
-<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# RGF93
-<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# POSGAR
-<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# IRENET95
-<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Sierra Leone 1924
-<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <>
-# Sierra Leone 1968
-<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs no_defs <>
-# Australian Antarctic
-<4176> +proj=longlat +ellps=GRS80 +no_defs no_defs <>
-# Pulkovo 1942(83)
-<4178> +proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs no_defs <>
-# Pulkovo 1942(58)
-<4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs no_defs <>
-# EST97
-<4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Luxembourg 1930
-<4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs no_defs <>
-# Azores Occidental 1939
-<4182> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Azores Central 1948
-<4183> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Azores Oriental 1940
-<4184> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Madeira 1936
-<4185> +proj=longlat +ellps=intl +no_defs no_defs <>
-# OSNI 1952
-<4188> +proj=longlat +ellps=airy +no_defs no_defs <>
-# REGVEN
-<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# POSGAR 98
-<4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Albanian 1987
-<4191> +proj=longlat +ellps=krass +no_defs no_defs <>
-# Douala 1948
-<4192> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Manoca 1962
-<4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <>
-# Qornoq 1927
-<4194> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Scoresbysund 1952
-<4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs no_defs <>
-# Ammassalik 1958
-<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs no_defs <>
-# Garoua
-<4197> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Kousseri
-<4198> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Egypt 1930
-<4199> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Pulkovo 1995
-<4200> +proj=longlat +ellps=krass +no_defs no_defs <>
-# Adindan
-<4201> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# AGD66
-<4202> +proj=longlat +ellps=aust_SA +no_defs no_defs <>
-# AGD84
-<4203> +proj=longlat +ellps=aust_SA +no_defs no_defs <>
-# Ain el Abd
-<4204> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Afgooye
-<4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs no_defs <>
-# Agadez
-<4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Lisbon
-<4207> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Aratu
-<4208> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Arc 1950
-<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <>
-# Arc 1960
-<4210> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Batavia
-<4211> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Barbados 1938
-<4212> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Beduaram
-<4213> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Beijing 1954
-<4214> +proj=longlat +ellps=krass +no_defs no_defs <>
-# Belge 1950
-<4215> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Bermuda 1957
-<4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs no_defs <>
-# Bogota 1975
-<4218> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Bukit Rimpah
-<4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs no_defs <>
-# Camacupa
-<4220> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Campo Inchauspe
-<4221> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Cape
-<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <>
-# Carthage
-<4223> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Chua
-<4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs no_defs <>
-# Corrego Alegre
-<4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs no_defs <>
-# Cote d'Ivoire
-<4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Deir ez Zor
-<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Douala
-<4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Egypt 1907
-<4229> +proj=longlat +ellps=helmert +no_defs no_defs <>
-# ED50
-<4230> +proj=longlat +ellps=intl +no_defs no_defs <>
-# ED87
-<4231> +proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.5076,0.1503,0.3898,-0.3143 +no_defs no_defs <>
-# Fahud
-<4232> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Gandajika 1970
-<4233> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Garoua
-<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Guyane Francaise
-<4235> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Hu Tzu Shan
-<4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs no_defs <>
-# HD72
-<4237> +proj=longlat +ellps=GRS67 +no_defs no_defs <>
-# ID74
-<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <>
-# Indian 1954
-<4239> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +no_defs no_defs <>
-# Indian 1975
-<4240> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <>
-# Jamaica 1875
-<4241> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# JAD69
-<4242> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Kalianpur 1880
-<4243> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <>
-# Kandawala
-<4244> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=-97,787,86,0,0,0,0 +no_defs no_defs <>
-# Kertau
-<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs no_defs <>
-# KOC
-<4246> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# La Canoa
-<4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs no_defs <>
-# PSAD56
-<4248> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Lake
-<4249> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Leigon
-<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs no_defs <>
-# Liberia 1964
-<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs no_defs <>
-# Lome
-<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Luzon 1911
-<4253> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Hito XVIII 1963
-<4254> +proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +no_defs no_defs <>
-# Herat North
-<4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs no_defs <>
-# Mahe 1971
-<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs no_defs <>
-# Makassar
-<4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs no_defs <>
-# ETRS89
-<4258> +proj=longlat +ellps=GRS80 +no_defs no_defs <>
-# Malongo 1987
-<4259> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Manoca
-<4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <>
-# Merchich
-<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs no_defs <>
-# Massawa
-<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs no_defs <>
-# Minna
-<4263> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Mhast
-<4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs no_defs <>
-# Monte Mario
-<4265> +proj=longlat +ellps=intl +no_defs no_defs <>
-# M'poraloko
-<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# NAD27
-<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs no_defs <>
-# NAD27 Michigan
-<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <>
-# NAD83
-<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs no_defs <>
-# Nahrwan 1967
-<4270> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Naparima 1972
-<4271> +proj=longlat +ellps=intl +no_defs no_defs <>
-# NZGD49
-<4272> +proj=longlat +ellps=intl +no_defs no_defs <>
-# NGO 1948
-<4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs no_defs <>
-# Datum 73
-<4274> +proj=longlat +ellps=intl +no_defs no_defs <>
-# NTF
-<4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs no_defs <>
-# NSWC 9Z-2
-<4276> +proj=longlat +ellps=WGS66 +no_defs no_defs <>
-# OSGB 1936
-<4277> +proj=longlat +ellps=airy +no_defs no_defs <>
-# OSGB70
-<4278> +proj=longlat +ellps=airy +no_defs no_defs <>
-# OS(SN)80
-<4279> +proj=longlat +ellps=airy +no_defs no_defs <>
-# Padang
-<4280> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Palestine 1923
-<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <>
-# Pointe Noire
-<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# GDA94
-<4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Pulkovo 1942
-<4284> +proj=longlat +ellps=krass +no_defs no_defs <>
-# Qatar 1974
-<4285> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Qatar 1948
-<4286> +proj=longlat +ellps=helmert +no_defs no_defs <>
-# Qornoq
-<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs no_defs <>
-# Loma Quintana
-<4288> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Amersfoort
-<4289> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# SAD69
-<4291> +proj=longlat +ellps=GRS67 +no_defs no_defs <>
-# Sapper Hill 1943
-<4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs no_defs <>
-# Schwarzeck
-<4293> +proj=longlat +ellps=bess_nam +no_defs no_defs <>
-# Segora
-<4294> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Serindung
-<4295> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Sudan
-<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Tananarive
-<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs no_defs <>
-# Timbalai 1948
-<4298> +proj=longlat +ellps=evrstSS +no_defs no_defs <>
-# TM65
-<4299> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <>
-# TM75
-<4300> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <>
-# Tokyo
-<4301> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Trinidad 1903
-<4302> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs no_defs <>
-# TC(1948)
-<4303> +proj=longlat +ellps=helmert +no_defs no_defs <>
-# Voirol 1875
-<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs no_defs <>
-# Bern 1938
-<4306> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Nord Sahara 1959
-<4307> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# RT38
-<4308> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Yacare
-<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs no_defs <>
-# Yoff
-<4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <>
-# Zanderij
-<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs no_defs <>
-# MGI
-<4312> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Belge 1972
-<4313> +proj=longlat +ellps=intl +no_defs no_defs <>
-# DHDN
-<4314> +proj=longlat +ellps=bessel +no_defs no_defs <>
-# Conakry 1905
-<4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs no_defs <>
-# Dealul Piscului 1933
-<4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs no_defs <>
-# Dealul Piscului 1970
-<4317> +proj=longlat +ellps=krass +no_defs no_defs <>
-# NGN
-<4318> +proj=longlat +ellps=WGS84 +no_defs no_defs <>
-# KUDAMS
-<4319> +proj=longlat +ellps=GRS80 +no_defs no_defs <>
-# WGS 72
-<4322> +proj=longlat +ellps=WGS72 +no_defs no_defs <>
-# WGS 72BE
-<4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs no_defs <>
-# WGS 84
-<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <>
-# Anguilla 1957
-<4600> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# Antigua 1943
-<4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs no_defs <>
-# Dominica 1945
-<4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs no_defs <>
-# Grenada 1953
-<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs no_defs <>
-# Montserrat 1958
-<4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs no_defs <>
-# St. Kitts 1955
-<4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs no_defs <>
-# St. Lucia 1955
-<4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs no_defs <>
-# St. Vincent 1945
-<4607> +proj=longlat +ellps=clrk80 +no_defs no_defs <>
-# NAD27(76)
-<4608> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# NAD27(CGQ77)
-<4609> +proj=longlat +ellps=clrk66 +no_defs no_defs <>
-# Xian 1980
-<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs no_defs <>
-# Hong Kong 1980
-<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs no_defs <>
-# JGD2000
-<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Segara
-<4613> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <>
-# QND95
-<4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs no_defs <>
-# Porto Santo
-<4615> +proj=longlat +ellps=intl +no_defs no_defs <>
-# Selvagem Grande
-<4616> +proj=longlat +ellps=intl +no_defs no_defs <>
-# NAD83(CSRS)
-<4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>
-# Bern 1898 (Bern)
-<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs no_defs <>
-# Bogota 1975 (Bogota)
-<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs no_defs <>
-# Lisbon (Lisbon)
-<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs no_defs <>
-# Makassar (Jakarta)
-<4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs no_defs <>
-# MGI (Ferro)
-<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <>
-# Monte Mario (Rome)
-<4806> +proj=longlat +ellps=intl +pm=rome +no_defs no_defs <>
-# NTF (Paris)
-<4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs no_defs <>
-# Padang (Jakarta)
-<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <>
-# Belge 1950 (Brussels)
-<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs no_defs <>
-# Tananarive (Paris)
-<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs no_defs <>
-# Voirol 1875 (Paris)
-<4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs no_defs <>
-# Batavia (Jakarta)
-<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <>
-# RT38 (Stockholm)
-<4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs no_defs <>
-# Greek (Athens)
-<4815> +proj=longlat +ellps=bessel +pm=athens +no_defs no_defs <>
-# Carthage (Paris)
-<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs no_defs <>
-# NGO 1948 (Oslo)
-<4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs no_defs <>
-# S-JTSK (Ferro)
-<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <>
-# Nord Sahara 1959 (Paris)
-<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs no_defs <>
-# Segara (Jakarta)
-<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <>
-# ATF (Paris)
-<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <>
-# NDG (Paris)
-<4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <>
-# Madrid 1870 (Madrid)
-<4903> +proj=longlat +a=6378298.3 +b=6356657.142669562 +pm=madrid +no_defs no_defs <>
-# Lisbon 1890 (Lisbon)
-<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 4
-<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 5
-<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 6
-<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 7
-<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 8
-<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 9
-<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 10
-<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 11
-<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 12
-<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 13
-<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 14
-<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 15
-<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 16
-<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 17
-<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 18
-<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 19
-<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 20
-<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 21
-<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 22
-<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 23
-<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 24
-<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 25
-<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 26
-<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 27
-<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 28
-<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 29
-<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 30
-<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 31
-<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger zone 32
-<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 4N
-<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 5N
-<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 6N
-<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 7N
-<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 8N
-<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 9N
-<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 10N
-<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 11N
-<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 12N
-<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 13N
-<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 14N
-<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 15N
-<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 16N
-<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 17N
-<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 18N
-<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 19N
-<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 20N
-<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 21N
-<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 22N
-<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 23N
-<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 24N
-<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 25N
-<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 26N
-<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 27N
-<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 28N
-<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 29N
-<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 30N
-<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 31N
-<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1995 / Gauss-Kruger 32N
-<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Adindan / UTM zone 37N
-<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Adindan / UTM zone 38N
-<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 48
-<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 49
-<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 50
-<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 51
-<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 52
-<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 53
-<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 54
-<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 55
-<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 56
-<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 57
-<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD66 / AMG zone 58
-<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 48
-<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 49
-<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 50
-<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 51
-<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 52
-<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 53
-<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 54
-<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 55
-<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 56
-<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 57
-<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# AGD84 / AMG zone 58
-<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <>
-# Ain el Abd / UTM zone 37N
-<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <>
-# Ain el Abd / UTM zone 38N
-<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <>
-# Ain el Abd / UTM zone 39N
-<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <>
-# Ain el Abd / Bahrain Grid
-<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <>
-# Afgooye / UTM zone 38N
-<20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <>
-# Afgooye / UTM zone 39N
-<20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <>
-# Lisbon (Lisbon)/Portuguese National Grid
-<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <>
-# Lisbon (Lisbon)/Portuguese Grid
-<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <>
-# Aratu / UTM zone 22S
-<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <>
-# Aratu / UTM zone 23S
-<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs no_defs <>
-# Aratu / UTM zone 24S
-<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs no_defs <>
-# Arc 1950 / UTM zone 34S
-<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# Arc 1950 / UTM zone 35S
-<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# Arc 1950 / UTM zone 36S
-<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 35S
-<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 36S
-<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 37S
-<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 35N
-<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 36N
-<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Arc 1960 / UTM zone 37N
-<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Batavia (Jakarta) / NEIEZ
-<21100> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <>
-# Batavia / UTM zone 48S
-<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs no_defs <>
-# Batavia / UTM zone 49S
-<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs no_defs <>
-# Batavia / UTM zone 50S
-<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs no_defs <>
-# Barbados 1938 / British West Indies Grid
-<21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Barbados 1938 / Barbados National Grid
-<21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.999999 +x_0=30000 +y_0=75000 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 13
-<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 14
-<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 15
-<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 16
-<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 17
-<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 18
-<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 19
-<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 20
-<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 21
-<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 22
-<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger zone 23
-<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 75E
-<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 81E
-<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 87E
-<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 93E
-<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 99E
-<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 105E
-<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 111E
-<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 117E
-<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 123E
-<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 129E
-<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger CM 135E
-<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 13N
-<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 14N
-<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 15N
-<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 16N
-<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 17N
-<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 18N
-<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 19N
-<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 20N
-<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 21N
-<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 22N
-<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Beijing 1954 / Gauss-Kruger 23N
-<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Belge 1950 (Brussels) / Belge Lambert 50
-<21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.367975 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs no_defs <>
-# Bern 1898 (Bern) / LV03C
-<21780> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs no_defs <>
-# CH1903 / LV03
-<21781> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs no_defs <>
-# Bogota 1975 / UTM zone 17N
-<21817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs no_defs <>
-# Bogota 1975 / UTM zone 18N
-<21818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <>
-# Bogota 1975 / Colombia West zone
-<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Bogota 1975 / Colombia Bogota zone
-<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Bogota 1975 / Colombia East Central zone
-<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Bogota 1975 / Colombia East
-<21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <>
-# Camacupa / UTM zone 32S
-<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs no_defs <>
-# Camacupa / UTM zone 33S
-<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs no_defs <>
-# Camacupa / TM 11.30 SE
-<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Camacupa / TM 12 SE
-<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 1
-<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 2
-<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 3
-<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 4
-<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 5
-<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 6
-<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Campo Inchauspe / Argentina 7
-<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Cape / UTM zone 34S
-<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# Cape / UTM zone 35S
-<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# Cape / UTM zone 36S
-<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <>
-# South African Coordinate System zone 15
-# South African Coordinate System zone 17
-# South African Coordinate System zone 19
-# South African Coordinate System zone 21
-# South African Coordinate System zone 23
-# South African Coordinate System zone 25
-# South African Coordinate System zone 27
-# South African Coordinate System zone 29
-# South African Coordinate System zone 31
-# South African Coordinate System zone 33
-# Carthage (Paris) / Tunisia Mining Grid
-# Carthage / UTM zone 32N
-<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Carthage / Nord Tunisie
-<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Carthage / Sud Tunisie
-<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Corrego Alegre / UTM zone 23S
-<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <>
-# Corrego Alegre / UTM zone 24S
-<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <>
-# Deir ez Zor / Levant Zone
-<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Deir ez Zor / Syria Lambert
-<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Deir ez Zor / Levant Stereographic
-<22780> +proj=stere +lat_0=34.2 +lon_0=39.15 +k=0.999534 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Douala / UTM zone 32N
-<22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Egypt 1907 / Blue Belt
-<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1.000000 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs no_defs <>
-# Egypt 1907 / Red Belt
-<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1.000000 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs no_defs <>
-# Egypt 1907 / Purple Belt
-<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs no_defs <>
-# Egypt 1907 / Extended Purple Belt
-<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs no_defs <>
-# ED50 / UTM zone 28N
-<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 29N
-<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 30N
-<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 31N
-<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 32N
-<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 33N
-<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 34N
-<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 35N
-<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 36N
-<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 37N
-<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / UTM zone 38N
-<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM 0 N
-<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# ED50 / TM 5 NE
-<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <>
-# Fahud / UTM zone 39N
-<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Fahud / UTM zone 40N
-<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Garoua / UTM zone 33N
-<23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# HD72 / EOV
-<23700> +proj=omerc +lat_0=47.14439372222222 +lonc=19.04857177777778 +alpha=90 +k=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 46N
-<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 47N
-<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 48N
-<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 49N
-<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 50N
-<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 51N
-<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 52N
-<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 53N
-<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 46S
-<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 47S
-<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 48S
-<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 49S
-<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 50S
-<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 51S
-<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 52S
-<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 53S
-<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# ID74 / UTM zone 54S
-<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <>
-# Indian 1954 / UTM zone 46N
-<23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <>
-# Indian 1954 / UTM zone 47N
-<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <>
-# Indian 1954 / UTM zone 48N
-<23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <>
-# Indian 1975 / UTM zone 47N
-<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Indian 1975 / UTM zone 48N
-<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Jamaica 1875 / Jamaica (Old Grid)
-<24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49575 +y_0=121918.906 +ellps=clrk80 +to_meter=0.304797265 +no_defs no_defs <>
-# JAD69 / Jamaica National Grid
-<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Kalianpur 1937 / UTM zone 45N
-<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Kalianpur 1937 / UTM zone 46N
-<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Kalianpur 1962 / UTM zone 41N
-<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1962 / UTM zone 42N
-<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1962 / UTM zone 43N
-<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 42N
-<24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 43N
-<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 44N
-<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 45N
-<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 46N
-<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / UTM zone 47N
-<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1880 / India zone 0
-<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1880 / India zone I
-<24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1880 / India zone IIa
-<24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1880 / India zone III
-<24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1880 / India zone IV
-<24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1937 / India zone IIb
-<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <>
-# Kalianpur 1962 / India zone I
-<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1962 / India zone IIa
-<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / India zone I
-<24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / India zone IIa
-<24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / India zone IIb
-<24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1975 / India zone III
-<24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kalianpur 1880 / India zone IIb
-<24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <>
-# Kalianpur 1975 / India zone IV
-<24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <>
-# Kertau / Singapore Grid
-<24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <>
-# Kertau / UTM zone 47N
-<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <>
-# Kertau / UTM zone 48N
-<24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <>
-# Kertau / R.S.O. Malaya (ch)
-<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs no_defs <>
-# KOC Lambert
-<24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <>
-# La Canoa / UTM zone 18N
-<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <>
-# La Canoa / UTM zone 19N
-<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <>
-# La Canoa / UTM zone 20N
-<24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 18N
-<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 19N
-<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 20N
-<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 21N
-<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 17S
-<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 18S
-<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 19S
-<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 20S
-<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / UTM zone 22S
-<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / Peru west zone
-<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.999830 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / Peru central zone
-<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.999330 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs no_defs <>
-# PSAD56 / Peru east zone
-<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.999530 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs no_defs <>
-# Leigon / Ghana Metre Grid
-<25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs no_defs <>
-# Lome / UTM zone 31N
-<25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Luzon 1911 / Philippines zone I
-<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Luzon 1911 / Philippines zone II
-<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Luzon 1911 / Philippines zone III
-<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Luzon 1911 / Philippines zone IV
-<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Luzon 1911 / Philippines zone V
-<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <>
-# Makassar (Jakarta) / NEIEZ
-<25700> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 28N
-<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 29N
-<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 30N
-<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 31N
-<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 32N
-<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 33N
-<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 34N
-<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 35N
-<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 36N
-<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 37N
-<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / UTM zone 38N
-<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs no_defs <>
-# ETRS89 / TM Baltic93
-<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# Malongo 1987 / UTM zone 32S
-<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs no_defs <>
-# Merchich / Nord Maroc
-<26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <>
-# Merchich / Sud Maroc
-<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <>
-# Merchich / Sahara
-<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <>
-# Massawa / UTM zone 37N
-<26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs no_defs <>
-# Minna / UTM zone 31N
-<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Minna / UTM zone 32N
-<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Minna / Nigeria West Belt
-<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.999750 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Minna / Nigeria Mid Belt
-<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.999750 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Minna / Nigeria East Belt
-<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.999750 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Mhast / UTM zone 32S
-<26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs no_defs <>
-# Monte Mario (Rome) / Italy zone 1
-<26591> +proj=tmerc +lat_0=0 +lon_0=21.45233333333333 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <>
-# Monte Mario (Rome) / Italy zone 2
-<26592> +proj=tmerc +lat_0=0 +lon_0=27.45233333333333 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <>
-# M'poraloko / UTM zone 32N
-<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# M'poraloko / UTM zone 32S
-<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 3N
-<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 4N
-<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 5N
-<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 6N
-<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 7N
-<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 8N
-<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 9N
-<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 10N
-<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 11N
-<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 12N
-<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 13N
-<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 14N
-<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 15N
-<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 16N
-<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 17N
-<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 18N
-<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 19N
-<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 20N
-<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 21N
-<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / UTM zone 22N
-<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / Alabama East
-<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alabama West
-<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 1
-<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 2
-<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 3
-<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 4
-<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 5
-<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 6
-<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 7
-<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 8
-<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 9
-<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Alaska zone 10
-<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone I
-<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone II
-<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone III
-<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone IV
-<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone V
-<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone VI
-<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California zone VII
-<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Arizona East
-<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Arizona Central
-<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Arizona West
-<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Arkansas North
-<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Arkansas South
-<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Colorado North
-<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Colorado Central
-<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Colorado South
-<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Connecticut
-<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Delaware
-<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Florida East
-<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Florida West
-<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Florida North
-<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Georgia East
-<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Georgia West
-<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Idaho East
-<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Idaho Central
-<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Idaho West
-<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Illinois East
-<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Illinois West
-<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Indiana East
-<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Indiana West
-<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Iowa North
-<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Iowa South
-<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Kansas North
-<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Kansas South
-<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Kentucky North
-<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Kentucky South
-<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Louisiana North
-<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Louisiana South
-<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Maine East
-<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Maine West
-<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Maryland
-<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Massachusetts Mainland
-<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Massachusetts Island
-<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Minnesota North
-<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Minnesota Central
-<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Minnesota South
-<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Mississippi East
-<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Mississippi West
-<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Missouri East
-<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Missouri Central
-<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Missouri West
-<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan East
-<26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999943 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan Old Central
-<26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan West
-<26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan North
-<26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan Central
-<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD Michigan / Michigan South
-<26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD83 / UTM zone 3N
-<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 4N
-<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 5N
-<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 6N
-<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 7N
-<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 8N
-<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 9N
-<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 10N
-<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 11N
-<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 12N
-<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 13N
-<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 14N
-<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 15N
-<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 16N
-<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 17N
-<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 18N
-<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 19N
-<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 20N
-<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 21N
-<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 22N
-<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / UTM zone 23N
-<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alabama East
-<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alabama West
-<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 1
-<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 2
-<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 3
-<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 4
-<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 5
-<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 6
-<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 7
-<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 8
-<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 9
-<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Alaska zone 10
-<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 1
-<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 2
-<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 3
-<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 4
-<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 5
-<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / California zone 6
-<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Arizona East
-<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Arizona Central
-<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Arizona West
-<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Arkansas North
-<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Arkansas South
-<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Colorado North
-<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Colorado Central
-<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Colorado South
-<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Connecticut
-<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Delaware
-<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Florida East
-<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Florida West
-<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Florida North
-<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Hawaii zone 1
-<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Hawaii zone 2
-<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Hawaii zone 3
-<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Hawaii zone 4
-<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Hawaii zone 5
-<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Georgia East
-<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Georgia West
-<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Idaho East
-<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Idaho Central
-<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Idaho West
-<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Illinois East
-<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Illinois West
-<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Indiana East
-<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Indiana West
-<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Iowa North
-<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Iowa South
-<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Kansas North
-<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Kansas South
-<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Kentucky North
-<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Kentucky South
-<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Louisiana North
-<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Louisiana South
-<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Maine East
-<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Maine West
-<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Maryland
-<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Massachusetts Mainland
-<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Massachusetts Island
-<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Michigan North
-<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Michigan Central
-<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Michigan South
-<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Minnesota North
-<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Minnesota Central
-<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Minnesota South
-<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Mississippi East
-<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Mississippi West
-<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Missouri East
-<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Missouri Central
-<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Missouri West
-<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# Nahrwan 1967 / UTM zone 38N
-<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nahrwan 1967 / UTM zone 39N
-<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nahrwan 1967 / UTM zone 40N
-<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Naparima 1972 / UTM zone 20N
-<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / New Zealand Map Grid
-<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Mount Eden Circuit
-<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.999900 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Bay of Plenty Circuit
-<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Poverty Bay Circuit
-<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Hawkes Bay Circuit
-<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Taranaki Circuit
-<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Tuhirangi Circuit
-<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Wanganui Circuit
-<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Wairarapa Circuit
-<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Wellington Circuit
-<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Collingwood Circuit
-<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Nelson Circuit
-<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Karamea Circuit
-<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Buller Circuit
-<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Grey Circuit
-<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Amuri Circuit
-<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Marlborough Circuit
-<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Hokitika Circuit
-<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Okarito Circuit
-<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Jacksons Bay Circuit
-<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Mount Pleasant Circuit
-<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Gawler Circuit
-<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Timaru Circuit
-<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Lindis Peak Circuit
-<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Mount Nicholas Circuit
-<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Mount York Circuit
-<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Observation Point Circuit
-<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / North Taieri Circuit
-<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.999960 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / Bluff Circuit
-<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1.000000 +x_0=300002.66 +y_0=699999.58 +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / UTM zone 58S
-<27258> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / UTM zone 59S
-<27259> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / UTM zone 60S
-<27260> +proj=utm +zone=60 +south +ellps=intl +units=m +no_defs no_defs <>
-# NZGD49 / North Island Grid
-<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1.000000 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <>
-# NZGD49 / South Island Grid
-<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1.000000 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone I
-<27391> +proj=tmerc +lat_0=58 +lon_0=6.056250000000003 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone II
-<27392> +proj=tmerc +lat_0=58 +lon_0=8.389583333333336 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone III
-<27393> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone IV
-<27394> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone V
-<27395> +proj=tmerc +lat_0=58 +lon_0=16.88958333333334 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone VI
-<27396> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone VII
-<27397> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# NGO 1948 (Oslo) / NGO zone VIII
-<27398> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <>
-# Datum 73 / UTM zone 29N
-<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <>
-# Datum 73 / Modified Portuguese Grid
-<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs no_defs <>
-# ATF (Paris) / Nord de Guerre
-<27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=7.737229170000001 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert Nord France
-<27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert Centre France
-<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert Sud France
-<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert Corse
-<27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert zone I
-<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert zone II
-<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert zone III
-<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Lambert zone IV
-<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / France I
-<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / France II
-<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / France III
-<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / France IV
-<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Nord France
-<27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Centre France
-<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Sud France
-<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# NTF (Paris) / Corse
-<27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# OSGB 1936 / British National Grid
-<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs no_defs <>
-# Palestine 1923 / Palestine Grid
-<28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <>
-# Palestine 1923 / Palestine Belt
-<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1.000000 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <>
-# Palestine 1923 / Israeli CS Grid
-<28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <>
-# Pointe Noire / UTM zone 32S
-<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 48
-<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 49
-<28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 50
-<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 51
-<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 52
-<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 53
-<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 54
-<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 55
-<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 56
-<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 57
-<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# GDA94 / MGA zone 58
-<28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 2
-<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 3
-<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 4
-<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 5
-<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 6
-<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 7
-<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 8
-<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 9
-<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 10
-<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 11
-<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 12
-<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 13
-<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 14
-<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 15
-<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 16
-<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 17
-<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 18
-<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 19
-<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 20
-<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 21
-<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 22
-<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 23
-<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 24
-<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 25
-<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 26
-<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 27
-<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 28
-<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 29
-<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 30
-<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 31
-<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger zone 32
-<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 2N
-<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 3N
-<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 4N
-<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 5N
-<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 6N
-<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 7N
-<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 8N
-<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 9N
-<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 10N
-<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 11N
-<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 12N
-<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 13N
-<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 14N
-<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 15N
-<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 16N
-<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 17N
-<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 18N
-<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 19N
-<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 20N
-<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 21N
-<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 22N
-<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 23N
-<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 24N
-<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 25N
-<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 26N
-<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 27N
-<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 28N
-<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 29N
-<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 30N
-<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 31N
-<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Pulkovo 1942 / Gauss-Kruger 32N
-<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <>
-# Qatar 1974 / Qatar National Grid
-<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs no_defs <>
-# Amersfoort / RD Old
-<28991> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Amersfoort / RD New
-<28992> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs no_defs <>
-# SAD69 / Brazil Polyconic
-<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 18N
-<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 19N
-<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 20N
-<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 21N
-<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 22N
-<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 17S
-<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 18S
-<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 19S
-<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 20S
-<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 21S
-<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 22S
-<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 23S
-<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 24S
-<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# SAD69 / UTM zone 25S
-<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs no_defs <>
-# Sapper Hill 1943 / UTM zone 20S
-<29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <>
-# Sapper Hill 1943 / UTM zone 21S
-<29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <>
-# Schwarzeck / UTM zone 33S
-<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs no_defs <>
-# South West African Coord. System zone 11
-# South West African Coord. System zone 13
-# South West African Coord. System zone 15
-# South West African Coord. System zone 17
-# South West African Coord. System zone 19
-# South West African Coord. System zone 21
-# South West African Coord. System zone 23
-# South West African Coord. System zone 25
-# Sudan / UTM zone 35N
-<29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Sudan / UTM zone 36N
-<29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Tananarive (Paris) / Laborde Grid
-<29700> +proj=omerc +lat_0=-18.9 +lonc=46.43722917000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs no_defs <>
-# Tananarive / UTM zone 38S
-<29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <>
-# Tananarive / UTM zone 39S
-<29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <>
-# Timbalai 1948 / UTM zone 49N
-<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs no_defs <>
-# Timbalai 1948 / UTM zone 50N
-<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs no_defs <>
-# Timbalai 1948 / R.S.O. Borneo (ch)
-<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs no_defs <>
-# Timbalai 1948 / R.S.O. Borneo (ft)
-<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs no_defs <>
-# Timbalai 1948 / R.S.O. Borneo (m)
-<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs no_defs <>
-# TM65 / Irish National Grid
-<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <>
-# OSNI 1952 / Irish National Grid
-<29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000000 +x_0=200000 +y_0=250000 +ellps=airy +units=m +no_defs no_defs <>
-# TM65 / Irish Grid
-<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <>
-# TM75 / Irish Grid
-<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS I
-<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS II
-<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS III
-<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS IV
-<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS V
-<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS VI
-<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS VII
-<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS VIII
-<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS IX
-<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS X
-<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XI
-<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XII
-<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIII
-<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIV
-<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XV
-<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVI
-<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVII
-<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XVIII
-<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Tokyo / Japan Plane Rectangular CS XIX
-<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Trinidad 1903 / Trinidad Grid
-<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380700001 +y_0=65379.0133425 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.2011661949 +no_defs no_defs <>
-# TC(1948) / UTM zone 39N
-<30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs no_defs <>
-# TC(1948) / UTM zone 40N
-<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs no_defs <>
-# Voirol 1875 / Nord Algerie (ancienne)
-<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <>
-# Voirol 1875 / Sud Algerie (ancienne)
-<30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / UTM zone 29N
-<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / UTM zone 30N
-<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / UTM zone 31N
-<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / UTM zone 32N
-<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / Voirol Unifie Nord
-<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <>
-# Nord Sahara 1959 / Voirol Unifie Sud
-<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <>
-# RT38 2.5 gon W
-<30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Yoff / UTM zone 28N
-<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <>
-# Zanderij / UTM zone 21N
-<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <>
-# Zanderij / TM 54 NW
-<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <>
-# Zanderij / Suriname Old TM
-<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <>
-# Zanderij / Suriname TM
-<31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999900 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <>
-# MGI / 3-degree Gauss zone 5
-<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / 3-degree Gauss zone 6
-<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / 3-degree Gauss zone 7
-<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / 3-degree Gauss zone 8
-<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Balkans zone 5
-<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Balkans zone 6
-<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999900 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Balkans zone 7
-<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Balkans zone 8
-<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Balkans zone 8
-<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999900 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria West Zone
-<31281> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria Central Zone
-<31282> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria East Zone
-<31283> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI / M28
-<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / M31
-<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / M34
-<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Austria Lambert
-<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria West Zone
-<31291> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria Central Zone
-<31292> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI (Ferro) / Austria East Zone
-<31293> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <>
-# MGI / M28
-<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / M31
-<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / M34
-<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# MGI / Austria Lambert
-<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <>
-# Belge 1972 / Belge Lambert 72
-<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs no_defs <>
-# Belge 1972 / Belgian Lambert 72
-<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +units=m +no_defs no_defs <>
-# DHDN / 3-degree Gauss zone 1
-<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / 3-degree Gauss zone 2
-<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / 3-degree Gauss zone 3
-<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / 3-degree Gauss zone 4
-<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / 3-degree Gauss zone 5
-<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / Gauss-Kruger zone 2
-<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / Gauss-Kruger zone 3
-<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / Gauss-Kruger zone 4
-<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# DHDN / Gauss-Kruger zone 5
-<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# Conakry 1905 / UTM zone 28N
-<31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <>
-# Conakry 1905 / UTM zone 29N
-<31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <>
-# Dealul Piscului 1933/ Stereo 33
-<31600> +proj=stere +lat_0=45.9 +lon_0=25.39246588888889 +k=0.999667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs no_defs <>
-# Dealul Piscului 1970/ Stereo 70
-<31700> +proj=stere +lat_0=46 +lon_0=25 +k=0.999750 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs no_defs <>
-# NGN / UTM zone 38N
-<31838> +proj=utm +zone=38 +ellps=WGS84 +units=m +no_defs no_defs <>
-# NGN / UTM zone 39N
-<31839> +proj=utm +zone=39 +ellps=WGS84 +units=m +no_defs no_defs <>
-# KUDAMS / KTM
-<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 17N
-<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 18N
-<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 19N
-<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 20N
-<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 21N
-<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 22N
-<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 17S
-<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 18S
-<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 19S
-<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 20S
-<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 21S
-<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 22S
-<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 23S
-<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 24S
-<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# SIRGAS / UTM zone 25S
-<32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>
-# NAD27 / Montana North
-<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Montana Central
-<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Montana South
-<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Nebraska North
-<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Nebraska South
-<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Nevada East
-<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Nevada Central
-<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Nevada West
-<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New Hampshire
-<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New Jersey
-<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.999975 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New Mexico East
-<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New Mexico Central
-<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New Mexico West
-<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New York East
-<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New York Central
-<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New York West
-<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / New York Long Island
-<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / North Carolina
-<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / North Dakota North
-<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / North Dakota South
-<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Ohio North
-<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Ohio South
-<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Oklahoma North
-<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Oklahoma South
-<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Oregon North
-<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Oregon South
-<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Pennsylvania North
-<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Pennsylvania South
-<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Rhode Island
-<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / South Carolina North
-<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / South Carolina South
-<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / South Dakota North
-<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / South Dakota South
-<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Tennessee
-<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Texas North
-<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Texas North Central
-<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Texas Central
-<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Texas South Central
-<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Texas South
-<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Utah North
-<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Utah Central
-<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Utah South
-<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Vermont
-<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Virginia North
-<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Virginia South
-<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Washington North
-<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Washington South
-<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / West Virginia North
-<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / West Virginia South
-<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wisconsin North
-<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wisconsin Central
-<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wisconsin South
-<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wyoming East
-<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wyoming East Central
-<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wyoming West Central
-<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Wyoming West
-<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / Guatemala Norte
-<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / Guatemala Sur
-<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / BLM 14N (ftUS)
-<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 15N (ftUS)
-<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 16N (ftUS)
-<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 17N (ftUS)
-<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 14N (feet)
-<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 15N (feet)
-<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 16N (feet)
-<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / BLM 17N (feet)
-<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / MTM zone 1
-<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / MTM zone 2
-<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / MTM zone 3
-<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / MTM zone 4
-<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / MTM zone 5
-<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / MTM zone 6
-<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD27 / Quebec Lambert
-<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD83 / Montana
-<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Nebraska
-<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Nevada East
-<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Nevada Central
-<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Nevada West
-<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New Hampshire
-<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New Jersey
-<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New Mexico East
-<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New Mexico Central
-<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New Mexico West
-<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New York East
-<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New York Central
-<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New York West
-<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / New York Long Island
-<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / North Carolina
-<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / North Dakota North
-<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / North Dakota South
-<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Ohio North
-<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Ohio South
-<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Oklahoma North
-<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Oklahoma South
-<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Oregon North
-<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Oregon South
-<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Pennsylvania North
-<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Pennsylvania South
-<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Rhode Island
-<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / South Carolina
-<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / South Dakota North
-<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / South Dakota South
-<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Tennessee
-<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas North
-<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas North Central
-<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas Central
-<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas South Central
-<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas South
-<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Utah North
-<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Utah Central
-<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Utah South
-<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Vermont
-<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Virginia North
-<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Virginia South
-<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Washington North
-<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Washington South
-<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / West Virginia North
-<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / West Virginia South
-<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wisconsin North
-<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wisconsin Central
-<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wisconsin South
-<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wyoming East
-<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wyoming East Central
-<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wyoming West Central
-<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Wyoming West
-<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Puerto Rico & Virgin Is.
-<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / SCoPQ zone 2
-<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 1
-<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 2
-<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 3
-<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 4
-<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 5
-<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 6
-<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 7
-<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 8
-<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 9
-<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 10
-<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 11
-<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 12
-<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 13
-<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 14
-<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 15
-<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 16
-<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 17
-<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Quebec Lambert
-<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 1N
-<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 2N
-<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 3N
-<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 4N
-<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 5N
-<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 6N
-<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 7N
-<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 8N
-<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 9N
-<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 10N
-<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 11N
-<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 12N
-<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 13N
-<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 14N
-<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 15N
-<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 16N
-<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 17N
-<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 18N
-<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 19N
-<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 20N
-<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 21N
-<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 22N
-<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 23N
-<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 24N
-<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 25N
-<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 26N
-<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 27N
-<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 28N
-<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 29N
-<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 30N
-<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 31N
-<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 32N
-<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 33N
-<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 34N
-<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 35N
-<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 36N
-<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 37N
-<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 38N
-<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 39N
-<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 40N
-<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 41N
-<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 42N
-<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 43N
-<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 44N
-<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 45N
-<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 46N
-<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 47N
-<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 48N
-<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 49N
-<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 50N
-<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 51N
-<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 52N
-<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 53N
-<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 54N
-<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 55N
-<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 56N
-<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 57N
-<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 58N
-<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 59N
-<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 60N
-<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 1S
-<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 2S
-<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 3S
-<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 4S
-<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 5S
-<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 6S
-<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 7S
-<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 8S
-<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 9S
-<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 10S
-<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 11S
-<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 12S
-<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 13S
-<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 14S
-<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 15S
-<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 16S
-<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 17S
-<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 18S
-<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 19S
-<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 20S
-<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 21S
-<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 22S
-<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 23S
-<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 24S
-<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 25S
-<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 26S
-<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 27S
-<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 28S
-<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 29S
-<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 30S
-<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 31S
-<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 32S
-<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 33S
-<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 34S
-<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 35S
-<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 36S
-<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 37S
-<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 38S
-<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 39S
-<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 40S
-<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 41S
-<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 42S
-<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 43S
-<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 44S
-<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 45S
-<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 46S
-<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 47S
-<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 48S
-<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 49S
-<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 50S
-<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 51S
-<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 52S
-<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 53S
-<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 54S
-<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 55S
-<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 56S
-<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 57S
-<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 58S
-<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 59S
-<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72 / UTM zone 60S
-<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 1N
-<32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 2N
-<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 3N
-<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 4N
-<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 5N
-<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 6N
-<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 7N
-<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 8N
-<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 9N
-<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 10N
-<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 11N
-<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 12N
-<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 13N
-<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 14N
-<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 15N
-<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 16N
-<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 17N
-<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 18N
-<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 19N
-<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 20N
-<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 21N
-<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 22N
-<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 23N
-<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 24N
-<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 25N
-<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 26N
-<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 27N
-<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 28N
-<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 29N
-<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 30N
-<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 31N
-<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 32N
-<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 33N
-<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 34N
-<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 35N
-<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 36N
-<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 37N
-<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 38N
-<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 39N
-<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 40N
-<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 41N
-<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 42N
-<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 43N
-<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 44N
-<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 45N
-<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 46N
-<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 47N
-<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 48N
-<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 49N
-<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 50N
-<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 51N
-<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 52N
-<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 53N
-<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 54N
-<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 55N
-<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 56N
-<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 57N
-<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 58N
-<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 59N
-<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 60N
-<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 1S
-<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 2S
-<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 3S
-<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 4S
-<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 5S
-<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 6S
-<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 7S
-<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 8S
-<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 9S
-<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 10S
-<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 11S
-<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 12S
-<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 13S
-<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 14S
-<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 15S
-<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 16S
-<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 17S
-<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 18S
-<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 19S
-<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 20S
-<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 21S
-<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 22S
-<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 23S
-<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 24S
-<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 25S
-<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 26S
-<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 27S
-<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 28S
-<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 29S
-<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 30S
-<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 31S
-<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 32S
-<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 33S
-<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 34S
-<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 35S
-<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 36S
-<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 37S
-<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 38S
-<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 39S
-<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 40S
-<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 41S
-<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 42S
-<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 43S
-<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 44S
-<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 45S
-<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 46S
-<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 47S
-<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 48S
-<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 49S
-<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 50S
-<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 51S
-<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 52S
-<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 53S
-<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 54S
-<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 55S
-<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 56S
-<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 57S
-<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 58S
-<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 59S
-<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 72BE / UTM zone 60S
-<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 1N
-<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 2N
-<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 3N
-<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 4N
-<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 5N
-<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 6N
-<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 7N
-<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 8N
-<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 9N
-<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 10N
-<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 11N
-<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 12N
-<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 13N
-<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 14N
-<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 15N
-<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 16N
-<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 17N
-<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 18N
-<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 19N
-<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 20N
-<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 21N
-<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 22N
-<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 23N
-<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 24N
-<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 25N
-<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 26N
-<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 27N
-<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 28N
-<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 29N
-<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 30N
-<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 31N
-<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 32N
-<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 33N
-<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 34N
-<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 35N
-<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 36N
-<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 37N
-<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 38N
-<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 39N
-<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 40N
-<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 41N
-<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 42N
-<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 43N
-<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 44N
-<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 45N
-<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 46N
-<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 47N
-<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 48N
-<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 49N
-<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 50N
-<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 51N
-<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 52N
-<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 53N
-<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 54N
-<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 55N
-<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 56N
-<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 57N
-<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 58N
-<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 59N
-<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 60N
-<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UPS North
-<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 1S
-<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 2S
-<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 3S
-<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 4S
-<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 5S
-<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 6S
-<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 7S
-<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 8S
-<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 9S
-<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 10S
-<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 11S
-<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 12S
-<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 13S
-<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 14S
-<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 15S
-<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 16S
-<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 17S
-<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 18S
-<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 19S
-<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 20S
-<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 21S
-<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 22S
-<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 23S
-<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 24S
-<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 25S
-<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 26S
-<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 27S
-<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 28S
-<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 29S
-<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 30S
-<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 31S
-<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 32S
-<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 33S
-<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 34S
-<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 35S
-<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 36S
-<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 37S
-<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 38S
-<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 39S
-<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 40S
-<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 41S
-<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 42S
-<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 43S
-<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 44S
-<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 45S
-<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 46S
-<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 47S
-<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 48S
-<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 49S
-<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 50S
-<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 51S
-<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 52S
-<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 53S
-<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 54S
-<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 55S
-<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 56S
-<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 57S
-<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 58S
-<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 59S
-<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UTM zone 60S
-<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / UPS South
-<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS 84 / TM 36 SE
-<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# Pulkovo 1995 GK Zone 2
-<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 3
-<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 2N
-<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 3N
-<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# La Canoa UTM Zone 21N
-<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <>
-# NAD 1927 StatePlane Hawaii 1 FIPS 5101
-<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 2 FIPS 5102
-<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 3 FIPS 5103
-<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 4 FIPS 5104
-<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 5 FIPS 5105
-<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan North FIPS 2111
-<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan Central FIPS 2112
-<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan South FIPS 2113
-<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# Nord Algerie
-<30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Sud Algerie
-<30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Germany Zone 1
-<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 2
-<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 3
-<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 4
-<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 5
-<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# NAD 1927 StatePlane Puerto Rico FIPS 5201
-<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202
-<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# Sphere Plate Carree
-<53001> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Equidistant Cylindrical
-<53002> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Miller Cylindrical
-<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Mercator
-<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Sinusoidal
-<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Mollweide
-<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert VI
-<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert V
-<53011> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert IV
-<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert III
-<53013> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert II
-<53014> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert I
-<53015> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Gall Stereographic
-<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Behrmann
-<53017> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Winkel I
-<53018> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Winkel II
-<53019> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Polyconic
-<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Quartic Authalic
-<53022> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Loximuthal
-<53023> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Bonne
-<53024> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Hotine
-<53025> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Stereographic
-<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Equidistant Conic
-<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Cassini
-<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Van der Grinten I
-<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Robinson
-<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Two Point Equidistant
-<53031> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Azimuthal Equidistant
-<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# World Plate Carree
-<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Equidistant Cylindrical
-<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Miller Cylindrical
-<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Mercator
-<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Sinusoidal
-<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Mollweide
-<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert VI
-<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert V
-<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert IV
-<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert III
-<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert II
-<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert I
-<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Gall Stereographic
-<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Behrmann
-<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Winkel I
-<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Winkel II
-<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Polyconic
-<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Quartic Authalic
-<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Loximuthal
-<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Bonne
-<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Hotine
-<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Stereographic
-<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Equidistant Conic
-<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Cassini
-<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Van der Grinten I
-<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Robinson
-<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Two Point Equidistant
-<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Azimuthal Equidistant
-<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# NAD 1927 StatePlane Guam FIPS 5400
-<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Guam FIPS 5400
-<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Canada Albers Equal Area Conic
-<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Canada Lambert Conformal Conic
-<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Albers Equal Area Conic
-<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Lambert Conformal Conic
-<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Equidistant Conic
-<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Alaska Albers Equal Area Conic
-<102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Hawaii Albers Equal Area Conic
-<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Albers Equal Area Conic
-<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Lambert Conformal Conic
-<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Equidistant Conic
-<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Africa Sinusoidal
-<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia Lambert Conformal Conic
-<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Europe Albers Equal Area Conic
-<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# Europe Lambert Conformal Conic
-<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# South America Lambert Conformal Conic
-<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# North Pole Azimuthal Equidistant
-<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# North Pole Lambert Azimuthal Equal Area
-<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# North Pole Stereographic
-<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Azimuthal Equidistant
-<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Lambert Azimuthal Equal Area
-<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Stereographic
-<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Albers Equal Area Conic
-<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Equidistant Conic
-<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Lambert Conformal Conic
-<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Albers Equal Area Conic
-<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Equidistant Conic
-<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Lambert Conformal Conic
-<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Albers Equal Area Conic
-<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Equidistant Conic
-<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Lambert Conformal Conic
-<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Europe Equidistant Conic
-<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# South America Equidistant Conic
-<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# South America Albers Equal Area Conic
-<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# S-JTSK Krovak
-<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <>
-# S-JTSK Ferro Krovak East North
-<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <>
-# S-JTSK Krovak East North
-<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Monte Mario Italy 1
-<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <>
-# Monte Mario Italy 2
-<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <>
-# NGO 1948 Norway Zone 1
-<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 2
-<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 3
-<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 4
-<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 5
-<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 6
-<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 7
-<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 8
-<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# RGF 1993 Lambert 93
-<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <>
-# Old Hawaiian UTM Zone 4N
-<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <>
-# Old Hawaiian UTM Zone 5N
-<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <>
-# NAD 1927 Michigan GeoRef Feet US
-<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 Michigan GeoRef Feet US
-<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 Michigan GeoRef Meters
-<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <>
-# NAD 1983 Michigan GeoRef Meters
-<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# NGO 1948 UTM Zone 32N
-<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 33N
-<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 34N
-<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 35N
-<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# Hong Kong 1980 Grid
-<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <>
-# Hong Kong 1980 UTM Zone 49N
-<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <>
-# Hong Kong 1980 UTM Zone 50N
-<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <>
-# Tokyo UTM Zone 51N
-<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 52N
-<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 53N
-<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 54N
-<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 55N
-<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 56N
-<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <>
-# Datum 73 Hayford Gauss IGeoE
-<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <>
-# Datum 73 Hayford Gauss IPCC
-<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <>
-# Graciosa Base SW 1948 UTM Zone 26N
-<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <>
-# Lisboa Bessel Bonne
-<102163> +ellps=bessel +units=m no_defs <>
-# Lisboa Hayford Gauss IGeoE
-<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <>
-# Lisboa Hayford Gauss IPCC
-<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# Observ Meteorologico 1939 UTM Zone 25N
-<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <>
-# Porto Santo 1936 UTM Zone 28N
-<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <>
-# Sao Braz UTM Zone 26N
-<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <>
-# Selvagem Grande 1938 UTM Zone 28N
-<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <>
-# Nord Maroc Degree
-<102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sud Maroc Degree
-<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sahara Degree
-<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Alabama East FIPS 0101
-<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Alabama West FIPS 0102
-<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California I FIPS 0401
-<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California II FIPS 0402
-<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California III FIPS 0403
-<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California IV FIPS 0404
-<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California V FIPS 0405
-<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California VI FIPS 0406
-<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona East FIPS 0201
-<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona Central FIPS 0202
-<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona West FIPS 0203
-<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arkansas North FIPS 0301
-<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arkansas South FIPS 0302
-<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado North FIPS 0501
-<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado Central FIPS 0502
-<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado South FIPS 0503
-<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Connecticut FIPS 0600
-<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Delaware FIPS 0700
-<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida East FIPS 0901
-<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida West FIPS 0902
-<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida North FIPS 0903
-<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101
-<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102
-<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103
-<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104
-<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105
-<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Georgia East FIPS 1001
-<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Georgia West FIPS 1002
-<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho East FIPS 1101
-<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho Central FIPS 1102
-<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho West FIPS 1103
-<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Illinois East FIPS 1201
-<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Illinois West FIPS 1202
-<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Indiana East FIPS 1301
-<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Indiana West FIPS 1302
-<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kansas North FIPS 1501
-<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kansas South FIPS 1502
-<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kentucky North FIPS 1601
-<102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kentucky South FIPS 1602
-<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Louisiana North FIPS 1701
-<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Louisiana South FIPS 1702
-<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maine East FIPS 1801
-<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maine West FIPS 1802
-<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maryland FIPS 1900
-<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001
-<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002
-<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan North FIPS 2111
-<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan Central FIPS 2112
-<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan South FIPS 2113
-<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota North FIPS 2201
-<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202
-<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota South FIPS 2203
-<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Mississippi East FIPS 2301
-<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Mississippi West FIPS 2302
-<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri East FIPS 2401
-<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri Central FIPS 2402
-<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri West FIPS 2403
-<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Montana FIPS 2500
-<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nebraska FIPS 2600
-<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada East FIPS 2701
-<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada Central FIPS 2702
-<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada West FIPS 2703
-<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Hampshire FIPS 2800
-<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Jersey FIPS 2900
-<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico East FIPS 3001
-<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002
-<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico West FIPS 3003
-<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York East FIPS 3101
-<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York Central FIPS 3102
-<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York West FIPS 3103
-<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York Long Island FIPS 3104
-<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane North Dakota North FIPS 3301
-<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane North Dakota South FIPS 3302
-<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Ohio North FIPS 3401
-<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Ohio South FIPS 3402
-<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501
-<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502
-<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oregon North FIPS 3601
-<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oregon South FIPS 3602
-<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Rhode Island FIPS 3800
-<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane South Dakota North FIPS 4001
-<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane South Dakota South FIPS 4002
-<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Tennessee FIPS 4100
-<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas North FIPS 4201
-<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas North Central FIPS 4202
-<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas Central FIPS 4203
-<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas South Central FIPS 4204
-<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas South FIPS 4205
-<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah North FIPS 4301
-<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah Central FIPS 4302
-<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah South FIPS 4303
-<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Vermont FIPS 4400
-<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Virginia North FIPS 4501
-<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Virginia South FIPS 4502
-<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Washington North FIPS 4601
-<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Washington South FIPS 4602
-<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane West Virginia North FIPS 4701
-<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane West Virginia South FIPS 4702
-<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801
-<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802
-<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803
-<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming East FIPS 4901
-<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902
-<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903
-<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming West FIPS 4904
-<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200
-<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <>
-# Nord Algerie Ancienne Degree
-<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sud Algerie Ancienne Degree
-<102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France I degrees
-<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France II degrees
-<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France III degrees
-<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France IV degrees
-<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Nord Algerie Degree
-<102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Sud Algerie Degree
-<102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# NAD 1983 StatePlane Alabama East FIPS 0101 Feet
-<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alabama West FIPS 0102 Feet
-<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet
-<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet
-<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet
-<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet
-<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet
-<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet
-<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet
-<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet
-<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet
-<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet
-<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California I FIPS 0401 Feet
-<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California II FIPS 0402 Feet
-<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California III FIPS 0403 Feet
-<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California IV FIPS 0404 Feet
-<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California V FIPS 0405 Feet
-<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California VI FIPS 0406 Feet
-<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona East FIPS 0201 Feet
-<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet
-<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona West FIPS 0203 Feet
-<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet
-<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet
-<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado North FIPS 0501 Feet
-<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet
-<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado South FIPS 0503 Feet
-<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Connecticut FIPS 0600 Feet
-<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Delaware FIPS 0700 Feet
-<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida East FIPS 0901 Feet
-<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida West FIPS 0902 Feet
-<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida North FIPS 0903 Feet
-<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet
-<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet
-<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet
-<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet
-<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet
-<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Georgia East FIPS 1001 Feet
-<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Georgia West FIPS 1002 Feet
-<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho East FIPS 1101 Feet
-<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet
-<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho West FIPS 1103 Feet
-<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Illinois East FIPS 1201 Feet
-<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Illinois West FIPS 1202 Feet
-<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Indiana East FIPS 1301 Feet
-<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Indiana West FIPS 1302 Feet
-<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Iowa North FIPS 1401 Feet
-<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Iowa South FIPS 1402 Feet
-<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kansas North FIPS 1501 Feet
-<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kansas South FIPS 1502 Feet
-<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet
-<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet
-<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet
-<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet
-<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maine East FIPS 1801 Feet
-<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maine West FIPS 1802 Feet
-<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maryland FIPS 1900 Feet
-<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet
-<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet
-<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan North FIPS 2111 Feet
-<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet
-<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan South FIPS 2113 Feet
-<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet
-<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet
-<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet
-<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet
-<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet
-<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri East FIPS 2401 Feet
-<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet
-<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri West FIPS 2403 Feet
-<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Montana FIPS 2500 Feet
-<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nebraska FIPS 2600 Feet
-<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada East FIPS 2701 Feet
-<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet
-<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada West FIPS 2703 Feet
-<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet
-<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Jersey FIPS 2900 Feet
-<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet
-<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet
-<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet
-<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York East FIPS 3101 Feet
-<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York Central FIPS 3102 Feet
-<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York West FIPS 3103 Feet
-<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet
-<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Carolina FIPS 3200 Feet
-<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet
-<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet
-<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Ohio North FIPS 3401 Feet
-<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Ohio South FIPS 3402 Feet
-<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet
-<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet
-<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oregon North FIPS 3601 Feet
-<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oregon South FIPS 3602 Feet
-<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet
-<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet
-<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet
-<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Carolina FIPS 3900 Feet
-<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet
-<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet
-<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Tennessee FIPS 4100 Feet
-<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas North FIPS 4201 Feet
-<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet
-<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas Central FIPS 4203 Feet
-<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet
-<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas South FIPS 4205 Feet
-<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah North FIPS 4301 Feet
-<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah Central FIPS 4302 Feet
-<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah South FIPS 4303 Feet
-<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Vermont FIPS 4400 Feet
-<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Virginia North FIPS 4501 Feet
-<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Virginia South FIPS 4502 Feet
-<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Washington North FIPS 4601 Feet
-<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Washington South FIPS 4602 Feet
-<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet
-<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet
-<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet
-<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet
-<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet
-<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet
-<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet
-<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet
-<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet
-<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet
-<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Guam FIPS 5400 Feet
-<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# Belge Lambert 1972
-<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <>
-# GCS International 1967
-<4023> +proj=longlat +ellps=aust_SA no_defs <>
-# GCS Bern 1898
-<4217> +proj=longlat +ellps=bessel no_defs <>
-# GCS Voirol Unifie 1960
-<4305> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Montserrat 1958
-<4404> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Voirol Unifie 1960 Paris
-<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <>
-# GCS WGS 1966
-<37001> +proj=longlat +ellps=WGS66 no_defs <>
-# GCS Fischer 1960
-<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <>
-# GCS Fischer 1968
-<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <>
-# GCS Fischer Modified
-<37004> +proj=longlat +ellps=fschr60m no_defs <>
-# GCS Hough 1960
-<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <>
-# GCS Everest Modified 1969
-<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <>
-# GCS Walbeck
-<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <>
-# GCS Sphere ARC INFO
-<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <>
-# GCS European 1979
-<37201> +proj=longlat +ellps=intl no_defs <>
-# GCS Everest Bangladesh
-<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <>
-# GCS Everest India Nepal
-<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <>
-# GCS Hjorsey 1955
-<37204> +proj=longlat +ellps=intl no_defs <>
-# GCS Hong Kong 1963
-<37205> +proj=longlat +ellps=intl no_defs <>
-# GCS Oman
-<37206> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS South Asia Singapore
-<37207> +proj=longlat +ellps=fschr60m no_defs <>
-# GCS Ayabelle
-<37208> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Point 58
-<37211> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Beacon E 1945
-<37212> +proj=longlat +ellps=intl no_defs <>
-# GCS Tern Island 1961
-<37213> +proj=longlat +ellps=intl no_defs <>
-# GCS Astro 1952
-<37214> +proj=longlat +ellps=intl no_defs <>
-# GCS Bellevue IGN
-<37215> +proj=longlat +ellps=intl no_defs <>
-# GCS Canton 1966
-<37216> +proj=longlat +ellps=intl no_defs <>
-# GCS Chatham Island 1971
-<37217> +proj=longlat +ellps=intl no_defs <>
-# GCS DOS 1968
-<37218> +proj=longlat +ellps=intl no_defs <>
-# GCS Easter Island 1967
-<37219> +proj=longlat +ellps=intl no_defs <>
-# GCS Guam 1963
-<37220> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS GUX 1
-<37221> +proj=longlat +ellps=intl no_defs <>
-# GCS Johnston Island 1961
-<37222> +proj=longlat +ellps=intl no_defs <>
-# GCS Carthage Degree
-<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Midway 1961
-<37224> +proj=longlat +ellps=intl no_defs <>
-# GCS Pitcairn 1967
-<37226> +proj=longlat +ellps=intl no_defs <>
-# GCS Santo DOS 1965
-<37227> +proj=longlat +ellps=intl no_defs <>
-# GCS Viti Levu 1916
-<37228> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Wake Eniwetok 1960
-<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <>
-# GCS Wake Island 1952
-<37230> +proj=longlat +ellps=intl no_defs <>
-# GCS Anna 1 1965
-<37231> +proj=longlat +ellps=aust_SA no_defs <>
-# GCS Gan 1970
-<37232> +proj=longlat +ellps=intl no_defs <>
-# GCS ISTS 073 1969
-<37233> +proj=longlat +ellps=intl no_defs <>
-# GCS Kerguelen Island 1949
-<37234> +proj=longlat +ellps=intl no_defs <>
-# GCS Reunion
-<37235> +proj=longlat +ellps=intl no_defs <>
-# GCS Ascension Island 1958
-<37237> +proj=longlat +ellps=intl no_defs <>
-# GCS DOS 71 4
-<37238> +proj=longlat +ellps=intl no_defs <>
-# GCS Cape Canaveral
-<37239> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Fort Thomas 1955
-<37240> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Graciosa Base SW 1948
-<37241> +proj=longlat +ellps=intl no_defs <>
-# GCS ISTS 061 1968
-<37242> +proj=longlat +ellps=intl no_defs <>
-# GCS LC5 1961
-<37243> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Observ Meteorologico 1939
-<37245> +proj=longlat +ellps=intl no_defs <>
-# GCS Pico de Las Nieves
-<37246> +proj=longlat +ellps=intl no_defs <>
-# GCS Porto Santo 1936
-<37247> +proj=longlat +ellps=intl no_defs <>
-# GCS Sao Braz
-<37249> +proj=longlat +ellps=intl no_defs <>
-# GCS Selvagem Grande 1938
-<37250> +proj=longlat +ellps=intl no_defs <>
-# GCS Tristan 1968
-<37251> +proj=longlat +ellps=intl no_defs <>
-# GCS Samoa 1962
-<37252> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Camp Area
-<37253> +proj=longlat +ellps=intl no_defs <>
-# GCS Deception Island
-<37254> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Gunung Segara
-<37255> +proj=longlat +ellps=bessel no_defs <>
-# GCS S42 Hungary
-<37257> +proj=longlat +ellps=krass no_defs <>
-# GCS Kusaie 1951
-<37259> +proj=longlat +ellps=intl no_defs <>
-# GCS Alaskan Islands
-<37260> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Assumed Geographic 1
-<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <>
-# GCS Estonia 1937
-<104101> +proj=longlat +ellps=bessel no_defs <>
-# GCS Hermannskogel
-<104102> +proj=longlat +ellps=bessel no_defs <>
-# GCS Sierra Leone 1960
-<104103> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Hong Kong 1980
-<104104> +proj=longlat +ellps=intl no_defs <>
-# GCS Datum Lisboa Bessel
-<104105> +proj=longlat +ellps=bessel no_defs <>
-# GCS Datum Lisboa Hayford
-<104106> +proj=longlat +ellps=intl no_defs <>
-# GCS RGF 1993
-<104107> +proj=longlat +ellps=GRS80 no_defs <>
-# GCS NZGD 2000
-<104108> +proj=longlat +ellps=GRS80 no_defs <>
-# GCS Merchich Degree
-<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Voirol 1875 Degree
-<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Voirol Unifie 1960 Degree
-<104305> +proj=longlat +ellps=clrk80 no_defs <>
diff --git a/src/3rdparty/proj/proj_data/esri.extra b/src/3rdparty/proj/proj_data/esri.extra
deleted file mode 100644
index 2514b33c..00000000
--- a/src/3rdparty/proj/proj_data/esri.extra
+++ /dev/null
@@ -1,952 +0,0 @@
-# Pulkovo 1995 GK Zone 2
-<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 3
-<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 2N
-<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# Pulkovo 1995 GK Zone 3N
-<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <>
-# La Canoa UTM Zone 21N
-<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <>
-# NAD 1927 StatePlane Hawaii 1 FIPS 5101
-<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 2 FIPS 5102
-<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 3 FIPS 5103
-<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 4 FIPS 5104
-<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Hawaii 5 FIPS 5105
-<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan North FIPS 2111
-<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan Central FIPS 2112
-<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Michigan South FIPS 2113
-<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# Nord Algerie
-<30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Sud Algerie
-<30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Germany Zone 1
-<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 2
-<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 3
-<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 4
-<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Germany Zone 5
-<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <>
-# NAD 1927 StatePlane Puerto Rico FIPS 5201
-<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202
-<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# Sphere Plate Carree
-<53001> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Equidistant Cylindrical
-<53002> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Miller Cylindrical
-<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Mercator
-<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Sinusoidal
-<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Mollweide
-<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert VI
-<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert V
-<53011> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert IV
-<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert III
-<53013> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert II
-<53014> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Eckert I
-<53015> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Gall Stereographic
-<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Behrmann
-<53017> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Winkel I
-<53018> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Winkel II
-<53019> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Polyconic
-<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Quartic Authalic
-<53022> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Loximuthal
-<53023> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Bonne
-<53024> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Hotine
-<53025> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Stereographic
-<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Equidistant Conic
-<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Cassini
-<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Van der Grinten I
-<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Robinson
-<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Two Point Equidistant
-<53031> +a=6371000 +b=6371000 +units=m no_defs <>
-# Sphere Azimuthal Equidistant
-<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <>
-# World Plate Carree
-<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Equidistant Cylindrical
-<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Miller Cylindrical
-<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Mercator
-<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Sinusoidal
-<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Mollweide
-<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert VI
-<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert V
-<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert IV
-<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert III
-<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert II
-<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Eckert I
-<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Gall Stereographic
-<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Behrmann
-<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Winkel I
-<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Winkel II
-<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Polyconic
-<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Quartic Authalic
-<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Loximuthal
-<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Bonne
-<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Hotine
-<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Stereographic
-<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Equidistant Conic
-<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Cassini
-<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Van der Grinten I
-<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Robinson
-<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Two Point Equidistant
-<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# World Azimuthal Equidistant
-<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# NAD 1927 StatePlane Guam FIPS 5400
-<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Guam FIPS 5400
-<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Canada Albers Equal Area Conic
-<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Canada Lambert Conformal Conic
-<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Albers Equal Area Conic
-<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Lambert Conformal Conic
-<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# USA Contiguous Equidistant Conic
-<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Alaska Albers Equal Area Conic
-<102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Hawaii Albers Equal Area Conic
-<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Albers Equal Area Conic
-<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Lambert Conformal Conic
-<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# North America Equidistant Conic
-<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# Africa Sinusoidal
-<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia Lambert Conformal Conic
-<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Europe Albers Equal Area Conic
-<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# Europe Lambert Conformal Conic
-<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# South America Lambert Conformal Conic
-<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# North Pole Azimuthal Equidistant
-<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# North Pole Lambert Azimuthal Equal Area
-<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# North Pole Stereographic
-<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Azimuthal Equidistant
-<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Lambert Azimuthal Equal Area
-<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# South Pole Stereographic
-<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Albers Equal Area Conic
-<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Equidistant Conic
-<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Africa Lambert Conformal Conic
-<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Albers Equal Area Conic
-<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Equidistant Conic
-<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia North Lambert Conformal Conic
-<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Albers Equal Area Conic
-<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Equidistant Conic
-<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Asia South Lambert Conformal Conic
-<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <>
-# Europe Equidistant Conic
-<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# South America Equidistant Conic
-<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# South America Albers Equal Area Conic
-<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <>
-# S-JTSK Krovak
-<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <>
-# S-JTSK Ferro Krovak East North
-<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <>
-# S-JTSK Krovak East North
-<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <>
-# Monte Mario Italy 1
-<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <>
-# Monte Mario Italy 2
-<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <>
-# NGO 1948 Norway Zone 1
-<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 2
-<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 3
-<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 4
-<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 5
-<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 6
-<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 7
-<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 Norway Zone 8
-<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# RGF 1993 Lambert 93
-<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <>
-# Old Hawaiian UTM Zone 4N
-<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <>
-# Old Hawaiian UTM Zone 5N
-<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <>
-# NAD 1927 Michigan GeoRef Feet US
-<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 Michigan GeoRef Feet US
-<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1927 Michigan GeoRef Meters
-<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <>
-# NAD 1983 Michigan GeoRef Meters
-<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <>
-# NGO 1948 UTM Zone 32N
-<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 33N
-<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 34N
-<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# NGO 1948 UTM Zone 35N
-<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <>
-# Hong Kong 1980 Grid
-<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <>
-# Hong Kong 1980 UTM Zone 49N
-<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <>
-# Hong Kong 1980 UTM Zone 50N
-<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <>
-# Tokyo UTM Zone 51N
-<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 52N
-<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 53N
-<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 54N
-<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 55N
-<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <>
-# Tokyo UTM Zone 56N
-<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <>
-# Datum 73 Hayford Gauss IGeoE
-<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <>
-# Datum 73 Hayford Gauss IPCC
-<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <>
-# Graciosa Base SW 1948 UTM Zone 26N
-<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <>
-# Lisboa Bessel Bonne
-<102163> +ellps=bessel +units=m no_defs <>
-# Lisboa Hayford Gauss IGeoE
-<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <>
-# Lisboa Hayford Gauss IPCC
-<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <>
-# Observ Meteorologico 1939 UTM Zone 25N
-<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <>
-# Porto Santo 1936 UTM Zone 28N
-<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <>
-# Sao Braz UTM Zone 26N
-<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <>
-# Selvagem Grande 1938 UTM Zone 28N
-<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <>
-# Nord Maroc Degree
-<102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sud Maroc Degree
-<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sahara Degree
-<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Alabama East FIPS 0101
-<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Alabama West FIPS 0102
-<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California I FIPS 0401
-<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California II FIPS 0402
-<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California III FIPS 0403
-<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California IV FIPS 0404
-<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California V FIPS 0405
-<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane California VI FIPS 0406
-<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona East FIPS 0201
-<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona Central FIPS 0202
-<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arizona West FIPS 0203
-<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arkansas North FIPS 0301
-<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Arkansas South FIPS 0302
-<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado North FIPS 0501
-<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado Central FIPS 0502
-<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Colorado South FIPS 0503
-<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Connecticut FIPS 0600
-<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Delaware FIPS 0700
-<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida East FIPS 0901
-<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida West FIPS 0902
-<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Florida North FIPS 0903
-<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101
-<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102
-<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103
-<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104
-<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105
-<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Georgia East FIPS 1001
-<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Georgia West FIPS 1002
-<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho East FIPS 1101
-<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho Central FIPS 1102
-<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Idaho West FIPS 1103
-<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Illinois East FIPS 1201
-<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Illinois West FIPS 1202
-<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Indiana East FIPS 1301
-<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Indiana West FIPS 1302
-<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kansas North FIPS 1501
-<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kansas South FIPS 1502
-<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kentucky North FIPS 1601
-<102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Kentucky South FIPS 1602
-<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Louisiana North FIPS 1701
-<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Louisiana South FIPS 1702
-<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maine East FIPS 1801
-<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maine West FIPS 1802
-<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Maryland FIPS 1900
-<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001
-<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002
-<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan North FIPS 2111
-<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan Central FIPS 2112
-<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Michigan South FIPS 2113
-<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota North FIPS 2201
-<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202
-<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Minnesota South FIPS 2203
-<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Mississippi East FIPS 2301
-<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Mississippi West FIPS 2302
-<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri East FIPS 2401
-<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri Central FIPS 2402
-<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Missouri West FIPS 2403
-<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Montana FIPS 2500
-<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nebraska FIPS 2600
-<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada East FIPS 2701
-<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada Central FIPS 2702
-<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Nevada West FIPS 2703
-<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Hampshire FIPS 2800
-<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Jersey FIPS 2900
-<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico East FIPS 3001
-<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002
-<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New Mexico West FIPS 3003
-<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York East FIPS 3101
-<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York Central FIPS 3102
-<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York West FIPS 3103
-<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane New York Long Island FIPS 3104
-<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane North Dakota North FIPS 3301
-<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane North Dakota South FIPS 3302
-<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Ohio North FIPS 3401
-<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Ohio South FIPS 3402
-<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501
-<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502
-<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oregon North FIPS 3601
-<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Oregon South FIPS 3602
-<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Rhode Island FIPS 3800
-<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane South Dakota North FIPS 4001
-<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane South Dakota South FIPS 4002
-<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Tennessee FIPS 4100
-<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas North FIPS 4201
-<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas North Central FIPS 4202
-<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas Central FIPS 4203
-<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas South Central FIPS 4204
-<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Texas South FIPS 4205
-<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah North FIPS 4301
-<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah Central FIPS 4302
-<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Utah South FIPS 4303
-<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Vermont FIPS 4400
-<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Virginia North FIPS 4501
-<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Virginia South FIPS 4502
-<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Washington North FIPS 4601
-<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Washington South FIPS 4602
-<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane West Virginia North FIPS 4701
-<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane West Virginia South FIPS 4702
-<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801
-<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802
-<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803
-<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming East FIPS 4901
-<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902
-<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903
-<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Wyoming West FIPS 4904
-<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <>
-# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200
-<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <>
-# Nord Algerie Ancienne Degree
-<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Sud Algerie Ancienne Degree
-<102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France I degrees
-<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France II degrees
-<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France III degrees
-<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# NTF France IV degrees
-<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <>
-# Nord Algerie Degree
-<102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# Sud Algerie Degree
-<102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <>
-# NAD 1983 StatePlane Alabama East FIPS 0101 Feet
-<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alabama West FIPS 0102 Feet
-<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet
-<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet
-<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet
-<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet
-<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet
-<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet
-<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet
-<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet
-<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet
-<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet
-<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California I FIPS 0401 Feet
-<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California II FIPS 0402 Feet
-<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California III FIPS 0403 Feet
-<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California IV FIPS 0404 Feet
-<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California V FIPS 0405 Feet
-<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane California VI FIPS 0406 Feet
-<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona East FIPS 0201 Feet
-<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet
-<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arizona West FIPS 0203 Feet
-<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet
-<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet
-<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado North FIPS 0501 Feet
-<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet
-<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Colorado South FIPS 0503 Feet
-<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Connecticut FIPS 0600 Feet
-<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Delaware FIPS 0700 Feet
-<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida East FIPS 0901 Feet
-<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida West FIPS 0902 Feet
-<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Florida North FIPS 0903 Feet
-<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet
-<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet
-<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet
-<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet
-<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet
-<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Georgia East FIPS 1001 Feet
-<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Georgia West FIPS 1002 Feet
-<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho East FIPS 1101 Feet
-<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet
-<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Idaho West FIPS 1103 Feet
-<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Illinois East FIPS 1201 Feet
-<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Illinois West FIPS 1202 Feet
-<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Indiana East FIPS 1301 Feet
-<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Indiana West FIPS 1302 Feet
-<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Iowa North FIPS 1401 Feet
-<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Iowa South FIPS 1402 Feet
-<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kansas North FIPS 1501 Feet
-<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kansas South FIPS 1502 Feet
-<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet
-<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet
-<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet
-<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet
-<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maine East FIPS 1801 Feet
-<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maine West FIPS 1802 Feet
-<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Maryland FIPS 1900 Feet
-<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet
-<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet
-<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan North FIPS 2111 Feet
-<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet
-<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Michigan South FIPS 2113 Feet
-<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet
-<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet
-<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet
-<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet
-<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet
-<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri East FIPS 2401 Feet
-<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet
-<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Missouri West FIPS 2403 Feet
-<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Montana FIPS 2500 Feet
-<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nebraska FIPS 2600 Feet
-<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada East FIPS 2701 Feet
-<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet
-<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Nevada West FIPS 2703 Feet
-<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet
-<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Jersey FIPS 2900 Feet
-<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet
-<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet
-<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet
-<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York East FIPS 3101 Feet
-<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York Central FIPS 3102 Feet
-<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York West FIPS 3103 Feet
-<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet
-<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Carolina FIPS 3200 Feet
-<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet
-<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet
-<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Ohio North FIPS 3401 Feet
-<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Ohio South FIPS 3402 Feet
-<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet
-<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet
-<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oregon North FIPS 3601 Feet
-<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Oregon South FIPS 3602 Feet
-<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet
-<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet
-<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet
-<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Carolina FIPS 3900 Feet
-<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet
-<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet
-<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Tennessee FIPS 4100 Feet
-<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas North FIPS 4201 Feet
-<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet
-<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas Central FIPS 4203 Feet
-<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet
-<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Texas South FIPS 4205 Feet
-<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah North FIPS 4301 Feet
-<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah Central FIPS 4302 Feet
-<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Utah South FIPS 4303 Feet
-<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Vermont FIPS 4400 Feet
-<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Virginia North FIPS 4501 Feet
-<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Virginia South FIPS 4502 Feet
-<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Washington North FIPS 4601 Feet
-<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Washington South FIPS 4602 Feet
-<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet
-<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet
-<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet
-<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet
-<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet
-<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet
-<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet
-<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet
-<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet
-<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet
-<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# NAD 1983 StatePlane Guam FIPS 5400 Feet
-<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <>
-# Belge Lambert 1972
-<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <>
-# GCS International 1967
-<4023> +proj=longlat +ellps=aust_SA no_defs <>
-# GCS Bern 1898
-<4217> +proj=longlat +ellps=bessel no_defs <>
-# GCS Voirol Unifie 1960
-<4305> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Montserrat 1958
-<4404> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Voirol Unifie 1960 Paris
-<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <>
-# GCS WGS 1966
-<37001> +proj=longlat +ellps=WGS66 no_defs <>
-# GCS Fischer 1960
-<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <>
-# GCS Fischer 1968
-<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <>
-# GCS Fischer Modified
-<37004> +proj=longlat +ellps=fschr60m no_defs <>
-# GCS Hough 1960
-<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <>
-# GCS Everest Modified 1969
-<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <>
-# GCS Walbeck
-<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <>
-# GCS Sphere ARC INFO
-<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <>
-# GCS European 1979
-<37201> +proj=longlat +ellps=intl no_defs <>
-# GCS Everest Bangladesh
-<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <>
-# GCS Everest India Nepal
-<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <>
-# GCS Hjorsey 1955
-<37204> +proj=longlat +ellps=intl no_defs <>
-# GCS Hong Kong 1963
-<37205> +proj=longlat +ellps=intl no_defs <>
-# GCS Oman
-<37206> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS South Asia Singapore
-<37207> +proj=longlat +ellps=fschr60m no_defs <>
-# GCS Ayabelle
-<37208> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Point 58
-<37211> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Beacon E 1945
-<37212> +proj=longlat +ellps=intl no_defs <>
-# GCS Tern Island 1961
-<37213> +proj=longlat +ellps=intl no_defs <>
-# GCS Astro 1952
-<37214> +proj=longlat +ellps=intl no_defs <>
-# GCS Bellevue IGN
-<37215> +proj=longlat +ellps=intl no_defs <>
-# GCS Canton 1966
-<37216> +proj=longlat +ellps=intl no_defs <>
-# GCS Chatham Island 1971
-<37217> +proj=longlat +ellps=intl no_defs <>
-# GCS DOS 1968
-<37218> +proj=longlat +ellps=intl no_defs <>
-# GCS Easter Island 1967
-<37219> +proj=longlat +ellps=intl no_defs <>
-# GCS Guam 1963
-<37220> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS GUX 1
-<37221> +proj=longlat +ellps=intl no_defs <>
-# GCS Johnston Island 1961
-<37222> +proj=longlat +ellps=intl no_defs <>
-# GCS Carthage Degree
-<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Midway 1961
-<37224> +proj=longlat +ellps=intl no_defs <>
-# GCS Pitcairn 1967
-<37226> +proj=longlat +ellps=intl no_defs <>
-# GCS Santo DOS 1965
-<37227> +proj=longlat +ellps=intl no_defs <>
-# GCS Viti Levu 1916
-<37228> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Wake Eniwetok 1960
-<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <>
-# GCS Wake Island 1952
-<37230> +proj=longlat +ellps=intl no_defs <>
-# GCS Anna 1 1965
-<37231> +proj=longlat +ellps=aust_SA no_defs <>
-# GCS Gan 1970
-<37232> +proj=longlat +ellps=intl no_defs <>
-# GCS ISTS 073 1969
-<37233> +proj=longlat +ellps=intl no_defs <>
-# GCS Kerguelen Island 1949
-<37234> +proj=longlat +ellps=intl no_defs <>
-# GCS Reunion
-<37235> +proj=longlat +ellps=intl no_defs <>
-# GCS Ascension Island 1958
-<37237> +proj=longlat +ellps=intl no_defs <>
-# GCS DOS 71 4
-<37238> +proj=longlat +ellps=intl no_defs <>
-# GCS Cape Canaveral
-<37239> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Fort Thomas 1955
-<37240> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Graciosa Base SW 1948
-<37241> +proj=longlat +ellps=intl no_defs <>
-# GCS ISTS 061 1968
-<37242> +proj=longlat +ellps=intl no_defs <>
-# GCS LC5 1961
-<37243> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Observ Meteorologico 1939
-<37245> +proj=longlat +ellps=intl no_defs <>
-# GCS Pico de Las Nieves
-<37246> +proj=longlat +ellps=intl no_defs <>
-# GCS Porto Santo 1936
-<37247> +proj=longlat +ellps=intl no_defs <>
-# GCS Sao Braz
-<37249> +proj=longlat +ellps=intl no_defs <>
-# GCS Selvagem Grande 1938
-<37250> +proj=longlat +ellps=intl no_defs <>
-# GCS Tristan 1968
-<37251> +proj=longlat +ellps=intl no_defs <>
-# GCS Samoa 1962
-<37252> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Camp Area
-<37253> +proj=longlat +ellps=intl no_defs <>
-# GCS Deception Island
-<37254> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Gunung Segara
-<37255> +proj=longlat +ellps=bessel no_defs <>
-# GCS S42 Hungary
-<37257> +proj=longlat +ellps=krass no_defs <>
-# GCS Kusaie 1951
-<37259> +proj=longlat +ellps=intl no_defs <>
-# GCS Alaskan Islands
-<37260> +proj=longlat +ellps=clrk66 no_defs <>
-# GCS Assumed Geographic 1
-<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <>
-# GCS Estonia 1937
-<104101> +proj=longlat +ellps=bessel no_defs <>
-# GCS Hermannskogel
-<104102> +proj=longlat +ellps=bessel no_defs <>
-# GCS Sierra Leone 1960
-<104103> +proj=longlat +ellps=clrk80 no_defs <>
-# GCS Hong Kong 1980
-<104104> +proj=longlat +ellps=intl no_defs <>
-# GCS Datum Lisboa Bessel
-<104105> +proj=longlat +ellps=bessel no_defs <>
-# GCS Datum Lisboa Hayford
-<104106> +proj=longlat +ellps=intl no_defs <>
-# GCS RGF 1993
-<104107> +proj=longlat +ellps=GRS80 no_defs <>
-# GCS NZGD 2000
-<104108> +proj=longlat +ellps=GRS80 no_defs <>
-# GCS Merchich Degree
-<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Voirol 1875 Degree
-<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <>
-# GCS Voirol Unifie 1960 Degree
-<104305> +proj=longlat +ellps=clrk80 no_defs <>
-#
-# Chris' funny epsgish code for the google mercator
-#
-<900913> +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 <>
diff --git a/src/3rdparty/proj/proj_data/nad.lst b/src/3rdparty/proj/proj_data/nad.lst
deleted file mode 100644
index cc427722..00000000
--- a/src/3rdparty/proj/proj_data/nad.lst
+++ /dev/null
@@ -1,142 +0,0 @@
- Listing of State Plane North American Datum Zones
-
- NGS zone number
- State and zone 1927 1983
-
-Alabama east .................. 101 101
-Alabama west .................. 102 102
-Alaska zone no. 1 ............. 5001 5001
-Alaska zone no. 2 ............. 5002 5002
-Alaska zone no. 3 ............. 5003 5003
-Alaska zone no. 4 ............. 5004 5004
-Alaska zone no. 5 ............. 5005 5005
-Alaska zone no. 6 ............. 5006 5006
-Alaska zone no. 7 ............. 5007 5007
-Alaska zone no. 8 ............. 5008 5008
-Alaska zone no. 9 ............. 5009 5009
-Alaska zone no. 10 ............ 5010 5010
-American Samoa ................ 5300
-Arizona central ............... 202 202
-Arizona east .................. 201 201
-Arizona west .................. 203 203
-Arkansas north ................ 301 301
-Arkansas south ................ 302 302
-California I .................. 401 401
-California II ................. 402 402
-California III ................ 403 403
-California IV ................. 404 404
-California V .................. 405 405
-California VI ................. 406 406
-California VII ................ 407
-Colorado central .............. 502 502
-Colorado north ................ 501 501
-Colorado south ................ 503 503
-Connecticut ................... 600 600
-Delaware ...................... 700 700
-Florida east .................. 901 901
-Florida north ................. 903 903
-Florida west .................. 902 902
-Georgia east .................. 1001 1001
-Georgia west .................. 1002 1002
-Guam Island ................... 5400
-Hawaii 1 ...................... 5101 5101
-Hawaii 2 ...................... 5102 5102
-Hawaii 3 ...................... 5103 5103
-Hawaii 4 ...................... 5104 5104
-Hawaii 5 ...................... 5105 5105
-Idaho central ................. 1102 1102
-Idaho east .................... 1101 1101
-Idaho west .................... 1103 1103
-Illinois east ................. 1201 1201
-Illinois west ................. 1202 1202
-Indiana east .................. 1301 1301
-Indiana west .................. 1302 1302
-Iowa north .................... 1401 1401
-Iowa south .................... 1402 1402
-Kansas north .................. 1501 1501
-Kansas south .................. 1502 1502
-Kentucky north ................ 1601 1601
-Kentucky south ................ 1602 1602
-Louisiana north ............... 1701 1701
-Louisiana offshore ............ 1703 1703
-Louisiana south ............... 1702 1702
-Maine east .................... 1801 1801
-Maine west .................... 1802 1802
-Maryland ...................... 1900 1900
-Massachusetts island .......... 2002 2002
-Massachusetts mainland ........ 2001 2001
-Michigan central/l ............ 2112 2112 current
-Michigan central/m ............ 2102 old
-Michigan east ................. 2101 old
-Michigan north ................ 2111 2111 current
-Michigan south ................ 2113 2113 current
-Michigan west ................. 2103 old
-Minnesota central ............. 2202 2202
-Minnesota north ............... 2201 2201
-Minnesota south ............... 2203 2203
-Mississippi east .............. 2301 2301
-Mississippi west .............. 2302 2302
-Missouri central .............. 2402 2402
-Missouri east ................. 2401 2401
-Missouri west ................. 2403 2403
-Montana ....................... 2500
-Montana central ............... 2502
-Montana north ................. 2501
-Montana south ................. 2503
-Nebraska ...................... 2600
-Nebraska north ................ 2601
-Nebraska south ................ 2602
-Nevada central ................ 2702 2702
-Nevada east ................... 2701 2701
-Nevada west ................... 2703 2703
-New hampshire ................. 2800 2800
-New jersey .................... 2900 2900
-New mexico central ............ 3002 3002
-New mexico east ............... 3001 3001
-New mexico west ............... 3003 3003
-New york central .............. 3102 3102
-New york east ................. 3101 3101
-New york long island .......... 3104 3104
-New york west ................. 3103 3103
-North carolina ................ 3200 3200
-North dakota north ............ 3301 3301
-North dakota south ............ 3302 3302
-Ohio north .................... 3401 3401
-Ohio south .................... 3402 3402
-Oklahoma north ................ 3501 3501
-Oklahoma south ................ 3502 3502
-Oregon north .................. 3601 3601
-Oregon south .................. 3602 3602
-Pennsylvania north ............ 3701 3701
-Pennsylvania south ............ 3702 3702
-Puerto Rico, Virgin Islands ... 5201 5200
-Rhode Island .................. 3800 3800
-South Carolina ................ 3900
-South Carolina north .......... 3901
-South Carolina south .......... 3902
-South Dakota north ............ 4001 4001
-South Dakota south ............ 4002 4002
-Tennessee ..................... 4100 4100
-Texas central ................. 4203 4203
-Texas north ................... 4201 4201
-Texas north central ........... 4202 4202
-Texas south ................... 4205 4205
-Texas south central ........... 4204 4204
-Utah central .................. 4302 4302
-Utah north .................... 4301 4301
-Utah south .................... 4303 4303
-Vermont ....................... 4400 4400
-Virgin Islands, St. Croix ..... 5202
-Virginia north ................ 4501 4501
-Virginia south ................ 4502 4502
-Washington north .............. 4601 4601
-Washington south .............. 4602 4602
-West Virginia north ........... 4701 4701
-West Virginia south ........... 4702 4702
-Wisconsin central ............. 4802 4802
-Wisconsin north ............... 4801 4801
-Wisconsin south ............... 4803 4803
-Wyoming east .................. 4901 4901
-Wyoming east central .......... 4902 4902
-Wyoming west .................. 4904 4904
-Wyoming west central .......... 4903 4903
diff --git a/src/3rdparty/proj/proj_data/nad27 b/src/3rdparty/proj/proj_data/nad27
deleted file mode 100644
index 6e06900c..00000000
--- a/src/3rdparty/proj/proj_data/nad27
+++ /dev/null
@@ -1,809 +0,0 @@
-# SCCSID @(#)nad27 4.1 92/12/20 GIE
-# proj +init files for:
-#
-# State Plane Coordinate Systems,
-# North American Datum 1927
-
-# 101: alabama east: nad27
-<101> proj=tmerc datum=NAD27
-lon_0=-85d50 lat_0=30d30 k=.99996
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 102: alabama west: nad27
-<102> proj=tmerc datum=NAD27
-lon_0=-87d30 lat_0=30 k=.9999333333333333
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5010: alaska zone no. 10: nad27
-<5010> proj=lcc datum=NAD27
-lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51
-x_0=914401.8288036576 y_0=0
-no_defs <>
-
-# 5300: american samoa: nad27
-<5300> proj=lcc datum=NAD27
-lon_0=-170 lat_1=-14d16 lat_2=-14d16 lat_0=-14d16
-x_0=152400.3048006096 y_0=95169.31165862332
-no_defs <>
-
-# 201: arizona east: nad27
-<201> proj=tmerc datum=NAD27
-lon_0=-110d10 lat_0=31 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 202: arizona central: nad27
-<202> proj=tmerc datum=NAD27
-lon_0=-111d55 lat_0=31 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 203: arizona west: nad27
-<203> proj=tmerc datum=NAD27
-lon_0=-113d45 lat_0=31 k=.9999333333333333
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 301: arkansas north: nad27
-<301> proj=lcc datum=NAD27
-lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 302: arkansas south: nad27
-<302> proj=lcc datum=NAD27
-lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 401: california i: nad27
-<401> proj=lcc datum=NAD27
-lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 402: california ii: nad27
-<402> proj=lcc datum=NAD27
-lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 403: california iii: nad27
-<403> proj=lcc datum=NAD27
-lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 404: california iv: nad27
-<404> proj=lcc datum=NAD27
-lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 405: california v: nad27
-<405> proj=lcc datum=NAD27
-lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 406: california vi: nad27
-<406> proj=lcc datum=NAD27
-lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 407: california vii: nad27
-<407> proj=lcc datum=NAD27
-lon_0=-118d20 lat_1=34d25 lat_2=33d52 lat_0=34d8
-x_0=1276106.450596901 y_0=1268253.006858014
-no_defs <>
-
-# 501: colorado north: nad27
-<501> proj=lcc datum=NAD27
-lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 502: colorado central: nad27
-<502> proj=lcc datum=NAD27
-lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 503: colorado south: nad27
-<503> proj=lcc datum=NAD27
-lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 600: connecticut ---: nad27
-<600> proj=lcc datum=NAD27
-lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50
-x_0=182880.3657607315 y_0=0
-no_defs <>
-
-# 700: delaware ---: nad27
-<700> proj=tmerc datum=NAD27
-lon_0=-75d25 lat_0=38 k=.999995
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 901: florida east: nad27
-<901> proj=tmerc datum=NAD27
-lon_0=-81 lat_0=24d20 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 902: florida west: nad27
-<902> proj=tmerc datum=NAD27
-lon_0=-82 lat_0=24d20 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 903: florida north: nad27
-<903> proj=lcc datum=NAD27
-lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1001: georgia east: nad27
-<1001> proj=tmerc datum=NAD27
-lon_0=-82d10 lat_0=30 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1002: georgia west: nad27
-<1002> proj=tmerc datum=NAD27
-lon_0=-84d10 lat_0=30 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5101: hawaii 1: nad27
-<5101> proj=tmerc datum=NAD27
-lon_0=-155d30 lat_0=18d50 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5102: hawaii 2: nad27
-<5102> proj=tmerc datum=NAD27
-lon_0=-156d40 lat_0=20d20 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5103: hawaii 3: nad27
-<5103> proj=tmerc datum=NAD27
-lon_0=-158 lat_0=21d10 k=.99999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5104: hawaii 4: nad27
-<5104> proj=tmerc datum=NAD27
-lon_0=-159d30 lat_0=21d50 k=.99999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5105: hawaii 5: nad27
-<5105> proj=tmerc datum=NAD27
-lon_0=-160d10 lat_0=21d40 k=1
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1101: idaho east: nad27
-<1101> proj=tmerc datum=NAD27
-lon_0=-112d10 lat_0=41d40 k=.9999473684210526
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1102: idaho central: nad27
-<1102> proj=tmerc datum=NAD27
-lon_0=-114 lat_0=41d40 k=.9999473684210526
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1103: idaho west: nad27
-<1103> proj=tmerc datum=NAD27
-lon_0=-115d45 lat_0=41d40 k=.9999333333333333
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1201: illinois east: nad27
-<1201> proj=tmerc datum=NAD27
-lon_0=-88d20 lat_0=36d40 k=.999975
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1202: illinois west: nad27
-<1202> proj=tmerc datum=NAD27
-lon_0=-90d10 lat_0=36d40 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1301: indiana east: nad27
-<1301> proj=tmerc datum=NAD27
-lon_0=-85d40 lat_0=37d30 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1302: indiana west: nad27
-<1302> proj=tmerc datum=NAD27
-lon_0=-87d5 lat_0=37d30 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1401: iowa north: nad27
-<1401> proj=lcc datum=NAD27
-lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1402: iowa south: nad27
-<1402> proj=lcc datum=NAD27
-lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1501: kansas north: nad27
-<1501> proj=lcc datum=NAD27
-lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1502: kansas south: nad27
-<1502> proj=lcc datum=NAD27
-lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1601: kentucky north: nad27
-<1601> proj=lcc datum=NAD27
-lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1602: kentucky south: nad27
-<1602> proj=lcc datum=NAD27
-lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1701: louisiana north: nad27
-<1701> proj=lcc datum=NAD27
-lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1702: louisiana south: nad27
-<1702> proj=lcc datum=NAD27
-lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1703: louisiana offshore: nad27
-<1703> proj=lcc datum=NAD27
-lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 1801: maine east: nad27
-<1801> proj=tmerc datum=NAD27
-lon_0=-68d30 lat_0=43d50 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1802: maine west: nad27
-<1802> proj=tmerc datum=NAD27
-lon_0=-70d10 lat_0=42d50 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 1900: maryland ---: nad27
-<1900> proj=lcc datum=NAD27
-lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d50
-x_0=243840.4876809754 y_0=0
-no_defs <>
-
-# 2001: massachusetts mainland: nad27
-<2001> proj=lcc datum=NAD27
-lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41
-x_0=182880.3657607315 y_0=0
-no_defs <>
-
-# 2002: massachusetts island: nad27
-<2002> proj=lcc datum=NAD27
-lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41
-x_0=60960.12192024384 y_0=0
-no_defs <>
-
-# 2101: michigan east: nad27
-<2101> proj=tmerc datum=NAD27
-lon_0=-83d40 lat_0=41d30 k=.9999428571428571
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2102: michigan central/m: nad27
-<2102> proj=tmerc datum=NAD27
-lon_0=-85d45 lat_0=41d30 k=.9999090909090909
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2103: michigan west: nad27
-<2103> proj=tmerc datum=NAD27
-lon_0=-88d45 lat_0=41d30 k=.9999090909090909
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2111: michigan north: nad27
-<2111> proj=lcc a=6378450.047 es=.006768657997291094
-lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2112: michigan central/l: nad27
-<2112> proj=lcc a=6378450.047 es=.006768657997291094
-lon_0=-84d20 lat_1=45d42 lat_2=44d11 lat_0=43d19
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2113: michigan south: nad27
-<2113> proj=lcc a=6378450.047 es=.006768657997291094
-lon_0=-84d20 lat_1=43d40 lat_2=42d6 lat_0=41d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2201: minnesota north: nad27
-<2201> proj=lcc datum=NAD27
-lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2202: minnesota central: nad27
-<2202> proj=lcc datum=NAD27
-lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2203: minnesota south: nad27
-<2203> proj=lcc datum=NAD27
-lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2301: mississippi east: nad27
-<2301> proj=tmerc datum=NAD27
-lon_0=-88d50 lat_0=29d40 k=.99996
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2302: mississippi west: nad27
-<2302> proj=tmerc datum=NAD27
-lon_0=-90d20 lat_0=30d30 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2401: missouri east: nad27
-<2401> proj=tmerc datum=NAD27
-lon_0=-90d30 lat_0=35d50 k=.9999333333333333
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2402: missouri central: nad27
-<2402> proj=tmerc datum=NAD27
-lon_0=-92d30 lat_0=35d50 k=.9999333333333333
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2403: missouri west: nad27
-<2403> proj=tmerc datum=NAD27
-lon_0=-94d30 lat_0=36d10 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2501: montana north: nad27
-<2501> proj=lcc datum=NAD27
-lon_0=-109d30 lat_1=48d43 lat_2=47d51 lat_0=47
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2502: montana central: nad27
-<2502> proj=lcc datum=NAD27
-lon_0=-109d30 lat_1=47d53 lat_2=46d27 lat_0=45d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2503: montana south: nad27
-<2503> proj=lcc datum=NAD27
-lon_0=-109d30 lat_1=46d24 lat_2=44d52 lat_0=44
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2601: nebraska north: nad27
-<2601> proj=lcc datum=NAD27
-lon_0=-100 lat_1=42d49 lat_2=41d51 lat_0=41d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2602: nebraska south: nad27
-<2602> proj=lcc datum=NAD27
-lon_0=-99d30 lat_1=41d43 lat_2=40d17 lat_0=39d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 2701: nevada east: nad27
-<2701> proj=tmerc datum=NAD27
-lon_0=-115d35 lat_0=34d45 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2702: nevada central: nad27
-<2702> proj=tmerc datum=NAD27
-lon_0=-116d40 lat_0=34d45 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2703: nevada west: nad27
-<2703> proj=tmerc datum=NAD27
-lon_0=-118d35 lat_0=34d45 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2800: new hampshire ---: nad27
-<2800> proj=tmerc datum=NAD27
-lon_0=-71d40 lat_0=42d30 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 2900: new jersey ---: nad27
-<2900> proj=tmerc datum=NAD27
-lon_0=-74d40 lat_0=38d50 k=.999975
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3001: new mexico east: nad27
-<3001> proj=tmerc datum=NAD27
-lon_0=-104d20 lat_0=31 k=.9999090909090909
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3002: new mexico central: nad27
-<3002> proj=tmerc datum=NAD27
-lon_0=-106d15 lat_0=31 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3003: new mexico west: nad27
-<3003> proj=tmerc datum=NAD27
-lon_0=-107d50 lat_0=31 k=.9999166666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3101: new york east: nad27
-<3101> proj=tmerc datum=NAD27
-lon_0=-74d20 lat_0=40 k=.9999666666666667
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3102: new york central: nad27
-<3102> proj=tmerc datum=NAD27
-lon_0=-76d35 lat_0=40 k=.9999375
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3103: new york west: nad27
-<3103> proj=tmerc datum=NAD27
-lon_0=-78d35 lat_0=40 k=.9999375
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3104: new york long island: nad27
-<3104> proj=lcc datum=NAD27
-lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d30
-x_0=609601.2192024384 y_0=30480.06096012192
-no_defs <>
-
-# 3200: north carolina ---: nad27
-<3200> proj=lcc datum=NAD27
-lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3301: north dakota north: nad27
-<3301> proj=lcc datum=NAD27
-lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3302: north dakota south: nad27
-<3302> proj=lcc datum=NAD27
-lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3401: ohio north: nad27
-<3401> proj=lcc datum=NAD27
-lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3402: ohio south: nad27
-<3402> proj=lcc datum=NAD27
-lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3501: oklahoma north: nad27
-<3501> proj=lcc datum=NAD27
-lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3502: oklahoma south: nad27
-<3502> proj=lcc datum=NAD27
-lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3601: oregon north: nad27
-<3601> proj=lcc datum=NAD27
-lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3602: oregon south: nad27
-<3602> proj=lcc datum=NAD27
-lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3701: pennsylvania north: nad27
-<3701> proj=lcc datum=NAD27
-lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3702: pennsylvania south: nad27
-<3702> proj=lcc datum=NAD27
-lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3800: rhode island ---: nad27
-<3800> proj=tmerc datum=NAD27
-lon_0=-71d30 lat_0=41d5 k=.99999375
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 3901: south carolina north: nad27
-<3901> proj=lcc datum=NAD27
-lon_0=-81 lat_1=34d58 lat_2=33d46 lat_0=33
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 3902: south carolina south: nad27
-<3902> proj=lcc datum=NAD27
-lon_0=-81 lat_1=33d40 lat_2=32d20 lat_0=31d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4001: south dakota north: nad27
-<4001> proj=lcc datum=NAD27
-lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4002: south dakota south: nad27
-<4002> proj=lcc datum=NAD27
-lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4100: tennessee ---: nad27
-<4100> proj=lcc datum=NAD27
-lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d40
-x_0=609601.2192024384 y_0=30480.06096012192
-no_defs <>
-
-# 4201: texas north: nad27
-<4201> proj=lcc datum=NAD27
-lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4202: texas north central: nad27
-<4202> proj=lcc datum=NAD27
-lon_0=-97d30 lat_1=33d58 lat_2=32d8 lat_0=31d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4203: texas central: nad27
-<4203> proj=lcc datum=NAD27
-lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4204: texas south central: nad27
-<4204> proj=lcc datum=NAD27
-lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4205: texas south: nad27
-<4205> proj=lcc datum=NAD27
-lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4301: utah north: nad27
-<4301> proj=lcc datum=NAD27
-lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4302: utah central: nad27
-<4302> proj=lcc datum=NAD27
-lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4303: utah south: nad27
-<4303> proj=lcc datum=NAD27
-lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4400: vermont ---: nad27
-<4400> proj=tmerc datum=NAD27
-lon_0=-72d30 lat_0=42d30 k=.9999642857142857
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 4501: virginia north: nad27
-<4501> proj=lcc datum=NAD27
-lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4502: virginia south: nad27
-<4502> proj=lcc datum=NAD27
-lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4601: washington north: nad27
-<4601> proj=lcc datum=NAD27
-lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4602: washington south: nad27
-<4602> proj=lcc datum=NAD27
-lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4701: west virginia north: nad27
-<4701> proj=lcc datum=NAD27
-lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4702: west virginia south: nad27
-<4702> proj=lcc datum=NAD27
-lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4801: wisconsin north: nad27
-<4801> proj=lcc datum=NAD27
-lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4802: wisconsin central: nad27
-<4802> proj=lcc datum=NAD27
-lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4803: wisconsin south: nad27
-<4803> proj=lcc datum=NAD27
-lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42
-x_0=609601.2192024384 y_0=0
-no_defs <>
-
-# 4901: wyoming east: nad27
-<4901> proj=tmerc datum=NAD27
-lon_0=-105d10 lat_0=40d40 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 4902: wyoming east central: nad27
-<4902> proj=tmerc datum=NAD27
-lon_0=-107d20 lat_0=40d40 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 4903: wyoming west central: nad27
-<4903> proj=tmerc datum=NAD27
-lon_0=-108d45 lat_0=40d40 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 4904: wyoming west: nad27
-<4904> proj=tmerc datum=NAD27
-lon_0=-110d5 lat_0=40d40 k=.9999411764705882
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5001: alaska zone no. 1: nad27
-<5001> proj=omerc datum=NAD27
-k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315
-x_0=818585.5672270928 y_0=575219.2451072642
-no_defs <>
-
-# 5002: alaska zone no. 2: nad27
-<5002> proj=tmerc datum=NAD27
-lon_0=-142 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5003: alaska zone no. 3: nad27
-<5003> proj=tmerc datum=NAD27
-lon_0=-146 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5004: alaska zone no. 4: nad27
-<5004> proj=tmerc datum=NAD27
-lon_0=-150 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5005: alaska zone no. 5: nad27
-<5005> proj=tmerc datum=NAD27
-lon_0=-154 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5006: alaska zone no. 6: nad27
-<5006> proj=tmerc datum=NAD27
-lon_0=-158 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5007: alaska zone no. 7: nad27
-<5007> proj=tmerc datum=NAD27
-lon_0=-162 lat_0=54 k=.9999
-x_0=213360.4267208534 y_0=0
-no_defs <>
-
-# 5008: alaska zone no. 8: nad27
-<5008> proj=tmerc datum=NAD27
-lon_0=-166 lat_0=54 k=.9999
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5009: alaska zone no. 9: nad27
-<5009> proj=tmerc datum=NAD27
-lon_0=-170 lat_0=54 k=.9999
-x_0=182880.3657607315 y_0=0
-no_defs <>
-
-# 5201: puerto rico and virgin islands: nad27
-<5201> proj=lcc datum=NAD27
-lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50
-x_0=152400.3048006096 y_0=0
-no_defs <>
-
-# 5202: virgin islands st. croix: nad27
-<5202> proj=lcc datum=NAD27
-lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50
-x_0=152400.3048006096 y_0=30480.06096012192
-no_defs <>
-
-# 5400: guam island: nad27
-<5400> proj=poly datum=NAD27
-x_0=50000 y_0=50000 lon_0=144d44'55.50254 lat_0=13d28'20.87887
-no_defs <>
-
diff --git a/src/3rdparty/proj/proj_data/nad83 b/src/3rdparty/proj/proj_data/nad83
deleted file mode 100644
index e740a4d5..00000000
--- a/src/3rdparty/proj/proj_data/nad83
+++ /dev/null
@@ -1,744 +0,0 @@
-# SCCSID @(#)nad83 4.1 92/12/20 GIE
-# proj +init files for:
-#
-# State Plane Coordinate Systems,
-# North American Datum 1983
-
-# 101: alabama east: nad83
-<101> proj=tmerc datum=NAD83
-lon_0=-85d50 lat_0=30d30 k=.99996
-x_0=200000 y_0=0
-no_defs <>
-
-# 102: alabama west: nad83
-<102> proj=tmerc datum=NAD83
-lon_0=-87d30 lat_0=30 k=.9999333333333333
-x_0=600000 y_0=0
-no_defs <>
-
-# 5010: alaska zone no. 10: nad83
-<5010> proj=lcc datum=NAD83
-lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51
-x_0=1000000 y_0=0
-no_defs <>
-
-# 201: arizona east: nad83
-<201> proj=tmerc datum=NAD83
-lon_0=-110d10 lat_0=31 k=.9999
-x_0=213360 y_0=0
-no_defs <>
-
-# 202: arizona central: nad83
-<202> proj=tmerc datum=NAD83
-lon_0=-111d55 lat_0=31 k=.9999
-x_0=213360 y_0=0
-no_defs <>
-
-# 203: arizona west: nad83
-<203> proj=tmerc datum=NAD83
-lon_0=-113d45 lat_0=31 k=.9999333333333333
-x_0=213360 y_0=0
-no_defs <>
-
-# 301: arkansas north: nad83
-<301> proj=lcc datum=NAD83
-lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20
-x_0=400000 y_0=0
-no_defs <>
-
-# 302: arkansas south: nad83
-<302> proj=lcc datum=NAD83
-lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40
-x_0=400000 y_0=400000
-no_defs <>
-
-# 401: california i: nad83
-<401> proj=lcc datum=NAD83
-lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20
-x_0=2000000 y_0=500000
-no_defs <>
-
-# 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 <>
-
-# 403: california iii: nad83
-<403> proj=lcc datum=NAD83
-lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30
-x_0=2000000 y_0=500000
-no_defs <>
-
-# 404: california iv: nad83
-<404> proj=lcc datum=NAD83
-lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20
-x_0=2000000 y_0=500000
-no_defs <>
-
-# 405: california v: nad83
-<405> proj=lcc datum=NAD83
-lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30
-x_0=2000000 y_0=500000
-no_defs <>
-
-# 406: california vi: nad83
-<406> proj=lcc datum=NAD83
-lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10
-x_0=2000000 y_0=500000
-no_defs <>
-
-# 501: colorado north: nad83
-<501> proj=lcc datum=NAD83
-lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20
-x_0=914401.8289 y_0=304800.6096
-no_defs <>
-
-# 502: colorado central: nad83
-<502> proj=lcc datum=NAD83
-lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50
-x_0=914401.8289 y_0=304800.6096
-no_defs <>
-
-# 503: colorado south: nad83
-<503> proj=lcc datum=NAD83
-lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40
-x_0=914401.8289 y_0=304800.6096
-no_defs <>
-
-# 600: connecticut ---: nad83
-<600> proj=lcc datum=NAD83
-lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50
-x_0=304800.6096 y_0=152400.3048
-no_defs <>
-
-# 700: delaware ---: nad83
-<700> proj=tmerc datum=NAD83
-lon_0=-75d25 lat_0=38 k=.999995
-x_0=200000 y_0=0
-no_defs <>
-
-# 901: florida east: nad83
-<901> proj=tmerc datum=NAD83
-lon_0=-81 lat_0=24d20 k=.9999411764705882
-x_0=200000 y_0=0
-no_defs <>
-
-# 902: florida west: nad83
-<902> proj=tmerc datum=NAD83
-lon_0=-82 lat_0=24d20 k=.9999411764705882
-x_0=200000 y_0=0
-no_defs <>
-
-# 903: florida north: nad83
-<903> proj=lcc datum=NAD83
-lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29
-x_0=600000 y_0=0
-no_defs <>
-
-# 1001: georgia east: nad83
-<1001> proj=tmerc datum=NAD83
-lon_0=-82d10 lat_0=30 k=.9999
-x_0=200000 y_0=0
-no_defs <>
-
-# 1002: georgia west: nad83
-<1002> proj=tmerc datum=NAD83
-lon_0=-84d10 lat_0=30 k=.9999
-x_0=700000 y_0=0
-no_defs <>
-
-# 5101: hawaii 1: nad83
-<5101> proj=tmerc datum=NAD83
-lon_0=-155d30 lat_0=18d50 k=.9999666666666667
-x_0=500000 y_0=0
-no_defs <>
-
-# 5102: hawaii 2: nad83
-<5102> proj=tmerc datum=NAD83
-lon_0=-156d40 lat_0=20d20 k=.9999666666666667
-x_0=500000 y_0=0
-no_defs <>
-
-# 5103: hawaii 3: nad83
-<5103> proj=tmerc datum=NAD83
-lon_0=-158 lat_0=21d10 k=.99999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5104: hawaii 4: nad83
-<5104> proj=tmerc datum=NAD83
-lon_0=-159d30 lat_0=21d50 k=.99999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5105: hawaii 5: nad83
-<5105> proj=tmerc datum=NAD83
-lon_0=-160d10 lat_0=21d40 k=1
-x_0=500000 y_0=0
-no_defs <>
-
-# 1101: idaho east: nad83
-<1101> proj=tmerc datum=NAD83
-lon_0=-112d10 lat_0=41d40 k=.9999473684210526
-x_0=200000 y_0=0
-no_defs <>
-
-# 1102: idaho central: nad83
-<1102> proj=tmerc datum=NAD83
-lon_0=-114 lat_0=41d40 k=.9999473684210526
-x_0=500000 y_0=0
-no_defs <>
-
-# 1103: idaho west: nad83
-<1103> proj=tmerc datum=NAD83
-lon_0=-115d45 lat_0=41d40 k=.9999333333333333
-x_0=800000 y_0=0
-no_defs <>
-
-# 1201: illinois east: nad83
-<1201> proj=tmerc datum=NAD83
-lon_0=-88d20 lat_0=36d40 k=.999975
-x_0=300000 y_0=0
-no_defs <>
-
-# 1202: illinois west: nad83
-<1202> proj=tmerc datum=NAD83
-lon_0=-90d10 lat_0=36d40 k=.9999411764705882
-x_0=700000 y_0=0
-no_defs <>
-
-# 1301: indiana east: nad83
-<1301> proj=tmerc datum=NAD83
-lon_0=-85d40 lat_0=37d30 k=.9999666666666667
-x_0=100000 y_0=250000
-no_defs <>
-
-# 1302: indiana west: nad83
-<1302> proj=tmerc datum=NAD83
-lon_0=-87d5 lat_0=37d30 k=.9999666666666667
-x_0=900000 y_0=250000
-no_defs <>
-
-# 1401: iowa north: nad83
-<1401> proj=lcc datum=NAD83
-lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30
-x_0=1500000 y_0=1000000
-no_defs <>
-
-# 1402: iowa south: nad83
-<1402> proj=lcc datum=NAD83
-lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40
-x_0=500000 y_0=0
-no_defs <>
-
-# 1501: kansas north: nad83
-<1501> proj=lcc datum=NAD83
-lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20
-x_0=400000 y_0=0
-no_defs <>
-
-# 1502: kansas south: nad83
-<1502> proj=lcc datum=NAD83
-lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40
-x_0=400000 y_0=400000
-no_defs <>
-
-# 1601: kentucky north: nad83
-<1601> proj=lcc datum=NAD83
-lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30
-x_0=500000 y_0=0
-no_defs <>
-
-# 1602: kentucky south: nad83
-<1602> proj=lcc datum=NAD83
-lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20
-x_0=500000 y_0=500000
-no_defs <>
-
-# 1701: louisiana north: nad83
-<1701> proj=lcc datum=NAD83
-lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d30
-x_0=1000000 y_0=0
-no_defs <>
-
-# 1702: louisiana south: nad83
-<1702> proj=lcc datum=NAD83
-lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d30
-x_0=1000000 y_0=0
-no_defs <>
-
-# 1703: louisiana offshore: nad83
-<1703> proj=lcc datum=NAD83
-lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d30
-x_0=1000000 y_0=0
-no_defs <>
-
-# 1801: maine east: nad83
-<1801> proj=tmerc datum=NAD83
-lon_0=-68d30 lat_0=43d40 k=.9999
-x_0=300000 y_0=0
-no_defs <>
-
-# 1802: maine west: nad83
-<1802> proj=tmerc datum=NAD83
-lon_0=-70d10 lat_0=42d50 k=.9999666666666667
-x_0=900000 y_0=0
-no_defs <>
-
-# 1900: maryland ---: nad83
-<1900> proj=lcc datum=NAD83
-lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d40
-x_0=400000 y_0=0
-no_defs <>
-
-# 2001: massachusetts mainland: nad83
-<2001> proj=lcc datum=NAD83
-lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41
-x_0=200000 y_0=750000
-no_defs <>
-
-# 2002: massachusetts island: nad83
-<2002> proj=lcc datum=NAD83
-lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41
-x_0=500000 y_0=0
-no_defs <>
-
-# 2111: michigan north: nad83
-<2111> proj=lcc datum=NAD83
-lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47
-x_0=8000000 y_0=0
-no_defs <>
-
-# 2112: michigan central/l: nad83
-<2112> proj=lcc datum=NAD83
-lon_0=-84d22 lat_1=45d42 lat_2=44d11 lat_0=43d19
-x_0=6000000 y_0=0
-no_defs <>
-
-# 2113: michigan south: nad83
-<2113> proj=lcc datum=NAD83
-lon_0=-84d22 lat_1=43d40 lat_2=42d6 lat_0=41d30
-x_0=4000000 y_0=0
-no_defs <>
-
-# 2201: minnesota north: nad83
-<2201> proj=lcc datum=NAD83
-lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30
-x_0=800000 y_0=100000
-no_defs <>
-
-# 2202: minnesota central: nad83
-<2202> proj=lcc datum=NAD83
-lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45
-x_0=800000 y_0=100000
-no_defs <>
-
-# 2203: minnesota south: nad83
-<2203> proj=lcc datum=NAD83
-lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43
-x_0=800000 y_0=100000
-no_defs <>
-
-# 2301: mississippi east: nad83
-<2301> proj=tmerc datum=NAD83
-lon_0=-88d50 lat_0=29d30 k=.99995
-x_0=300000 y_0=0
-no_defs <>
-
-# 2302: mississippi west: nad83
-<2302> proj=tmerc datum=NAD83
-lon_0=-90d20 lat_0=29d30 k=.99995
-x_0=700000 y_0=0
-no_defs <>
-
-# 2401: missouri east: nad83
-<2401> proj=tmerc datum=NAD83
-lon_0=-90d30 lat_0=35d50 k=.9999333333333333
-x_0=250000 y_0=0
-no_defs <>
-
-# 2402: missouri central: nad83
-<2402> proj=tmerc datum=NAD83
-lon_0=-92d30 lat_0=35d50 k=.9999333333333333
-x_0=500000 y_0=0
-no_defs <>
-
-# 2403: missouri west: nad83
-<2403> proj=tmerc datum=NAD83
-lon_0=-94d30 lat_0=36d10 k=.9999411764705882
-x_0=850000 y_0=0
-no_defs <>
-
-# 2500: montana: nad83
-<2500> proj=lcc datum=NAD83
-lon_0=-109d30 lat_1=49 lat_2=45 lat_0=44d15
-x_0=600000 y_0=0
-no_defs <>
-
-# 2600: nebraska: nad83
-<2600> proj=lcc datum=NAD83
-lon_0=-100 lat_1=43 lat_2=40 lat_0=39d50
-x_0=500000 y_0=0
-no_defs <>
-
-# 2701: nevada east: nad83
-<2701> proj=tmerc datum=NAD83
-lon_0=-115d35 lat_0=34d45 k=.9999
-x_0=200000 y_0=8000000
-no_defs <>
-
-# 2702: nevada central: nad83
-<2702> proj=tmerc datum=NAD83
-lon_0=-116d40 lat_0=34d45 k=.9999
-x_0=500000 y_0=6000000
-no_defs <>
-
-# 2703: nevada west: nad83
-<2703> proj=tmerc datum=NAD83
-lon_0=-118d35 lat_0=34d45 k=.9999
-x_0=800000 y_0=4000000
-no_defs <>
-
-# 2800: new hampshire ---: nad83
-<2800> proj=tmerc datum=NAD83
-lon_0=-71d40 lat_0=42d30 k=.9999666666666667
-x_0=300000 y_0=0
-no_defs <>
-
-# 2900: new jersey ---: nad83
-<2900> proj=tmerc datum=NAD83
-lon_0=-74d30 lat_0=38d50 k=.9999
-x_0=150000 y_0=0
-no_defs <>
-
-# 3001: new mexico east: nad83
-<3001> proj=tmerc datum=NAD83
-lon_0=-104d20 lat_0=31 k=.9999090909090909
-x_0=165000 y_0=0
-no_defs <>
-
-# 3002: new mexico central: nad83
-<3002> proj=tmerc datum=NAD83
-lon_0=-106d15 lat_0=31 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 3003: new mexico west: nad83
-<3003> proj=tmerc datum=NAD83
-lon_0=-107d50 lat_0=31 k=.9999166666666667
-x_0=830000 y_0=0
-no_defs <>
-
-# 3101: new york east: nad83
-<3101> proj=tmerc datum=NAD83
-lon_0=-74d30 lat_0=38d50 k=.9999
-x_0=150000 y_0=0
-no_defs <>
-
-# 3102: new york central: nad83
-<3102> proj=tmerc datum=NAD83
-lon_0=-76d35 lat_0=40 k=.9999375
-x_0=250000 y_0=0
-no_defs <>
-
-# 3103: new york west: nad83
-<3103> proj=tmerc datum=NAD83
-lon_0=-78d35 lat_0=40 k=.9999375
-x_0=350000 y_0=0
-no_defs <>
-
-# 3104: new york long island: nad83
-<3104> proj=lcc datum=NAD83
-lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d10
-x_0=300000 y_0=0
-no_defs <>
-
-# 3200: north carolina ---: nad83
-<3200> proj=lcc datum=NAD83
-lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45
-x_0=609601.22 y_0=0
-no_defs <>
-
-# 3301: north dakota north: nad83
-<3301> proj=lcc datum=NAD83
-lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47
-x_0=600000 y_0=0
-no_defs <>
-
-# 3302: north dakota south: nad83
-<3302> proj=lcc datum=NAD83
-lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40
-x_0=600000 y_0=0
-no_defs <>
-
-# 3401: ohio north: nad83
-<3401> proj=lcc datum=NAD83
-lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40
-x_0=600000 y_0=0
-no_defs <>
-
-# 3402: ohio south: nad83
-<3402> proj=lcc datum=NAD83
-lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38
-x_0=600000 y_0=0
-no_defs <>
-
-# 3501: oklahoma north: nad83
-<3501> proj=lcc datum=NAD83
-lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35
-x_0=600000 y_0=0
-no_defs <>
-
-# 3502: oklahoma south: nad83
-<3502> proj=lcc datum=NAD83
-lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20
-x_0=600000 y_0=0
-no_defs <>
-
-# 3601: oregon north: nad83
-<3601> proj=lcc datum=NAD83
-lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40
-x_0=2500000 y_0=0
-no_defs <>
-
-# 3602: oregon south: nad83
-<3602> proj=lcc datum=NAD83
-lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40
-x_0=1500000 y_0=0
-no_defs <>
-
-# 3701: pennsylvania north: nad83
-<3701> proj=lcc datum=NAD83
-lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10
-x_0=600000 y_0=0
-no_defs <>
-
-# 3702: pennsylvania south: nad83
-<3702> proj=lcc datum=NAD83
-lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20
-x_0=600000 y_0=0
-no_defs <>
-
-# 3800: rhode island ---: nad83
-<3800> proj=tmerc datum=NAD83
-lon_0=-71d30 lat_0=41d5 k=.99999375
-x_0=100000 y_0=0
-no_defs <>
-
-# 3900: south carolina: nad83
-<3900> proj=lcc datum=NAD83
-lon_0=-81 lat_1=34d50 lat_2=32d30 lat_0=31d50
-x_0=609600 y_0=0
-no_defs <>
-
-# 4001: south dakota north: nad83
-<4001> proj=lcc datum=NAD83
-lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50
-x_0=600000 y_0=0
-no_defs <>
-
-# 4002: south dakota south: nad83
-<4002> proj=lcc datum=NAD83
-lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20
-x_0=600000 y_0=0
-no_defs <>
-
-# 4100: tennessee ---: nad83
-<4100> proj=lcc datum=NAD83
-lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d20
-x_0=600000 y_0=0
-no_defs <>
-
-# 4201: texas north: nad83
-<4201> proj=lcc datum=NAD83
-lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34
-x_0=200000 y_0=1000000
-no_defs <>
-
-# 4202: texas north central: nad83
-<4202> proj=lcc datum=NAD83
-lon_0=-98d30 lat_1=33d58 lat_2=32d8 lat_0=31d40
-x_0=600000 y_0=2000000
-no_defs <>
-
-# 4203: texas central: nad83
-<4203> proj=lcc datum=NAD83
-lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40
-x_0=700000 y_0=3000000
-no_defs <>
-
-# 4204: texas south central: nad83
-<4204> proj=lcc datum=NAD83
-lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50
-x_0=600000 y_0=4000000
-no_defs <>
-
-# 4205: texas south: nad83
-<4205> proj=lcc datum=NAD83
-lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40
-x_0=300000 y_0=5000000
-no_defs <>
-
-# 4301: utah north: nad83
-<4301> proj=lcc datum=NAD83
-lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20
-x_0=500000 y_0=1000000
-no_defs <>
-
-# 4302: utah central: nad83
-<4302> proj=lcc datum=NAD83
-lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20
-x_0=500000 y_0=2000000
-no_defs <>
-
-# 4303: utah south: nad83
-<4303> proj=lcc datum=NAD83
-lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40
-x_0=500000 y_0=3000000
-no_defs <>
-
-# 4400: vermont ---: nad83
-<4400> proj=tmerc datum=NAD83
-lon_0=-72d30 lat_0=42d30 k=.9999642857142857
-x_0=500000 y_0=0
-no_defs <>
-
-# 4501: virginia north: nad83
-<4501> proj=lcc datum=NAD83
-lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40
-x_0=3500000 y_0=2000000
-no_defs <>
-
-# 4502: virginia south: nad83
-<4502> proj=lcc datum=NAD83
-lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20
-x_0=3500000 y_0=1000000
-no_defs <>
-
-# 4601: washington north: nad83
-<4601> proj=lcc datum=NAD83
-lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47
-x_0=500000 y_0=0
-no_defs <>
-
-# 4602: washington south: nad83
-<4602> proj=lcc datum=NAD83
-lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20
-x_0=500000 y_0=0
-no_defs <>
-
-# 4701: west virginia north: nad83
-<4701> proj=lcc datum=NAD83
-lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30
-x_0=600000 y_0=0
-no_defs <>
-
-# 4702: west virginia south: nad83
-<4702> proj=lcc datum=NAD83
-lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37
-x_0=600000 y_0=0
-no_defs <>
-
-# 4801: wisconsin north: nad83
-<4801> proj=lcc datum=NAD83
-lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10
-x_0=600000 y_0=0
-no_defs <>
-
-# 4802: wisconsin central: nad83
-<4802> proj=lcc datum=NAD83
-lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50
-x_0=600000 y_0=0
-no_defs <>
-
-# 4803: wisconsin south: nad83
-<4803> proj=lcc datum=NAD83
-lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42
-x_0=600000 y_0=0
-no_defs <>
-
-# 4901: wyoming east: nad83
-<4901> proj=tmerc datum=NAD83
-lon_0=-105d10 lat_0=40d30 k=.9999375
-x_0=200000 y_0=0
-no_defs <>
-
-# 4902: wyoming east central: nad83
-<4902> proj=tmerc datum=NAD83
-lon_0=-107d20 lat_0=40d30 k=.9999375
-x_0=400000 y_0=100000
-no_defs <>
-
-# 4903: wyoming west central: nad83
-<4903> proj=tmerc datum=NAD83
-lon_0=-108d45 lat_0=40d30 k=.9999375
-x_0=600000 y_0=0
-no_defs <>
-
-# 4904: wyoming west: nad83
-<4904> proj=tmerc datum=NAD83
-lon_0=-110d5 lat_0=40d30 k=.9999375
-x_0=800000 y_0=100000
-no_defs <>
-
-# 5001: alaska zone no. 1: nad83
-<5001> proj=omerc datum=NAD83
-k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315
-x_0=818676.7344011233 y_0=575097.6888751927
-no_defs <>
-
-# 5002: alaska zone no. 2: nad83
-<5002> proj=tmerc datum=NAD83
-lon_0=-142 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5003: alaska zone no. 3: nad83
-<5003> proj=tmerc datum=NAD83
-lon_0=-146 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5004: alaska zone no. 4: nad83
-<5004> proj=tmerc datum=NAD83
-lon_0=-150 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5005: alaska zone no. 5: nad83
-<5005> proj=tmerc datum=NAD83
-lon_0=-154 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5006: alaska zone no. 6: nad83
-<5006> proj=tmerc datum=NAD83
-lon_0=-158 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5007: alaska zone no. 7: nad83
-<5007> proj=tmerc datum=NAD83
-lon_0=-162 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5008: alaska zone no. 8: nad83
-<5008> proj=tmerc datum=NAD83
-lon_0=-166 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5009: alaska zone no. 9: nad83
-<5009> proj=tmerc datum=NAD83
-lon_0=-170 lat_0=54 k=.9999
-x_0=500000 y_0=0
-no_defs <>
-
-# 5200: puerto rico and virgin islands: nad83
-<5200> proj=lcc datum=NAD83
-lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50
-x_0=200000 y_0=200000
-no_defs <>
-
diff --git a/src/3rdparty/proj/proj_data/other.extra b/src/3rdparty/proj/proj_data/other.extra
deleted file mode 100644
index 168525d2..00000000
--- a/src/3rdparty/proj/proj_data/other.extra
+++ /dev/null
@@ -1,49 +0,0 @@
-## NAD83 / BC Albers (this has been superceeded but is kept for compatibility)
-<42102> +proj=aea +ellps=GRS80 +lat_0=45 +lon_0=-126.0 +lat_1=50.0 +lat_2=58.5 +x_0=1000000.0 +y_0=0 +datum=NAD83 +units=m no_defs <>
-
-
-#
-# OGC-defined extended codes (41000--41999)
-# see http://www.digitalearth.gov/wmt/auto.html
-#
-# WGS84 / Simple Mercator
-<41001> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-#
-# CubeWerx-defined extended codes (42100--42199)
-#
-# WGS 84 / LCC Canada
-<42101> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=-8000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-#EPSG:42102,"PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS_1980\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"Decimal_Degree\",0.0174532925199433]],PROJECTION[\"Albers_conic_equal_area\"],PARAMETER[\"central_meridian\",-126.0],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"standard_parallel_1\",50.0],PARAMETER[\"standard_parallel_2\",58.5],PARAMETER[\"false_easting\",1000000.0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]"
-# WGS 84 / LCC USA
-<42103> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=0 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS72 +datum=WGS84 +units=m +no_defs no_defs <>
-# NAD83 / MTM zone 8 Québec
-<42104> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <>
-# WGS84 / Merc NorthAm
-<42105> +proj=merc +lat_ts=0 +lon_0=-96 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <>
-# WGS84 / Lambert Azim Mozambique
-<42106> +proj=laea +lat_0=5 +lon_0=20 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +datum=WGS84 +units=m +no_defs no_defs <>
-#
-# CubeWerx-customer definitions (42300--42399)
-#
-# NAD27 / Polar Stereographic / CM=-98
-<42301> +proj=stere +lat_0=90 +lon_0=-98 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# JapanOrtho.09 09
-<42302> +proj=tmerc +lat_0=36 +lon_0=139.833333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>
-# NAD83 / Albers NorthAm
-<42303> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / NRCan LCC Canada
-<42304> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# France_II
-<42305> +proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=2.337229166666667 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +pm=2.337229166666667 +units=m +no_defs no_defs <>
-# NAD83/QC_LCC
-<42306> +proj=lcc +lat_1=46 +lat_2=60 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# NAD83 / Texas Central - feet
-<42307> +proj=lcc +lat_1=31.8833333333333 +lat_2=30.1166666666667 +lat_0=29.6666666666667 +lon_0=-100.333333333333 +x_0=700000.0000000001 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <>
-# NAD27 / California Albers
-<42308> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <>
-# NAD 83 / LCC Canada AVHRR-2
-<42309> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
-# WGS84+GRS80 / Mercator
-<42310> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=GRS80 +datum=WGS84 +units=m +no_defs no_defs <>
-# NAD83 / LCC Statcan
-<42311> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666700000001 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <>
diff --git a/src/3rdparty/proj/proj_data/proj_def.dat b/src/3rdparty/proj/proj_data/proj_def.dat
deleted file mode 100644
index 00dff281..00000000
--- a/src/3rdparty/proj/proj_data/proj_def.dat
+++ /dev/null
@@ -1,17 +0,0 @@
-# Projection library defaults file
-# SCCSID--- @(#)proj_def.dat 4.3 94/02/23 GIE REL"
-# very preliminary version
-<general>
-ellps=WGS84
-<>
-<aea> # Conterminous U.S. map
-lat_1=29.5
-lat_2=45.5
-<>
-<lcc> # Conterminous U.S. map
-lat_1=33
-lat_2=45
-<>
-<lagrng>
-W=2
-<>
diff --git a/src/3rdparty/proj/proj_data/world b/src/3rdparty/proj/proj_data/world
deleted file mode 100644
index 2018b533..00000000
--- a/src/3rdparty/proj/proj_data/world
+++ /dev/null
@@ -1,212 +0,0 @@
-# SCCSID @(#)world 1.2 95/08/05 GIE REL
-# proj +init files for various non-U.S. coordinate systems.
-#
-<CH1903> # Swiss Coordinate System
- +proj=somerc +lat_0=46d57'8.660"N +lon_0=7d26'22.500"E
- +ellps=bessel +x_0=600000 +y_0=200000
- +k_0=1. no_defs <>
-<madagascar> # Laborde grid for Madagascar
- proj=labrd ellps=intl lon_0=46d26'13.95E lat_0=18d54S
- azi=18d54 k_0=.9995 x_0=400000 y_0=800000
- no_defs <>
-<new_zealand> # New Zealand Map Grid (NZMG)
- proj=nzmg # Projection unique to N.Z. so all factors fixed
- no_defs <>
-# Secondary grids DMA TM8358.1, p. 4.3
-<bwi> # British West Indies
- proj=tmerc ellps=clrk80 lon_0=62W
- x_0=400000 k_0=0.9995
- no_defs <>
-<costa-n> # Costa Rica Norte
- proj=lcc ellps=clrk66 lat_1=10d28N lon_0=84d20W
- x_0=500000 y_0=217820.522 k_0=0.99995696
- no_defs <>
-<costa-s> # Costa Rica Sud
- proj=lcc ellps=clrk66 lat_1=9dN lon_0=83d40W
- x_0=500000 y_0=327987.436 k_0=0.99995696
- no_defs <>
-<cuba-n> # Cuba Norte
- proj=lcc ellps=clrk66 lat_1=22d21N lon_0=81dW
- x_0=500000 y_0=280296.016 k_0=0.99993602
- no_defs <>
-<cuba-s> # Cuba Sud
- proj=lcc ellps=clrk66 lat_1=20d43'N lon_0=76d50'W
- x_0=500000 y_0=229126.939 k_0=0.99994848
- no_defs <>
-<domin_rep> # Dominican Republic
- proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W
- x_0=500000 y_0=277063.657 k_0=0.99991102
- no_defs <>
-<egypt-1> # Egypt
- proj=tmerc ellps=intl lon_0=25d30'E x_0=300000 k_0=0.99985
- no_defs <>
-<egypt-2> # Egypt
- proj=tmerc ellps=intl lon_0=28d30'E x_0=300000 k_0=0.99985
- no_defs <>
-<egypt-3> # Egypt
- proj=tmerc ellps=intl lon_0=31d30'E x_0=300000 k_0=0.99985
- no_defs <>
-<egypt-4> # Egypt
- proj=tmerc ellps=intl lon_0=34d30'E x_0=300000 k_0=0.99985
- no_defs <>
-<egypt-5> # Egypt
- proj=tmerc ellps=intl lon_0=37d30'E x_0=300000 k_0=0.99985
- no_defs <>
-<el_sal> # El Salvador
- proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=89dW
- x_0=500000 y_0=295809.184 k_0=0.99996704
- no_defs <>
-<guat-n> # Guatemala Norte
- proj=lcc ellps=clrk66 lat_1=16d49'N lon_0=90d20'W
- x_0=500000 y_0=292209.579 k_0=0.99992226
- no_defs <>
-<guat-s> # Guatemala Sud
- proj=lcc ellps=clrk66 lat_1=14d54'N lon_0=90d20'W
- x_0=500000 y_0=325992.681 k_0=0.99989906
- no_defs <>
-<haiti> # Haiti
- proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W
- x_0=500000 y_0=277063.657 k_0=0.99991102
- no_defs <>
-<hond-n> # Honduras Norte
- proj=lcc ellps=clrk66 lat_1=15d30'N lon_0=86d10'W
- x_0=500000 y_0=296917.439 k_0=0.99993273
- no_defs <>
-<hond-s> # Honduras Sud
- proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=87d10'W
- x_0=500000 y_0=296215.903 k_0=0.99995140
- no_defs <>
-<levant> # Levant
- proj=lcc ellps=clrk66 lat_1=34d39'N lon_0=37d21'E
- x_0=500000 y_0=300000 k_0=0.9996256
- no_defs <>
-<nica-n> # Nicaragua Norte
- proj=lcc ellps=clrk66 lat_1=13d52'N lon_0=85d30'W
- x_0=500000 y_0=359891.816 k_0=0.99990314
- no_defs <>
-<nica-s> # Nicaragua Sud
- proj=lcc ellps=clrk66 lat_1=11d40'N lon_0=85d30'W
- x_0=500000 y_0=288876.327 k_0=0.99992228
- no_defs <>
-<nw-africa> # Northwest Africa
- proj=lcc ellps=clrk80 lat_1=34dN lon_0=0dE
- x_0=1000000 y_0=500000 k_0=0.99908
- no_defs <>
-<palestine> # Palestine
- proj=tmerc a=6378300.79 rf=293.488307656
- lat_0=31d44'2.749"N lon_0=35d12'43.490"E
- x_0=170251.555 y_0=126867.909 k_0=1
- no_defs <>
-<panama> # Panama
- proj=lcc ellps=clrk66 lat_1=8d25'N lon_0=80dW
- x_0=500000 y_0=294865.303 k_0=0.99989909
- no_defs <>
-# other grids in DMA TM8358.1
-<bng> # British National Grid
- proj=tmerc ellps=airy lat_0=49dN lon_0=2dW
- k_0=0.9996012717 x_0=400000 y_0=-100000
- no_defs <>
-<malay> # West Malaysian RSO Grid
- proj=omerc a=6377295.66402 rf=300.8017 alpha=323d01'32.846"
- no_uoff rot_conv lonc=102d15E lat_0=4dN k_0=0.99984 x_0=804670.240 y_0=0
- no_defs <>
-<india-I> # India Zone I
- proj=lcc ellps=everest lon_0=68E lat_1=32d30'N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IIA> # India Zone IIA
- proj=lcc ellps=everest lon_0=74E lat_1=26N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IIB> # India Zone IIB
- proj=lcc ellps=everest lon_0=90E lat_1=26N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IIIA> # India Zone IIIA
- proj=lcc ellps=everest lon_0=80E lat_1=19N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IIIB> # India Zone IIIB
- proj=lcc ellps=everest lon_0=100E lat_1=19N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IVA> # India Zone IVA
- proj=lcc ellps=everest lon_0=80E lat_1=12N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<india-IVB> # India Zone IVB
- proj=lcc ellps=everest lon_0=104E lat_1=12N
- x_0=2743185.69 y_0=914395.23 k_0=.998786408
- no_defs <>
-<ceylon> # Ceylon Belt
- proj=tmerc ellps=everest lon_0=80d46'18.160"E lat_0=7d0'1.729"N
- x_0=160933.56048 y_0=160933.56048 k_0=1.
- no_defs <>
-<irish> # Irish Transverse Mercator Grid
- proj=tmerc ellps=mod_airy lat_0=53d30'N lon_0=8W
- x_0=200000 y_0=250000 k_0=1.000035
- no_defs <>
-<neiez> # Netherlands East Indies Equitorial Zone
- proj=merc ellps=bessel lon_0=110E
- x_0=3900000 y_0=900000 k_0=0.997
- no_defs <>
-<n-alger> # Nord Algerie Grid
- proj=lcc ellps=clrk80 lon_0=2d42E lat_0=36N
- x_0=500000 y_0=300000 k_0=0.999625544
- no_defs <>
-<n-maroc> # Nord Maroc Grid
- proj=lcc ellps=clrk80 lon_0=5d24'W lat_0=33d18'N
- x_0=500000 y_0=300000 k_0=0.999625769
- no_defs <>
-<n-tunis> # Nord Tunisie Grid
- proj=lcc ellps=clrk80 lon_0=9d54E lat_0=36N
- x_0=500000 y_0=300000 k_0=0.999625544
- no_defs <>
-<s-alger> # Sud Algerie Grid
- proj=lcc ellps=clrk80 lon_0=2d42E lat_0=33d18'N
- x_0=500000 y_0=300000 k_0=0.999625769
- no_defs <>
-<s-maroc> # Sud Maroc Grid
- proj=lcc ellps=clrk80 lon_0=5d24W lat_0=29d42'N
- x_0=500000 y_0=300000 k_0=0.999615596
- no_defs <>
-<s-tunis> # Sud Tunisie Grid
- proj=lcc ellps=clrk80 lon_0=9d54'E lat_0=33d18'N
- x_0=500000 y_0=300000 k_0=0.999625769
- no_defs <>
-# Gauss Krueger Grid for Germany
-#
-# The first figure of the easting is lon_0 devided by 3
-# ( 2 for 6d0E, 3 for 9d0E, 4 for 12d0E)
-# For translations you have to remove this first figure
-# and convert northings and eastings from km to meter .
-# The other way round, devide by 1000 and add the figure.
-# I made 3 entrys for the officially used grids in Germany
-#
-#
-# Und nochmal in deutsch :
-# Die erste Ziffer des Rechtswerts beschreibt den Hauptmeridian
-# und ist dessen Gradzahl geteilt durch 3.
-# Zum Umrechnen in Grad muss daher die erste Ziffer des Rechtswertes
-# entfernt werden und evt. von km auf Metern umgerechnet werden.
-# Zur Umrechnung in Gauss Krueger Koordinaten entsprechend die
-# Ziffer fuer den Hauptmeridian vor dem Rechtswert ergaenzen.
-# Ich hab fuer alle drei in Deutschland ueblichen Hauptmeridiane
-# jeweils einen Eintrag ergaenzt.
-#
-#
-# added by Michael Goepel <goepel@ffm.plusline.de>
-#
-<gk2-d> # Gauss Krueger Grid for Germany
- proj=tmerc ellps=bessel lon_0=6d0E lat_0=0
- x_0=500000
- no_defs<>
-<gk3-d> # Gauss Krueger Grid for Germany
- proj=tmerc ellps=bessel lon_0=9d0E lat_0=0
- x_0=500000
- no_defs<>
-<gk4-d> # Gauss Krueger Grid for Germany
- proj=tmerc ellps=bessel lon_0=12d0E lat_0=0
- x_0=500000
- no_defs<>
-
diff --git a/src/3rdparty/proj/proj_mdist.c b/src/3rdparty/proj/proj_mdist.c
deleted file mode 100644
index 9edde83f..00000000
--- a/src/3rdparty/proj/proj_mdist.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-** libproj -- library of cartographic projections
-**
-** Copyright (c) 2003, 2006 Gerald I. Evenden
-*/
-static const char
-LIBPROJ_ID[] = "$Id: proj_mdist.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/*
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be
-** included in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-/* Computes distance from equator along the meridian to latitude phi
-** and inverse on unit ellipsoid.
-** Precision commensurate with double precision.
-*/
-#define PROJ_LIB__
-#include <projects.h>
-#define MAX_ITER 20
-#define TOL 1e-14
-
-struct MDIST {
- int nb;
- double es;
- double E;
- double b[1];
-};
-#define B ((struct MDIST *)b)
- void *
-proj_mdist_ini(double es) {
- double numf, numfi, twon1, denf, denfi, ens, T, twon;
- double den, El, Es;
- double E[MAX_ITER];
- struct MDIST *b;
- int i, j;
-
-/* generate E(e^2) and its terms E[] */
- ens = es;
- numf = twon1 = denfi = 1.;
- denf = 1.;
- twon = 4.;
- Es = El = E[0] = 1.;
- for (i = 1; i < MAX_ITER ; ++i) {
- numf *= (twon1 * twon1);
- den = twon * denf * denf * twon1;
- T = numf/den;
- Es -= (E[i] = T * ens);
- ens *= es;
- twon *= 4.;
- denf *= ++denfi;
- twon1 += 2.;
- if (Es == El) /* jump out if no change */
- break;
- El = Es;
- }
- if ((b = (struct MDIST *)malloc(sizeof(struct MDIST)+
- (i*sizeof(double)))) == NULL)
- return(NULL);
- b->nb = i - 1;
- b->es = es;
- b->E = Es;
- /* generate b_n coefficients--note: collapse with prefix ratios */
- b->b[0] = Es = 1. - Es;
- numf = denf = 1.;
- numfi = 2.;
- denfi = 3.;
- for (j = 1; j < i; ++j) {
- Es -= E[j];
- numf *= numfi;
- denf *= denfi;
- b->b[j] = Es * numf / denf;
- numfi += 2.;
- denfi += 2.;
- }
- return (b);
-}
- double
-proj_mdist(double phi, double sphi, double cphi, const void *b) {
- double sc, sum, sphi2, D;
- int i;
-
- sc = sphi * cphi;
- sphi2 = sphi * sphi;
- D = phi * B->E - B->es * sc / sqrt(1. - B->es * sphi2);
- sum = B->b[i = B->nb];
- while (i) sum = B->b[--i] + sphi2 * sum;
- return(D + sc * sum);
-}
- double
-proj_inv_mdist(double dist, const void *b) {
- double s, t, phi, k;
- int i;
-
- k = 1./(1.- B->es);
- i = MAX_ITER;
- phi = dist;
- while ( i-- ) {
- s = sin(phi);
- t = 1. - B->es * s * s;
- phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) *
- (t * sqrt(t)) * k;
- if (fabs(t) < TOL) /* that is no change */
- return phi;
- }
- /* convergence failed */
- pj_errno = -17;
- return phi;
-}
diff --git a/src/3rdparty/proj/proj_rouss.c b/src/3rdparty/proj/proj_rouss.c
deleted file mode 100644
index 594c237d..00000000
--- a/src/3rdparty/proj/proj_rouss.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-** libproj -- library of cartographic projections
-**
-** Copyright (c) 2003, 2006 Gerald I. Evenden
-*/
-static const char
-LIBPROJ_ID[] = "$Id: proj_rouss.c 1504 2009-01-06 02:11:57Z warmerdam $";
-/*
-** Permission is hereby granted, free of charge, to any person obtaining
-** a copy of this software and associated documentation files (the
-** "Software"), to deal in the Software without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Software, and to
-** permit persons to whom the Software is furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be
-** included in all copies or substantial portions of the Software.
-**
-** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#define PROJ_PARMS__ \
- double s0; \
- double A1, A2, A3, A4, A5, A6; \
- double B1, B2, B3, B4, B5, B6, B7, B8; \
- double C1, C2, C3, C4, C5, C6, C7, C8; \
- double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; \
- void *en;
-#define PJ_LIB__
-# include <projects.h>
-PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps.";
-FORWARD(e_forward); /* ellipsoid */
- double s, al, cp, sp, al2, s2;
-
- cp = cos(lp.phi);
- sp = sin(lp.phi);
- s = proj_mdist(lp.phi, sp, cp, P->en) - P->s0;
- s2 = s * s;
- al = lp.lam * cp / sqrt(1. - P->es * sp * sp);
- al2 = al * al;
- xy.x = P->k0 * al*(1.+s2*(P->A1+s2*P->A4)-al2*(P->A2+s*P->A3+s2*P->A5
- +al2*P->A6));
- xy.y = P->k0 * (al2*(P->B1+al2*P->B4)+
- s*(1.+al2*(P->B3-al2*P->B6)+s2*(P->B2+s2*P->B8)+
- s*al2*(P->B5+s*P->B7)));
- return (xy);
-}
-INVERSE(e_inverse); /* ellipsoid */
- double s, al, x = xy.x / P->k0, y = xy.y / P->k0, x2, y2;;
-
- x2 = x * x;
- y2 = y * y;
- al = x*(1.-P->C1*y2+x2*(P->C2+P->C3*y-P->C4*x2+P->C5*y2-P->C7*x2*y)
- +y2*(P->C6*y2-P->C8*x2*y));
- s = P->s0 + y*(1.+y2*(-P->D2+P->D8*y2))+
- x2*(-P->D1+y*(-P->D3+y*(-P->D5+y*(-P->D7+y*P->D11)))+
- x2*(P->D4+y*(P->D6+y*P->D10)-x2*P->D9));
- lp.phi=proj_inv_mdist(s, P->en);
- s = sin(lp.phi);
- lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi);
- return (lp);
-}
-FREEUP;
- if (P) {
- if (P->en)
- free(P->en);
- free(P);
- }
-}
-ENTRY1(rouss, en)
- double N0, es2, t, t2, R_R0_2, R_R0_4;
-
- if (!((P->en = proj_mdist_ini(P->es))))
- E_ERROR_0;
- es2 = sin(P->phi0);
- P->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), P->en);
- t = 1. - (es2 = P->es * es2 * es2);
- N0 = 1./sqrt(t);
- R_R0_2 = t * t / P->one_es;
- R_R0_4 = R_R0_2 * R_R0_2;
- t = tan(P->phi0);
- t2 = t * t;
- P->C1 = P->A1 = R_R0_2 / 4.;
- P->C2 = P->A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.;
- P->A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0);
- P->A4 = R_R0_4 / 24.;
- P->A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.;
- P->A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.;
- P->B1 = t / (2. * N0);
- P->B2 = R_R0_2 / 12.;
- P->B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.;
- P->B4 = R_R0_2 * t * (2. - t2)/(24. * N0);
- P->B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0);
- P->B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.;
- P->B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.;
- P->B8 = R_R0_4 / 120.;
- P->C3 = R_R0_2 * t * (1. + t2)/(3. * N0);
- P->C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.;
- P->C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.;
- P->C6 = R_R0_4 / 16.;
- P->C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0);
- P->C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0);
- P->D1 = t / (2. * N0);
- P->D2 = R_R0_2 / 12.;
- P->D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.;
- P->D4 = R_R0_2 * t * (1. + t2)/(8. * N0);
- P->D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0);
- P->D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.;
- P->D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.;
- P->D8 = R_R0_4 / 80.;
- P->D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.;
- P->D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0);
- P->D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0);
- P->fwd = e_forward;
- P->inv = e_inverse;
- ENDENTRY(P)
diff --git a/src/3rdparty/proj/rtodms.c b/src/3rdparty/proj/rtodms.c
deleted file mode 100644
index abf6bc1c..00000000
--- a/src/3rdparty/proj/rtodms.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Convert radian argument to DMS ascii format */
-#include <projects.h>
-#include <stdio.h>
-#include <string.h>
-/*
-** RES is fractional second figures
-** RES60 = 60 * RES
-** CONV = 180 * 3600 * RES / PI (radians to RES seconds)
-*/
- static double
-RES = 1000.,
-RES60 = 60000.,
-CONV = 206264806.24709635515796003417;
- static char
-format[50] = "%dd%d'%.3f\"%c";
- static int
-dolong = 0;
- void
-set_rtodms(int fract, int con_w) {
- int i;
-
- if (fract >= 0 && fract < 9 ) {
- RES = 1.;
- /* following not very elegant, but used infrequently */
- for (i = 0; i < fract; ++i)
- RES *= 10.;
- RES60 = RES * 60.;
- CONV = 180. * 3600. * RES / PI;
- if (! con_w)
- (void)sprintf(format,"%%dd%%d'%%.%df\"%%c", fract);
- else
- (void)sprintf(format,"%%dd%%02d'%%0%d.%df\"%%c",
- fract+2+(fract?1:0), fract);
- dolong = con_w;
- }
-}
- char *
-rtodms(char *s, double r, int pos, int neg) {
- int deg, min, sign;
- char *ss = s;
- double sec;
-
- if (r < 0) {
- r = -r;
- if (!pos) { *ss++ = '-'; sign = 0; }
- else sign = neg;
- } else
- sign = pos;
- r = floor(r * CONV + .5);
- sec = fmod(r / RES, 60.);
- r = floor(r / RES60);
- min = fmod(r, 60.);
- r = floor(r / 60.);
- deg = r;
-
- if (dolong)
- (void)sprintf(ss,format,deg,min,sec,sign);
- else if (sec) {
- char *p, *q;
-
- (void)sprintf(ss,format,deg,min,sec,sign);
- for (q = p = ss + strlen(ss) - (sign ? 3 : 2); *p == '0'; --p) ;
- if (*p != '.')
- ++p;
- if (++q != p)
- (void)strcpy(p, q);
- } else if (min)
- (void)sprintf(ss,"%dd%d'%c",deg,min,sign);
- else
- (void)sprintf(ss,"%dd%c",deg, sign);
- return s;
-}
diff --git a/src/3rdparty/proj/vector1.c b/src/3rdparty/proj/vector1.c
deleted file mode 100644
index 30fca1ca..00000000
--- a/src/3rdparty/proj/vector1.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* make storage for one and two dimensional matricies */
-#include <stdlib.h>
-#include <projects.h>
- void * /* one dimension array */
-vector1(int nvals, int size) { return((void *)pj_malloc(size * nvals)); }
- void /* free 2D array */
-freev2(void **v, int nrows) {
- if (v) {
- for (v += nrows; nrows > 0; --nrows)
- pj_dalloc(*--v);
- pj_dalloc(v);
- }
-}
- void ** /* two dimension array */
-vector2(int nrows, int ncols, int size) {
- void **s;
-
- if (s = (void **)pj_malloc(sizeof(void *) * nrows)) {
- int rsize, i;
-
- rsize = size * ncols;
- for (i = 0; i < nrows; ++i)
- if (!(s[i] = pj_malloc(rsize))) {
- freev2(s, i);
- return (void **)0;
- }
- }
- return s;
-}
diff --git a/src/imports/location/location.cpp b/src/imports/location/location.cpp
index 65e4298b..8b3a926f 100644
--- a/src/imports/location/location.cpp
+++ b/src/imports/location/location.cpp
@@ -42,7 +42,6 @@
#include "qdeclarativepositionsource_p.h"
#include "qdeclarativeposition_p.h"
-#include "qgeomapobject.h"
#include "qdeclarativegeoboundingarea_p.h"
#include "qdeclarativegeoboundingbox_p.h"
#include "qdeclarativegeoboundingcircle_p.h"
@@ -51,23 +50,18 @@
#include "qdeclarativegeoserviceprovider_p.h"
#include "qdeclarativegraphicsgeomap_p.h"
-#include "qdeclarativegeomapgroupobject_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qdeclarativegeomapcircleobject_p.h"
-#include "qdeclarativegeomappixmapobject_p.h"
-#include "qdeclarativegeomappolygonobject_p.h"
-#include "qdeclarativegeomappolylineobject_p.h"
-#include "qdeclarativegeomaprectangleobject_p.h"
-#include "qdeclarativegeomaptextobject_p.h"
+#include "qdeclarative3dgraphicsgeomap_p.h"
#include "qdeclarativegeomapmousearea_p.h"
#include "qdeclarativegeomapmouseevent_p.h"
#include "qdeclarativegeoroute_p.h"
-#include "qdeclarativegeomaprouteobject_p.h"
#include "qdeclarativegeoroutemodel_p.h"
#include "qdeclarativegeocodemodel_p.h"
#include "qdeclarativegeomaneuver_p.h"
+#include "qdeclarativegeomapflickable_p.h"
+#include "qdeclarativegeomappincharea_p.h"
+#include "qdeclarativegeomapitem_p.h"
//Place includes
#include "qdeclarativecategory_p.h"
@@ -107,17 +101,8 @@ public:
qmlRegisterType<QDeclarativeGeoServiceProvider>(uri, 1, 2, "Plugin");
qmlRegisterType<QDeclarativeGeoServiceProviderParameter>(uri, 1, 2, "PluginParameter");
qmlRegisterType<QDeclarativeGraphicsGeoMap>(uri, 1, 2, "Map");
- qmlRegisterType<QDeclarativeGeoMapObjectBorder>(); // used as grouped property
- qmlRegisterType<QGeoMapObject>(uri, 1, 2, "QGeoMapObject");
qmlRegisterType<QDeclarativeGeoMapObject>(uri, 1, 2, "MapObject");
qmlRegisterType<QDeclarativeGeoMapObjectView>(uri, 1, 2, "MapObjectView");
- qmlRegisterType<QDeclarativeGeoMapGroupObject>(uri, 1, 2, "MapGroup");
- qmlRegisterType<QDeclarativeGeoMapCircleObject>(uri, 1, 2, "MapCircle");
- qmlRegisterType<QDeclarativeGeoMapPolygonObject>(uri, 1, 2, "MapPolygon");
- qmlRegisterType<QDeclarativeGeoMapPolylineObject>(uri, 1, 2, "MapPolyline");
- qmlRegisterType<QDeclarativeGeoMapRectangleObject>(uri, 1, 2, "MapRectangle");
- qmlRegisterType<QDeclarativeGeoMapTextObject>(uri, 1, 2, "MapText");
- qmlRegisterType<QDeclarativeGeoMapPixmapObject>(uri, 1, 2, "MapImage");
qmlRegisterType<QDeclarativeGeoMapMouseArea>(uri, 1, 2, "MapMouseArea");
qmlRegisterType<QDeclarativeGeoMapMouseEvent>(uri, 1, 2, "MapMouseEvent");
@@ -134,18 +119,10 @@ public:
qmlRegisterType<QDeclarativeGeoServiceProvider>(uri, 5, 0, "Plugin");
qmlRegisterType<QDeclarativeGeoServiceProviderParameter>(uri, 5, 0, "PluginParameter");
- qmlRegisterType<QDeclarativeGraphicsGeoMap>(uri, 5, 0, "Map");
- qmlRegisterType<QDeclarativeGeoMapObjectBorder>(); // used as grouped property
- qmlRegisterType<QGeoMapObject>(uri, 5, 0, "QGeoMapObject");
+ qmlRegisterType<QDeclarative3DGraphicsGeoMap>(uri, 5, 0, "Map3D");
qmlRegisterType<QDeclarativeGeoMapObject>(uri, 5, 0, "MapObject");
+ qmlRegisterType<QDeclarativeGeoMapItem>(uri, 5, 0, "MapItem");
qmlRegisterType<QDeclarativeGeoMapObjectView>(uri, 5, 0, "MapObjectView");
- qmlRegisterType<QDeclarativeGeoMapGroupObject>(uri, 5, 0, "MapGroup");
- qmlRegisterType<QDeclarativeGeoMapCircleObject>(uri, 5, 0, "MapCircle");
- qmlRegisterType<QDeclarativeGeoMapPolygonObject>(uri, 5, 0, "MapPolygon");
- qmlRegisterType<QDeclarativeGeoMapPolylineObject>(uri, 5, 0, "MapPolyline");
- qmlRegisterType<QDeclarativeGeoMapRectangleObject>(uri, 5, 0, "MapRectangle");
- qmlRegisterType<QDeclarativeGeoMapTextObject>(uri, 5, 0, "MapText");
- qmlRegisterType<QDeclarativeGeoMapPixmapObject>(uri, 5, 0, "MapImage");
qmlRegisterType<QDeclarativeGeoMapMouseArea>(uri, 5, 0, "MapMouseArea");
qmlRegisterType<QDeclarativeGeoMapMouseEvent>(uri, 5, 0, "MapMouseEvent");
@@ -153,9 +130,12 @@ public:
qmlRegisterType<QDeclarativeGeoRouteModel>(uri, 5, 0, "RouteModel");
qmlRegisterType<QDeclarativeGeoRouteQuery>(uri, 5, 0, "RouteQuery");
qmlRegisterType<QDeclarativeGeoRoute>(uri, 5, 0, "Route"); // data type
- qmlRegisterType<QDeclarativeGeoMapRouteObject>(uri, 5, 0, "MapRoute"); // graphical presentation
qmlRegisterType<QDeclarativeGeoRouteSegment>(uri, 5, 0, "RouteSegment");
qmlRegisterType<QDeclarativeGeoManeuver>(uri, 5, 0, "RouteManeuver");
+ qmlRegisterType<QDeclarativeGeoBoundingCircle>(uri, 5, 0, "BoundingCircle");
+ qmlRegisterUncreatableType<QDeclarativeGeoMapFlickable>(uri, 5, 0, "MapFlickable", QDeclarativeGeoMapFlickable::tr("(Map)Flickable is not intended instantiable by developer."));
+ qmlRegisterUncreatableType<QDeclarativeGeoMapPinchArea>(uri, 5, 0, "MapPinch", QDeclarativeGeoMapPinchArea::tr("(Map)PinchArea is not intended instantiable by developer."));
+ qmlRegisterUncreatableType<QDeclarativeGeoMapPinchEvent>(uri, 5, 0, "", QDeclarativeGeoMapPinchEvent::tr("(Map)PinchEvent is not intended instantiable by developer."));
qmlRegisterType<QDeclarativeCategory>(uri, 5, 0, "Category");
qmlRegisterType<QDeclarativeDescription>(uri, 5, 0, "Description");
@@ -178,7 +158,8 @@ public:
}
};
-QT_END_NAMESPACE
#include "location.moc"
+QT_END_NAMESPACE
+
Q_EXPORT_PLUGIN2(declarative_location, QT_PREPEND_NAMESPACE(QLocationDeclarativeModule));
diff --git a/src/imports/location/location.pro b/src/imports/location/location.pro
index a7bc5b25..992034a1 100644
--- a/src/imports/location/location.pro
+++ b/src/imports/location/location.pro
@@ -6,11 +6,15 @@ TARGETPATH = Qt/location
include(qlocationimport.pri)
-QT += declarative network location
+QT += declarative-private network location qtquick1 declarative
+CONFIG += qt3d
DESTDIR = $$QT.location.imports/$$TARGETPATH
target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
+#INCLUDEPATH += ../../../../qtdeclarative/include
+INCLUDEPATH += ../../../../qtdeclarative/include/QtDeclarative/5.0.0/QtDeclarative
+INCLUDEPATH += ../../../../qtdeclarative/include/QtDeclarative/5.0.0/QtDeclarative/private
# On some platforms, build both versions because debug and release
# versions are incompatible
@@ -20,15 +24,7 @@ HEADERS += qdeclarativeposition_p.h \
qdeclarativepositionsource_p.h \
qdeclarativecoordinate_p.h \
qdeclarativegeolocation_p.h \
- qdeclarativegeomapobjectborder_p.h \
- qdeclarativegeomapcircleobject_p.h \
- qdeclarativegeomapgroupobject_p.h \
qdeclarativegeomapobject_p.h \
- qdeclarativegeomappixmapobject_p.h \
- qdeclarativegeomappolygonobject_p.h \
- qdeclarativegeomappolylineobject_p.h \
- qdeclarativegeomaprectangleobject_p.h \
- qdeclarativegeomaptextobject_p.h \
qdeclarativegeomapmouseevent_p.h \
qdeclarativegeomapmousearea_p.h \
qdeclarativegeoserviceprovider_p.h \
@@ -41,23 +37,18 @@ HEADERS += qdeclarativeposition_p.h \
qdeclarativegeoroute_p.h \
qdeclarativegeoroutesegment_p.h \
qdeclarativegeomaneuver_p.h \
- qdeclarativegeomaprouteobject_p.h \
- qdeclarativegeoboundingcircle_p.h
+ qdeclarativegeoboundingcircle_p.h \
+ qdeclarative3dgraphicsgeomap_p.h \
+ qdeclarativegeomapflickable_p.h \
+ qdeclarativegeomappincharea_p.h \
+ qdeclarativegeomapitem_p.h
SOURCES += qdeclarativeposition.cpp \
location.cpp \
qdeclarativepositionsource.cpp \
qdeclarativecoordinate.cpp \
qdeclarativegeolocation.cpp \
- qdeclarativegeomapobjectborder.cpp \
- qdeclarativegeomapcircleobject.cpp \
- qdeclarativegeomapgroupobject.cpp \
qdeclarativegeomapobject.cpp \
- qdeclarativegeomappixmapobject.cpp \
- qdeclarativegeomappolygonobject.cpp \
- qdeclarativegeomappolylineobject.cpp \
- qdeclarativegeomaprectangleobject.cpp \
- qdeclarativegeomaptextobject.cpp \
qdeclarativegeomapmouseevent.cpp \
qdeclarativegeomapmousearea.cpp \
qdeclarativegeoserviceprovider.cpp \
@@ -69,8 +60,11 @@ SOURCES += qdeclarativeposition.cpp \
qdeclarativegeoroute.cpp \
qdeclarativegeoroutesegment.cpp \
qdeclarativegeomaneuver.cpp \
- qdeclarativegeomaprouteobject.cpp \
- qdeclarativegeoboundingcircle.cpp
+ qdeclarativegeoboundingcircle.cpp \
+ qdeclarative3dgraphicsgeomap.cpp \
+ qdeclarativegeomapflickable.cpp \
+ qdeclarativegeomappincharea.cpp \
+ qdeclarativegeomapitem.cpp
include(declarativeplaces/declarativeplaces.pri)
@@ -83,3 +77,20 @@ qmldir.files += $$PWD/qmldir
qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
INSTALLS += target qmldir
+
+# This is interim hack until the QSGMouseArea and QSGPinchArea are enabled.
+# Hack makes code compile, but for anything useful you want the
+# QSGMOUSEAREA_AVAILABLE
+if (exists($$PWD/qsgmousearea_p.h)) {
+ message('Will try to build QML Map 3D with QML2 user interaction elements and Map Items.')
+ DEFINES += QSGMOUSEAREA_AVAILABLE
+ DEFINES += QSGSHADEREFFECTSOURCE_AVAILABLE
+} else {
+ message('QML2 3D Map user interaction elements and MapItems not available. Check location.pro - file for instructions.')
+# 1) Modify qsgmousearea_p.h at qtdeclaratice/src/declarative/items
+# Make the QSGMouseArea exported instead of autotest exported, i.e. the file should have:
+# class Q_DECLARATIVE_EXPORT QSGMouseArea : public QSGItem
+# 2) Also export the QSGShaderEffectSource in qsgshadereffectsource_p.h
+# 3) Make the declarative module.
+# 4) Rerun qmake and make
+}
diff --git a/src/imports/location/qdeclarative3dgraphicsgeomap.cpp b/src/imports/location/qdeclarative3dgraphicsgeomap.cpp
new file mode 100644
index 00000000..adb6d1f1
--- /dev/null
+++ b/src/imports/location/qdeclarative3dgraphicsgeomap.cpp
@@ -0,0 +1,1204 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarative3dgraphicsgeomap_p.h"
+#include "qdeclarativegeomapmousearea_p.h"
+
+#include "qdeclarativecoordinate_p.h"
+#include "qdeclarativegeoserviceprovider_p.h"
+#include <Qt3D/qglview.h>
+#include <Qt3D/qglsubsurface.h>
+#include <QtCore/QCoreApplication>
+#include <QThread>
+
+#include "tilecache.h"
+#include "tile.h"
+#include "cameradata.h"
+#include <Qt3D/qglscenenode.h>
+#include <Qt3D/qglbuilder.h>
+#include <Qt3D/qgeometrydata.h>
+#include "qdeclarativegeomapitem_p.h"
+#include <cmath>
+
+#include <qgeoserviceprovider.h>
+#include <qgeomappingmanager.h>
+//#include <qgeomapdata.h>
+//#include <qgeomapobject.h>
+
+#include <QGraphicsSceneMouseEvent>
+#include <QDeclarativeContext>
+#include <QtDeclarative/qdeclarativeinfo.h>
+#include <QModelIndex>
+#include <QApplication>
+#include <QSGCanvas>
+#include <QSGEngine>
+#include <QDesktopWidget>
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmlclass Map3D
+
+ \brief The Map element displays a map.
+ \inherits QDeclarativeItem
+
+ \ingroup qml-location-maps
+
+ The Map element can be used be used to display a map of the world. The
+ bulk of the functionality is provided by a mapping plugin described
+ by the Plugin element associated with the Map.
+
+ Various map objects can be added to the map. These map objects are
+ specified in terms of coordinates and metres.
+
+ MapObjects can be directly added to the Map element and it will display them
+ automatically. The various objects that can be added include:
+
+ \list
+ \endlist
+
+ Of the above list, MapObjectView is a special case and not a MapObject as such.
+ Here is a small example to illustrate this:
+
+ \snippet doc/src/snippets/declarative/declarative-map.qml Basic MapObjects and View on Map
+
+ Mouse handling is done by adding MapMouseArea items as children of either
+ MapObjects or the Map item itself.
+
+ The Map element is part of the \bold{Qt.location 5.0} module.
+*/
+
+QDeclarative3DGraphicsGeoMap::QDeclarative3DGraphicsGeoMap(QSGItem *parent)
+ : QSGItem(parent),
+ plugin_(0),
+ serviceProvider_(0),
+ mappingManager_(0),
+// mapData_(0),
+ center_(0),
+ initialCoordinate(0),
+// mapType_(NoMap),
+// connectivityMode_(NoConnectivity),
+ componentCompleted_(false),
+#ifdef QSGMOUSEAREA_AVAILABLE
+ mouseArea_(0),
+#endif
+ flickable_(0),
+ pinchArea_(0),
+ canvas_(0),
+ touchTimer_(-1),
+ tileCache_(0)
+
+ // ses_(0),
+ // texture_(0)
+{
+ initialCoordinate = new QGeoCoordinate(-27.0, 153.0);
+ zoomLevel_ = 8;
+ size_ = QSizeF(100.0, 100.0);
+ setAcceptHoverEvents(true);
+ setAcceptedMouseButtons(Qt::LeftButton | Qt::MidButton | Qt::RightButton);
+ setFlags(QSGItem::ItemHasContents);
+
+ tileCache_ = new TileCache();
+ map_ = new Map(tileCache_, this);
+ connect(map_,
+ SIGNAL(updateRequired()),
+ this,
+ SLOT(update()));
+ //connect(map_->mapCamera(), SIGNAL(zoomChanged(double)), this, SLOT(cameraZoomLevelChanged(double)));
+ // Create internal flickable and pinch area.
+ flickable_ = new QDeclarativeGeoMapFlickable(map_, this);
+ pinchArea_ = new QDeclarativeGeoMapPinchArea(this, this);
+ qDebug() << __FUNCTION__ << "Created.============================================================";
+}
+
+QSGNode* QDeclarative3DGraphicsGeoMap::updatePaintNode(QSGNode* node, UpdatePaintNodeData* data)
+{
+ Q_UNUSED(node);
+ Q_UNUSED(data);
+ update();
+ return 0;
+}
+
+QDeclarative3DGraphicsGeoMap::~QDeclarative3DGraphicsGeoMap()
+{
+ // TODO we do not clear the map items atm
+// if (mapData_) {
+// qDeleteAll(mapViews_);
+// // Remove map objects, we can't allow mapObject
+// // to delete the objects because they are owned
+// // by the declarative elements.
+// QList<QDeclarativeGeoMapObject*> objects = mapObjects_;
+// for (int i = 0; i < objects.size(); ++i) {
+// mapData_->removeMapObject(objects.at(i)->mapObject());
+// }
+// delete mapData_;
+// }
+ if (serviceProvider_)
+ delete serviceProvider_;
+ if (initialCoordinate) {
+ delete initialCoordinate;
+ }
+#ifdef QSGMOUSEAREA_AVAILABLE
+ delete mouseArea_;
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::componentComplete()
+{
+ qDebug() << __FUNCTION__ << "Completed =====-===-==================================================";
+ componentCompleted_ = true;
+ populateMap();
+ map_->resize(width(), height());
+ CameraData cameraData = map_->cameraData();
+ map_->setCameraData(cameraData);
+ map_->update();
+ QSGItem::componentComplete();
+}
+
+QDeclarativeGeoMapFlickable* QDeclarative3DGraphicsGeoMap::flick()
+{
+ return flickable_;
+}
+
+void QDeclarative3DGraphicsGeoMap::itemChange(ItemChange change, const ItemChangeData & data)
+{
+ if (change == ItemSceneChange) {
+ if (canvas_ && canvas_->sceneGraphEngine()) {
+ canvas_->disconnect(this);
+ canvas_->sceneGraphEngine()->disconnect(this);
+ }
+ canvas_ = data.canvas;
+ if (canvas_->sceneGraphEngine()) {
+ qDebug() << __FUNCTION__ << "Engine exists. Connecting to beforeRendering() " << canvas_->sceneGraphEngine();
+ QSGEngine* engine = canvas_->sceneGraphEngine();
+ connect((QObject*)engine, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection);
+ engine->setClearBeforeRendering(false);
+ } else if (canvas_)
+ connect(canvas_, SIGNAL(sceneGraphInitialized()), this, SLOT(sceneGraphInitialized()));
+ }
+}
+
+void QDeclarative3DGraphicsGeoMap::sceneGraphInitialized()
+{
+ QSGEngine* engine = canvas_->sceneGraphEngine();
+ if (!engine) {
+ qmlInfo(this) << tr("Unable to get QSGEngine. Will not be able to render the map.");
+ return;
+ }
+ connect((QObject*)engine, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection);
+ engine->setClearBeforeRendering(false);
+}
+
+void QDeclarative3DGraphicsGeoMap::populateMap()
+{
+// if (!mapData_ || !componentCompleted_)
+ if (!componentCompleted_)
+ return;
+ QObjectList kids = children();
+ for (int i = 0; i < kids.size(); ++i) {
+ //qDebug() << "Looping through..: " << kids.at(i)->metaObject()->className() << kids.at(i)->objectName();
+ // dispatch items appropriately
+ QDeclarativeGeoMapObjectView* mapView = qobject_cast<QDeclarativeGeoMapObjectView*>(kids.at(i));
+ if (mapView) {
+ mapViews_.append(mapView);
+ setupMapView(mapView);
+ continue;
+ }
+ QDeclarativeGeoMapObject *mapObject = qobject_cast<QDeclarativeGeoMapObject*>(kids.at(i));
+ if (mapObject) {
+ mapObjects_.append(mapObject);
+// objectMap_.insert(mapObject->mapObject(), mapObject);
+// mapData_->addMapObject(mapObject->mapObject());
+ // to solve when we have map object support
+ //mapObject->setMap(this);
+ continue;
+ }
+
+ QDeclarativeGeoMapItem* mapItem = qobject_cast<QDeclarativeGeoMapItem*>(kids.at(i));
+ if (mapItem) {
+ addMapItem(mapItem);
+ }
+#ifdef QSGMOUSEAREA_AVAILABLE
+ QSGMouseArea *mouseArea = qobject_cast<QSGMouseArea*>(kids.at(i));
+ if (mouseArea && !mouseArea_) {
+ //qDebug() << "Got mouse area.";
+ mouseArea_ = mouseArea;
+ // This is the trick to get mouse events reach Map element;
+ // if visible is true then the MouseArea will consume events
+ // before Map has chance to use it.
+ mouseArea_->setVisible(false);
+ connect(mouseArea_, SIGNAL(visibleChanged()), this, SLOT(mouseChanged()));
+ connect(mouseArea_, SIGNAL(enabledChanged()), this, SLOT(mouseChanged()));
+ connect(mouseArea_, SIGNAL(widthChanged()), this, SLOT(mouseChanged()));
+ connect(mouseArea_, SIGNAL(heightChanged()), this, SLOT(mouseChanged()));
+ } else if (mouseArea && mouseArea_) {
+ qmlInfo(this) << tr("Warning: only one MouseArea / Map supported. Extra MouseArea ignored.");
+ }
+#endif
+ QDeclarativeGeoMapMouseArea *mapMouseArea = qobject_cast<QDeclarativeGeoMapMouseArea*>(kids.at(i));
+ if (mapMouseArea) {
+ qmlInfo(this) << tr("Warning: MapMouseArea is no longer supported. Use normal MouseArea instead.");
+ }
+ }
+}
+
+void QDeclarative3DGraphicsGeoMap::mapItemTextureChanged()
+{
+#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE
+ for (int i = mapItemsPending_.count() - 1; i >= 0; --i) {
+ if (mapItemsPending_.at(i)->hasValidTexture()) {
+ disconnect(mapItemsPending_.at(i), SIGNAL(textureChanged()), this, SLOT(mapItemTextureChanged()));
+ mapItemsPending_.at(i)->setMap(this);
+ mapItems_.append(mapItemsPending_.at(i));
+ map_->addMapItem(mapItemsPending_.at(i)->mapItem());
+ mapItemsPending_.removeAt(i);
+ }
+ }
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::mouseChanged()
+{
+#ifdef QSGMOUSEAREA_AVAILABLE
+ if (mouseArea_
+ && mouseArea_->isVisible()
+ && mouseArea_->isEnabled()
+ && mouseArea_->width() > 0
+ && mouseArea_->height() > 0) {
+ qmlInfo(this) << tr("Warning: MouseArea in Map visible, enabled and has geometry. Map unable to intercept & dispatch mouse to map objects.");
+ }
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::setupMapView(QDeclarativeGeoMapObjectView *view)
+{
+ Q_UNUSED(view)
+ view->setMapData(this);
+ view->repopulate();
+}
+
+class ViewportSubsurface : public QGLSubsurface
+{
+public:
+ ViewportSubsurface(QGLAbstractSurface *surface, const QRect &region,
+ qreal adjust)
+ : QGLSubsurface(surface, region), m_adjust(adjust) {}
+
+ qreal aspectRatio() const;
+ ~ViewportSubsurface() {}
+
+private:
+ qreal m_adjust;
+};
+
+qreal ViewportSubsurface::aspectRatio() const
+{
+ return QGLSubsurface::aspectRatio() * m_adjust;
+}
+
+void QDeclarative3DGraphicsGeoMap::closeEvent(QCloseEvent *)
+{
+ qApp->quit();
+}
+
+void QDeclarative3DGraphicsGeoMap::showEvent(QShowEvent *)
+{
+ updateAspectRatio();
+}
+
+void QDeclarative3DGraphicsGeoMap::updateAspectRatio()
+{
+ map_->resize(width(), height());
+ if (!map_->autoUpdate())
+ map_->update();
+}
+
+void QDeclarative3DGraphicsGeoMap::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+ updateAspectRatio();
+}
+
+/*
+void QDeclarative3DGraphicsGeoMap::enterEvent(QEvent *)
+{
+ setFocus(true);
+ //grabKeyboard();
+}
+
+void QDeclarative3DGraphicsGeoMap::leaveEvent(QEvent *e)
+{
+ setFocus(false);
+ //releaseKeyboard();
+}
+*/
+
+void QDeclarative3DGraphicsGeoMap::keyPressEvent(QKeyEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+ if (e->key() == Qt::Key_Left) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Right) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Up) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Down) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Plus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ cameraData.setDistance(cameraData.distance() / 2.0);
+ cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() / 1.1);
+ }
+ } else if (e->key() == Qt::Key_Minus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ if (cameraData.zoomLevel() != 1)
+ cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+ cameraData.setDistance(cameraData.distance() * 2.0);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() * 1.1);
+ }
+ } else if (e->key() == Qt::Key_U) {
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ }
+ map_->setCameraData(cameraData);
+ update();
+}
+
+// Note: this slot will be executed in the QSG rendering thread
+// (Qt::DirectConnection) - not in the GUI/main thread of the app.
+// Hence thread-safen the critical sections of code to avoid crashes.
+void QDeclarative3DGraphicsGeoMap::beforeRendering()
+{
+ if (!isVisible())
+ return;
+ QGLPainter painter;
+ if (!painter.begin()) {
+ qmlInfo(this) << tr("GL graphics system is not active; cannot use 3D items");
+ return;
+ }
+
+#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE
+ // Update any map objects that may have dirty textures
+ for (int i = 0; i < mapItems_.count(); ++i) {
+ mapItems_.at(i)->updateItem();
+ }
+#endif
+ // No stereo rendering, set the eye as neutral
+ painter.setEye(QGL::NoEye);
+ // TODO this needs to be figured out (or confirmed as invalid thing).
+ // Currently applied transforms for this Map3D element - how to get/apply current transforms?
+ // QTransform transform = painter->combinedTransform();
+ // Then we get the rectangle that is gotten by applying the QTransform on the rect
+ // --> this is the viewport for Map3D
+ // QRect viewport = transform.mapRect(boundingRect()).toRect();
+
+ // boundingRect is in local coordinates. We need to map it to the scene coordinates
+ // in order to render to correct area.
+ QRect viewport = mapRectToScene(boundingRect()).toRect();
+ qreal adjust = 1.0f;
+ ViewportSubsurface surface(painter.currentSurface(), viewport, adjust);
+ painter.pushSurface(&surface);
+ earlyDraw(&painter);
+ if (map_->glCamera()) {
+ painter.setCamera(map_->glCamera());
+ } else {
+ QGLCamera defCamera;
+ painter.setCamera(&defCamera);
+ }
+ paintGL(&painter);
+ // Draw the children items
+ painter.popSurface();
+ // QSG does not expect anyone to alter gl context state; restore defaults.
+ // Default heaps of things, because we cannot be sure what the Qt3D internally
+ // sets.
+ restoreDefaults(&painter);
+}
+
+void QDeclarative3DGraphicsGeoMap::setCameraData(const CameraData &camera)
+{
+ map_->setCameraData(camera);
+ if (!map_->autoUpdate())
+ map_->update();
+}
+
+CameraData QDeclarative3DGraphicsGeoMap::cameraData() const
+{
+ return map_->cameraData();
+}
+
+void QDeclarative3DGraphicsGeoMap::restoreDefaults(QGLPainter *painter)
+{
+ // Disable the effect to return control to the GL paint engine.
+ painter->disableEffect();
+
+ // Try to restore the default options
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_DEPTH_TEST);
+ // Set the default depth buffer options.
+ glDepthFunc(GL_LESS);
+ glDepthMask(GL_TRUE);
+#if defined(QT_OPENGL_ES)
+ glDepthRangef(0.0f, 1.0f);
+#else
+ glDepthRange(0.0f, 1.0f);
+#endif
+ // Set the default blend options.
+ glDisable(GL_BLEND);
+ if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendColor))
+ painter->glBlendColor(0, 0, 0, 0);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendEquation))
+ painter->glBlendEquation(GL_FUNC_ADD);
+ else if (painter->hasOpenGLFeature(QOpenGLFunctions::BlendEquationSeparate))
+ painter->glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
+}
+
+#ifndef GL_MULTISAMPLE
+#define GL_MULTISAMPLE 0x809D
+#endif
+
+void QDeclarative3DGraphicsGeoMap::earlyDraw(QGLPainter *painter)
+{
+ glClearColor(0.0,255,0.0,0.0);
+ // Depth buffer has been cleared already, but color buffer hasn't
+ glClear(GL_COLOR_BUFFER_BIT);
+ // Force the effect to be updated.
+ painter->disableEffect();
+#ifdef GL_RESCALE_NORMAL
+ // Scale normals by a scale factor derived from modelview matrix.
+ // Note: normals need to be unit length.
+ glEnable(GL_RESCALE_NORMAL);
+#endif
+
+#if !defined(QT_OPENGL_ES_2)
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_MULTISAMPLE);
+#endif
+
+ // Set the default effect for the scene.
+ painter->setStandardEffect(QGL::LitMaterial);
+ painter->setFaceColor(QGL::AllFaces, Qt::white);
+}
+
+void QDeclarative3DGraphicsGeoMap::paintGL(QGLPainter *painter)
+{
+ if (map_) {
+ // QGLSceneNode *node = map_->sceneNode();
+ map_->paintGL(painter);
+// QGLSceneNode *node = map_->sceneNodeForRendering();
+// if (node) {
+// node->draw(painter);
+// map_->sceneNodeRenderingDone();
+// } else {
+// qDebug() << "=-=-=-=-=-=-=-=- WILL MISS A MAP FRAME =-=-=-=-=-=-=-=-=-=-=-=-=";
+// }
+ }
+}
+
+void QDeclarative3DGraphicsGeoMap::geometryChanged(const QRectF &newGeometry,
+ const QRectF & /*oldGeometry*/)
+{
+ setSize(newGeometry.size());
+}
+
+/*!
+ \qmlproperty Plugin Map::plugin
+
+ This property holds the plugin which provides the mapping functionality.
+
+ This is write-once property. Once the map has a plugin associated with
+ it any attempted modifications of the plugin will be ignored.
+*/
+
+void QDeclarative3DGraphicsGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugin)
+{
+ if (plugin_) {
+ qmlInfo(this) << tr("Plugin is a write-once property, and cannot be set again.");
+ return;
+ }
+ plugin_ = plugin;
+ emit pluginChanged(plugin_);
+ serviceProvider_ = new QGeoServiceProvider(plugin_->name(),
+ plugin_->parameterMap());
+ if (serviceProvider_->error() != QGeoServiceProvider::NoError) {
+ qWarning() << serviceProvider_->errorString();
+ delete serviceProvider_;
+ serviceProvider_ = 0;
+ return;
+ }
+ mappingManager_ = serviceProvider_->mappingManager();
+ if (!mappingManager_ || serviceProvider_->error() != QGeoServiceProvider::NoError) {
+ qWarning() << serviceProvider_->errorString();
+ delete serviceProvider_;
+ serviceProvider_ = 0;
+ delete mappingManager_;
+ mappingManager_ = 0;
+ return;
+ }
+
+ map_->setMappingManager(mappingManager_);
+
+// mapData_ = mappingManager_->createMapData();
+// mapData_->init();
+ //mapData_->setParentItem(this);
+
+ // setters
+// mapData_->setWindowSize(size_);
+// mapData_->setZoomLevel(zoomLevel_);
+
+// if (center_)
+// mapData_->setCenter(center_->coordinate());
+// else
+// mapData_->setCenter(*initialCoordinate);
+
+// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_));
+// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_));
+
+ // Populate the map objects.
+ populateMap();
+ // setup signals
+// connect(mapData_,
+// SIGNAL(updateMapDisplay(QRectF)),
+// this,
+// SLOT(updateMapDisplay(QRectF)));
+
+// connect(mapData_,
+// SIGNAL(centerChanged(QGeoCoordinate)),
+// this,
+// SLOT(internalCenterChanged(QGeoCoordinate)));
+
+// connect(mapData_,
+// SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)),
+// this,
+// SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType)));
+
+// connect(mapData_,
+// SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)),
+// this,
+// SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)));
+
+// connect(mapData_,
+// SIGNAL(windowSizeChanged(QSizeF)),
+// this,
+// SIGNAL(sizeChanged(QSizeF)));
+
+// connect(mapData_,
+// SIGNAL(zoomLevelChanged(qreal)),
+// this,
+// SIGNAL(zoomLevelChanged(qreal)));
+}
+
+void QDeclarative3DGraphicsGeoMap::updateMapDisplay(const QRectF &target)
+{
+ Q_UNUSED(target);
+ QSGItem::update();
+}
+
+QDeclarativeGeoServiceProvider* QDeclarative3DGraphicsGeoMap::plugin() const
+{
+ return plugin_;
+}
+
+/*!
+ \qmlproperty qreal Map::minimumZoomLevel
+
+ This property holds the minimum valid zoom level for the map.
+*/
+qreal QDeclarative3DGraphicsGeoMap::minimumZoomLevel() const
+{
+ if (mappingManager_)
+ return mappingManager_->minimumZoomLevel();
+ else
+ return -1.0;
+}
+
+/*!
+ \qmlproperty qreal Map::maximumZoomLevel
+
+ This property holds the maximum valid zoom level for the map.
+*/
+qreal QDeclarative3DGraphicsGeoMap::maximumZoomLevel() const
+{
+ if (mappingManager_)
+ return mappingManager_->maximumZoomLevel();
+ else
+ return -1.0;
+}
+
+// TODO make these more QML like
+//QList<MapType> QDeclarative3DGraphicsGeoMap::supportedMapTypes() const;
+//QList<ConnectivityMode> QDeclarative3DGraphicsGeoMap::supportedConnectivityModes() const;
+
+/*!
+ \qmlproperty QSizeF Map::size
+
+ This property holds the size of the map viewport.
+*/
+void QDeclarative3DGraphicsGeoMap::setSize(const QSizeF &size)
+{
+// if (mapData_) {
+// setWidth(size.width());
+// setHeight(size.height());
+// mapData_->setWindowSize(size);
+// } else {
+ if (size_ == size)
+ return;
+
+ size_ = size;
+
+ emit sizeChanged(size_);
+// }
+
+}
+
+QSizeF QDeclarative3DGraphicsGeoMap::size() const
+{
+// if (mapData_)
+// return mapData_->windowSize();
+// else
+ return size_;
+}
+
+/*!
+ \qmlproperty qreal Map::zoomLevel
+
+ This property holds the zoom level for the map.
+
+ Larger values for the zoom level provide more detail.
+
+ The default value is 8.0.
+*/
+void QDeclarative3DGraphicsGeoMap::setZoomLevel(qreal zoomLevel)
+{
+ if (zoomLevel_ == zoomLevel)
+ return;
+ if (mappingManager_ &&
+ (zoomLevel < mappingManager_->minimumZoomLevel() ||
+ zoomLevel > mappingManager_->maximumZoomLevel()))
+ return;
+ zoomLevel_ = zoomLevel;
+ if (map_) {
+ CameraData cameraData = map_->cameraData();
+ cameraData.setZoomFactor(zoomLevel);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ }
+ emit zoomLevelChanged(zoomLevel_);
+}
+
+void QDeclarative3DGraphicsGeoMap::cameraZoomLevelChanged(double zoomLevel)
+{
+ emit zoomLevelChanged(static_cast<qreal>(zoomLevel));
+}
+
+qreal QDeclarative3DGraphicsGeoMap::zoomLevel() const
+{
+ if (map_) {
+ return map_->cameraData().zoomFactor();
+ } else {
+ return zoomLevel_;
+ }
+}
+
+/*!
+ \qmlproperty Coordinate Map::center
+
+ This property holds the coordinate which occupies the center of the
+ mapping viewport.
+
+ The default value is an arbitrary valid coordinate.
+*/
+void QDeclarative3DGraphicsGeoMap::setCenter(QDeclarativeCoordinate *center)
+{
+ if (center_) {
+ center_->disconnect(this);
+ }
+ center_ = center;
+ if (center_) {
+ connect(center_,
+ SIGNAL(latitudeChanged(double)),
+ this,
+ SLOT(centerLatitudeChanged(double)));
+ connect(center_,
+ SIGNAL(longitudeChanged(double)),
+ this,
+ SLOT(centerLongitudeChanged(double)));
+ connect(center_,
+ SIGNAL(altitudeChanged(double)),
+ this,
+ SLOT(centerAltitudeChanged(double)));
+
+// if (mapData_) {
+// mapData_->setCenter(center_->coordinate());
+// }
+ }
+ emit declarativeCenterChanged(center_);
+}
+
+QDeclarativeCoordinate* QDeclarative3DGraphicsGeoMap::center()
+{
+// if (mapData_ && center_)
+// center_->setCoordinate(mapData_->center());
+ return center_;
+}
+
+void QDeclarative3DGraphicsGeoMap::centerLatitudeChanged(double /*latitude*/)
+{
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
+}
+
+void QDeclarative3DGraphicsGeoMap::centerLongitudeChanged(double /*longitude*/)
+{
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
+}
+
+void QDeclarative3DGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/)
+{
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
+}
+
+/*!
+ \qmlproperty enumeration Map::mapType
+
+ This property holds the type of map to display.
+
+ The type can be one of:
+ \list
+ \o Map.StreetMap
+ \o Map.SatelliteMapDay
+ \o Map.SatelliteMapNight
+ \o Map.TerrainMap
+ \endlist
+
+ The default value is determined by the plugin.
+*/
+//void QDeclarative3DGraphicsGeoMap::setMapType(QDeclarative3DGraphicsGeoMap::MapType mapType)
+//{
+// if (mapData_) {
+// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType));
+// } else {
+// if (mapType_ == mapType)
+// return;
+
+// mapType_ = mapType;
+
+// emit mapTypeChanged(mapType_);
+// }
+//}
+
+//QDeclarative3DGraphicsGeoMap::MapType QDeclarative3DGraphicsGeoMap::mapType() const
+//{
+// if (mapData_) {
+// return QDeclarative3DGraphicsGeoMap::MapType(mapData_->mapType());
+// } else {
+// return mapType_;
+// }
+//}
+
+/*!
+ \qmlproperty enumeration Map::connectivityMode
+
+ This property holds the connectivity mode used to fetch the map data.
+
+ The mode can be one of:
+ \list
+ \o Map.OfflineMode
+ \o Map.OnlineMode
+ \o Map.HybridMode
+ \endlist
+
+ The default value is determined by the plugin.
+*/
+//void QDeclarative3DGraphicsGeoMap::setConnectivityMode(QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode)
+//{
+// if (mapData_) {
+// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode));
+// } else {
+// if (connectivityMode_ == connectivityMode)
+// return;
+
+// connectivityMode_ = connectivityMode;
+
+// emit connectivityModeChanged(connectivityMode_);
+// }
+//}
+
+//QDeclarative3DGraphicsGeoMap::ConnectivityMode QDeclarative3DGraphicsGeoMap::connectivityMode() const
+//{
+// if (mapData_)
+// return QDeclarative3DGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode());
+// else
+// return connectivityMode_;
+//}
+
+/*!
+ \qmlproperty list<QGeoMapObject> Map::objects
+ \default
+
+ This property holds the list of objects associated with this map.
+
+ The various objects that can be added include:
+ \list
+ \o MapRectangle
+ \o MapCircle
+ \o MapText
+ \o MapImage
+ \o MapPolygon
+ \o MapPolyline
+ \o MapGroup
+ \endlist
+*/
+
+/*!
+ \qmlmethod Map::toCoordinate(QPointF screenPosition)
+
+ Returns the coordinate which corresponds to the screen position
+ \a screenPosition.
+
+ Returns an invalid coordinate if \a screenPosition is not within
+ the current viewport.
+
+ An example to constraint landmarks of a model to just those
+ currently on Map:
+ \snippet examples/declarative-location/landmarkmap/landmarkmap.qml Map toCoordinate
+
+*/
+
+QDeclarativeCoordinate* QDeclarative3DGraphicsGeoMap::toCoordinate(QPointF screenPosition) const
+{
+ QGeoCoordinate coordinate;
+
+// if (mapData_)
+// coordinate = mapData_->screenPositionToCoordinate(screenPosition);
+
+ return new QDeclarativeCoordinate(coordinate,
+ const_cast<QDeclarative3DGraphicsGeoMap *>(this));
+}
+
+/*!
+ \qmlmethod Map::toScreenPosition(Coordinate coordinate)
+
+ Returns the screen position which corresponds to the coordinate
+ \a coordinate.
+
+ Returns an invalid QPointF if \a coordinate is not within the
+ current viewport.
+*/
+QPointF QDeclarative3DGraphicsGeoMap::toScreenPosition(QDeclarativeCoordinate* coordinate) const
+{
+ QPointF point;
+
+// if (mapData_)
+// point = mapData_->coordinateToScreenPosition(coordinate->coordinate());
+
+ return point;
+}
+
+void QDeclarative3DGraphicsGeoMap::pan(int dx, int dy)
+{
+ Q_UNUSED(dx); // TODO panning support
+ Q_UNUSED(dy);
+ //qDebug() << "pan: " << dx << dy;
+ //if (mapData_) {
+ // mapData_->pan(dx, dy);
+ // update();
+ if (map_) {
+ // TODO zzz map_->
+ } else {
+ qmlInfo(this) << tr("Map plugin is not set, cannot pan.");
+ }
+}
+
+void QDeclarative3DGraphicsGeoMap::touchEvent(QTouchEvent *event)
+{
+ //qDebug() << "touchEvent in Map3D, enter, sending touchEvent to pinch area.";
+ if (pinchArea_)
+ pinchArea_->touchEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::wheelEvent(QWheelEvent *event)
+{
+ emit wheel(event->delta());
+ //QSGItem::wheelEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ //qDebug() << "mousePressEvent in Map3D, enter +------------------------------------------------------------------";
+// if (!mapData_) {
+// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
+// return;
+// }
+#ifdef QSGMOUSEAREA_AVAILABLE
+ canvas()->sendEvent(mouseArea_, event);
+#endif
+ if (flickable_)
+ flickable_->mousePressEvent(event);
+ if (pinchArea_)
+ pinchArea_->mousePressEvent(event);
+
+ //QSGItem::mousePressEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+#ifdef QSGMOUSEAREA_AVAILABLE
+ canvas()->sendEvent(mouseArea_, event);
+#endif
+ if (flickable_)
+ flickable_->mouseReleaseEvent(event);
+ if (pinchArea_)
+ pinchArea_->mouseReleaseEvent(event);
+
+ //QSGItem::mouseReleaseEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+{
+// if (!mapData_) {
+// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
+// return;
+// }
+#ifdef QSGMOUSEAREA_AVAILABLE
+ canvas()->sendEvent(mouseArea_, event);
+#endif
+ //QSGItem::mouseDoubleClickEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+#ifdef QSGMOUSEAREA_AVAILABLE
+ canvas()->sendEvent(mouseArea_, event);
+#endif
+ if (flickable_)
+ flickable_->mouseMoveEvent(event);
+ if (pinchArea_)
+ pinchArea_->mouseMoveEvent(event);
+ //QSGItem::mouseMoveEvent(event);
+}
+
+void QDeclarative3DGraphicsGeoMap::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+{
+// if (!mapData_)
+// return;
+#ifdef QSGMOUSEAREA_AVAILABLE
+ if (mouseArea_ && mouseArea_->hoverEnabled()) {
+ canvas()->sendEvent(mouseArea_, event);
+ }
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+{
+#ifdef QSGMOUSEAREA_AVAILABLE
+ if (mouseArea_ && mouseArea_->hoverEnabled()) {
+ canvas()->sendEvent(mouseArea_, event);
+ }
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+{
+// if (!mapData_)
+// return;
+#ifdef QSGMOUSEAREA_AVAILABLE
+ if (mouseArea_ && mouseArea_->hoverEnabled()) {
+ canvas()->sendEvent(mouseArea_, event);
+ }
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::internalCenterChanged(const QGeoCoordinate &coordinate)
+{
+ emit declarativeCenterChanged(new QDeclarativeCoordinate(coordinate, this));
+}
+
+//void QDeclarative3DGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType)
+//{
+// emit mapTypeChanged(QDeclarative3DGraphicsGeoMap::MapType(mapType));
+//}
+
+//void QDeclarative3DGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode)
+//{
+// emit connectivityModeChanged(QDeclarative3DGraphicsGeoMap::ConnectivityMode(connectivityMode));
+//}
+
+/*!
+ \qmlmethod Map::addMapObject(MapObject)
+
+ Adds the given MapOject to the Map. If the object already
+ is on the Map, it will not be added again.
+
+ As an example, consider you have a MapCircle presenting your current position:
+
+ \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition
+ You can add it to Map (alterntively it can be defined as a child element of the Map):
+
+ \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic add MapObject
+ Note: MapObjectViews can not be added with this method.
+*/
+
+/*
+void QDeclarative3DGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object)
+{
+ if (!mapData_)
+ qmlInfo(this) << tr("Map plugin is not set, map object cannot be added.");
+ if (!mapData_ || !object || objectMap_.contains(object->mapObject()))
+ return;
+ mapObjects_.append(object);
+ objectMap_.insert(object->mapObject(), object);
+ mapData_->addMapObject(object->mapObject());
+ // TODO
+ // object->setMap(this);
+}
+*/
+
+void QDeclarative3DGraphicsGeoMap::addMapItem(QDeclarativeGeoMapItem *item)
+{
+#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE
+ if (!item || mapItems_.contains(item))
+ return;
+ item->setMap(this);
+ mapItems_.append(item);
+ map_->addMapItem(item->mapItem());
+#endif
+}
+
+void QDeclarative3DGraphicsGeoMap::removeMapItem(QDeclarativeGeoMapItem *item)
+{
+#ifdef QSGSHADEREFFECTSOURCE_AVAILABLE
+ if (!item || (!mapItems_.contains(item) && !mapItemsPending_.contains(item)))
+ return;
+ item->setMap(0);
+ // these can be optmized for perf, as we already check the 'contains' above
+ mapItems_.removeOne(item);
+ mapItemsPending_.removeOne(item);
+ map_->removeMapItem(item->mapItem());
+#endif
+}
+
+// TODO clears all items including ones from models/mapobjectview which is not intended
+void QDeclarative3DGraphicsGeoMap::clearMapItems()
+{
+ if (mapItems_.isEmpty())
+ return;
+ mapItems_.clear();
+ mapItemsPending_.clear();
+ map_->clearMapItems();
+}
+
+/*!
+ \qmlmethod Map::removeMapObject(MapObject)
+
+ Removes the given MapObject from the Map. If the MapObject does not
+ exist, function does nothing.
+
+ As an example, consider you have a MapCircle presenting your current position:
+ \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition
+
+ You can remove it from the Map element:
+ \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic remove MapObject
+
+
+*/
+
+/*
+void QDeclarative3DGraphicsGeoMap::removeMapObject(QDeclarativeGeoMapObject *object)
+{
+ if (!mapData_)
+ qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed.");
+ if (!mapData_ || !object || !objectMap_.contains(object->mapObject()))
+ return;
+ objectMap_.remove(object->mapObject());
+ mapObjects_.removeOne(object);
+ mapData_->removeMapObject(object->mapObject());
+}
+*/
+
+// This function is strictly for testing purposes
+int QDeclarative3DGraphicsGeoMap::testGetDeclarativeMapObjectCount()
+{
+ return objectMap_.values().count();
+}
+
+#include "moc_qdeclarative3dgraphicsgeomap_p.cpp"
+
+QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarative3dgraphicsgeomap_p.h b/src/imports/location/qdeclarative3dgraphicsgeomap_p.h
new file mode 100644
index 00000000..44d4b02c
--- /dev/null
+++ b/src/imports/location/qdeclarative3dgraphicsgeomap_p.h
@@ -0,0 +1,290 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVE3DGRAPHICSGEOMAP_H
+#define QDECLARATIVE3DGRAPHICSGEOMAP_H
+
+//#include <qgraphicsgeomap.h>
+#include <QPointer>
+#include <QTouchEvent>
+#include <QtDeclarative/qsgitem.h>
+#include <QtQuick1/QDeclarativeItem>
+//#include <QGeoMapData>
+#include "qdeclarativegeomapobject_p.h"
+#include <QtCore/QCoreApplication>
+
+// Check $$pwd/location.pro how to enable these
+#ifdef QSGMOUSEAREA_AVAILABLE
+#include "qsgmousearea_p.h"
+#endif
+#include "qsgtexture.h"
+#include "qdeclarativegeomapflickable_p.h"
+#include "qdeclarativegeomappincharea_p.h"
+
+#include "cameradata.h"
+#include "map.h"
+
+QT_BEGIN_NAMESPACE
+
+class QGLPainter;
+class QGLSceneNode;
+class TileCache;
+class Tile;
+class TileSpec;
+class MapSphere;
+
+class QGeoCoordinate;
+class QGeoMapObject;
+class QGeoMapData;
+class QGeoServiceProvider;
+class QDeclarativeCoordinate;
+class QDeclarativeGeoServiceProvider;
+class QDeclarative3DGraphicsGeoMap;
+class QDeclarativeGeoMapItem;
+#ifdef QSGMOUSEAREA_AVAILABLE
+class QSGMouseEvent;
+#endif
+
+class QDeclarative3DGraphicsGeoMap : public QSGItem
+{
+ Q_OBJECT
+
+ Q_ENUMS(MapType)
+ Q_ENUMS(ConnectivityMode)
+ // Temporary tweak for testing
+ Q_PROPERTY(QDeclarativeGeoMapPinchArea* pinch READ pinch CONSTANT)
+ Q_PROPERTY(QDeclarativeGeoMapFlickable* flick READ flick CONSTANT);
+ Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
+ Q_PROPERTY(QSizeF size READ size WRITE setSize NOTIFY sizeChanged)
+ Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT)
+ Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT)
+ Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
+// Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
+ Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY declarativeCenterChanged)
+// Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged)
+ Q_INTERFACES(QDeclarativeParserStatus)
+
+public:
+// enum MapType {
+// NoMap = QGraphicsGeoMap::NoMap,
+// StreetMap = QGraphicsGeoMap::StreetMap,
+// SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay,
+// SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight,
+// TerrainMap = QGraphicsGeoMap::TerrainMap
+// };
+
+// enum ConnectivityMode {
+// NoConnectivity = QGraphicsGeoMap::NoConnectivity,
+// OfflineMode = QGraphicsGeoMap::OfflineMode,
+// OnlineMode = QGraphicsGeoMap::OnlineMode,
+// HybridMode = QGraphicsGeoMap::HybridMode
+// };
+
+public:
+
+ QDeclarative3DGraphicsGeoMap(QSGItem *parent = 0);
+ ~QDeclarative3DGraphicsGeoMap();
+
+ // From QDeclarativeParserStatus
+ virtual void componentComplete();
+
+ // from QSGItem
+ virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
+ void itemChange(ItemChange change, const ItemChangeData & data);
+
+ void setPlugin(QDeclarativeGeoServiceProvider *plugin);
+ QDeclarativeGeoServiceProvider* plugin() const;
+
+ qreal minimumZoomLevel() const;
+ qreal maximumZoomLevel() const;
+
+ void setSize(const QSizeF &size);
+ QSizeF size() const;
+
+ QDeclarativeGeoMapFlickable* flick();
+
+ void setMouseEnabled(bool enabled);
+ bool mouseEnabled() const;
+ void setMouseHoverEnabled(bool enabled);
+ bool mouseHoverEnabled() const;
+ bool containsMouse() const;
+
+ void setZoomLevel(qreal zoomLevel);
+ qreal zoomLevel() const;
+
+ void setCenter(QDeclarativeCoordinate *center);
+ QDeclarativeCoordinate* center();
+
+// void setMapType(MapType mapType);
+// MapType mapType() const;
+
+// void setConnectivityMode(ConnectivityMode connectivityMode);
+// ConnectivityMode connectivityMode() const;
+
+ QDeclarativeListProperty<QDeclarativeGeoMapObject> objects();
+
+ //Q_INVOKABLE void addMapObject(QDeclarativeGeoMapObject* object);
+ //Q_INVOKABLE void removeMapObject(QDeclarativeGeoMapObject* object);
+
+ Q_INVOKABLE void removeMapItem(QDeclarativeGeoMapItem *item);
+ Q_INVOKABLE void addMapItem(QDeclarativeGeoMapItem *item);
+ Q_INVOKABLE void clearMapItems();
+
+ Q_INVOKABLE QDeclarativeCoordinate* toCoordinate(QPointF screenPosition) const;
+ Q_INVOKABLE QPointF toScreenPosition(QDeclarativeCoordinate* coordinate) const;
+
+ // This function is strictly for testing purposes and may be removed at
+ // any time without any notice (hence also the obscure naming to avoid
+ // accidental usage):
+ Q_INVOKABLE int testGetDeclarativeMapObjectCount();
+ //void setActiveMouseArea(QDeclarativeGeoMapMouseArea *area);
+ //QDeclarativeGeoMapMouseArea* activeMouseArea() const;
+
+ QDeclarativeGeoMapPinchArea* pinch() {return pinchArea_;}
+
+ // Internal
+ Map* map() {return map_;}
+
+public Q_SLOTS:
+ void pan(int dx, int dy);
+
+protected:
+ void touchEvent(QTouchEvent *event);
+ void wheelEvent(QWheelEvent *event);
+ void geometryChanged(const QRectF &newGeometry,
+ const QRectF &oldGeometry);
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ void keyPressEvent(QKeyEvent *e);
+ void closeEvent(QCloseEvent *e);
+ //void enterEvent(QEvent *e);
+ //void leaveEvent(QEvent *e);
+ void showEvent(QShowEvent *e);
+ void resizeEvent(QResizeEvent *e);
+
+Q_SIGNALS:
+ // wheel
+ void wheel(qreal delta);
+
+ void pluginChanged(QDeclarativeGeoServiceProvider *plugin);
+ void sizeChanged(const QSizeF &size);
+ void zoomLevelChanged(qreal zoomLevel);
+ void declarativeCenterChanged(const QDeclarativeCoordinate *coordinate);
+// void mapTypeChanged(QDeclarative3DGraphicsGeoMap::MapType mapType);
+// void connectivityModeChanged(QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode);
+
+private Q_SLOTS:
+ void updateMapDisplay(const QRectF& target);
+ void internalCenterChanged(const QGeoCoordinate &coordinate);
+// void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType);
+// void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode);
+ void centerLatitudeChanged(double latitude);
+ void centerLongitudeChanged(double longitude);
+ void centerAltitudeChanged(double altitude);
+ void sceneGraphInitialized();
+ void beforeRendering();
+ void mouseChanged();
+ void mapItemTextureChanged();
+ void cameraZoomLevelChanged(double zoomLevel);
+
+private:
+ void setupMapView(QDeclarativeGeoMapObjectView *view);
+ void updateAspectRatio();
+ void populateMap();
+
+ QDeclarativeGeoMapObject* createItem(int modelIndex);
+
+ QDeclarativeGeoServiceProvider* plugin_;
+ QGeoServiceProvider* serviceProvider_;
+ QGeoMappingManager* mappingManager_;
+// QGeoMapData* mapData_;
+
+ qreal zoomLevel_;
+ QPointer<QDeclarativeCoordinate> center_;
+
+ QGeoCoordinate* initialCoordinate;
+// QDeclarative3DGraphicsGeoMap::MapType mapType_;
+// QDeclarative3DGraphicsGeoMap::ConnectivityMode connectivityMode_;
+ QSizeF size_;
+
+ QList<QDeclarativeGeoMapObject*> mapObjects_;
+ QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_;
+
+ bool componentCompleted_;
+ QList<QDeclarativeGeoMapObjectView*> mapViews_;
+
+#ifdef QSGMOUSEAREA_AVAILABLE
+ QSGMouseArea* mouseArea_;
+#endif
+ QDeclarativeGeoMapFlickable* flickable_;
+ QDeclarativeGeoMapPinchArea* pinchArea_;
+
+ void paintGL(QGLPainter *painter);
+ void earlyDraw(QGLPainter *painter);
+ void restoreDefaults(QGLPainter *painter);
+
+ QSGCanvas* canvas_;
+ int touchTimer_;
+
+ TileCache *tileCache_;
+ void setCameraData(const CameraData &camera);
+ CameraData cameraData() const;
+ Map *map_;
+ QList<QDeclarativeGeoMapItem*> mapItems_;
+ QList<QDeclarativeGeoMapItem*> mapItemsPending_;
+
+ friend class QDeclarativeGeoMapObjectView;
+ friend class QDeclarativeGeoMapPinchArea;
+ friend class QDeclarativeGeoMapFlickable;
+ Q_DISABLE_COPY(QDeclarative3DGraphicsGeoMap);
+};
+
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarative3DGraphicsGeoMap));
+
+#endif
diff --git a/src/imports/location/qdeclarativegeomapcircleobject.cpp b/src/imports/location/qdeclarativegeomapcircleobject.cpp
deleted file mode 100644
index f5e8e1a5..00000000
--- a/src/imports/location/qdeclarativegeomapcircleobject.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomapcircleobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QColor>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapCircle
-
- \brief The MapCircle element displays a circle on a map.
- \inherits QGeoMapCircleObject
-
- \ingroup qml-location-maps
-
- The circle is specified in terms of a central coordinate and
- a radius in metres.
-
- If \l center and \l radius are not specified and valid the
- circle will not be displayed.
-
- An example, a MapCircle positioned at your current position (assuming there
- is a PositionSource):
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic map position marker definition
- The element is used with a Map element.
-
- The MapCircle element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapCircleObject::QDeclarativeGeoMapCircleObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent), circle_(0), center_(0)
-{
- circle_ = new QGeoMapCircleObject();
- setMapObject(circle_);
-
- connect(circle_,
- SIGNAL(radiusChanged(qreal)),
- this,
- SIGNAL(radiusChanged(qreal)));
- connect(&border_,
- SIGNAL(colorChanged(QColor)),
- this,
- SLOT(borderColorChanged(QColor)));
- connect(&border_,
- SIGNAL(widthChanged(int)),
- this,
- SLOT(borderWidthChanged(int)));
-}
-
-QDeclarativeGeoMapCircleObject::~QDeclarativeGeoMapCircleObject()
-{
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_ )
- map_->removeMapObject(this);
- delete circle_;
-}
-
-/*!
- \qmlproperty Coordinate MapCircle::center
-
- This property holds the coordinate at the center of the circle.
-
- The default value is an invalid coordinate.
-*/
-
-void QDeclarativeGeoMapCircleObject::setCenter(QDeclarativeCoordinate *center)
-{
- if (!center || center == center_)
- return;
- center_ = center;
- connect(center_,
- SIGNAL(latitudeChanged(double)),
- this,
- SLOT(centerLatitudeChanged(double)));
- connect(center_,
- SIGNAL(longitudeChanged(double)),
- this,
- SLOT(centerLongitudeChanged(double)));
- connect(center_,
- SIGNAL(altitudeChanged(double)),
- this,
- SLOT(centerAltitudeChanged(double)));
-
- circle_->setCenter(center->coordinate());
- emit centerChanged(center_);
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapCircleObject::center()
-{
- return center_;
-}
-
-void QDeclarativeGeoMapCircleObject::centerLatitudeChanged(double /*latitude*/)
-{
- circle_->setCenter(center_->coordinate());
-}
-
-void QDeclarativeGeoMapCircleObject::centerLongitudeChanged(double /*longitude*/)
-{
- circle_->setCenter(center_->coordinate());
-}
-
-void QDeclarativeGeoMapCircleObject::centerAltitudeChanged(double /*altitude*/)
-{
- circle_->setCenter(center_->coordinate());
-}
-
-void QDeclarativeGeoMapCircleObject::setRadius(qreal radius)
-{
- circle_->setRadius(radius);
-}
-
-qreal QDeclarativeGeoMapCircleObject::radius() const
-{
- return circle_->radius();
-}
-
-/*!
- \qmlproperty qreal MapCircle::radius
-
- This property holds the radius of the circle in metres.
-
- A negative value is used to indicate that the radius is invalid and
- the default value is a radius of -1.0.
-*/
-
-/*!
- \qmlproperty color MapCircle::color
-
- This property holds the color used to fill the circle.
-
- The default value corresponds to a transparent color.
-*/
-
-void QDeclarativeGeoMapCircleObject::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- QBrush m_brush(color);
- circle_->setBrush(m_brush);
- emit colorChanged(color_);
-}
-
-QColor QDeclarativeGeoMapCircleObject::color() const
-{
- return color_;
-}
-
-/*!
- \qmlproperty int MapCircle::border.width
- \qmlproperty color MapCircle::border.color
-
- These properties hold the width and color used to draw the border of the circle.
-
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapCircleObject::border()
-{
- return &border_;
-}
-
-void QDeclarativeGeoMapCircleObject::borderColorChanged(const QColor &color)
-{
- QPen p = circle_->pen();
- p.setColor(color);
- circle_->setPen(p);
-}
-
-void QDeclarativeGeoMapCircleObject::borderWidthChanged(int width)
-{
- QPen p = circle_->pen();
- p.setWidth(width);
- if (width == 0)
- p.setStyle(Qt::NoPen);
- else
- p.setStyle(Qt::SolidLine);
- circle_->setPen(p);
-}
-
-/*!
- \qmlproperty int MapCircle::z
-
- This property holds the z-value of the circle.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapCircle::visible
-
- This property holds a boolean corresponding to whether or not the
- circle is visible.
-*/
-
-#include "moc_qdeclarativegeomapcircleobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomapcircleobject_p.h b/src/imports/location/qdeclarativegeomapcircleobject_p.h
deleted file mode 100644
index 0ba96c67..00000000
--- a/src/imports/location/qdeclarativegeomapcircleobject_p.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPCIRCLEOBJECT_H
-#define QDECLARATIVEGEOMAPCIRCLEOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qgeomapcircleobject.h"
-
-class QColor;
-class QBrush;
-
-// !!! IMPORTANT !!!
-//
-// Inheriting from QSGItem here
-// is just a workaround to have non-gui related (ie where visualization is not
-// the main thing) autotests to pass in QML2 environment.
-// Real QML2 Map support (and related map object is a work in progress elsewhere.
-// This Map element instantiates but does not do anything meaningful from app dev
-// perspective.
-//
-// !!! IMPORTANT !!!
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapCircleObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border)
-
-public:
- QDeclarativeGeoMapCircleObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapCircleObject();
-
- QDeclarativeCoordinate* center();
- void setCenter(QDeclarativeCoordinate *center);
-
- qreal radius() const;
- void setRadius(qreal radius);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QDeclarativeGeoMapObjectBorder* border();
-
-Q_SIGNALS:
- void centerChanged(const QDeclarativeCoordinate *center);
- void radiusChanged(qreal radius);
- void colorChanged(const QColor &color);
-
-private Q_SLOTS:
- void borderColorChanged(const QColor &color);
- void borderWidthChanged(int width);
- void centerLatitudeChanged(double latitude);
- void centerLongitudeChanged(double longitude);
- void centerAltitudeChanged(double altitude);
-
-private:
- QPointer<QGeoMapCircleObject> circle_;
- QDeclarativeCoordinate *center_;
- QColor color_;
- QDeclarativeGeoMapObjectBorder border_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapCircleObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapflickable.cpp b/src/imports/location/qdeclarativegeomapflickable.cpp
new file mode 100644
index 00000000..c565801f
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomapflickable.cpp
@@ -0,0 +1,371 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QApplication>
+#include <QGraphicsSceneMouseEvent>
+#include <QPropertyAnimation>
+#include <QEasingCurve>
+#include "qdeclarativegeomapflickable_p.h"
+#include <QTimer>
+#include "map.h"
+#include "math.h"
+
+// Constant values from QSGFlickable
+// The default maximum velocity of a flick.
+#ifndef QML_FLICK_DEFAULTMAXVELOCITY
+#define QML_FLICK_DEFAULTMAXVELOCITY 2500
+#endif
+// The default deceleration of a flick.
+#ifndef QML_FLICK_DEFAULTDECELERATION
+#define QML_FLICK_DEFAULTDECELERATION 1500
+#endif
+// Minimum
+#ifndef QML_FLICK_MINIMUMECELERATION
+#define QML_FLICK_MINIMUMDECELERATION 10
+#endif
+
+
+// The number of samples to discard when calculating the flick velocity.
+// Touch panels often produce inaccurate results as the finger is lifted.
+#ifndef QML_FLICK_DISCARDSAMPLES
+#define QML_FLICK_DISCARDSAMPLES 1
+#endif
+
+// FlickThreshold determines how far the "mouse" must have moved
+// before we perform a flick.
+static const int FlickThreshold = 20;
+// RetainGrabVelocity is the maxmimum instantaneous velocity that
+// will ensure the Flickable retains the grab on consecutive flicks.
+static const int RetainGrabVelocity = 15;
+// Really slow flicks can be annoying.
+const qreal MinimumFlickVelocity = 75.0;
+
+QT_BEGIN_NAMESPACE
+
+QDeclarativeGeoMapFlickable::QDeclarativeGeoMapFlickable(Map* map, QObject *parent)
+ : QObject(parent),
+ pressed_(false),
+ maxVelocity_(QML_FLICK_DEFAULTMAXVELOCITY),
+ deceleration_(QML_FLICK_DEFAULTDECELERATION),
+ flicking_(false),
+ map_(map),
+ enabled_(false),
+ moving_(false)
+{
+ Q_ASSERT(map_);
+ pressTime_.invalidate();
+ lastPosTime_.invalidate();
+ velocityTime_.invalidate();
+ //animation_ = new QPropertyAnimation(map_->mapCamera(), "cameraData", this);
+ //animation_ = new QPropertyAnimation(map_->mapCamera(), "center", this);
+ animation_ = new QPropertyAnimation(map_, "camera", this);
+ animation_->setEasingCurve(QEasingCurve(QEasingCurve::OutQuad));
+ connect(animation_, SIGNAL(finished()), this, SLOT(flickAnimationFinished()));
+ //connect(animation_, SIGNAL(valueChanged(const QVariant&)), this, SLOT(flickAnimationValueChanged(const QVariant&)));
+}
+
+QDeclarativeGeoMapFlickable::~QDeclarativeGeoMapFlickable()
+{
+}
+
+qreal QDeclarativeGeoMapFlickable::deceleration() const
+{
+ return deceleration_;
+}
+
+void QDeclarativeGeoMapFlickable::setDeceleration(qreal deceleration)
+{
+ if (deceleration < QML_FLICK_MINIMUMDECELERATION)
+ deceleration = QML_FLICK_MINIMUMDECELERATION;
+ if (deceleration == deceleration_)
+ return;
+
+ deceleration_ = deceleration;
+ emit decelerationChanged();
+}
+
+void QDeclarativeGeoMapFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ if (!enabled_)
+ return;
+ //Q_ASSERT(!pressed_);
+
+ stop();
+ pressed_ = true;
+ lastPos_ = QPointF();
+ pressPos_ = event->pos();
+ lastPosTime_.start();
+ pressTime_.start();
+ velocityTime_.start();
+}
+
+void QDeclarativeGeoMapFlickable::stop()
+{
+ velocityBufferX_.clear();
+ velocityBufferY_.clear();
+ velocityX_ = 0.0;
+ velocityY_ = 0.0;
+ if (moving_) {
+ moving_ = false;
+ emit movementEnded();
+ }
+ if (flicking_) {
+ flicking_ = false;
+ if (animation_->state() == QPropertyAnimation::Running)
+ animation_->stop();
+ emit flickEnded();
+ }
+ lastPosTime_.invalidate();
+ pressTime_.invalidate();
+ velocityTime_.invalidate();
+}
+
+void QDeclarativeGeoMapFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ if (!enabled_) {
+ return;
+ }
+ if (!pressed_) {
+ return;
+ }
+ if (!lastPosTime_.isValid()) {
+ return;
+ }
+
+ // Check if thresholds for normal panning are met.
+ // (normal panning vs flicking: flicking will start from mouse release event).
+ int dyFromPress = int(event->pos().y() - pressPos_.y());
+ int dxFromPress = int(event->pos().x() - pressPos_.x());
+ int dyFromLastPos;
+ int dxFromLastPos;
+ if (!lastPos_.isNull()) {
+ dyFromLastPos = event->pos().y() - lastPos_.y();
+ dxFromLastPos = event->pos().x() - lastPos_.x();
+ }
+
+ // Simple pan (drag) while being pressed
+ if ((qAbs(dyFromPress) > QApplication::startDragDistance()
+ || qAbs(dxFromPress) > QApplication::startDragDistance()
+ || pressTime_.elapsed() > 200) && !lastPos_.isNull()) {
+
+ if (!moving_) {
+ emit movementStarted();
+ moving_ = true;
+ }
+ updateCamera(dxFromLastPos, dyFromLastPos, 0);
+ }
+ // Take velocity samples, used later to determine the flick
+ // duration and speed (when mouse is released).
+ if (!lastPos_.isNull()) {
+ qreal elapsed = qreal(lastPosTime_.elapsed()) / 1000.;
+ if (elapsed <= 0)
+ return;
+ lastPosTime_.restart();
+ addVelocitySample(velocityBufferY_, double(dyFromLastPos)/elapsed);
+ addVelocitySample(velocityBufferX_, double(dxFromLastPos)/elapsed);
+ }
+ lastPos_ = event->pos();
+}
+
+// FIXME coordinate pan with a sleeve-constant (zoom level is not considered appropriately)
+void QDeclarativeGeoMapFlickable::updateCamera(int dx, int dy, int timeMs)
+{
+ if (timeMs < 0)
+ return;
+ CameraData cameraStart = map_->cameraData();
+ QGeoCoordinate coordinate = cameraStart.center();
+ if (timeMs == 0) {
+ // No animation, just set new values.
+ coordinate.setLatitude(coordinate.latitude() + (dy / pow(2.0, cameraStart.zoomFactor())));
+ coordinate.setLongitude(coordinate.longitude() - (dx / pow(2.0, cameraStart.zoomFactor())));
+ cameraStart.setCenter(coordinate);
+ map_->setCameraData(cameraStart);
+ } else {
+ qDebug() << "Will do flick animation dx (pix), dy (pix), time (ms): " << dx << dy << timeMs;
+ if (animation_->state() == QPropertyAnimation::Running)
+ animation_->stop();
+ CameraData cameraEnd = cameraStart;
+ animation_->setDuration(timeMs);
+ coordinate.setLongitude(coordinate.longitude() - (dx / pow(2.0, cameraStart.zoomFactor())));
+ coordinate.setLatitude(coordinate.latitude() + (dy / pow(2.0, cameraStart.zoomFactor())));
+ cameraEnd.setCenter(coordinate);
+
+ animation_->setStartValue(QVariant::fromValue(cameraStart));
+ animation_->setEndValue(QVariant::fromValue(cameraEnd));
+
+ //animation_->setStartValue(QVariant::fromValue(cameraStart.center()));
+ //animation_->setEndValue(QVariant::fromValue(cameraEnd.center()));
+
+ qDebug() << "The latitude will go from:" << cameraStart.center().latitude() << "to:" << cameraEnd.center().latitude();
+ qDebug() << "The longitude will go from:" << cameraStart.center().longitude() << "to:" << cameraEnd.center().longitude();
+ QTimer::singleShot(0, animation_, SLOT(start()));
+ flicking_ = true;
+ emit flickStarted();
+ }
+}
+
+// Adds velocity sample to sample buffer. Data is later used to calculate
+// flick speed. By default 3 latest samples are considered.
+void QDeclarativeGeoMapFlickable::addVelocitySample(QVector<qreal>& buffer, qreal sample)
+{
+ if (sample > maxVelocity_)
+ sample = maxVelocity_;
+ else if (sample < -maxVelocity_)
+ sample = -maxVelocity_;
+ buffer.append(sample);
+ if (buffer.count() > QML_FLICK_SAMPLEBUFFER)
+ buffer.remove(0);
+}
+
+void QDeclarativeGeoMapFlickable::updateVelocity(QVector<qreal>& buffer, qreal& velocity)
+{
+ if (buffer.count() > QML_FLICK_DISCARDSAMPLES) {
+ velocity = 0;
+ int count = buffer.count() - QML_FLICK_DISCARDSAMPLES;
+ for (int i = 0; i < count; ++i) {
+ qreal v = buffer.at(i);
+ velocity += v;
+ }
+ velocity /= count;
+ }
+}
+
+
+void QDeclarativeGeoMapFlickable::setEnabled(bool enabled)
+{
+ if (enabled_ == enabled)
+ return;
+ enabled_ = enabled;
+ if (!enabled_)
+ stop();
+ emit enabledChanged();
+}
+
+bool QDeclarativeGeoMapFlickable::enabled() const
+{
+ return enabled_;
+}
+
+void QDeclarativeGeoMapFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ if (!pressed_ || !enabled_)
+ return;
+ pressed_ = false;
+
+ // if we drag then pause before release we should not cause a flick.
+ if (lastPosTime_.elapsed() < 100) {
+ updateVelocity(velocityBufferY_, velocityY_);
+ updateVelocity(velocityBufferX_, velocityX_);
+ } else {
+ velocityX_ = 0.0;
+ velocityY_ = 0.0;
+ }
+ int flickTimeY = 0;
+ int flickTimeX = 0;
+ int flickPixelsX = 0;
+ int flickPixelsY = 0;
+ if (qAbs(velocityY_) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos_.y()) > FlickThreshold) {
+ // calculate Y flick animation values
+ qreal acceleration = deceleration_;
+ if ((velocityY_ > 0.0f) == (deceleration_ > 0.0f))
+ acceleration = acceleration * -1.0f;
+ flickTimeY = static_cast<int>(-1000 * velocityY_ / acceleration);
+ flickPixelsY = (flickTimeY * velocityY_) / (1000.0 * 2);
+ //qDebug() << "---=== would flick Y, velocity (pix/sec), flick duration (msec): ===---" << velocityY_ << flickTimeY;
+ } else {
+ // reset
+ //qDebug() << "---=== would NOT flick Y, velocity (pix/sec): ===---" << velocityY_;
+ }
+ if (qAbs(velocityX_) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos_.x()) > FlickThreshold) {
+ // calculate X flick animation values
+ qreal acceleration = deceleration_;
+ if ((velocityX_ > 0.0f) == (deceleration_ > 0.0f))
+ acceleration = acceleration * -1.0f;
+ flickTimeX = static_cast<int>(-1000 * velocityX_ / acceleration);
+ flickPixelsX = (flickTimeX * velocityX_) / (1000.0 * 2);
+ //qDebug() << "---=== would flick X, velocity (pix/sec), flick duration (msec), pixels: ===---" << velocityX_ << flickTimeX << "pixels: " << flickPixelsX;
+ } else {
+ // reset
+ //qDebug() << "---=== would NOT flick X, velocity (pix/sec) ===---" << velocityX_;
+ }
+ int flickTime = qMax(flickTimeY, flickTimeX);
+ updateCamera(flickPixelsX, flickPixelsY, flickTime);
+
+ if (flickTime == 0 && moving_) {
+ emit movementEnded();
+ moving_ = false;
+ }
+ velocityBufferX_.clear();
+ velocityBufferY_.clear();
+ velocityX_ = 0.0;
+ velocityY_ = 0.0;
+ lastPosTime_.invalidate();
+ pressTime_.invalidate();
+ velocityTime_.invalidate();
+}
+
+void QDeclarativeGeoMapFlickable::flickAnimationFinished()
+{
+ //qDebug() << metaObject()->className() << __FUNCTION__;
+ //Q_ASSERT(flicking_);
+ //Q_ASSERT(moving_);
+ flicking_ = false;
+ moving_ = false;
+ emit flickEnded();
+ emit movementEnded();
+}
+
+/*
+void QDeclarativeGeoMapFlickable::flickAnimationValueChanged(const QVariant& value)
+{
+ qDebug() << metaObject()->className() << __FUNCTION__;
+}
+*/
+
+void QDeclarativeGeoMapFlickable::timerEvent(QTimerEvent *event)
+{
+ Q_UNUSED(event); // TODO press delay handling
+ //qDebug() << metaObject()->className() << __FUNCTION__ ;
+}
+
+#include "moc_qdeclarativegeomapflickable_p.cpp"
+
+QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapflickable_p.h b/src/imports/location/qdeclarativegeomapflickable_p.h
new file mode 100644
index 00000000..a6c73c7b
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomapflickable_p.h
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEGEOMAPFLICKABLE_H
+#define QDECLARATIVEGEOMAPFLICKABLE_H
+
+// Constant value from QSGFlickable
+// The number of samples to use in calculating the velocity of a flick
+#ifndef QML_FLICK_SAMPLEBUFFER
+#define QML_FLICK_SAMPLEBUFFER 3
+#endif
+
+#include <QtDeclarative/qdeclarative.h>
+#include <QElapsedTimer>
+#include <QVector>
+#include <QObject>
+#include <QDebug>
+
+// Internal. Calculates relevant flick parameters based on mouse
+// movements, which can then be used to fire a panning animation.
+QT_BEGIN_NAMESPACE
+
+class QGraphicsSceneMouseEvent;
+class QPropertyAnimation;
+class CameraData;
+class Map;
+
+class QDeclarativeGeoMapFlickable: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal deceleration READ deceleration WRITE setDeceleration NOTIFY decelerationChanged)
+ Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged())
+
+public:
+ QDeclarativeGeoMapFlickable(Map* map, QObject *parent = 0);
+ ~QDeclarativeGeoMapFlickable();
+
+ qreal deceleration() const;
+ void setDeceleration(qreal deceleration);
+
+ bool enabled() const;
+ void setEnabled(bool enabled);
+
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ virtual void timerEvent(QTimerEvent *event);
+
+signals:
+ void decelerationChanged();
+ void movementStarted();
+ void enabledChanged();
+ void movementEnded();
+ void flickStarted();
+ void flickEnded();
+
+private:
+ void addVelocitySample(QVector<qreal>& buffer, qreal sample);
+ void updateVelocity(QVector<qreal>& buffer, qreal& velocity);
+ void updateCamera(int dx, int dy, int timeMs = 0);
+ void stop();
+
+private slots:
+ void flickAnimationFinished();
+ //void flickAnimationValueChanged(const QVariant&);
+
+private:
+ bool pressed_;
+ qreal maxVelocity_;
+ qreal deceleration_;
+ QElapsedTimer lastPosTime_;
+ QElapsedTimer pressTime_;
+ QElapsedTimer velocityTime_;
+ QVector<qreal> velocityBufferX_;
+ qreal velocityX_;
+ QVector<qreal> velocityBufferY_;
+ qreal velocityY_;
+ QPointF lastPos_;
+ QPointF pressPos_;
+ bool flicking_;
+ Map* map_;
+ QPropertyAnimation* animation_;
+ bool enabled_;
+ bool moving_;
+};
+
+QT_END_NAMESPACE
+QML_DECLARE_TYPE(QDeclarativeGeoMapFlickable);
+
+#endif
diff --git a/src/imports/location/qdeclarativegeomapgroupobject.cpp b/src/imports/location/qdeclarativegeomapgroupobject.cpp
deleted file mode 100644
index 63ecf0c8..00000000
--- a/src/imports/location/qdeclarativegeomapgroupobject.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomapgroupobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapGroup
-
- \brief The MapGroup element aggregates a set of map objects.
- \inherits QGeoMapGroupObject
-
- \ingroup qml-location-maps
-
- Grouping is provided to make it easier to quickly add, remove, show
- and hide groups of objects.
-
- It also allows users to specify an ordering of objects local to the
- group via the z-values and insertion order of the objects in the group.
-
- The MapGroup element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapGroupObject::QDeclarativeGeoMapGroupObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent)
-{
- group_ = new QGeoMapGroupObject();
- setMapObject(group_);
-}
-
-QDeclarativeGeoMapGroupObject::~QDeclarativeGeoMapGroupObject()
-{
- // Remove all objects from the group before deleting it.
- // These objects are owned by their declarative counterparts
- // and they'll delete them.
- if (map_)
- map_->removeMapObject(this);
- QList<QGeoMapObject*> objects = group_->childObjects();
- for (int i = 0; i < objects.size(); ++i) {
- group_->removeChildObject(objects.at(i));
- }
- delete group_;
-}
-
-void QDeclarativeGeoMapGroupObject::componentComplete()
-{
- //QList<QGraphicsItem*> children = childItems();
- // TODO
- QList<QSGItem*> children = childItems();
- for (int i = 0; i < children.size(); ++i) {
- QDeclarativeGeoMapObject *mapObject
- = qobject_cast<QDeclarativeGeoMapObject*>(children.at(i));
- if (mapObject) {
- group_->addChildObject(mapObject->mapObject());
- objects_.append(mapObject);
- mapObject->setMap(map());
- }
- }
-
- QDeclarativeGeoMapObject::componentComplete();
-}
-
-void QDeclarativeGeoMapGroupObject::setMap(QDeclarativeGraphicsGeoMap *map)
-{
- QDeclarativeGeoMapObject::setMap(map);
- for (int i = 0; i < objects_.size(); ++i)
- objects_[i]->setMap(map);
-}
-
-/*!
- \qmlproperty list<QGeoMapObject> MapGroup::objects
- \default
-
- This property holds the list of objects which make up the group.
-*/
-
-QDeclarativeListProperty<QDeclarativeGeoMapObject> QDeclarativeGeoMapGroupObject::objects()
-{
- return QDeclarativeListProperty<QDeclarativeGeoMapObject>(this,
- 0,
- child_append,
- child_count,
- child_at,
- child_clear);
-}
-
-void QDeclarativeGeoMapGroupObject::child_append(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, QDeclarativeGeoMapObject *mapObject)
-{
- QDeclarativeGeoMapGroupObject* group = static_cast<QDeclarativeGeoMapGroupObject*>(prop->object);
- group->group_->addChildObject(mapObject->mapObject());
- group->objects_.append(mapObject);
-}
-
-int QDeclarativeGeoMapGroupObject::child_count(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop)
-{
- return static_cast<QDeclarativeGeoMapGroupObject*>(prop->object)->objects_.size();
-}
-
-QDeclarativeGeoMapObject* QDeclarativeGeoMapGroupObject::child_at(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, int index)
-{
- return static_cast<QDeclarativeGeoMapGroupObject*>(prop->object)->objects_.at(index);
-}
-
-void QDeclarativeGeoMapGroupObject::child_clear(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop)
-{
- QDeclarativeGeoMapGroupObject* group = static_cast<QDeclarativeGeoMapGroupObject*>(prop->object);
- group->group_->clearChildObjects();
- group->objects_.clear();
-}
-
-void QDeclarativeGeoMapGroupObject::doubleClickEvent(QDeclarativeGeoMapMouseEvent *event)
-{
- if (event->accepted())
- return;
-
- for (int i = objects_.size() - 1; i >= 0; --i) {
- objects_.at(i)->doubleClickEvent(event);
- if (event->accepted())
- return;
- }
-
- QDeclarativeGeoMapObject::doubleClickEvent(event);
-}
-
-void QDeclarativeGeoMapGroupObject::pressEvent(QDeclarativeGeoMapMouseEvent *event)
-{
- if (event->accepted())
- return;
-
- for (int i = objects_.size() - 1; i >= 0; --i) {
- objects_.at(i)->pressEvent(event);
- if (event->accepted())
- return;
- }
-
- QDeclarativeGeoMapObject::pressEvent(event);
-}
-
-void QDeclarativeGeoMapGroupObject::releaseEvent(QDeclarativeGeoMapMouseEvent *event)
-{
- if (event->accepted())
- return;
-
- for (int i = objects_.size() - 1; i >= 0; --i) {
- objects_.at(i)->releaseEvent(event);
- if (event->accepted())
- return;
- }
-
- QDeclarativeGeoMapObject::releaseEvent(event);
-}
-
-void QDeclarativeGeoMapGroupObject::enterEvent()
-{
- for (int i = objects_.size() - 1; i >= 0; --i)
- objects_.at(i)->enterEvent();
-
- QDeclarativeGeoMapObject::enterEvent();
-}
-
-void QDeclarativeGeoMapGroupObject::exitEvent()
-{
- for (int i = objects_.size() - 1; i >= 0; --i)
- objects_.at(i)->exitEvent();
-
- QDeclarativeGeoMapObject::exitEvent();
-}
-
-void QDeclarativeGeoMapGroupObject::moveEvent(QDeclarativeGeoMapMouseEvent *event)
-{
- if (event->accepted())
- return;
-
- for (int i = objects_.size() - 1; i >= 0; --i) {
- objects_.at(i)->moveEvent(event);
- if (event->accepted())
- return;
- }
-
- QDeclarativeGeoMapObject::moveEvent(event);
-}
-
-/*!
- \qmlproperty int MapGroup::zValue
-
- This property holds the z-value of the group.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-
- The objects inside the group are drawn according to the z-values
- and insertion order of the other elements of the group. This
- is indpendent of the z-value and insertion order of the group
- element itself.
-*/
-
-/*!
- \qmlproperty bool MapGroup::visible
-
- This property holds a boolean corresponding to whether or not the
- group is visible.
-*/
-
-#include "moc_qdeclarativegeomapgroupobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomapgroupobject_p.h b/src/imports/location/qdeclarativegeomapgroupobject_p.h
deleted file mode 100644
index 9a85fa4d..00000000
--- a/src/imports/location/qdeclarativegeomapgroupobject_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPGROUPOBJECT_H
-#define QDECLARATIVEGEOMAPGROUPOBJECT_H
-
-#include "qgeomapgroupobject.h"
-
-#include "qdeclarativegeomapobject_p.h"
-#include <QtDeclarative/qdeclarative.h>
-#include <QDeclarativeListProperty>
-
-// !!! IMPORTANT !!!
-//
-// Inheriting from QSGItem here
-// is just a workaround to have non-gui related (ie where visualization is not
-// the main thing) autotests to pass in QML2 environment.
-// Real QML2 Map support (and related map object is a work in progress elsewhere.
-// This Map element instantiates but does not do anything meaningful from app dev
-// perspective.
-//
-// !!! IMPORTANT !!!
-
-QT_BEGIN_NAMESPACE
-
-class QGeoCoordinate;
-
-class QDeclarativeGeoMapGroupObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeListProperty<QDeclarativeGeoMapObject> objects READ objects)
-
-public:
- QDeclarativeGeoMapGroupObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapGroupObject();
-
- virtual void componentComplete();
-
- virtual void setMap(QDeclarativeGraphicsGeoMap *map);
-
- QDeclarativeListProperty<QDeclarativeGeoMapObject> objects();
-
- virtual void doubleClickEvent(QDeclarativeGeoMapMouseEvent *event);
- virtual void pressEvent(QDeclarativeGeoMapMouseEvent *event);
- virtual void releaseEvent(QDeclarativeGeoMapMouseEvent *event);
- virtual void enterEvent();
- virtual void exitEvent();
- virtual void moveEvent(QDeclarativeGeoMapMouseEvent *event);
-
-private:
- static void child_append(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, QDeclarativeGeoMapObject *mapObject);
- static int child_count(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop);
- static QDeclarativeGeoMapObject* child_at(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop, int index);
- static void child_clear(QDeclarativeListProperty<QDeclarativeGeoMapObject> *prop);
-
- QPointer<QGeoMapGroupObject> group_;
- QList<QDeclarativeGeoMapObject*> objects_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapGroupObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapitem.cpp b/src/imports/location/qdeclarativegeomapitem.cpp
new file mode 100644
index 00000000..1b6d304b
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomapitem.cpp
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativegeomapitem_p.h"
+#include "qdeclarativecoordinate_p.h"
+#include <QtDeclarative/qdeclarativeinfo.h>
+
+#ifndef QSGSHADEREFFECTSOURCE_AVAILABLE
+
+#else
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmlclass MapItem
+
+ The MapItem element is part of the \bold{Qt.location 5.0} module.
+*/
+
+QDeclarativeGeoMapItem::QDeclarativeGeoMapItem(QSGItem *parent)
+ : QSGShaderEffectSource(parent),
+ sourceItem_(0),
+ coordinate_(0),
+ map_(0),
+ componentCompleted_(false)
+{
+ connect(this, SIGNAL(sourceItemChanged()), this, SIGNAL(sourceChanged()));
+ connect(this->texture(), SIGNAL(textureChanged()), this, SLOT(textureChangedSlot()));
+}
+
+QDeclarativeGeoMapItem::~QDeclarativeGeoMapItem()
+{
+ // Remove this item from map if it still exists (qpointer protection todo).
+ if (map_)
+ map_->removeMapItem(this);
+}
+
+void QDeclarativeGeoMapItem::textureChangedSlot()
+{
+ if (!texture()) {
+ mapItem_.setTextureId(0); // invalidate
+ return;
+ }
+ mapItem_.setTextureId(texture()->textureId());
+ mapItem_.setSize(texture()->textureSize());
+}
+
+MapItem* QDeclarativeGeoMapItem::mapItem()
+{
+ return &mapItem_;
+}
+
+void QDeclarativeGeoMapItem::setZoomLevel(double zoom)
+{
+ if (zoom == mapItem_.zoom())
+ return;
+ mapItem_.setZoom(zoom);
+ emit zoomLevelChanged();
+}
+
+double QDeclarativeGeoMapItem::zoomLevel()
+{
+ return mapItem_.zoom();
+}
+
+bool QDeclarativeGeoMapItem::hasValidTexture()
+{
+ if (mapItem_.textureId())
+ return true;
+ return false;
+}
+
+void QDeclarativeGeoMapItem::setCoordinate(QDeclarativeCoordinate *coordinate)
+{
+ if (coordinate_ == coordinate)
+ return;
+ if (coordinate_) {
+ coordinate_->disconnect(this);
+ }
+ coordinate_ = coordinate;
+ if (coordinate_) {
+ connect(coordinate_,
+ SIGNAL(latitudeChanged(double)),
+ this,
+ SLOT(coordinateCoordinateChanged(double)));
+ connect(coordinate_,
+ SIGNAL(longitudeChanged(double)),
+ this,
+ SLOT(coordinateCoordinateChanged(double)));
+ connect(coordinate_,
+ SIGNAL(altitudeChanged(double)),
+ this,
+ SLOT(coordinateCoordinateChanged(double)));
+ mapItem_.setCoordinate(coordinate->coordinate());
+ } else {
+ mapItem_.setCoordinate(QGeoCoordinate());
+ }
+ emit coordinateChanged();
+}
+
+void QDeclarativeGeoMapItem::setMap(QDeclarative3DGraphicsGeoMap* map)
+{
+ if (map == map_) {
+ return;
+ }
+ map_ = map;
+ if (!map_) {
+ // todo we may want to set parent item as zero too
+ setSourceItem(0);
+ mapItem_.setTextureId(0); // invalidate
+ } else {
+ // Essential to QSG -parent ourselves - it glues us to QSG tree and
+ // essentially enables rendering. This is particularly important to
+ // do manually when instantiating items from models.
+
+ setParent(map_);
+ setParentItem(map_);
+ setSourceItem(sourceItem_);
+ }
+}
+
+void QDeclarativeGeoMapItem::coordinateCoordinateChanged(double)
+{
+ mapItem_.setCoordinate(coordinate_->coordinate());
+ emit coordinateChanged();
+}
+
+void QDeclarativeGeoMapItem::updateItem()
+{
+ // we seem to not always get texture changed -signals when
+ // adding static map items with add
+ if (!mapItem_.textureId() && texture()) {
+ mapItem_.setTextureId(texture()->textureId());
+ }
+ mapItem_.update();
+}
+
+QDeclarativeCoordinate* QDeclarativeGeoMapItem::coordinate()
+{
+ return coordinate_;
+}
+
+void QDeclarativeGeoMapItem::componentComplete()
+{
+ componentCompleted_ = true;
+ QSGShaderEffectSource::componentComplete();
+}
+
+// This will enable us to intercept the setting of the source item
+// if we need to intercept our own Map graphical elements like route.
+// Also this way we can handle addition and removal of this item to map.
+void QDeclarativeGeoMapItem::setSource(QSGItem* source)
+{
+ if (source == sourceItem_)
+ return;
+ sourceItem_ = source;
+ if (map_)
+ setSourceItem(sourceItem_);
+ if (sourceItem_) {
+ mapItem_.setSize(QSize(sourceItem_->width(), sourceItem_->height()));
+ }
+ emit sourceChanged();
+}
+
+QSGItem* QDeclarativeGeoMapItem::source()
+{
+ if (!map_)
+ return sourceItem_;
+ return sourceItem();
+}
+#endif
+
+#include "moc_qdeclarativegeomapitem_p.cpp"
+
+QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapitem_p.h b/src/imports/location/qdeclarativegeomapitem_p.h
new file mode 100644
index 00000000..c695ae7a
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomapitem_p.h
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEGEOMAPITEM_H
+#define QDECLARATIVEGEOMAPITEM_H
+
+#include <QtDeclarative/qsgitem.h>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QPointer>
+
+#include "qsgtexture.h"
+#include "mapitem.h"
+#include "qdeclarativecoordinate_p.h"
+#include "qdeclarative3dgraphicsgeomap_p.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QSGSHADEREFFECTSOURCE_AVAILABLE
+// dummy implementation so we don't have to ifdef all over the place
+class QDeclarativeGeoMapItem : public QSGItem
+{
+ Q_OBJECT
+public:
+ QDeclarativeGeoMapItem(QSGItem *parent = 0) {};
+ ~QDeclarativeGeoMapItem() {};
+};
+
+#else
+
+#include <private/qsgshadereffectsource_p.h>
+
+class QDeclarativeGeoMapItem : public QSGShaderEffectSource
+{
+ Q_OBJECT
+ Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
+ Q_PROPERTY(QSGItem* source READ source WRITE setSource NOTIFY sourceChanged)
+ Q_PROPERTY(double zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
+
+public:
+ QDeclarativeGeoMapItem(QSGItem *parent = 0);
+ ~QDeclarativeGeoMapItem();
+
+ // From QDeclarativeParserStatus
+ virtual void componentComplete();
+
+ void setCoordinate(QDeclarativeCoordinate *coordinate);
+ QDeclarativeCoordinate* coordinate();
+
+ void setSource(QSGItem* source);
+ QSGItem* source();
+
+ void setZoomLevel(double zoomLevel);
+ double zoomLevel();
+
+ void updateItem();
+ void setMap(QDeclarative3DGraphicsGeoMap* map);
+
+ MapItem* mapItem();
+ bool hasValidTexture();
+
+Q_SIGNALS:
+ void coordinateChanged();
+ void sourceChanged();
+ void zoomLevelChanged();
+
+private Q_SLOTS:
+ void coordinateCoordinateChanged(double);
+ void textureChangedSlot();
+
+private:
+ QSGItem* sourceItem_;
+ QDeclarativeCoordinate* coordinate_;
+ QDeclarative3DGraphicsGeoMap* map_;
+ // TODO enable didnt compile
+ //QPointer<QDeclarative3DGraphicsGeoMap*> map_;
+ bool componentCompleted_;
+ MapItem mapItem_;
+ Q_DISABLE_COPY(QDeclarativeGeoMapItem);
+};
+
+#endif // shader effect source available
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapItem));
+
+#endif
diff --git a/src/imports/location/qdeclarativegeomapmousearea_p.h b/src/imports/location/qdeclarativegeomapmousearea_p.h
index 2d5ac970..cc1d8a39 100644
--- a/src/imports/location/qdeclarativegeomapmousearea_p.h
+++ b/src/imports/location/qdeclarativegeomapmousearea_p.h
@@ -46,7 +46,6 @@
#include "qdeclarativegraphicsgeomap_p.h"
#include "qdeclarativegeomapmouseevent_p.h"
-
// !!! IMPORTANT !!!
//
// Inheriting from QSGItem here
diff --git a/src/imports/location/qdeclarativegeomapobject.cpp b/src/imports/location/qdeclarativegeomapobject.cpp
index 0c46376a..69a8c246 100644
--- a/src/imports/location/qdeclarativegeomapobject.cpp
+++ b/src/imports/location/qdeclarativegeomapobject.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -41,8 +41,10 @@
#include "qdeclarativegeomapobject_p.h"
#include "qdeclarativegeomapmousearea_p.h"
-#include "qdeclarativegeomapgroupobject_p.h"
-#include "qgeomapdata.h"
+#include "qdeclarativegraphicsgeomap_p.h"
+#include "qdeclarative3dgraphicsgeomap_p.h"
+#include "qdeclarativegeomapitem_p.h"
+//#include "qgeomapdata.h"
#include <QDebug>
#include <QDeclarativeParserStatus>
@@ -54,7 +56,6 @@ QT_BEGIN_NAMESPACE
QDeclarativeGeoMapObject::QDeclarativeGeoMapObject(QSGItem *parent)
: QSGItem(parent),
map_(0),
- object_(0),
visible_(true)
{
}
@@ -144,13 +145,13 @@ void QDeclarativeGeoMapObject::moveEvent(QDeclarativeGeoMapMouseEvent *event)
mouseAreas_.at(i)->moveEvent(event);
}
-void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object)
-{
- if (!object)
- return;
+//void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object)
+//{
+// if (!object)
+// return;
- object_ = object;
- object_->setVisible(visible_);
+// object_ = object;
+// object_->setVisible(visible_);
// TODO check QML2 impact
/*
@@ -162,12 +163,12 @@ void QDeclarativeGeoMapObject::setMapObject(QGeoMapObject *object)
object_->setZValue(zValue());
*/
-}
+//}
-QGeoMapObject* QDeclarativeGeoMapObject::mapObject()
-{
- return object_;
-}
+//QGeoMapObject* QDeclarativeGeoMapObject::mapObject()
+//{
+// return object_;
+//}
void QDeclarativeGeoMapObject::parentZChanged()
{
@@ -182,8 +183,8 @@ void QDeclarativeGeoMapObject::setVisible(bool visible)
visible_ = visible;
- if (object_)
- object_->setVisible(visible);
+// if (object_)
+// object_->setVisible(visible);
emit visibleChanged(visible_);
}
@@ -216,13 +217,18 @@ QDeclarativeGeoMapObjectView::QDeclarativeGeoMapObjectView(QSGItem *parent)
QDeclarativeGeoMapObjectView::~QDeclarativeGeoMapObjectView()
{
+ if (map_)
+ removeInstantiatedItems();
// Remove group from map, and items from the group. This is to
// prevent their deletion. The objects are owned by the
// declarative objects and are to be deleted by them.
+ // TODO the concept of group objects need to be analyzed - is it needed anymore?
+ /*
if (map_ && map_->mapData_) {
map_->mapData_->removeMapObject(&group_);
removeInstantiatedItems();
}
+ */
}
void QDeclarativeGeoMapObjectView::componentComplete()
@@ -269,6 +275,21 @@ void QDeclarativeGeoMapObjectView::modelReset()
void QDeclarativeGeoMapObjectView::modelRowsInserted(QModelIndex, int start, int end)
{
+ if (!componentCompleted_ || !map_ || !delegate_ || !model_) {
+ QDeclarativeGeoMapItem* mapItem;
+ for (int i = start; i <= end; ++i) {
+ mapItem = createItem(i);
+ if (!mapItem) {
+ break;
+ }
+ mapItemList_.append(mapItem);
+ // TODO visibility factors need to be solved
+ //mapItem->setVisible(visible_);
+ map_->addMapItem(mapItem);
+ // TODO mouse areas are omitted atm
+ }
+ }
+ /*
if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_)
return;
Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count());
@@ -286,10 +307,23 @@ void QDeclarativeGeoMapObjectView::modelRowsInserted(QModelIndex, int start, int
map_->objectMap_.insert(mapObject->mapObject(), mapObject);
}
Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count());
+ */
}
void QDeclarativeGeoMapObjectView::modelRowsRemoved(QModelIndex, int start, int end)
{
+ if (!componentCompleted_ || !map_ || !delegate_ || !model_)
+ return;
+ for (int i = end; i >= start; --i) {
+ QDeclarativeGeoMapItem *mapItem = mapItemList_.takeAt(i);
+ Q_ASSERT(mapItem);
+ if (!mapItem) // bad
+ break;
+ map_->removeMapItem(mapItem);
+ delete mapItem;
+ }
+
+ /*
if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_)
return;
Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count());
@@ -302,6 +336,7 @@ void QDeclarativeGeoMapObjectView::modelRowsRemoved(QModelIndex, int start, int
delete object;
}
Q_ASSERT(declarativeObjectList_.count() == group_.childObjects().count());
+ */
}
QDeclarativeComponent* QDeclarativeGeoMapObjectView::delegate() const
@@ -328,18 +363,31 @@ void QDeclarativeGeoMapObjectView::setDelegate(QDeclarativeComponent *delegate)
emit delegateChanged();
}
-void QDeclarativeGeoMapObjectView::setMapData(QDeclarativeGraphicsGeoMap* map)
+//void QDeclarativeGeoMapObjectView::setMapData(QDeclarativeGraphicsGeoMap* map)
+void QDeclarativeGeoMapObjectView::setMapData(QDeclarative3DGraphicsGeoMap* map)
{
+ if (!map || map_) // changing map on the fly not supported
+ return;
+ map_ = map;
+ /*
if (!map || !map->mapData_ || map_) // changing map on the fly not supported
return;
map_ = map;
map_->mapData_->addMapObject(&group_);
+ */
}
void QDeclarativeGeoMapObjectView::removeInstantiatedItems()
{
+ if (!map_)
+ return;
+ for (int i = 0; i < mapItemList_.count(); ++ i) {
+ map_->removeMapItem(mapItemList_.at(i));
+ }
+ mapItemList_.clear();
// Delete the declarative components we have instantiated.
// They will also delete the actual qgeomapobjects
+ /*
QList<QGeoMapObject*> mapObjects = group_.childObjects();
if (!mapObjects.isEmpty()) {
for (int i = 0; i < mapObjects.size(); i++) {
@@ -351,11 +399,34 @@ void QDeclarativeGeoMapObjectView::removeInstantiatedItems()
}
}
declarativeObjectList_.clear();
+ */
}
// Removes and repopulates all items.
void QDeclarativeGeoMapObjectView::repopulate()
{
+ if (!componentCompleted_ || !map_ || !delegate_ || !model_)
+ return;
+ // Free any earlier instances
+ removeInstantiatedItems();
+
+ // Iterate model data and instantiate delegates.
+ // We could use more specialized landmark model calls here too,
+ // but hopefully the support will be leveraged to a general model
+ // level.
+ QDeclarativeGeoMapItem* mapItem;
+ for (int i = 0; i < model_->rowCount(); ++i) {
+ mapItem = createItem(i);
+ Q_ASSERT(mapItem);
+ if (!mapItem) // bad
+ break;
+ mapItemList_.append(mapItem);
+ // TODO what to do with visibility
+ //mapObject->setVisible(visible_);
+ map_->addMapItem(mapItem);
+ }
+
+ /*
if (!componentCompleted_ || !map_ || !map_->mapData_ || !delegate_ || !model_)
return;
// Free any earlier instances
@@ -374,9 +445,14 @@ void QDeclarativeGeoMapObjectView::repopulate()
// Needed in order for mouse areas to work.
map_->recursiveAddToObjectMap(mapObject);
}
+ */
}
-QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow)
+// Currently item creation is tightly bound to models providing
+// QObject* as data. Some day this may be leveraged to any user defined
+// model or e.g. XML model.
+//QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow)
+QDeclarativeGeoMapItem* QDeclarativeGeoMapObjectView::createItem(int modelRow)
{
if (!delegate_ || !model_)
return NULL;
@@ -413,7 +489,8 @@ QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow)
delete itemContext;
return 0;
}
- QDeclarativeGeoMapObject *declMapObj = qobject_cast<QDeclarativeGeoMapObject*>(obj);
+ QDeclarativeGeoMapItem *declMapObj = qobject_cast<QDeclarativeGeoMapItem*>(obj);
+ //QDeclarativeGeoMapObject *declMapObj = qobject_cast<QDeclarativeGeoMapObject*>(obj);
if (!declMapObj) {
qWarning() << "QDeclarativeGeoMapObject map object delegate is of unsupported type.";
delete itemContext;
@@ -433,6 +510,8 @@ QDeclarativeGeoMapObject* QDeclarativeGeoMapObjectView::createItem(int modelRow)
void QDeclarativeGeoMapObjectView::setVisible(bool visible)
{
+ // TODO visibility
+ /*
if (visible_ == visible)
return;
visible_ = visible;
@@ -444,6 +523,7 @@ void QDeclarativeGeoMapObjectView::setVisible(bool visible)
}
}
emit visibleChanged();
+ */
}
bool QDeclarativeGeoMapObjectView::isVisible() const
@@ -464,13 +544,16 @@ bool QDeclarativeGeoMapObjectView::isVisible() const
void QDeclarativeGeoMapObjectView::setZValue(qreal zValue)
{
- group_.setZValue(zValue);
- emit zChanged();
+ // TODO z values
+ // group_.setZValue(zValue);
+ // emit zChanged();
}
qreal QDeclarativeGeoMapObjectView::zValue()
{
- return group_.zValue();
+ // TODO z values what to do
+ return 1.0;
+ //return group_.zValue();
}
#include "moc_qdeclarativegeomapobject_p.cpp"
diff --git a/src/imports/location/qdeclarativegeomapobject_p.h b/src/imports/location/qdeclarativegeomapobject_p.h
index 415c29de..a0528e3d 100644
--- a/src/imports/location/qdeclarativegeomapobject_p.h
+++ b/src/imports/location/qdeclarativegeomapobject_p.h
@@ -42,19 +42,20 @@
#ifndef QDECLARATIVEGEOMAPOBJECT_H
#define QDECLARATIVEGEOMAPOBJECT_H
-#include "qgeomapobject.h"
+//#include "qgeomapobject.h"
#include "qdeclarativegeomapmouseevent_p.h"
-#include "qgeomapgroupobject.h"
+//#include "qgeomapgroupobject.h"
#include "QModelIndex"
#include <QtDeclarative/QSGItem>
#include <QtCore/QPointer>
-class QAbstractItemModel;
-
QT_BEGIN_NAMESPACE
+class QAbstractItemModel;
class QDeclarativeGraphicsGeoMap;
+class QDeclarative3DGraphicsGeoMap;
+class QDeclarativeGeoMapItem;
class QDeclarativeGeoMapMouseArea;
// !!! IMPORTANT !!!
@@ -83,8 +84,8 @@ public:
virtual void setMap(QDeclarativeGraphicsGeoMap *map);
QDeclarativeGraphicsGeoMap* map() const;
- void setMapObject(QGeoMapObject *object);
- QGeoMapObject* mapObject();
+// void setMapObject(QGeoMapObject *object);
+// QGeoMapObject* mapObject();
void setVisible(bool visible);
bool isVisible() const;
@@ -106,7 +107,7 @@ private Q_SLOTS:
void parentZChanged();
private:
- QPointer<QGeoMapObject> object_;
+ //QPointer<QGeoMapObject> object_;
bool visible_;
QList<QDeclarativeGeoMapMouseArea*> mouseAreas_;
};
@@ -133,7 +134,8 @@ public:
QDeclarativeComponent *delegate() const;
void setDelegate(QDeclarativeComponent*);
- void setMapData(QDeclarativeGraphicsGeoMap*);
+// void setMapData(QDeclarativeGraphicsGeoMap*);
+ void setMapData(QDeclarative3DGraphicsGeoMap*);
void repopulate();
void removeInstantiatedItems();
@@ -143,7 +145,7 @@ public:
void setVisible(bool visible);
bool isVisible() const;
- QDeclarativeGeoMapObject* createItem(int modelRow);
+ QDeclarativeGeoMapItem* createItem(int modelRow);
// From QDeclarativeParserStatus
virtual void componentComplete();
void classBegin() {}
@@ -165,9 +167,10 @@ private:
QDeclarativeComponent *delegate_;
QVariant modelVariant_;
QAbstractItemModel* model_;
- QDeclarativeGraphicsGeoMap *map_;
- QGeoMapGroupObject group_;
- QList<QDeclarativeGeoMapObject*> declarativeObjectList_;
+ QDeclarative3DGraphicsGeoMap *map_;
+ //QGeoMapGroupObject group_;
+ QList<QDeclarativeGeoMapItem*> mapItemList_;
+ //QList<QDeclarativeGeoMapObject*> declarativeObjectList_;
};
QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapobjectborder_p.h b/src/imports/location/qdeclarativegeomapobjectborder_p.h
deleted file mode 100644
index d082082c..00000000
--- a/src/imports/location/qdeclarativegeomapobjectborder_p.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPOBJECTBORDER_H
-#define QDECLARATIVEGEOMAPOBJECTBORDER_H
-
-#include "qmobilityglobal.h"
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QObject>
-#include <QColor>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapObjectBorder : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
-
-public:
- QDeclarativeGeoMapObjectBorder(QObject *parent = 0);
- ~QDeclarativeGeoMapObjectBorder();
-
- QColor color() const;
- void setColor(const QColor &color);
-
- int width() const;
- void setWidth(int width);
-
-Q_SIGNALS:
- void colorChanged(const QColor &color);
- void widthChanged(int width);
-
-private:
- QColor m_color;
- int m_width;
- Q_DISABLE_COPY(QDeclarativeGeoMapObjectBorder)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapObjectBorder));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomappincharea.cpp b/src/imports/location/qdeclarativegeomappincharea.cpp
new file mode 100644
index 00000000..f10356ee
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomappincharea.cpp
@@ -0,0 +1,506 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QApplication>
+#include "qdeclarativegeomappincharea_p.h"
+#include "qdeclarative3dgraphicsgeomap_p.h"
+#include <QGraphicsSceneMouseEvent>
+#include <QDebug>
+#include "math.h"
+#include "map.h"
+
+QT_BEGIN_NAMESPACE
+
+QDeclarativeGeoMapPinchArea::QDeclarativeGeoMapPinchArea(QDeclarative3DGraphicsGeoMap* map, QObject *parent)
+ : QObject(parent),
+ map_(map),
+ enabled_(true),
+ active_(false),
+ minimumZoomLevel_(1.0),
+ maximumZoomLevel_(1.0),
+ minimumRotation_(0.0),
+ maximumRotation_(0.0),
+ inPinch_(false),
+ pinchRejected_(false),
+ pinchActivated_(false),
+ pinchStartDist_(0),
+ pinchStartZoomLevel_(0.0),
+ pinchLastZoomLevel_(0.0),
+ pinchStartRotation_(0.0),
+ pinchStartAngle_(0.0),
+ pinchLastAngle_(0.0),
+ pinchRotation_(0.0),
+ id1_(-1),
+ maximumZoomLevelChange_(2.0),
+ activeGestures_(ZoomGesture | RotationGesture),
+ minimumTilt_(0.0),
+ maximumTilt_(90.0),
+ maximumTiltChange_(10.0),
+ pinchLastTilt_(0.0),
+ pinchStartTilt_(0.0)
+{
+ // this can be set as 'target' property should the need be to distinguish this element into MapPinchArea:
+ Q_ASSERT(map_);
+}
+
+QDeclarativeGeoMapPinchArea::~QDeclarativeGeoMapPinchArea()
+{
+}
+
+QDeclarativeGeoMapPinchArea::ActiveGestures QDeclarativeGeoMapPinchArea::activeGestures() const
+{
+ return activeGestures_;
+}
+
+void QDeclarativeGeoMapPinchArea::setActiveGestures(ActiveGestures activeGestures)
+{
+ qDebug() << metaObject()->className() << __FUNCTION__ << activeGestures;
+ if (activeGestures == activeGestures_)
+ return;
+ activeGestures_ = activeGestures;
+ emit activeGesturesChanged();
+}
+
+bool QDeclarativeGeoMapPinchArea::active() const
+{
+ return active_;
+}
+
+void QDeclarativeGeoMapPinchArea::setActive(bool active)
+{
+ if (active == active_)
+ return;
+ active = active_;
+ emit activeChanged();
+}
+
+bool QDeclarativeGeoMapPinchArea::enabled() const
+{
+ return enabled_;
+}
+
+void QDeclarativeGeoMapPinchArea::setEnabled(bool enabled)
+{
+ if (enabled == enabled_)
+ return;
+ enabled = enabled_;
+ emit enabledChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::minimumZoomLevel() const
+{
+ return minimumZoomLevel_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMinimumZoomLevel(qreal zoomLevel)
+{
+ if (zoomLevel < map_->minimumZoomLevel())
+ zoomLevel = map_->minimumZoomLevel();
+ if (zoomLevel == minimumZoomLevel_)
+ return;
+ minimumZoomLevel_ = zoomLevel;
+ emit minimumZoomLevelChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::maximumZoomLevel() const
+{
+ return maximumZoomLevel_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMaximumZoomLevel(qreal zoomLevel)
+{
+ if (zoomLevel > map_->maximumZoomLevel())
+ zoomLevel = map_->maximumZoomLevel();
+ if (zoomLevel == maximumZoomLevel_)
+ return;
+ maximumZoomLevel_ = zoomLevel;
+ emit maximumZoomLevelChanged();
+}
+
+
+qreal QDeclarativeGeoMapPinchArea::maximumZoomLevelChange() const
+{
+ return maximumZoomLevelChange_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMaximumZoomLevelChange(qreal maxChange)
+{
+ if (maxChange == maximumZoomLevelChange_ || maxChange < 0.1)
+ return;
+ maximumZoomLevelChange_ = maxChange;
+ emit maximumZoomLevelChangeChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::minimumRotation() const
+{
+ return minimumRotation_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMinimumRotation(qreal rotation)
+{
+ if (rotation == minimumRotation_ || rotation < 0.1)
+ return;
+ minimumRotation_ = rotation;
+ emit minimumRotationChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::maximumRotation() const
+{
+ return maximumRotation_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMaximumRotation(qreal rotation)
+{
+ if (rotation == maximumRotation_ || rotation > 360)
+ return;
+ maximumRotation_ = rotation;
+ emit maximumRotationChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::rotationSpeed() const
+{
+ return rotationSpeed_;
+}
+
+void QDeclarativeGeoMapPinchArea::setRotationSpeed(qreal speed)
+{
+ if (rotationSpeed_ == speed || speed < 0.1)
+ return;
+ rotationSpeed_ = speed;
+ emit rotationSpeedChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::maximumTilt() const
+{
+ return maximumTilt_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMaximumTilt(qreal tilt)
+{
+ if (maximumTilt_ == tilt)
+ return;
+ maximumTilt_ = tilt;
+ emit maximumTiltChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::minimumTilt() const
+{
+ return minimumTilt_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMinimumTilt(qreal tilt)
+{
+ if (minimumTilt_ == tilt || tilt < 0.1)
+ return;
+ minimumTilt_ = tilt;
+ emit minimumTiltChanged();
+}
+
+qreal QDeclarativeGeoMapPinchArea::maximumTiltChange() const
+{
+ return maximumTiltChange_;
+}
+
+void QDeclarativeGeoMapPinchArea::setMaximumTiltChange(qreal tilt)
+{
+ if (maximumTiltChange_ == tilt || tilt < 0.1)
+ return;
+ maximumTiltChange_ = tilt;
+ emit maximumTiltChangeChanged();
+}
+
+void QDeclarativeGeoMapPinchArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event); // TODO may not be needed at all
+ if (!enabled_)
+ return;
+}
+
+void QDeclarativeGeoMapPinchArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event); // TODO may not be needed at all
+ if (!enabled_)
+ return;
+}
+
+void QDeclarativeGeoMapPinchArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event); // TODO may not be needed at all
+ if (!enabled_)
+ return;
+}
+
+void QDeclarativeGeoMapPinchArea::touchEvent(QTouchEvent *event)
+{
+ // Keep processing if gesture(s) are in progress. Otherwise we might
+ // end up in lock.
+ if ((!enabled_ || (activeGestures_ == NoGesture)) && !active())
+ return;
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ touchPoints_.clear();
+ for (int i = 0; i < event->touchPoints().count(); ++i) {
+ if (!(event->touchPoints().at(i).state() & Qt::TouchPointReleased)) {
+ touchPoints_ << event->touchPoints().at(i);
+ }
+ }
+ updatePinch();
+ break;
+ case QEvent::TouchEnd:
+ touchPoints_.clear();
+ updatePinch();
+ break;
+ default:
+ // no-op
+ break;
+ }
+}
+
+void QDeclarativeGeoMapPinchArea::updatePinch()
+{
+ if (touchPoints_.count() == 0) {
+ if (inPinch_) {
+ inPinch_ = false;
+ QPointF pinchCenter = map_->mapFromScene(sceneLastCenter_);
+ QDeclarativeGeoMapPinchEvent pe(pinchCenter, pinchLastZoomLevel_, pinchLastAngle_, pinchRotation_);
+ pe.setStartCenter(pinchStartCenter_);
+ pe.setPreviousCenter(pinchCenter);
+ pe.setPreviousAngle(pinchLastAngle_);
+ pe.setPreviousZoomLevel(pinchLastZoomLevel_);
+ pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_));
+ pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_));
+ pe.setPoint1(map_->mapFromScene(lastPoint1_));
+ pe.setPoint2(map_->mapFromScene(lastPoint2_));
+ emit pinchFinished(&pe);
+ pinchStartDist_ = 0;
+ pinchActivated_ = false;
+ setActive(false);
+ }
+ return;
+ }
+ QTouchEvent::TouchPoint touchPoint1 = touchPoints_.at(0);
+ QTouchEvent::TouchPoint touchPoint2 = touchPoints_.at(touchPoints_.count() >= 2 ? 1 : 0);
+ if (touchPoints_.count() == 2
+ && (touchPoint1.state() & Qt::TouchPointPressed || touchPoint2.state() & Qt::TouchPointPressed)) {
+ id1_ = touchPoint1.id();
+ sceneStartPoint1_ = touchPoint1.scenePos();
+ sceneStartPoint2_ = touchPoint2.scenePos();
+ inPinch_ = false;
+ pinchRejected_ = false;
+ pinchActivated_ = true;
+ } else if (pinchActivated_ && !pinchRejected_){
+ const int dragThreshold = QApplication::startDragDistance();
+ QPointF p1 = touchPoint1.scenePos();
+ QPointF p2 = touchPoint2.scenePos();
+ qreal dx = p1.x() - p2.x();
+ qreal dy = p1.y() - p2.y();
+ qreal dist = sqrt(dx*dx + dy*dy);
+ QPointF sceneCenter = (p1 + p2)/2;
+ qreal angle = QLineF(p1, p2).angle();
+ qDebug() << "angle between point1, point2, s: " << p1 << p2 << angle;
+ if (touchPoints_.count() == 1) {
+ // If we only have one point then just move the center. TODO do we need this anymore.
+ if (id1_ == touchPoint1.id())
+ sceneCenter = sceneLastCenter_ + touchPoint1.scenePos() - lastPoint1_;
+ else
+ sceneCenter = sceneLastCenter_ + touchPoint2.scenePos() - lastPoint2_;
+ angle = pinchLastAngle_;
+ }
+ id1_ = touchPoint1.id();
+ if (angle > 180)
+ angle -= 360;
+ if (!inPinch_) {
+ if (touchPoints_.count() >= 2
+ && (qAbs(p1.x()-sceneStartPoint1_.x()) > dragThreshold
+ || qAbs(p1.y()-sceneStartPoint1_.y()) > dragThreshold
+ || qAbs(p2.x()-sceneStartPoint2_.x()) > dragThreshold
+ || qAbs(p2.y()-sceneStartPoint2_.y()) > dragThreshold)) {
+ sceneStartCenter_ = sceneCenter;
+ sceneLastCenter_ = sceneCenter;
+ pinchStartCenter_ = map_->mapFromScene(sceneCenter);
+ pinchStartDist_ = dist;
+ pinchStartAngle_ = angle;
+ pinchLastZoomLevel_ = 1.0;
+ pinchLastTilt_ = 0.0;
+ pinchLastAngle_ = angle;
+ pinchRotation_ = 0.0;
+ lastPoint1_ = p1;
+ lastPoint2_ = p2;
+
+ QDeclarativeGeoMapPinchEvent pe(pinchStartCenter_, 1.0, angle, 0.0);
+ pe.setStartCenter(pinchStartCenter_);
+ pe.setPreviousCenter(pinchStartCenter_);
+ pe.setPreviousAngle(pinchLastAngle_);
+ pe.setPreviousZoomLevel(pinchLastZoomLevel_);
+ pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_));
+ pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_));
+ pe.setPoint1(map_->mapFromScene(lastPoint1_));
+ pe.setPoint2(map_->mapFromScene(lastPoint2_));
+ pe.setPointCount(touchPoints_.count());
+ emit pinchStarted(&pe);
+ if (pe.accepted()) {
+ inPinch_ = true;
+ // TODO is this pos needed. Analyze.
+ pinchStartPos_ = map_->pos();
+ pinchStartZoomLevel_ = map_->cameraData().zoomFactor();
+ pinchStartRotation_ = map_->cameraData().bearing();
+ pinchStartTilt_ = map_->cameraData().tilt();
+ qDebug() << "set starting tilt to : " << pinchStartTilt_;
+ setActive(true);
+ } else {
+ pinchRejected_ = true;
+ }
+ }
+ } else if (pinchStartDist_ > 0) { // TODO restructure this codeblock according to activeGestures_
+ // Calculate the new zoom level if we have distance ( >= 2 touchpoints), otherwise stick with old.
+ qreal newZoomLevel = pinchLastZoomLevel_;
+ if (dist) {
+ newZoomLevel =
+ // How much further/closer the current touchpoints are (in pixels) compared to pinch start
+ ((dist - pinchStartDist_) *
+ // How much one pixel corresponds in units of zoomlevel (and multiply by above delta)
+ (maximumZoomLevelChange_ / ((map_->width() + map_->height()) / 2))) +
+ // Add to starting zoom level. Sign of (dist-pinchstartdist) takes care of zoom in / out
+ pinchStartZoomLevel_;
+ }
+ qreal da = pinchLastAngle_ - angle;
+ if (da > 180)
+ da -= 360;
+ else if (da < -180)
+ da += 360;
+ qDebug() << "pinch rotaiton will be update from, to, da is: " << pinchRotation_ << da - pinchRotation_ << da;
+ pinchRotation_ -= da;
+ // TODO check how this impacts is this needed
+ QPointF pinchCenter = map_->mapFromScene(sceneCenter);
+ QDeclarativeGeoMapPinchEvent pe(pinchCenter, newZoomLevel, angle, pinchRotation_);
+ // TODO these events need to accommodate tilt.
+ pe.setStartCenter(pinchStartCenter_);
+ pe.setPreviousCenter(map_->mapFromScene(sceneLastCenter_));
+ pe.setPreviousAngle(pinchLastAngle_);
+ pe.setPreviousZoomLevel(pinchLastZoomLevel_);
+ pe.setStartPoint1(map_->mapFromScene(sceneStartPoint1_));
+ pe.setStartPoint2(map_->mapFromScene(sceneStartPoint2_));
+ pe.setPoint1(touchPoint1.pos());
+ pe.setPoint2(touchPoint2.pos());
+ pe.setPointCount(touchPoints_.count());
+
+ sceneLastCenter_ = sceneCenter;
+ pinchLastAngle_ = angle;
+ lastPoint1_ = touchPoint1.scenePos();
+ lastPoint2_ = touchPoint2.scenePos();
+ emit pinchUpdated(&pe);
+
+ if (activeGestures_ & ZoomGesture) {
+ // Take maximum and minimumzoomlevel into account
+ qreal perPinchMinimumZoomLevel = qMax(pinchStartZoomLevel_ - maximumZoomLevelChange_, minimumZoomLevel_);
+ qreal perPinchMaximumZoomLevel = qMin(pinchStartZoomLevel_ + maximumZoomLevelChange_, maximumZoomLevel_);
+ newZoomLevel = qMin(qMax(perPinchMinimumZoomLevel, newZoomLevel), perPinchMaximumZoomLevel);
+ pinchLastZoomLevel_ = newZoomLevel;
+ CameraData cam = map_->map()->cameraData();
+ cam.setZoomFactor(newZoomLevel);
+ map_->map()->setCameraData(cam);
+ }
+ if (activeGestures_ & TiltGesture) {
+ // TODO zzz
+ qreal newTilt = pinchLastTilt_;
+ if (dist) {
+ newTilt =
+ // How much further/closer the current touchpoints are (in pixels) compared to pinch start
+ ((dist - pinchStartDist_) *
+ // How much one pixel corresponds in units of tilt degrees (and multiply by above delta)
+ (maximumTiltChange_ / ((map_->width() + map_->height()) / 2))) +
+ // Add to starting tilt.
+ pinchStartTilt_;
+ }
+ qreal perPinchMinimumTilt = qMax(pinchStartTilt_ - maximumTiltChange_, minimumTilt_);
+ qreal perPinchMaximumTilt = qMin(pinchStartTilt_ + maximumTiltChange_, maximumTilt_);
+ newTilt = qMin(qMax(perPinchMinimumTilt, newTilt), perPinchMaximumTilt);
+ pinchLastTilt_ = newTilt;
+
+ qDebug() << "tilting pinchStartTilt, pinchLastTilt, resulting newTilt: " << pinchStartTilt_ << pinchLastTilt_ << newTilt;
+ CameraData cam = map_->map()->cameraData();
+ cam.setTilt(newTilt);
+ map_->map()->setCameraData(cam);
+ }
+
+ //QPointF pos = sceneCenter - sceneStartCenter_ + pinchStartPos_;
+ // TODO we probably don't want drag - leave that to flickable
+ //if (pinch()->axis() & QSGPinch::XAxis) {
+ // qreal x = pos.x();
+ // if (x < pinch()->xmin())
+ // x = pinch()->xmin();
+ // else if (x > pinch()->xmax())
+ // x = pinch()->xmax();
+ // pinch()->target()->setX(x);
+ //}
+ //if (pinch()->axis() & QSGPinch::YAxis) {
+ // qreal y = pos.y();
+ // if (y < pinch()->ymin())
+ // y = pinch()->ymin();
+ // else if (y > pinch()->ymax())
+ // y = pinch()->ymax();
+ // pinch()->target()->setY(y);
+ //}
+ if (activeGestures_ & RotationGesture) {
+ bool unlimitedRotation = (minimumRotation_ == 0.0 && maximumRotation_ == 0.0);
+ if ((pinchStartRotation_ >= minimumRotation_ && pinchStartRotation_ <= maximumRotation_) || unlimitedRotation) {
+ qreal r = pinchRotation_ * rotationSpeed_ + pinchStartRotation_;
+ if (!unlimitedRotation)
+ r = qMin(qMax(minimumRotation_,r), maximumRotation_);
+ if (r > 360.0)
+ r -= 360;
+ if (r < -360.0)
+ r += 360.0;
+ CameraData cam = map_->map()->cameraData();
+ cam.setBearing(r);
+ map_->map()->setCameraData(cam);
+ }
+ }
+ // }
+ }
+ }
+}
+
+
+#include "moc_qdeclarativegeomappincharea_p.cpp"
+
+QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomappincharea_p.h b/src/imports/location/qdeclarativegeomappincharea_p.h
new file mode 100644
index 00000000..fcd3236d
--- /dev/null
+++ b/src/imports/location/qdeclarativegeomappincharea_p.h
@@ -0,0 +1,267 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVEGEOMAPPINCHAREA_H
+#define QDECLARATIVEGEOMAPPINCHAREA_H
+
+#include <QtDeclarative/qdeclarative.h>
+#include <QTouchEvent>
+#include <QObject>
+#include <QDebug>
+
+class QGraphicsSceneMouseEvent;
+class QDeclarative3DGraphicsGeoMap;
+class QTouchEvent;
+class Map;
+
+QT_BEGIN_NAMESPACE
+
+
+class QDeclarativeGeoMapPinchEvent : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QPointF center READ center) // TODO this probably needs to reset every time
+ Q_PROPERTY(QPointF startCenter READ startCenter)
+ Q_PROPERTY(QPointF previousCenter READ previousCenter)
+ Q_PROPERTY(qreal zoomLevel READ zoomLevel)
+ Q_PROPERTY(qreal previousZoomLevel READ previousZoomLevel)
+ Q_PROPERTY(qreal angle READ angle)
+ Q_PROPERTY(qreal previousAngle READ previousAngle)
+ Q_PROPERTY(qreal rotation READ rotation)
+ Q_PROPERTY(QPointF point1 READ point1)
+ Q_PROPERTY(QPointF startPoint1 READ startPoint1)
+ Q_PROPERTY(QPointF point2 READ point2)
+ Q_PROPERTY(QPointF startPoint2 READ startPoint2)
+ Q_PROPERTY(int pointCount READ pointCount)
+ Q_PROPERTY(bool accepted READ accepted WRITE setAccepted)
+
+public:
+ QDeclarativeGeoMapPinchEvent(QPointF c, qreal s, qreal a, qreal r)
+ : QObject(), center_(c), zoomLevel_(s), angle_(a), rotation_(r)
+ , pointCount_(0), accepted_(true) {}
+ QPointF center() const { return center_; }
+ QPointF startCenter() const { return startCenter_; }
+ void setStartCenter(QPointF c) { startCenter_ = c; }
+ QPointF previousCenter() const { return lastCenter_; }
+ void setPreviousCenter(QPointF c) { lastCenter_ = c; }
+ qreal zoomLevel() const { return zoomLevel_; }
+ qreal previousZoomLevel() const { return lastZoomLevel_; }
+ void setPreviousZoomLevel(qreal s) { lastZoomLevel_ = s; }
+ qreal angle() const { return angle_; }
+ qreal previousAngle() const { return lastAngle_; }
+ void setPreviousAngle(qreal a) { lastAngle_ = a; }
+ qreal rotation() const { return rotation_; }
+ QPointF point1() const { return point1_; }
+ void setPoint1(QPointF p) { point1_ = p; }
+ QPointF startPoint1() const { return startPoint1_; }
+ void setStartPoint1(QPointF p) { startPoint1_ = p; }
+ QPointF point2() const { return point2_; }
+ void setPoint2(QPointF p) { point2_ = p; }
+ QPointF startPoint2() const { return startPoint2_; }
+ void setStartPoint2(QPointF p) { startPoint2_ = p; }
+ int pointCount() const { return pointCount_; }
+ void setPointCount(int count) { pointCount_ = count; }
+ bool accepted() const { return accepted_; }
+ void setAccepted(bool a) { accepted_ = a; }
+
+private:
+ QPointF center_;
+ QPointF startCenter_;
+ QPointF lastCenter_;
+ qreal zoomLevel_;
+ qreal lastZoomLevel_;
+ qreal angle_;
+ qreal lastAngle_;
+ qreal rotation_;
+ QPointF point1_;
+ QPointF point2_;
+ QPointF startPoint1_;
+ QPointF startPoint2_;
+ int pointCount_;
+ bool accepted_;
+};
+
+class QDeclarativeGeoMapPinchArea: public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(ActiveGesture)
+ Q_FLAGS(ActiveGestures)
+
+ Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
+ Q_PROPERTY(bool active READ active NOTIFY activeChanged)
+ Q_PROPERTY(ActiveGestures activeGestures READ activeGestures WRITE setActiveGestures NOTIFY activeGesturesChanged)
+ Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged)
+ Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged)
+ Q_PROPERTY(qreal maximumZoomLevelChange READ maximumZoomLevelChange WRITE setMaximumZoomLevelChange NOTIFY maximumZoomLevelChangeChanged)
+ Q_PROPERTY(qreal minimumRotation READ minimumRotation WRITE setMinimumRotation NOTIFY minimumRotationChanged)
+ Q_PROPERTY(qreal maximumRotation READ maximumRotation WRITE setMaximumRotation NOTIFY maximumRotationChanged)
+ Q_PROPERTY(qreal rotationSpeed READ rotationSpeed WRITE setRotationSpeed NOTIFY rotationSpeedChanged)
+ Q_PROPERTY(qreal maximumTilt READ maximumTilt WRITE setMaximumTilt NOTIFY maximumTiltChanged)
+ Q_PROPERTY(qreal minimumTilt READ minimumTilt WRITE setMinimumTilt NOTIFY minimumTiltChanged)
+ Q_PROPERTY(qreal maximumTiltChange READ maximumTiltChange WRITE setMaximumTiltChange NOTIFY maximumTiltChangeChanged)
+
+public:
+ QDeclarativeGeoMapPinchArea(QDeclarative3DGraphicsGeoMap* map, QObject *parent = 0);
+ ~QDeclarativeGeoMapPinchArea();
+
+ enum ActiveGesture {
+ NoGesture = 0x0000,
+ ZoomGesture = 0x0001,
+ RotationGesture = 0x0002,
+ TiltGesture = 0x0004
+ };
+ Q_DECLARE_FLAGS(ActiveGestures, ActiveGesture);
+
+ ActiveGestures activeGestures() const;
+ void setActiveGestures(ActiveGestures activeGestures);
+
+ bool active() const;
+ void setActive(bool active);
+
+ bool enabled() const;
+ void setEnabled(bool enabled);
+
+ qreal minimumZoomLevel() const;
+ void setMinimumZoomLevel(qreal zoomLevel);
+
+ qreal maximumZoomLevel() const;
+ void setMaximumZoomLevel(qreal zoomLevel);
+
+ qreal maximumZoomLevelChange() const;
+ void setMaximumZoomLevelChange(qreal maxChange);
+
+ qreal minimumRotation() const;
+ void setMinimumRotation(qreal zoomLevel);
+
+ qreal maximumRotation() const;
+ void setMaximumRotation(qreal zoomLevel);
+
+ qreal rotationSpeed() const;
+ void setRotationSpeed(qreal speed);
+
+ qreal maximumTilt() const;
+ void setMaximumTilt(qreal tilt);
+
+ qreal minimumTilt() const;
+ void setMinimumTilt(qreal tilt);
+
+ qreal maximumTiltChange() const;
+ void setMaximumTiltChange(qreal tilt);
+
+ // TODO likely we only need touchEvent, not mouseEvents.
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void touchEvent(QTouchEvent *event);
+
+signals:
+ void activeChanged();
+ void enabledChanged();
+ void minimumZoomLevelChanged();
+ void maximumZoomLevelChanged();
+ void maximumZoomLevelChangeChanged();
+ void minimumRotationChanged();
+ void maximumRotationChanged();
+ void rotationSpeedChanged();
+ void activeGesturesChanged();
+ void minimumTiltChanged();
+ void maximumTiltChanged();
+ void maximumTiltChangeChanged();
+
+ void pinchStarted(QDeclarativeGeoMapPinchEvent* pinch);
+ void pinchUpdated(QDeclarativeGeoMapPinchEvent* pinch);
+ void pinchFinished(QDeclarativeGeoMapPinchEvent* pinch);
+
+private:
+ void updatePinch();
+
+private:
+ // pinch target (fixed for now)
+ QDeclarative3DGraphicsGeoMap* map_;
+
+ // own
+ bool enabled_;
+
+ // qsgpinch
+ bool active_;
+ qreal minimumZoomLevel_;
+ qreal maximumZoomLevel_;
+ qreal minimumRotation_;
+ qreal maximumRotation_;
+
+ // qsgpincharea
+ QList<QTouchEvent::TouchPoint> touchPoints_;
+ bool inPinch_;
+ bool pinchRejected_;
+ bool pinchActivated_;
+ //QSGPinch *pinch_;
+ QPointF sceneStartPoint1_;
+ QPointF sceneStartPoint2_;
+ QPointF lastPoint1_;
+ QPointF lastPoint2_;
+ qreal pinchStartDist_;
+ qreal pinchStartZoomLevel_;
+ qreal pinchLastZoomLevel_;
+ qreal pinchStartRotation_;
+ qreal pinchStartAngle_;
+ qreal pinchLastAngle_;
+ qreal pinchRotation_;
+ QPointF sceneStartCenter_;
+ QPointF pinchStartCenter_;
+ QPointF sceneLastCenter_;
+ QPointF pinchStartPos_;
+ int id1_;
+ qreal maximumZoomLevelChange_;
+ qreal rotationSpeed_;
+ ActiveGestures activeGestures_;
+ qreal minimumTilt_;
+ qreal maximumTilt_;
+ qreal maximumTiltChange_;
+
+ qreal pinchLastTilt_;
+ qreal pinchStartTilt_;
+};
+
+QT_END_NAMESPACE
+QML_DECLARE_TYPE(QDeclarativeGeoMapPinchArea);
+
+#endif
diff --git a/src/imports/location/qdeclarativegeomappixmapobject.cpp b/src/imports/location/qdeclarativegeomappixmapobject.cpp
deleted file mode 100644
index f0e87465..00000000
--- a/src/imports/location/qdeclarativegeomappixmapobject.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomappixmapobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QBrush>
-#include <QUrl>
-#include <QFile>
-#include <QIODevice>
-#include <QImage>
-#include <QImageReader>
-
-#include <QtDeclarative/qdeclarativeengine.h>
-#include <QtDeclarative/qdeclarativecontext.h>
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapImage
-
- \brief The MapImage element displays an image on a map.
- \inherits QGeoMapPixmapObject
-
- \ingroup qml-location-maps
-
- The image loaded from \l source will be drawn \l offset.x and
- \l offset.y pixels away from the on-screen position of \l coordinate.
-
- If \l source does not point to an image or \l coordinate is
- invalid nothing will be displayed.
-
- The status of the image loading can be monitored via \l status.
-
- The MapImage element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapPixmapObject::QDeclarativeGeoMapPixmapObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent),
- pixmap_(0),
- reply_(0),
- status_(QDeclarativeGeoMapPixmapObject::Null)
-{
- pixmap_ = new QGeoMapPixmapObject();
- setMapObject(pixmap_);
-
- connect(pixmap_,
- SIGNAL(offsetChanged(QPoint)),
- this,
- SIGNAL(offsetChanged(QPoint)));
-}
-
-QDeclarativeGeoMapPixmapObject::~QDeclarativeGeoMapPixmapObject()
-{
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_)
- map_->removeMapObject(this);
- delete pixmap_;
-}
-
-/*!
- \qmlproperty Coordinate MapImage::coordinate
-
- This property holds the coordinate at which to anchor the image.
-*/
-
-void QDeclarativeGeoMapPixmapObject::setCoordinate(QDeclarativeCoordinate *coordinate)
-{
- if (!coordinate || coordinate == coordinate_)
- return;
- coordinate_ = coordinate;
-
- connect(coordinate_,
- SIGNAL(latitudeChanged(double)),
- this,
- SLOT(coordinateLatitudeChanged(double)));
- connect(coordinate_,
- SIGNAL(longitudeChanged(double)),
- this,
- SLOT(coordinateLongitudeChanged(double)));
- connect(coordinate_,
- SIGNAL(altitudeChanged(double)),
- this,
- SLOT(coordinateAltitudeChanged(double)));
-
- pixmap_->setCoordinate(coordinate->coordinate());
- emit coordinateChanged(coordinate_);
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapPixmapObject::coordinate()
-{
- return coordinate_;
-}
-
-void QDeclarativeGeoMapPixmapObject::coordinateLatitudeChanged(double /*latitude*/)
-{
- pixmap_->setCoordinate(coordinate_->coordinate());
-}
-
-void QDeclarativeGeoMapPixmapObject::coordinateLongitudeChanged(double /*longitude*/)
-{
- pixmap_->setCoordinate(coordinate_->coordinate());
-}
-
-void QDeclarativeGeoMapPixmapObject::coordinateAltitudeChanged(double /*altitude*/)
-{
- pixmap_->setCoordinate(coordinate_->coordinate());
-}
-
-/*!
- \qmlproperty int MapImage::offset.x
- \qmlproperty int MapImage::offset.y
-
- These properties hold the offset from the on-screen position of
- \l coordinate at which the image should be displayed.
-
- They both default to 0.
-*/
-
-QPoint QDeclarativeGeoMapPixmapObject::offset() const
-{
- return pixmap_->offset();
-}
-
-void QDeclarativeGeoMapPixmapObject::setOffset(const QPoint &offset)
-{
- pixmap_->setOffset(offset);
-}
-
-/*!
- \qmlproperty url MapImage::source
-
- This property holds the URL describing the location of the image to
- display.
-
- The URL can be absolute or relative to where the QML file
- was loaded from, and can be a local file, a file embedded within
- a Qt Resource bundle, or a file retrieved from the network.
-*/
-
-void QDeclarativeGeoMapPixmapObject::setSource(const QUrl &source)
-{
- if (source_ == source)
- return;
-
- source_ = source;
-
- load();
-
- emit sourceChanged(source);
-}
-
-QUrl QDeclarativeGeoMapPixmapObject::source() const
-{
- return source_;
-}
-
-/*!
- \qmlproperty enumeration MapImage::status
-
- This property holds the status of image loading. It can be one of:
- \list
- \o MapImage.Null - no image has been set
- \o MapImage.Ready - the image has been loaded
- \o MapImage.Loading - the image is currently being loaded
- \o MapImage.Error - an error occurred while loading the image
- \endlist
-*/
-
-QDeclarativeGeoMapPixmapObject::Status QDeclarativeGeoMapPixmapObject::status() const
-{
- return status_;
-}
-
-
-void QDeclarativeGeoMapPixmapObject::setStatus(const QDeclarativeGeoMapPixmapObject::Status status)
-{
- if (status_ == status)
- return;
-
- status_ = status;
-
- emit statusChanged(status_);
-}
-
-void QDeclarativeGeoMapPixmapObject::load()
-{
- // need to deal with absolute / relative local / remote files
-
- QUrl url = QDeclarativeEngine::contextForObject(this)->resolvedUrl(source_);
-
- QString path;
-
- if (url.scheme().compare(QLatin1String("qrc"), Qt::CaseInsensitive) == 0) {
- if (url.authority().isEmpty())
- path = QLatin1Char(':') + url.path();
- } else if (url.scheme().compare(QLatin1String("file"), Qt::CaseInsensitive) == 0) {
- path = url.toLocalFile();
- }
-
- if (!path.isEmpty()) {
- QFile f(path);
- if (f.open(QIODevice::ReadOnly)) {
- QImage image;
- QImageReader imageReader(&f);
- if (imageReader.read(&image)) {
- pixmap_->setPixmap(QPixmap::fromImage(image));
- setStatus(QDeclarativeGeoMapPixmapObject::Ready);
- } else {
- pixmap_->setPixmap(QPixmap());
- setStatus(QDeclarativeGeoMapPixmapObject::Error);
- //qWarning() << "image read fail";
- }
- } else {
- pixmap_->setPixmap(QPixmap());
- setStatus(QDeclarativeGeoMapPixmapObject::Error);
- //qWarning() << "file open fail";
- }
- } else {
- if (reply_) {
- reply_->abort();
- reply_->deleteLater();
- reply_ = 0;
- }
-
- QDeclarativeEngine *engine = QDeclarativeEngine::contextForObject(this)->engine();
- if (engine) {
- QNetworkAccessManager *nam = engine->networkAccessManager();
- reply_ = nam->get(QNetworkRequest(url));
-
- if (reply_->isFinished()) {
- if (reply_->error() == QNetworkReply::NoError) {
- finished();
- } else {
- error(reply_->error());
- }
- delete reply_;
- reply_ = 0;
- return;
- }
-
- setStatus(QDeclarativeGeoMapPixmapObject::Loading);
-
- connect(reply_,
- SIGNAL(finished()),
- this,
- SLOT(finished()));
- connect(reply_,
- SIGNAL(error(QNetworkReply::NetworkError)),
- this,
- SLOT(error(QNetworkReply::NetworkError)));
-
- } else {
- pixmap_->setPixmap(QPixmap());
- setStatus(QDeclarativeGeoMapPixmapObject::Error);
- //qWarning() << "null engine fail";
- }
- }
-}
-
-void QDeclarativeGeoMapPixmapObject::finished()
-{
- if (reply_->error() != QNetworkReply::NoError) {
- reply_->deleteLater();
- reply_ = 0;
- return;
- }
-
- QImage image;
- QImageReader imageReader(reply_);
- if (imageReader.read(&image)) {
- pixmap_->setPixmap(QPixmap::fromImage(image));
- setStatus(QDeclarativeGeoMapPixmapObject::Ready);
- } else {
- pixmap_->setPixmap(QPixmap());
- setStatus(QDeclarativeGeoMapPixmapObject::Error);
- //qWarning() << "image read fail";
- }
-
- reply_->deleteLater();
- reply_ = 0;
-}
-
-void QDeclarativeGeoMapPixmapObject::error(QNetworkReply::NetworkError error)
-{
- Q_UNUSED(error)
- reply_->deleteLater();
- reply_ = 0;
-
- pixmap_->setPixmap(QPixmap());
- setStatus(QDeclarativeGeoMapPixmapObject::Error);
- //qWarning() << "network error fail";
-}
-
-/*!
- \qmlproperty int MapImage::z
-
- This property holds the z-value of the image.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapImage::visible
-
- This property holds a boolean corresponding to whether or not the
- image is visible.
-*/
-
-#include "moc_qdeclarativegeomappixmapobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomappixmapobject_p.h b/src/imports/location/qdeclarativegeomappixmapobject_p.h
deleted file mode 100644
index 82f9a7e4..00000000
--- a/src/imports/location/qdeclarativegeomappixmapobject_p.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPPIXMAPOBJECT_H
-#define QDECLARATIVEGEOMAPPIXMAPOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qgeomappixmapobject.h"
-
-#include <QColor>
-#include <QUrl>
-#include <QNetworkReply>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapPixmapObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
- Q_ENUMS(Status)
-
- Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
- Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
- Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-
-public:
- enum Status {
- Null,
- Ready,
- Loading,
- Error
- };
-
- QDeclarativeGeoMapPixmapObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapPixmapObject();
-
- QDeclarativeCoordinate* coordinate();
- void setCoordinate(QDeclarativeCoordinate *coordinate);
-
- QUrl source() const;
- void setSource(const QUrl &source);
-
- QPoint offset() const;
- void setOffset(const QPoint &offset);
-
- Status status() const;
-
-Q_SIGNALS:
- void coordinateChanged(const QDeclarativeCoordinate *coordinate);
- void sourceChanged(const QUrl &source);
- void offsetChanged(const QPoint &offset);
- void statusChanged(QDeclarativeGeoMapPixmapObject::Status status);
-
-private Q_SLOTS:
- void coordinateLatitudeChanged(double latitude);
- void coordinateLongitudeChanged(double longitude);
- void coordinateAltitudeChanged(double altitude);
- void finished();
- void error(QNetworkReply::NetworkError error);
-
-private:
- void setStatus(const QDeclarativeGeoMapPixmapObject::Status status);
- void load();
-
- QPointer<QGeoMapPixmapObject> pixmap_;
- QDeclarativeCoordinate *coordinate_;
- QUrl source_;
- QNetworkReply *reply_;
- Status status_;
-
- Q_DISABLE_COPY(QDeclarativeGeoMapPixmapObject)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPixmapObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomappolygonobject.cpp b/src/imports/location/qdeclarativegeomappolygonobject.cpp
deleted file mode 100644
index d0789c01..00000000
--- a/src/imports/location/qdeclarativegeomappolygonobject.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomappolygonobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QColor>
-#include <QBrush>
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapPolygon
-
- \brief The MapPolygon element displays a polygon on a map.
- \inherits QGeoMapPolygonObject
-
- \ingroup qml-location-maps
-
- The polygon is specified in terms of an ordered list of
- coordinates. Any invalid coordinates in the list will be ignored.
-
- If the list contains less than 3 valid coordinates the polygon
- will not be displayed.
-
- Simplistic example to illustrate, this element could be defined in Map body:
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic MapPolygon
-
- The MapPolygon element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapPolygonObject::QDeclarativeGeoMapPolygonObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent), polygon_(0), componentCompleted_(false)
-{
- polygon_ = new QGeoMapPolygonObject();
- setMapObject(polygon_);
-
- connect(&border_,
- SIGNAL(colorChanged(QColor)),
- this,
- SLOT(borderColorChanged(QColor)));
- connect(&border_,
- SIGNAL(widthChanged(int)),
- this,
- SLOT(borderWidthChanged(int)));
-}
-
-QDeclarativeGeoMapPolygonObject::~QDeclarativeGeoMapPolygonObject()
-{
- // QML engine deletes coordinates, no need to delete them here.
- path_.clear();
-
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_)
- map_->removeMapObject(this);
- delete polygon_;
-}
-
-/*!
- \qmlproperty list<Coordinate> MapPolygon::path
- \default
-
- This property holds the ordered list of coordinates which
- define the polygon.
-*/
-
-QDeclarativeListProperty<QDeclarativeCoordinate> QDeclarativeGeoMapPolygonObject::declarativePath()
-{
- return QDeclarativeListProperty<QDeclarativeCoordinate>(this,
- 0,
- path_append,
- path_count,
- path_at,
- path_clear);
-}
-
-void QDeclarativeGeoMapPolygonObject::path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate)
-{
- QDeclarativeGeoMapPolygonObject* poly = static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object);
- poly->path_.append(coordinate);
- QList<QGeoCoordinate> p = poly->polygon_->path();
- p.append(coordinate->coordinate());
- poly->polygon_->setPath(p);
- poly->pathPropertyChanged();
-}
-
-int QDeclarativeGeoMapPolygonObject::path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop)
-{
- return static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object)->path_.count();
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapPolygonObject::path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index)
-{
- return static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object)->path_.at(index);
-}
-
-void QDeclarativeGeoMapPolygonObject::path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop)
-{
- QDeclarativeGeoMapPolygonObject* poly = static_cast<QDeclarativeGeoMapPolygonObject*>(prop->object);
- QList<QDeclarativeCoordinate*> p = poly->path_;
- qDeleteAll(p);
- p.clear();
- poly->polygon_->setPath(QList<QGeoCoordinate>());
- poly->pathPropertyChanged();
-}
-
-void QDeclarativeGeoMapPolygonObject::pathPropertyChanged()
-{
- if (componentCompleted_)
- emit pathChanged();
-}
-
-void QDeclarativeGeoMapPolygonObject::componentComplete()
-{
- // Setup member coordinates
- QObjectList kids = children();
- QList<QGeoCoordinate> path = polygon_->path();
- for (int i = 0; i < kids.size(); ++i) {
- QDeclarativeCoordinate *coordinate = qobject_cast<QDeclarativeCoordinate*>(kids.at(i));
- if (coordinate) {
- path_.append(coordinate);
- path.append(coordinate->coordinate());
- } else {
- qmlInfo(this) << tr("Member is not a Coordinate");
- }
- }
- polygon_->setPath(path);
- componentCompleted_ = true;
- QDeclarativeGeoMapObject::componentComplete();
-}
-
-/*!
- \qmlproperty color MapPolygon::color
-
- This property holds the color used to fill the circle.
-
- The default value corresponds to a transparent color.
-*/
-
-void QDeclarativeGeoMapPolygonObject::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- QBrush m_brush(color);
- polygon_->setBrush(m_brush);
- emit colorChanged(color_);
-}
-
-QColor QDeclarativeGeoMapPolygonObject::color() const
-{
- return color_;
-}
-
-/*!
- \qmlproperty int MapPolygon::border.width
- \qmlproperty color MapPolygon::border.color
-
- These properties hold the width and color used to draw the border of the circle.
-
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-
-QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapPolygonObject::border()
-{
- return &border_;
-}
-
-void QDeclarativeGeoMapPolygonObject::borderColorChanged(const QColor &color)
-{
- QPen p = polygon_->pen();
- p.setColor(color);
- polygon_->setPen(p);
-}
-
-void QDeclarativeGeoMapPolygonObject::borderWidthChanged(int width)
-{
- QPen p = polygon_->pen();
- p.setWidth(width);
- if (width == 0)
- p.setStyle(Qt::NoPen);
- else
- p.setStyle(Qt::SolidLine);
- polygon_->setPen(p);
-}
-
-/*!
- \qmlmethod MapPolygon::addCoordinate(Coordinate)
-
- Adds coordinate to the path. The resulting path is derived
- from values at the time of assignment, meaning that later changes
- in values are not reflected in the path.
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Adding to polygon
-
- \sa removeCoordinate
-
-*/
-
-void QDeclarativeGeoMapPolygonObject::addCoordinate(QDeclarativeCoordinate* coordinate)
-{
- Q_ASSERT(path_.count() == polygon_->path().count());
- path_.append(coordinate);
- QList<QGeoCoordinate> p = polygon_->path();
- p.append(coordinate->coordinate());
- polygon_->setPath(p);
- emit pathChanged();
-}
-
-/*!
- \qmlmethod MapPolygon::removeCoordinate(Coordinate)
-
- Remove coordinate from the path. Removed Coordinate is not deleted.
- If there are multiple instances of the same coordinate, the one added
- last is removed.
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Removing from polygon
-
- If more finetuned control is needed, one can also
- iterate and/or use the inherent index property of the path list.
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Iterating and removing polyline
-
- \sa addCoordinate
-
-*/
-
-void QDeclarativeGeoMapPolygonObject::removeCoordinate(QDeclarativeCoordinate* coordinate)
-{
- Q_ASSERT(path_.count() == polygon_->path().count());
- int index = path_.lastIndexOf(coordinate);
- if (index == -1) {
- qmlInfo(this) << tr("Cannot remove nonexistent coordinate.");
- return;
- }
- QList<QGeoCoordinate> path = polygon_->path();
- if (path.count() < index + 1) {
- qmlInfo(this) << tr("Cannot remove the coordinate, it does not exist.");
- return;
- }
- path.removeAt(index);
- path_.removeAt(index);
- polygon_->setPath(path);
- emit pathChanged();
-}
-
-/*!
- \qmlmethod MapPolygon::clearCoordinates()
-
- Clears all coordinates.
-
- \sa removeCoordinate addCoordinate
-
-*/
-
-Q_INVOKABLE void QDeclarativeGeoMapPolygonObject::clearCoordinates()
-{
- Q_ASSERT(path_.count() == polygon_->path().count());
- if (polygon_->path().isEmpty() && path_.isEmpty())
- return;
- QList<QGeoCoordinate> temp;
- polygon_->setPath(temp);
- path_.clear();
- emit pathChanged();
-}
-
-/*!
- \qmlproperty int MapPolygon::z
-
- This property holds the z-value of the polygon.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapPolygon::visible
-
- This property holds a boolean corresponding to whether or not the
- polygon is visible.
-*/
-
-#include "moc_qdeclarativegeomappolygonobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomappolygonobject_p.h b/src/imports/location/qdeclarativegeomappolygonobject_p.h
deleted file mode 100644
index d7e26206..00000000
--- a/src/imports/location/qdeclarativegeomappolygonobject_p.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPPOLYGONOBJECT_H
-#define QDECLARATIVEGEOMAPPOLYGONOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qgeomappolygonobject.h"
-
-#include <QDeclarativeListProperty>
-
-class QColor;
-class QBrush;
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapPolygonObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeListProperty<QDeclarativeCoordinate> path READ declarativePath NOTIFY pathChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT)
-
-public:
- QDeclarativeGeoMapPolygonObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapPolygonObject();
-
- QDeclarativeListProperty<QDeclarativeCoordinate> declarativePath();
-
- Q_INVOKABLE void addCoordinate(QDeclarativeCoordinate* coordinate);
- Q_INVOKABLE void removeCoordinate(QDeclarativeCoordinate* coordinate);
- Q_INVOKABLE void clearCoordinates();
-
- QColor color() const;
- void setColor(const QColor &color);
-
- // From QDeclarativeParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- QDeclarativeGeoMapObjectBorder* border();
-
-Q_SIGNALS:
- void colorChanged(const QColor &color);
- void pathChanged();
-
-private Q_SLOTS:
- void borderColorChanged(const QColor &color);
- void borderWidthChanged(int width);
-
-private:
- static void path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate);
- static int path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop);
- static QDeclarativeCoordinate* path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index);
- static void path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop);
- void pathPropertyChanged();
-
- QPointer<QGeoMapPolygonObject> polygon_;
- QList<QDeclarativeCoordinate*> path_;
- QColor color_;
- QDeclarativeGeoMapObjectBorder border_;
- bool componentCompleted_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPolygonObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomappolylineobject.cpp b/src/imports/location/qdeclarativegeomappolylineobject.cpp
deleted file mode 100644
index c9b5a75e..00000000
--- a/src/imports/location/qdeclarativegeomappolylineobject.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomappolylineobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QColor>
-#include <QBrush>
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapPolyline
-
- \brief The MapPolyline element displays a polyline on a map.
- \inherits QGeoMapPolylineObject
-
- \ingroup qml-location-maps
-
- The polyline is specified in terms of an ordered list of
- coordinates. Any invalid coordinates in the list will be ignored.
-
- If the list contains less than 2 valid coordinates the polyline
- will not be displayed.
-
- Simplistic example to illustrate, this element could be defined in Map body:
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Basic MapPolyline
-
- The MapPolyline element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapPolylineObject::QDeclarativeGeoMapPolylineObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent), polyline_(0), componentCompleted_(false)
-{
- polyline_ = new QGeoMapPolylineObject();
- setMapObject(polyline_);
-
- connect(&border_,
- SIGNAL(colorChanged(QColor)),
- this,
- SLOT(borderColorChanged(QColor)));
- connect(&border_,
- SIGNAL(widthChanged(int)),
- this,
- SLOT(borderWidthChanged(int)));
-}
-
-QDeclarativeGeoMapPolylineObject::~QDeclarativeGeoMapPolylineObject()
-{
- // QML engine will delete the actual declarative coordinates.
- path_.clear();
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_)
- map_->removeMapObject(this);
- delete polyline_;
-}
-
-/*!
- \qmlproperty list<Coordinate> MapPolyline::path
- \default
-
- This property holds the ordered list of coordinates which
- define the polyline.
-*/
-
-QDeclarativeListProperty<QDeclarativeCoordinate> QDeclarativeGeoMapPolylineObject::declarativePath()
-{
- return QDeclarativeListProperty<QDeclarativeCoordinate>(this,
- 0,
- path_append,
- path_count,
- path_at,
- path_clear);
-}
-
-void QDeclarativeGeoMapPolylineObject::path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate)
-{
- QDeclarativeGeoMapPolylineObject* poly = static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object);
- poly->path_.append(coordinate);
- QList<QGeoCoordinate> p = poly->polyline_->path();
- p.append(coordinate->coordinate());
- poly->polyline_->setPath(p);
- poly->pathPropertyChanged();
-}
-
-int QDeclarativeGeoMapPolylineObject::path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop)
-{
- return static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object)->path_.count();
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapPolylineObject::path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index)
-{
- return static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object)->path_.at(index);
-}
-
-void QDeclarativeGeoMapPolylineObject::path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop)
-{
- QDeclarativeGeoMapPolylineObject* poly = static_cast<QDeclarativeGeoMapPolylineObject*>(prop->object);
- QList<QDeclarativeCoordinate*> p = poly->path_;
- qDeleteAll(p);
- p.clear();
- poly->polyline_->setPath(QList<QGeoCoordinate>());
- poly->pathPropertyChanged();
-}
-
-void QDeclarativeGeoMapPolylineObject::componentComplete()
-{
- // Setup member coordinates
- QObjectList kids = children();
- QList<QGeoCoordinate> path = polyline_->path();
- for (int i = 0; i < kids.size(); ++i) {
- QDeclarativeCoordinate *coordinate = qobject_cast<QDeclarativeCoordinate*>(kids.at(i));
- if (coordinate) {
- path_.append(coordinate);
- path.append(coordinate->coordinate());
- }
- }
- polyline_->setPath(path);
- componentCompleted_ = true;
- QDeclarativeGeoMapObject::componentComplete();
-}
-
-void QDeclarativeGeoMapPolylineObject::pathPropertyChanged()
-{
- if (componentCompleted_)
- emit pathChanged();
-}
-
-/*!
- \qmlproperty int MapPolyline::border.width
- \qmlproperty color MapPolyline::border.color
-
- These properties hold the width and color used to draw the border of the circle.
-
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-
-QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapPolylineObject::border()
-{
- return &border_;
-}
-
-void QDeclarativeGeoMapPolylineObject::borderColorChanged(const QColor &color)
-{
- QPen p = polyline_->pen();
- p.setColor(color);
- polyline_->setPen(p);
-}
-
-void QDeclarativeGeoMapPolylineObject::borderWidthChanged(int width)
-{
- QPen p = polyline_->pen();
- p.setWidth(width);
- if (width == 0)
- p.setStyle(Qt::NoPen);
- else
- p.setStyle(Qt::SolidLine);
- polyline_->setPen(p);
-}
-
-/*!
- \qmlmethod MapPolyline::addCoordinate(Coordinate)
-
- Adds coordinate to the path. The resulting path is derived
- from values at the time of assignment, meaning that later changes
- in values are not reflected in the path.
-
- A basic example is to draw the path where one has been:
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Wherever I may roam
-
- \sa removeCoordinate
-
-*/
-
-void QDeclarativeGeoMapPolylineObject::addCoordinate(QDeclarativeCoordinate* coordinate)
-{
- path_.append(coordinate);
- QList<QGeoCoordinate> p = polyline_->path();
- p.append(coordinate->coordinate());
- polyline_->setPath(p);
- emit pathChanged();
-}
-
-
-/*!
- \qmlmethod MapPolyline::clearCoordinates()
-
- Clears all coordinates.
-
- \sa removeCoordinate addCoordinate
-
-*/
-
-Q_INVOKABLE void QDeclarativeGeoMapPolylineObject::clearCoordinates()
-{
- Q_ASSERT(path_.count() == polyline_->path().count());
- if (polyline_->path().isEmpty() && path_.isEmpty())
- return;
- QList<QGeoCoordinate> temp;
- polyline_->setPath(temp);
- path_.clear();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod MapPolyline::removeCoordinate(Coordinate)
-
- Remove coordinate from the path. If there are multiple instances
- of the same coordinate, the one added last is removed. Removed Coordinate is not deleted.
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Removing from polyline
-
- If more finetuned control is needed, one can also
- iterate and/or use the inherent index property of the path list.
-
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml Iterating and removing polyline
-
- \sa addCoordinate
-
-*/
-
-void QDeclarativeGeoMapPolylineObject::removeCoordinate(QDeclarativeCoordinate* coordinate)
-{
- int index = path_.lastIndexOf(coordinate);
- if (index == -1) {
- qmlInfo(this) << tr("Cannot remove nonexistent coordinate.");
- return;
- }
- QList<QGeoCoordinate> path = polyline_->path();
- if (path.count() < index + 1) {
- qmlInfo(this) << tr("Cannot remove the coordinate, it does not exist.");
- return;
- }
- path.removeAt(index);
- path_.removeAt(index);
- polyline_->setPath(path);
- emit pathChanged();
-}
-
-/*!
- \qmlproperty int MapPolyline::z
-
- This property holds the z-value of the polyline.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapPolyline::visible
-
- This property holds a boolean corresponding to whether or not the
- polyline is visible.
-*/
-
-#include "moc_qdeclarativegeomappolylineobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomappolylineobject_p.h b/src/imports/location/qdeclarativegeomappolylineobject_p.h
deleted file mode 100644
index 7ab22c35..00000000
--- a/src/imports/location/qdeclarativegeomappolylineobject_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPPOLYLINEOBJECT_H
-#define QDECLARATIVEGEOMAPPOLYLINEOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qgeomappolylineobject.h"
-
-#include <QDeclarativeListProperty>
-
-class QColor;
-class QBrush;
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapPolylineObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeListProperty<QDeclarativeCoordinate> path READ declarativePath NOTIFY pathChanged)
- Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT)
-
-public:
- QDeclarativeGeoMapPolylineObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapPolylineObject();
-
- Q_INVOKABLE void addCoordinate(QDeclarativeCoordinate* coordinate);
- Q_INVOKABLE void removeCoordinate(QDeclarativeCoordinate* coordinate);
- Q_INVOKABLE void clearCoordinates();
-
- // From QDeclarativeParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- QDeclarativeListProperty<QDeclarativeCoordinate> declarativePath();
- QDeclarativeGeoMapObjectBorder* border();
-
-Q_SIGNALS:
- void pathChanged();
-
-private Q_SLOTS:
- void borderColorChanged(const QColor &color);
- void borderWidthChanged(int width);
-
-private:
- static void path_append(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, QDeclarativeCoordinate *coordinate);
- static int path_count(QDeclarativeListProperty<QDeclarativeCoordinate> *prop);
- static QDeclarativeCoordinate* path_at(QDeclarativeListProperty<QDeclarativeCoordinate> *prop, int index);
- static void path_clear(QDeclarativeListProperty<QDeclarativeCoordinate> *prop);
- void pathPropertyChanged();
-
- QPointer<QGeoMapPolylineObject> polyline_;
- QList<QDeclarativeCoordinate*> path_;
- QDeclarativeGeoMapObjectBorder border_;
- bool componentCompleted_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapPolylineObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomaprectangleobject.cpp b/src/imports/location/qdeclarativegeomaprectangleobject.cpp
deleted file mode 100644
index fbcf486c..00000000
--- a/src/imports/location/qdeclarativegeomaprectangleobject.cpp
+++ /dev/null
@@ -1,287 +0,0 @@
-
-
-
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomaprectangleobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QColor>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapRectangle
-
- \brief The MapRectangle element displays a rectangle on a map.
- \inherits QGeoMapRectangleObject
-
- \ingroup qml-location-maps
-
- The rectangle is specified in terms of the top left and bottom
- right coordinates.
-
- If \l topLeft and \l bottomRight are not specified and valid the
- rectangle will not be displayed.
-
- An example of one big yellow rectangle:
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml MapRectangle
-
- The MapRectangle element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapRectangleObject::QDeclarativeGeoMapRectangleObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent), rectangle_(0), topLeft_(0), bottomRight_(0)
-{
- rectangle_ = new QGeoMapRectangleObject();
- setMapObject(rectangle_);
-
- connect(&border_,
- SIGNAL(colorChanged(QColor)),
- this,
- SLOT(borderColorChanged(QColor)));
- connect(&border_,
- SIGNAL(widthChanged(int)),
- this,
- SLOT(borderWidthChanged(int)));
-}
-
-QDeclarativeGeoMapRectangleObject::~QDeclarativeGeoMapRectangleObject()
-{
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_)
- map_->removeMapObject(this);
- delete rectangle_;
-}
-
-/*!
- \qmlproperty Coordinate MapRectangle::topLeft
-
- This property holds the coordinate corresponding to the top left
- corner of the rectangle.
-
- The default value is an invalid coordinate.
-*/
-
-void QDeclarativeGeoMapRectangleObject::setTopLeft(QDeclarativeCoordinate *topLeft)
-{
- if (!topLeft || topLeft == topLeft_)
- return;
-
- topLeft_ = topLeft;
-
- connect(topLeft_,
- SIGNAL(latitudeChanged(double)),
- this,
- SLOT(topLeftLatitudeChanged(double)));
- connect(topLeft_,
- SIGNAL(longitudeChanged(double)),
- this,
- SLOT(topLeftLongitudeChanged(double)));
- connect(topLeft_,
- SIGNAL(altitudeChanged(double)),
- this,
- SLOT(topLeftAltitudeChanged(double)));
-
- rectangle_->setTopLeft(topLeft->coordinate());
- emit topLeftChanged(topLeft_);
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapRectangleObject::topLeft()
-{
- return topLeft_;
-}
-
-void QDeclarativeGeoMapRectangleObject::topLeftLatitudeChanged(double /*latitude*/)
-{
- rectangle_->setTopLeft(topLeft_->coordinate());
-}
-
-void QDeclarativeGeoMapRectangleObject::topLeftLongitudeChanged(double /*longitude*/)
-{
- rectangle_->setTopLeft(topLeft_->coordinate());
-}
-
-void QDeclarativeGeoMapRectangleObject::topLeftAltitudeChanged(double /*altitude*/)
-{
- rectangle_->setTopLeft(topLeft_->coordinate());
-}
-
-/*!
- \qmlproperty Coordinate MapRectangle::bottomRight
-
- This property holds the coordinate corresponding to the bottom right
- corner of the rectangle.
-
- The default value is an invalid coordinate.
-*/
-
-void QDeclarativeGeoMapRectangleObject::setBottomRight(QDeclarativeCoordinate *bottomRight)
-{
- if (!bottomRight || bottomRight == bottomRight_)
- return;
-
- bottomRight_ = bottomRight;
- connect(bottomRight_,
- SIGNAL(latitudeChanged(double)),
- this,
- SLOT(bottomRightLatitudeChanged(double)));
- connect(bottomRight_,
- SIGNAL(longitudeChanged(double)),
- this,
- SLOT(bottomRightLongitudeChanged(double)));
- connect(bottomRight_,
- SIGNAL(altitudeChanged(double)),
- this,
- SLOT(bottomRightAltitudeChanged(double)));
-
- rectangle_->setBottomRight(bottomRight->coordinate());
-
- emit bottomRightChanged(bottomRight_);
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapRectangleObject::bottomRight()
-{
- return bottomRight_;
-}
-
-void QDeclarativeGeoMapRectangleObject::bottomRightLatitudeChanged(double /*latitude*/)
-{
- rectangle_->setBottomRight(bottomRight_->coordinate());
-}
-
-void QDeclarativeGeoMapRectangleObject::bottomRightLongitudeChanged(double /*longitude*/)
-{
- rectangle_->setBottomRight(bottomRight_->coordinate());
-}
-
-void QDeclarativeGeoMapRectangleObject::bottomRightAltitudeChanged(double /*altitude*/)
-{
- rectangle_->setBottomRight(bottomRight_->coordinate());
-}
-
-/*!
- \qmlproperty color MapRectangle::color
-
- This property holds the color used to fill the circle.
-
- The default value corresponds to a transparent color.
-*/
-
-void QDeclarativeGeoMapRectangleObject::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- QBrush m_brush(color);
- rectangle_->setBrush(m_brush);
- emit colorChanged(color_);
-}
-
-QColor QDeclarativeGeoMapRectangleObject::color() const
-{
- return color_;
-}
-
-/*!
- \qmlproperty int MapRectangle::border.width
- \qmlproperty color MapRectangle::border.color
-
- These properties hold the width and color used to draw the border of the circle.
-
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-
-QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapRectangleObject::border()
-{
- return &border_;
-}
-
-void QDeclarativeGeoMapRectangleObject::borderColorChanged(const QColor &color)
-{
- QPen p = rectangle_->pen();
- p.setColor(color);
- rectangle_->setPen(p);
-}
-
-void QDeclarativeGeoMapRectangleObject::borderWidthChanged(int width)
-{
- QPen p = rectangle_->pen();
- p.setWidth(width);
- if (width == 0)
- p.setStyle(Qt::NoPen);
- else
- p.setStyle(Qt::SolidLine);
- rectangle_->setPen(p);
-}
-
-/*!
- \qmlproperty int MapRectangle::z
-
- This property holds the z-value of the rectangle.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapRectangle::visible
-
- This property holds a boolean corresponding to whether or not the
- rectangle is visible.
-*/
-
-#include "moc_qdeclarativegeomaprectangleobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomaprectangleobject_p.h b/src/imports/location/qdeclarativegeomaprectangleobject_p.h
deleted file mode 100644
index 66117a24..00000000
--- a/src/imports/location/qdeclarativegeomaprectangleobject_p.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPRECTANGLEOBJECT_H
-#define QDECLARATIVEGEOMAPRECTANGLEOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qgeomaprectangleobject.h"
-
-class QColor;
-class QBrush;
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapRectangleObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeCoordinate* topLeft READ topLeft WRITE setTopLeft NOTIFY topLeftChanged)
- Q_PROPERTY(QDeclarativeCoordinate* bottomRight READ bottomRight WRITE setBottomRight NOTIFY bottomRightChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border)
-
-public:
- QDeclarativeGeoMapRectangleObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapRectangleObject();
-
- QDeclarativeCoordinate* topLeft();
- void setTopLeft(QDeclarativeCoordinate *center);
-
- QDeclarativeCoordinate* bottomRight();
- void setBottomRight(QDeclarativeCoordinate *center);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QDeclarativeGeoMapObjectBorder* border();
-
-Q_SIGNALS:
- void topLeftChanged(const QDeclarativeCoordinate *center);
- void bottomRightChanged(const QDeclarativeCoordinate *center);
- void colorChanged(const QColor &color);
-
-private Q_SLOTS:
- void topLeftLatitudeChanged(double latitude);
- void topLeftLongitudeChanged(double longitude);
- void topLeftAltitudeChanged(double altitude);
-
- void bottomRightLatitudeChanged(double latitude);
- void bottomRightLongitudeChanged(double longitude);
- void bottomRightAltitudeChanged(double altitude);
-
- void borderColorChanged(const QColor &color);
- void borderWidthChanged(int width);
-
-private:
- QPointer<QGeoMapRectangleObject> rectangle_;
- QDeclarativeCoordinate *topLeft_;
- QDeclarativeCoordinate *bottomRight_;
- QColor color_;
- QDeclarativeGeoMapObjectBorder border_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapRectangleObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomaprouteobject.cpp b/src/imports/location/qdeclarativegeomaprouteobject.cpp
deleted file mode 100644
index d1f3e4f7..00000000
--- a/src/imports/location/qdeclarativegeomaprouteobject.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QPen>
-#include "qdeclarativegeomaprouteobject_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QDeclarativeGeoMapRouteObject::QDeclarativeGeoMapRouteObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent), route_(0)
-{
- route_ = new QGeoMapRouteObject(); // graphical object
- setMapObject(route_);
-
- connect(&border_,
- SIGNAL(colorChanged(QColor)),
- this,
- SLOT(borderColorChanged(QColor)));
- connect(&border_,
- SIGNAL(widthChanged(int)),
- this,
- SLOT(borderWidthChanged(int)));
-}
-
-QDeclarativeGeoMapRouteObject::~QDeclarativeGeoMapRouteObject()
-{
- delete route_;
-}
-
-void QDeclarativeGeoMapRouteObject::setRoute(QDeclarativeGeoRoute* route)
-{
- if (route == declarativeRoute_)
- return;
- declarativeRoute_ = route;
- if (declarativeRoute_) {
- route_->setRoute(declarativeRoute_->route_);
- } else {
- route_->setRoute(QGeoRoute());
- }
- emit routeChanged();
-}
-
-QDeclarativeGeoRoute* QDeclarativeGeoMapRouteObject::route()
-{
- return declarativeRoute_;
-}
-
-void QDeclarativeGeoMapRouteObject::setDetailLevel(quint32 detailLevel)
-{
- if (detailLevel == route_->detailLevel())
- return;
- route_->setDetailLevel(detailLevel);
- emit detailLevelChanged();
-}
-
-quint32 QDeclarativeGeoMapRouteObject::detailLevel() const
-{
- return route_->detailLevel();
-}
-
-QDeclarativeGeoMapObjectBorder* QDeclarativeGeoMapRouteObject::border()
-{
- return &border_;
-}
-
-void QDeclarativeGeoMapRouteObject::borderColorChanged(const QColor &color)
-{
- QPen p = route_->pen();
- p.setColor(color);
- route_->setPen(p);
-}
-
-void QDeclarativeGeoMapRouteObject::borderWidthChanged(int width)
-{
- QPen p = route_->pen();
- p.setWidth(width);
- if (width == 0)
- p.setStyle(Qt::NoPen);
- else
- p.setStyle(Qt::SolidLine);
- route_->setPen(p);
-}
-
-#include "moc_qdeclarativegeomaprouteobject_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomaprouteobject_p.h b/src/imports/location/qdeclarativegeomaprouteobject_p.h
deleted file mode 100644
index da2f8ebd..00000000
--- a/src/imports/location/qdeclarativegeomaprouteobject_p.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPROUTEOBJECT_H
-#define QDECLARATIVEGEOMAPROUTEOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qdeclarativegeoroute_p.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-#include "qgeomaprouteobject.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapRouteObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeGeoRoute* route READ route WRITE setRoute NOTIFY routeChanged)
- Q_PROPERTY(quint32 detailLevel READ detailLevel WRITE setDetailLevel NOTIFY detailLevelChanged)
- Q_PROPERTY(QDeclarativeGeoMapObjectBorder* border READ border CONSTANT)
-
-public:
- QDeclarativeGeoMapRouteObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapRouteObject();
-
- QDeclarativeGeoRoute* route();
- void setRoute(QDeclarativeGeoRoute* route);
-
- quint32 detailLevel() const;
- void setDetailLevel(quint32 radius);
-
- QDeclarativeGeoMapObjectBorder* border();
-
-Q_SIGNALS:
- void routeChanged();
- void detailLevelChanged();
- void colorChanged();
-
-private Q_SLOTS:
- void borderColorChanged(const QColor &color);
- void borderWidthChanged(int width);
-
-private:
- // The declarative route (datatype)
- QDeclarativeGeoRoute* declarativeRoute_;
- // Used internally as the visual map object
- QGeoMapRouteObject* route_;
- QDeclarativeGeoMapObjectBorder border_;
- QColor color_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapRouteObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomaptextobject.cpp b/src/imports/location/qdeclarativegeomaptextobject.cpp
deleted file mode 100644
index 80702091..00000000
--- a/src/imports/location/qdeclarativegeomaptextobject.cpp
+++ /dev/null
@@ -1,415 +0,0 @@
-
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativegeomaptextobject_p.h"
-#include "qdeclarativegraphicsgeomap_p.h"
-#include "qgeomapdata.h"
-
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass MapText
-
- \brief The MapText element displays text on a map.
- \inherits QGeoMapTextObject
-
- \ingroup qml-location-maps
-
- The string \l text will be drawn \l offset.x and \l offset.y pixels away from the
- on-screen position of \l coordinate.
-
- The text will be rendered with font \l font and color \l color, and will
- be aligned according to \l horizontalAlignment and \l verticalAlignment.
-
- If \l text is empty or \l coordinate is invalid nothing will be displayed.
-
- An example of text item:
- \snippet doc/src/snippets/declarative/testpolymapobjects.qml MapText
-
- The MapText element is part of the \bold{QtMobility.location 1.2} module.
-*/
-
-QDeclarativeGeoMapTextObject::QDeclarativeGeoMapTextObject(QSGItem *parent)
- : QDeclarativeGeoMapObject(parent),
- text_(0), coordinate_(0)
-{
- text_ = new QGeoMapTextObject();
- setMapObject(text_);
-
- QPen p = text_->pen();
- p.setStyle(Qt::NoPen);
- text_->setPen(p);
-
- text_->setBrush(QBrush(Qt::black));
-
- connect(text_,
- SIGNAL(textChanged(QString)),
- this,
- SIGNAL(textChanged(QString)));
- connect(text_,
- SIGNAL(fontChanged(QFont)),
- this,
- SIGNAL(fontChanged(QFont)));
- connect(text_,
- SIGNAL(offsetChanged(QPoint)),
- this,
- SIGNAL(offsetChanged(QPoint)));
-
- hAlignment_ = QDeclarativeGeoMapTextObject::AlignHCenter;
- vAlignment_ = QDeclarativeGeoMapTextObject::AlignVCenter;
-}
-
-QDeclarativeGeoMapTextObject::~QDeclarativeGeoMapTextObject()
-{
- // Memory management is bit tricky because we do not know
- // which will be deleted first, the Map or some/all of the
- // MapObjects. Hence we need to make sure that the internal
- // c++ map objects are removed from QGeoMapData in either place
- // (but not both).
- if (map_)
- map_->removeMapObject(this);
- delete text_;
-}
-
-/*!
- \qmlproperty Coordinate MapText::coordinate
-
- This property holds the coordinate at which to anchor the text.
-*/
-
-void QDeclarativeGeoMapTextObject::setCoordinate(QDeclarativeCoordinate *coordinate)
-{
- if (!coordinate || coordinate == coordinate_)
- return;
-
- coordinate_ = coordinate;
- connect(coordinate_,
- SIGNAL(latitudeChanged(double)),
- this,
- SLOT(coordinateLatitudeChanged(double)));
- connect(coordinate_,
- SIGNAL(longitudeChanged(double)),
- this,
- SLOT(coordinateLongitudeChanged(double)));
- connect(coordinate_,
- SIGNAL(altitudeChanged(double)),
- this,
- SLOT(coordinateAltitudeChanged(double)));
-
- text_->setCoordinate(coordinate->coordinate());
- emit coordinateChanged(coordinate_);
-}
-
-QDeclarativeCoordinate* QDeclarativeGeoMapTextObject::coordinate()
-{
- return coordinate_;
-}
-
-void QDeclarativeGeoMapTextObject::coordinateLatitudeChanged(double /*latitude*/)
-{
- text_->setCoordinate(coordinate_->coordinate());
-}
-
-void QDeclarativeGeoMapTextObject::coordinateLongitudeChanged(double /*longitude*/)
-{
- text_->setCoordinate(coordinate_->coordinate());
-}
-
-void QDeclarativeGeoMapTextObject::coordinateAltitudeChanged(double /*altitude*/)
-{
- text_->setCoordinate(coordinate_->coordinate());
-}
-
-/*!
- \qmlproperty string MapText::text
-
- This property holds the text to display.
-
- The default value is an empty string.
-*/
-
-QString QDeclarativeGeoMapTextObject::text() const
-{
- return text_->text();
-}
-
-void QDeclarativeGeoMapTextObject::setText(const QString &text)
-{
- text_->setText(text);
-}
-
-/*!
- \qmlproperty string MapText::font.family
-
- Sets the family name of the font.
-
- The family name is case insensitive and may optionally include a foundry name, e.g. "Helvetica [Cronyx]".
- If the family is available from more than one foundry and the foundry isn't specified, an arbitrary foundry is chosen.
- If the family isn't available a family will be set using the font matching algorithm.
-*/
-
-/*!
- \qmlproperty bool MapText::font.bold
-
- Sets whether the font weight is bold.
-*/
-
-/*!
- \qmlproperty enumeration MapText::font.weight
-
- Sets the font's weight.
-
- The weight can be one of:
- \list
- \o Font.Light
- \o Font.Normal - the default
- \o Font.DemiBold
- \o Font.Bold
- \o Font.Black
- \endlist
-
- \qml
- MapText { text: "Hello"; font.weight: Font.DemiBold }
- \endqml
-*/
-
-/*!
- \qmlproperty bool MapText::font.italic
-
- Sets whether the font has an italic style.
-*/
-
-/*!
- \qmlproperty bool MapText::font.underline
-
- Sets whether the text is underlined.
-*/
-
-/*!
- \qmlproperty bool MapText::font.strikeout
-
- Sets whether the font has a strikeout style.
-*/
-
-/*!
- \qmlproperty real MapText::font.pointSize
-
- Sets the font size in points. The point size must be greater than zero.
-*/
-
-/*!
- \qmlproperty int MapText::font.pixelSize
-
- Sets the font size in pixels.
-
- Using this function makes the font device dependent.
- Use \c pointSize to set the size of the font in a device independent manner.
-*/
-
-/*!
- \qmlproperty real MapText::font.letterSpacing
-
- Sets the letter spacing for the font.
-
- Letter spacing changes the default spacing between individual letters in the font.
- A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing.
-*/
-
-/*!
- \qmlproperty real MapText::font.wordSpacing
-
- Sets the word spacing for the font.
-
- Word spacing changes the default spacing between individual words.
- A positive value increases the word spacing by a corresponding amount of pixels,
- while a negative value decreases the inter-word spacing accordingly.
-*/
-
-/*!
- \qmlproperty enumeration MapText::font.capitalization
-
- Sets the capitalization for the text.
-
- \list
- \o Font.MixedCase - This is the normal text rendering option where no capitalization change is applied.
- \o Font.AllUppercase - This alters the text to be rendered in all uppercase type.
- \o Font.AllLowercase - This alters the text to be rendered in all lowercase type.
- \o Font.SmallCaps - This alters the text to be rendered in small-caps type.
- \o Font.Capitalize - This alters the text to be rendered with the first character of each word as an uppercase character.
- \endlist
-
- \qml
- MapText { text: "Hello"; font.capitalization: Font.AllLowercase }
- \endqml
-*/
-
-QFont QDeclarativeGeoMapTextObject::font() const
-{
- return text_->font();
-}
-
-void QDeclarativeGeoMapTextObject::setFont(const QFont &font)
-{
- text_->setFont(font);
-}
-
-/*!
- \qmlproperty int MapText::offset.x
- \qmlproperty int MapText::offset.y
-
- These properties hold the offset from the on-screen position of
- \l coordinate at which the text should be displayed.
-
- They both default to 0.
-*/
-
-QPoint QDeclarativeGeoMapTextObject::offset() const
-{
- return text_->offset();
-}
-
-void QDeclarativeGeoMapTextObject::setOffset(const QPoint &offset)
-{
- text_->setOffset(offset);
-}
-
-/*!
- \qmlproperty color MapText::color
-
- This property holds the color used to draw the text.
-
- The default value is black.
-*/
-
-void QDeclarativeGeoMapTextObject::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- QBrush m_brush(color);
- text_->setBrush(m_brush);
- emit colorChanged(color_);
-}
-
-QColor QDeclarativeGeoMapTextObject::color() const
-{
- return color_;
-}
-
-/*!
- \qmlproperty enumeration MapText::horizontalAlignment
- \qmlproperty enumeration MapText::verticalAlignment
-
- Sets the horizontal and vertical alignment of the text.
-
- The alignment is relative to the point \l offset.x and \l offset.y pixels away from
- the on-screen position of \l coordinate.
-
- The valid values for \c horizontalAlignment are \c MapText.AlignLeft,
- \c MapText.AlignRight and \c MapText.AlignHCenter. The valid values
- for \c verticalAlignment are \c MapText.AlignTop, \c MapText.AlignBottom
- and \c MapText.AlignVCenter.
-
- The default values are \c MapText.AlignHCenter and \c MapText.AlignVCenter
- respectively.
-*/
-
-QDeclarativeGeoMapTextObject::HorizontalAlignment QDeclarativeGeoMapTextObject::horizontalAlignment() const
-{
- return hAlignment_;
-}
-
-void QDeclarativeGeoMapTextObject::setHorizontalAlignment(QDeclarativeGeoMapTextObject::HorizontalAlignment alignment)
-{
- if (hAlignment_ == alignment)
- return;
-
-
- hAlignment_ = alignment;
-
- text_->setAlignment(Qt::Alignment(hAlignment_ | vAlignment_));
-
- emit horizontalAlignmentChanged(hAlignment_);
-}
-
-
-QDeclarativeGeoMapTextObject::VerticalAlignment QDeclarativeGeoMapTextObject::verticalAlignment() const
-{
- return vAlignment_;
-}
-
-void QDeclarativeGeoMapTextObject::setVerticalAlignment(QDeclarativeGeoMapTextObject::VerticalAlignment alignment)
-{
- if (vAlignment_ == alignment)
- return;
-
- vAlignment_ = alignment;
-
- text_->setAlignment(Qt::Alignment(hAlignment_ | vAlignment_));
-
- emit verticalAlignmentChanged(vAlignment_);
-}
-
-/*!
- \qmlproperty int MapText::z
-
- This property holds the z-value of the text.
-
- Map objects are drawn in z-value order, and objects with the
- same z-value will be drawn in insertion order.
-*/
-
-/*!
- \qmlproperty bool MapText::visible
-
- This property holds a boolean corresponding to whether or not the
- text is visible.
-*/
-
-#include "moc_qdeclarativegeomaptextobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeomaptextobject_p.h b/src/imports/location/qdeclarativegeomaptextobject_p.h
deleted file mode 100644
index 48a74d3f..00000000
--- a/src/imports/location/qdeclarativegeomaptextobject_p.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGEOMAPTEXTOBJECT_H
-#define QDECLARATIVEGEOMAPTEXTOBJECT_H
-
-#include "qdeclarativegeomapobject_p.h"
-#include "qdeclarativecoordinate_p.h"
-#include "qgeomaptextobject.h"
-
-#include <QColor>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapTextObject : public QDeclarativeGeoMapObject
-{
- Q_OBJECT
- Q_ENUMS(HorizontalAlignment)
- Q_ENUMS(VerticalAlignment)
-
- Q_PROPERTY(QDeclarativeCoordinate* coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged)
- Q_PROPERTY(HorizontalAlignment horizontalAlignment READ horizontalAlignment WRITE setHorizontalAlignment NOTIFY horizontalAlignmentChanged)
- Q_PROPERTY(VerticalAlignment verticalAlignment READ verticalAlignment WRITE setVerticalAlignment NOTIFY verticalAlignmentChanged)
-
-public:
- enum HorizontalAlignment {
- AlignHCenter = Qt::AlignHCenter,
- AlignLeft = Qt::AlignLeft,
- AlignRight = Qt::AlignRight
- };
-
- enum VerticalAlignment {
- AlignVCenter = Qt::AlignVCenter,
- AlignTop = Qt::AlignTop,
- AlignBottom = Qt::AlignBottom
- };
-
- QDeclarativeGeoMapTextObject(QSGItem *parent = 0);
- ~QDeclarativeGeoMapTextObject();
-
- QDeclarativeCoordinate* coordinate();
- void setCoordinate(QDeclarativeCoordinate *coordinate);
-
- QString text() const;
- void setText(const QString &text);
-
- QFont font() const;
- void setFont(const QFont &font);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QPoint offset() const;
- void setOffset(const QPoint &offset);
-
- HorizontalAlignment horizontalAlignment() const;
- void setHorizontalAlignment(HorizontalAlignment alignment);
-
- VerticalAlignment verticalAlignment() const;
- void setVerticalAlignment(VerticalAlignment alignment);
-
-Q_SIGNALS:
- void coordinateChanged(const QDeclarativeCoordinate *coordinate);
- void textChanged(const QString &text);
- void fontChanged(const QFont &font);
- void colorChanged(const QColor &color);
- void offsetChanged(const QPoint &offset);
- void horizontalAlignmentChanged(HorizontalAlignment alignment);
- void verticalAlignmentChanged(VerticalAlignment alignment);
-
-private Q_SLOTS:
- void coordinateLatitudeChanged(double latitude);
- void coordinateLongitudeChanged(double longitude);
- void coordinateAltitudeChanged(double altitude);
-
-private:
- QPointer<QGeoMapTextObject> text_;
- QDeclarativeCoordinate *coordinate_;
- QColor color_;
- HorizontalAlignment hAlignment_;
- VerticalAlignment vAlignment_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativeGeoMapTextObject));
-
-#endif
diff --git a/src/imports/location/qdeclarativegraphicsgeomap.cpp b/src/imports/location/qdeclarativegraphicsgeomap.cpp
index b91f330a..86b34909 100644
--- a/src/imports/location/qdeclarativegraphicsgeomap.cpp
+++ b/src/imports/location/qdeclarativegraphicsgeomap.cpp
@@ -44,12 +44,9 @@
#include "qdeclarativecoordinate_p.h"
#include "qdeclarativegeoserviceprovider_p.h"
-#include "qdeclarativegeomapgroupobject_p.h"
#include <qgeoserviceprovider.h>
#include <qgeomappingmanager.h>
-#include <qgeomapdata.h>
-#include <qgeomapobject.h>
#include <QGraphicsSceneMouseEvent>
#include <QDeclarativeContext>
@@ -103,11 +100,11 @@ QT_BEGIN_NAMESPACE
QDeclarativeGraphicsGeoMap::QDeclarativeGraphicsGeoMap(QSGItem *parent)
: QSGItem(parent),
plugin_(0),
- mapData_(0),
+// mapData_(0),
center_(0),
initialCoordinate(0),
- mapType_(NoMap),
- connectivityMode_(NoConnectivity),
+// mapType_(NoMap),
+// connectivityMode_(NoConnectivity),
componentCompleted_(false)
{
initialCoordinate = new QGeoCoordinate(-27.0, 153.0);
@@ -133,8 +130,8 @@ QDeclarativeGraphicsGeoMap::~QDeclarativeGraphicsGeoMap()
// otherwise qgeomapdata will delete data it doesn't own.
if (!mapViews_.isEmpty())
qDeleteAll(mapViews_);
- if (mapData_)
- delete mapData_;
+ //if (mapData_)
+ // delete mapData_;
if (initialCoordinate)
delete initialCoordinate;
}
@@ -150,6 +147,7 @@ void QDeclarativeGraphicsGeoMap::componentComplete()
void QDeclarativeGraphicsGeoMap::recursiveAddToObjectMap(QDeclarativeGeoMapObject *mapObject)
{
+#if 0
objectMap_.insert(mapObject->mapObject(), mapObject);
QDeclarativeGeoMapGroupObject *groupObject =
@@ -165,8 +163,12 @@ void QDeclarativeGraphicsGeoMap::recursiveAddToObjectMap(QDeclarativeGeoMapObjec
recursiveAddToObjectMap(subObject);
}
}
+#else
+ qDebug() << Q_FUNC_INFO << "FIXME";
+#endif
}
+#if 0
void QDeclarativeGraphicsGeoMap::recursiveRemoveFromObjectMap(QGeoMapObject *mapObject)
{
objectMap_.remove(mapObject);
@@ -177,10 +179,12 @@ void QDeclarativeGraphicsGeoMap::recursiveRemoveFromObjectMap(QGeoMapObject *map
recursiveRemoveFromObjectMap(subObject);
}
}
+#endif
void QDeclarativeGraphicsGeoMap::populateMap()
{
- if (!mapData_ || !componentCompleted_)
+// if (!mapData_ || !componentCompleted_)
+ if (!componentCompleted_)
return;
QObjectList kids = children();
for (int i = 0; i < kids.size(); ++i) {
@@ -194,8 +198,8 @@ void QDeclarativeGraphicsGeoMap::populateMap()
QDeclarativeGeoMapObject *mapObject = qobject_cast<QDeclarativeGeoMapObject*>(kids.at(i));
if (mapObject) {
mapObjects_.append(mapObject);
- recursiveAddToObjectMap(mapObject);
- mapData_->addMapObject(mapObject->mapObject());
+ //recursiveAddToObjectMap(mapObject);
+ //mapData_->addMapObject(mapObject->mapObject());
mapObject->setMap(this);
emit objectsChanged();
continue;
@@ -211,7 +215,8 @@ void QDeclarativeGraphicsGeoMap::populateMap()
void QDeclarativeGraphicsGeoMap::setupMapView(QDeclarativeGeoMapObjectView *view)
{
- view->setMapData(this);
+ qFatal("fix the next line");
+// view->setMapData(this);
view->repopulate();
}
@@ -219,9 +224,9 @@ void QDeclarativeGraphicsGeoMap::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget * /*widget*/)
{
- if (mapData_) {
- mapData_->paint(painter, option);
- }
+// if (mapData_) {
+// mapData_->paint(painter, option);
+// }
}
void QDeclarativeGraphicsGeoMap::geometryChanged(const QRectF &newGeometry,
@@ -257,54 +262,54 @@ void QDeclarativeGraphicsGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugi
qWarning() << serviceProvider->errorString();
return;
}
- mapData_ = mappingManager->createMapData();
- mapData_->init();
+ //mapData_ = mappingManager->createMapData();
+ //mapData_->init();
//mapData_->setParentItem(this);
- // setters
- mapData_->setWindowSize(size_);
- mapData_->setZoomLevel(zoomLevel_);
+// // setters
+// mapData_->setWindowSize(size_);
+// mapData_->setZoomLevel(zoomLevel_);
- if (center_)
- mapData_->setCenter(center_->coordinate());
- else
- mapData_->setCenter(*initialCoordinate);
+// if (center_)
+// mapData_->setCenter(center_->coordinate());
+// else
+// mapData_->setCenter(*initialCoordinate);
- mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_));
- mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_));
+// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType_));
+// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode_));
// Populate the map objects.
populateMap();
// setup signals
- connect(mapData_,
- SIGNAL(updateMapDisplay(QRectF)),
- this,
- SLOT(updateMapDisplay(QRectF)));
+// connect(mapData_,
+// SIGNAL(updateMapDisplay(QRectF)),
+// this,
+// SLOT(updateMapDisplay(QRectF)));
- connect(mapData_,
- SIGNAL(centerChanged(QGeoCoordinate)),
- this,
- SLOT(internalCenterChanged(QGeoCoordinate)));
+// connect(mapData_,
+// SIGNAL(centerChanged(QGeoCoordinate)),
+// this,
+// SLOT(internalCenterChanged(QGeoCoordinate)));
- connect(mapData_,
- SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)),
- this,
- SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType)));
+// connect(mapData_,
+// SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)),
+// this,
+// SLOT(internalMapTypeChanged(QGraphicsGeoMap::MapType)));
- connect(mapData_,
- SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)),
- this,
- SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)));
+// connect(mapData_,
+// SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)),
+// this,
+// SLOT(internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)));
- connect(mapData_,
- SIGNAL(windowSizeChanged(QSizeF)),
- this,
- SIGNAL(sizeChanged(QSizeF)));
+// connect(mapData_,
+// SIGNAL(windowSizeChanged(QSizeF)),
+// this,
+// SIGNAL(sizeChanged(QSizeF)));
- connect(mapData_,
- SIGNAL(zoomLevelChanged(qreal)),
- this,
- SIGNAL(zoomLevelChanged(qreal)));
+// connect(mapData_,
+// SIGNAL(zoomLevelChanged(qreal)),
+// this,
+// SIGNAL(zoomLevelChanged(qreal)));
}
void QDeclarativeGraphicsGeoMap::updateMapDisplay(const QRectF &target)
@@ -367,26 +372,26 @@ qreal QDeclarativeGraphicsGeoMap::maximumZoomLevel() const
*/
void QDeclarativeGraphicsGeoMap::setSize(const QSizeF &size)
{
- if (mapData_) {
- setWidth(size.width());
- setHeight(size.height());
- mapData_->setWindowSize(size);
- } else {
+// if (mapData_) {
+// setWidth(size.width());
+// setHeight(size.height());
+// mapData_->setWindowSize(size);
+// } else {
if (size_ == size)
return;
size_ = size;
emit sizeChanged(size_);
- }
+// }
}
QSizeF QDeclarativeGraphicsGeoMap::size() const
{
- if (mapData_)
- return mapData_->windowSize();
- else
+// if (mapData_)
+// return mapData_->windowSize();
+// else
return size_;
}
@@ -401,25 +406,25 @@ QSizeF QDeclarativeGraphicsGeoMap::size() const
*/
void QDeclarativeGraphicsGeoMap::setZoomLevel(qreal zoomLevel)
{
- if (mapData_) {
- mapData_->setZoomLevel(zoomLevel);
- } else {
+// if (mapData_) {
+// mapData_->setZoomLevel(zoomLevel);
+// } else {
if (zoomLevel_ == zoomLevel)
return;
zoomLevel_ = zoomLevel;
emit zoomLevelChanged(zoomLevel_);
- }
+// }
}
qreal QDeclarativeGraphicsGeoMap::zoomLevel() const
{
- if (mapData_) {
- return mapData_->zoomLevel();
- } else {
+// if (mapData_) {
+// return mapData_->zoomLevel();
+// } else {
return zoomLevel_;
- }
+// }
}
/*!
@@ -450,36 +455,36 @@ void QDeclarativeGraphicsGeoMap::setCenter(QDeclarativeCoordinate *center)
this,
SLOT(centerAltitudeChanged(double)));
- if (mapData_) {
- mapData_->setCenter(center_->coordinate());
- }
+// if (mapData_) {
+// mapData_->setCenter(center_->coordinate());
+// }
}
emit declarativeCenterChanged(center_);
}
QDeclarativeCoordinate* QDeclarativeGraphicsGeoMap::center()
{
- if (mapData_ && center_)
- center_->setCoordinate(mapData_->center());
+// if (mapData_ && center_)
+// center_->setCoordinate(mapData_->center());
return center_;
}
void QDeclarativeGraphicsGeoMap::centerLatitudeChanged(double /*latitude*/)
{
- if (mapData_ && center_)
- mapData_->setCenter(center_->coordinate());
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
}
void QDeclarativeGraphicsGeoMap::centerLongitudeChanged(double /*longitude*/)
{
- if (mapData_ && center_)
- mapData_->setCenter(center_->coordinate());
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
}
void QDeclarativeGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/)
{
- if (mapData_ && center_)
- mapData_->setCenter(center_->coordinate());
+// if (mapData_ && center_)
+// mapData_->setCenter(center_->coordinate());
}
/*!
@@ -497,28 +502,28 @@ void QDeclarativeGraphicsGeoMap::centerAltitudeChanged(double /*altitude*/)
The default value is determined by the plugin.
*/
-void QDeclarativeGraphicsGeoMap::setMapType(QDeclarativeGraphicsGeoMap::MapType mapType)
-{
- if (mapData_) {
- mapData_->setMapType(QGraphicsGeoMap::MapType(mapType));
- } else {
- if (mapType_ == mapType)
- return;
-
- mapType_ = mapType;
-
- emit mapTypeChanged(mapType_);
- }
-}
-
-QDeclarativeGraphicsGeoMap::MapType QDeclarativeGraphicsGeoMap::mapType() const
-{
- if (mapData_) {
- return QDeclarativeGraphicsGeoMap::MapType(mapData_->mapType());
- } else {
- return mapType_;
- }
-}
+//void QDeclarativeGraphicsGeoMap::setMapType(QDeclarativeGraphicsGeoMap::MapType mapType)
+//{
+// if (mapData_) {
+// mapData_->setMapType(QGraphicsGeoMap::MapType(mapType));
+// } else {
+// if (mapType_ == mapType)
+// return;
+
+// mapType_ = mapType;
+
+// emit mapTypeChanged(mapType_);
+// }
+//}
+
+//QDeclarativeGraphicsGeoMap::MapType QDeclarativeGraphicsGeoMap::mapType() const
+//{
+// if (mapData_) {
+// return QDeclarativeGraphicsGeoMap::MapType(mapData_->mapType());
+// } else {
+// return mapType_;
+// }
+//}
// TODO document this (list has objects managed by add/removeMapObject and
// those declared as part of the class.
@@ -569,27 +574,27 @@ void QDeclarativeGraphicsGeoMap::objects_clear(QDeclarativeListProperty<QDeclara
The default value is determined by the plugin.
*/
-void QDeclarativeGraphicsGeoMap::setConnectivityMode(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode)
-{
- if (mapData_) {
- mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode));
- } else {
- if (connectivityMode_ == connectivityMode)
- return;
-
- connectivityMode_ = connectivityMode;
-
- emit connectivityModeChanged(connectivityMode_);
- }
-}
-
-QDeclarativeGraphicsGeoMap::ConnectivityMode QDeclarativeGraphicsGeoMap::connectivityMode() const
-{
- if (mapData_)
- return QDeclarativeGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode());
- else
- return connectivityMode_;
-}
+//void QDeclarativeGraphicsGeoMap::setConnectivityMode(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode)
+//{
+// if (mapData_) {
+// mapData_->setConnectivityMode(QGraphicsGeoMap::ConnectivityMode(connectivityMode));
+// } else {
+// if (connectivityMode_ == connectivityMode)
+// return;
+
+// connectivityMode_ = connectivityMode;
+
+// emit connectivityModeChanged(connectivityMode_);
+// }
+//}
+
+//QDeclarativeGraphicsGeoMap::ConnectivityMode QDeclarativeGraphicsGeoMap::connectivityMode() const
+//{
+// if (mapData_)
+// return QDeclarativeGraphicsGeoMap::ConnectivityMode(mapData_->connectivityMode());
+// else
+// return connectivityMode_;
+//}
/*!
\qmlproperty list<QGeoMapObject> Map::objects
@@ -624,8 +629,8 @@ QDeclarativeCoordinate* QDeclarativeGraphicsGeoMap::toCoordinate(QPointF screenP
{
QGeoCoordinate coordinate;
- if (mapData_)
- coordinate = mapData_->screenPositionToCoordinate(screenPosition);
+// if (mapData_)
+// coordinate = mapData_->screenPositionToCoordinate(screenPosition);
return new QDeclarativeCoordinate(coordinate,
const_cast<QDeclarativeGraphicsGeoMap *>(this));
@@ -644,94 +649,94 @@ QPointF QDeclarativeGraphicsGeoMap::toScreenPosition(QDeclarativeCoordinate* coo
{
QPointF point;
- if (mapData_)
- point = mapData_->coordinateToScreenPosition(coordinate->coordinate());
+// if (mapData_)
+// point = mapData_->coordinateToScreenPosition(coordinate->coordinate());
return point;
}
void QDeclarativeGraphicsGeoMap::pan(int dx, int dy)
{
- if (mapData_) {
- mapData_->pan(dx, dy);
- update();
- } else {
+// if (mapData_) {
+// mapData_->pan(dx, dy);
+// update();
+// } else {
qmlInfo(this) << tr("Map plugin is not set, cannot pan.");
- }
+// }
}
QDeclarativeGeoMapMouseEvent* QDeclarativeGraphicsGeoMap::createMapMouseEvent(QGraphicsSceneMouseEvent *event)
{
- if (!event || !mapData_)
+// if (!event || !mapData_)
return 0;
- QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this);
+// QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this);
- mouseEvent->setButton(event->button());
- mouseEvent->setModifiers(event->modifiers());
+// mouseEvent->setButton(event->button());
+// mouseEvent->setModifiers(event->modifiers());
- QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos());
- mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this));
- mouseEvent->setX(event->pos().x());
- mouseEvent->setY(event->pos().y());
+// QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos());
+// mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this));
+// mouseEvent->setX(event->pos().x());
+// mouseEvent->setY(event->pos().y());
- return mouseEvent;
+// return mouseEvent;
}
QDeclarativeGeoMapMouseEvent* QDeclarativeGraphicsGeoMap::createMapMouseEvent(QGraphicsSceneHoverEvent *event)
{
- if (!event || !mapData_)
+// if (!event || !mapData_)
return 0;
- QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this);
+// QDeclarativeGeoMapMouseEvent *mouseEvent = new QDeclarativeGeoMapMouseEvent(this);
- mouseEvent->setModifiers(event->modifiers());
+// mouseEvent->setModifiers(event->modifiers());
- QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos());
- mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this));
- mouseEvent->setX(event->pos().x());
- mouseEvent->setY(event->pos().y());
+// QGeoCoordinate coordinate = mapData_->screenPositionToCoordinate(event->pos());
+// mouseEvent->setCoordinate(new QDeclarativeCoordinate(coordinate, this));
+// mouseEvent->setX(event->pos().x());
+// mouseEvent->setY(event->pos().y());
- return mouseEvent;
+// return mouseEvent;
}
void QDeclarativeGraphicsGeoMap::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- if (!mapData_) {
- qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
- return;
- }
-
- // First deliver the mouse event to possible map objects (they will accept it if
- // they have their own mouse area). If no accepting objects, check if the map
- // object itself has any mouse areas. This way the map objects have higher priority
- // in mouse event handling.
- QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
-
- QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
-
- for (int i = objects.size() - 1; i >= 0; --i) {
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
- if (mapObject) {
- mapObject->pressEvent(mouseEvent);
- if (mouseEvent->accepted()) {
- event->setAccepted(true);
- delete mouseEvent;
- return;
- }
- }
- }
-
- for (int i = 0; i < mouseAreas_.size(); ++i) {
- mouseAreas_.at(i)->pressEvent(mouseEvent);
- if (mouseEvent->accepted()) {
- event->setAccepted(true);
- delete mouseEvent;
- return;
- }
- }
-
- delete mouseEvent;
+// if (!mapData_) {
+// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
+// return;
+// }
+
+// // First deliver the mouse event to possible map objects (they will accept it if
+// // they have their own mouse area). If no accepting objects, check if the map
+// // object itself has any mouse areas. This way the map objects have higher priority
+// // in mouse event handling.
+// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
+
+// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
+
+// for (int i = objects.size() - 1; i >= 0; --i) {
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
+// if (mapObject) {
+// mapObject->pressEvent(mouseEvent);
+// if (mouseEvent->accepted()) {
+// event->setAccepted(true);
+// delete mouseEvent;
+// return;
+// }
+// }
+// }
+
+// for (int i = 0; i < mouseAreas_.size(); ++i) {
+// mouseAreas_.at(i)->pressEvent(mouseEvent);
+// if (mouseEvent->accepted()) {
+// event->setAccepted(true);
+// delete mouseEvent;
+// return;
+// }
+// }
+
+// delete mouseEvent;
//QSGItem::mousePressEvent(event);
QSGItem::mousePressEvent(event);
@@ -757,44 +762,44 @@ void QDeclarativeGraphicsGeoMap::mouseReleaseEvent(QGraphicsSceneMouseEvent *eve
void QDeclarativeGraphicsGeoMap::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
- if (!mapData_) {
- qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
- return;
- }
+// if (!mapData_) {
+// qmlInfo(this) << tr("Map plugin is not set, mouse event cannot be processed.");
+// return;
+// }
- activeMouseArea_ = 0;
+// activeMouseArea_ = 0;
- QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
+// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
- QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
+// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
- for (int i = objects.size() - 1; i >= 0; --i) {
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
- if (mapObject) {
- mapObject->doubleClickEvent(mouseEvent);
- if (mouseEvent->accepted()) {
- event->setAccepted(true);
- delete mouseEvent;
- return;
- }
- }
- }
+// for (int i = objects.size() - 1; i >= 0; --i) {
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
+// if (mapObject) {
+// mapObject->doubleClickEvent(mouseEvent);
+// if (mouseEvent->accepted()) {
+// event->setAccepted(true);
+// delete mouseEvent;
+// return;
+// }
+// }
+// }
- for (int i = 0; i < mouseAreas_.size(); ++i) {
- mouseAreas_.at(i)->doubleClickEvent(mouseEvent);
- if (mouseEvent->accepted()) {
- event->setAccepted(true);
- delete mouseEvent;
- return;
- }
- }
+// for (int i = 0; i < mouseAreas_.size(); ++i) {
+// mouseAreas_.at(i)->doubleClickEvent(mouseEvent);
+// if (mouseEvent->accepted()) {
+// event->setAccepted(true);
+// delete mouseEvent;
+// return;
+// }
+// }
- bool accepted = (mouseEvent->accepted());
+// bool accepted = (mouseEvent->accepted());
- delete mouseEvent;
+// delete mouseEvent;
- if (accepted)
- return;
+// if (accepted)
+// return;
QSGItem::mouseDoubleClickEvent(event);
}
@@ -824,66 +829,66 @@ void QDeclarativeGraphicsGeoMap::hoverEnterEvent(QGraphicsSceneHoverEvent *event
void QDeclarativeGraphicsGeoMap::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
{
- if (!mapData_)
- return;
+// if (!mapData_)
+// return;
- QList<QGeoMapObject*> objectsThen = mapData_->mapObjectsAtScreenPosition(event->lastPos());
- QList<QGeoMapObject*> objectsNow = mapData_->mapObjectsAtScreenPosition(event->pos());
+// QList<QGeoMapObject*> objectsThen = mapData_->mapObjectsAtScreenPosition(event->lastPos());
+// QList<QGeoMapObject*> objectsNow = mapData_->mapObjectsAtScreenPosition(event->pos());
- QSet<QGeoMapObject*> enter = objectsNow.toSet();
- enter -= objectsThen.toSet();
+// QSet<QGeoMapObject*> enter = objectsNow.toSet();
+// enter -= objectsThen.toSet();
- for (int i = 0; i < objectsNow.size(); ++i) {
- if (!enter.contains(objectsNow.at(i)))
- continue;
+// for (int i = 0; i < objectsNow.size(); ++i) {
+// if (!enter.contains(objectsNow.at(i)))
+// continue;
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsNow.at(i), 0);
- if (mapObject)
- mapObject->enterEvent();
- }
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsNow.at(i), 0);
+// if (mapObject)
+// mapObject->enterEvent();
+// }
- QSet<QGeoMapObject*> exit = objectsThen.toSet();
- exit -= objectsNow.toSet();
+// QSet<QGeoMapObject*> exit = objectsThen.toSet();
+// exit -= objectsNow.toSet();
- for (int i = 0; i < objectsThen.size(); ++i) {
- if (!exit.contains(objectsThen.at(i)))
- continue;
+// for (int i = 0; i < objectsThen.size(); ++i) {
+// if (!exit.contains(objectsThen.at(i)))
+// continue;
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsThen.at(i), 0);
- if (mapObject)
- mapObject->exitEvent();
- }
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsThen.at(i), 0);
+// if (mapObject)
+// mapObject->exitEvent();
+// }
- QSet<QGeoMapObject*> move = objectsNow.toSet();
- move += objectsThen.toSet();
+// QSet<QGeoMapObject*> move = objectsNow.toSet();
+// move += objectsThen.toSet();
- QList<QGeoMapObject*> objects = mapData_->mapObjectsInViewport();
+// QList<QGeoMapObject*> objects = mapData_->mapObjectsInViewport();
- QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
+// QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event);
- for (int i = 0; i < objects.size(); ++i) {
- if (!move.contains(objects.at(i)))
- continue;
+// for (int i = 0; i < objects.size(); ++i) {
+// if (!move.contains(objects.at(i)))
+// continue;
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
- if (mapObject)
- mapObject->moveEvent(mouseEvent);
- }
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
+// if (mapObject)
+// mapObject->moveEvent(mouseEvent);
+// }
- /*
- QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
+// /*
+// QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos());
- for (int i = objects.size() - 1; i >= 0; --i) {
- QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
- if (mapObject)
- mapObject->moveEvent(mouseEvent);
- }
- */
+// for (int i = objects.size() - 1; i >= 0; --i) {
+// QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0);
+// if (mapObject)
+// mapObject->moveEvent(mouseEvent);
+// }
+// */
- for (int i = 0; i < mouseAreas_.size(); ++i)
- mouseAreas_.at(i)->moveEvent(mouseEvent);
+// for (int i = 0; i < mouseAreas_.size(); ++i)
+// mouseAreas_.at(i)->moveEvent(mouseEvent);
- delete mouseEvent;
+// delete mouseEvent;
}
void QDeclarativeGraphicsGeoMap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
@@ -897,15 +902,15 @@ void QDeclarativeGraphicsGeoMap::internalCenterChanged(const QGeoCoordinate &coo
emit declarativeCenterChanged(new QDeclarativeCoordinate(coordinate, this));
}
-void QDeclarativeGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType)
-{
- emit mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType(mapType));
-}
+//void QDeclarativeGraphicsGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType)
+//{
+// emit mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType(mapType));
+//}
-void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-{
- emit connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode(connectivityMode));
-}
+//void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode)
+//{
+// emit connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode(connectivityMode));
+//}
/*!
\qmlmethod Map::addMapObject(MapObject)
@@ -924,15 +929,15 @@ void QDeclarativeGraphicsGeoMap::internalConnectivityModeChanged(QGraphicsGeoMap
void QDeclarativeGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object)
{
- if (!mapData_)
- qmlInfo(this) << tr("Map plugin is not set, map object cannot be added.");
- if (!mapData_ || !object || objectMap_.contains(object->mapObject()))
- return;
- mapObjects_.append(object);
- recursiveAddToObjectMap(object);
- mapData_->addMapObject(object->mapObject());
- object->setMap(this);
- emit objectsChanged();
+// if (!mapData_)
+// qmlInfo(this) << tr("Map plugin is not set, map object cannot be added.");
+// if (!mapData_ || !object || objectMap_.contains(object->mapObject()))
+// return;
+// mapObjects_.append(object);
+// recursiveAddToObjectMap(object);
+// mapData_->addMapObject(object->mapObject());
+// object->setMap(this);
+// emit objectsChanged();
}
/*!
@@ -952,33 +957,40 @@ void QDeclarativeGraphicsGeoMap::addMapObject(QDeclarativeGeoMapObject *object)
void QDeclarativeGraphicsGeoMap::removeMapObject(QDeclarativeGeoMapObject *object)
{
- if (!mapData_)
- qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed.");
- if (!mapData_ || !object || !objectMap_.contains(object->mapObject()))
- return;
- recursiveRemoveFromObjectMap(object->mapObject());
- mapObjects_.removeOne(object);
- mapData_->removeMapObject(object->mapObject());
- object->setMap(0);
- emit objectsChanged();
+// if (!mapData_)
+// qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed.");
+// if (!mapData_ || !object || !objectMap_.contains(object->mapObject()))
+// return;
+// objectMap_.remove(object->mapObject());
+// mapObjects_.removeOne(object);
+// mapData_->removeMapObject(object->mapObject());
+// if (!mapData_)
+// qmlInfo(this) << tr("Map plugin is not set, map object cannot be removed.");
+// if (!mapData_ || !object || !objectMap_.contains(object->mapObject()))
+// return;
+// recursiveRemoveFromObjectMap(object->mapObject());
+// mapObjects_.removeOne(object);
+// mapData_->removeMapObject(object->mapObject());
+// object->setMap(0);
+// emit objectsChanged();
}
// TODO document. Removes all map items that are added with addMapObject,
// leaves objects from model intact.
void QDeclarativeGraphicsGeoMap::clearMapObjects()
{
- if (!mapData_ || mapObjects_.isEmpty())
- return;
- QList<QDeclarativeGeoMapObject*> mapObjects = mapObjects_;
- for (int i = 0; i < mapObjects.count(); ++ i) {
- if (!objectMap_.contains(mapObjects.at(i)->mapObject()))
- continue;
- recursiveRemoveFromObjectMap(mapObjects.at(i)->mapObject());
- mapObjects_.removeOne(mapObjects.at(i));
- mapData_->removeMapObject(mapObjects.at(i)->mapObject());
- mapObjects.at(i)->setMap(0);
- }
- emit objectsChanged();
+ //if (!mapData_ || mapObjects_.isEmpty())
+ // return;
+ //QList<QDeclarativeGeoMapObject*> mapObjects = mapObjects_;
+ //for (int i = 0; i < mapObjects.count(); ++ i) {
+ // if (!objectMap_.contains(mapObjects.at(i)->mapObject()))
+ // continue;
+ // recursiveRemoveFromObjectMap(mapObjects.at(i)->mapObject());
+ // mapObjects_.removeOne(mapObjects.at(i));
+ // mapData_->removeMapObject(mapObjects.at(i)->mapObject());
+ // mapObjects.at(i)->setMap(0);
+ //}
+ //emit objectsChanged();
}
void QDeclarativeGraphicsGeoMap::setActiveMouseArea(QDeclarativeGeoMapMouseArea *area)
@@ -994,7 +1006,8 @@ QDeclarativeGeoMapMouseArea* QDeclarativeGraphicsGeoMap::activeMouseArea() const
// This function is strictly for testing purposes
int QDeclarativeGraphicsGeoMap::testGetDeclarativeMapObjectCount()
{
- return objectMap_.values().count();
+// return objectMap_.values().count();
+ return 0;
}
#include "moc_qdeclarativegraphicsgeomap_p.cpp"
diff --git a/src/imports/location/qdeclarativegraphicsgeomap_p.h b/src/imports/location/qdeclarativegraphicsgeomap_p.h
index c2da9ce8..0fca4deb 100644
--- a/src/imports/location/qdeclarativegraphicsgeomap_p.h
+++ b/src/imports/location/qdeclarativegraphicsgeomap_p.h
@@ -42,7 +42,7 @@
#ifndef QDECLARATIVEGRAPHICSGEOMAP_H
#define QDECLARATIVEGRAPHICSGEOMAP_H
-#include <qgraphicsgeomap.h>
+//#include <qgraphicsgeomap.h>
#include <QPointer>
#include <QtDeclarative/qsgitem.h>
#include <QtDeclarative/QDeclarativeListProperty>
@@ -52,11 +52,11 @@
QT_BEGIN_NAMESPACE
class QGeoCoordinate;
-class QGeoMapObject;
-class QGeoMapData;
+class QGeoMappingManager;
class QGeoServiceProvider;
class QDeclarativeCoordinate;
class QDeclarativeGeoServiceProvider;
+class QStyleOptionGraphicsItem;
// !!! IMPORTANT !!!
//
@@ -80,27 +80,27 @@ class QDeclarativeGraphicsGeoMap : public QSGItem
Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT)
Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT)
Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
- Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
+// Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
Q_PROPERTY(QDeclarativeCoordinate* center READ center WRITE setCenter NOTIFY declarativeCenterChanged)
Q_PROPERTY(QDeclarativeListProperty<QDeclarativeGeoMapObject> objects READ objects NOTIFY objectsChanged)
- Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged)
+ //Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged)
Q_INTERFACES(QDeclarativeParserStatus)
public:
- enum MapType {
- NoMap = QGraphicsGeoMap::NoMap,
- StreetMap = QGraphicsGeoMap::StreetMap,
- SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay,
- SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight,
- TerrainMap = QGraphicsGeoMap::TerrainMap
- };
-
- enum ConnectivityMode {
- NoConnectivity = QGraphicsGeoMap::NoConnectivity,
- OfflineMode = QGraphicsGeoMap::OfflineMode,
- OnlineMode = QGraphicsGeoMap::OnlineMode,
- HybridMode = QGraphicsGeoMap::HybridMode
- };
+// enum MapType {
+// NoMap = QGraphicsGeoMap::NoMap,
+// StreetMap = QGraphicsGeoMap::StreetMap,
+// SatelliteMapDay = QGraphicsGeoMap::SatelliteMapDay,
+// SatelliteMapNight = QGraphicsGeoMap::SatelliteMapNight,
+// TerrainMap = QGraphicsGeoMap::TerrainMap
+// };
+
+// enum ConnectivityMode {
+// NoConnectivity = QGraphicsGeoMap::NoConnectivity,
+// OfflineMode = QGraphicsGeoMap::OfflineMode,
+// OnlineMode = QGraphicsGeoMap::OnlineMode,
+// HybridMode = QGraphicsGeoMap::HybridMode
+// };
public:
QDeclarativeGraphicsGeoMap(QSGItem *parent = 0);
@@ -133,11 +133,11 @@ public:
void setCenter(QDeclarativeCoordinate *center);
QDeclarativeCoordinate* center();
- void setMapType(MapType mapType);
- MapType mapType() const;
+// void setMapType(MapType mapType);
+// MapType mapType() const;
- void setConnectivityMode(ConnectivityMode connectivityMode);
- ConnectivityMode connectivityMode() const;
+// void setConnectivityMode(ConnectivityMode connectivityMode);
+// ConnectivityMode connectivityMode() const;
QDeclarativeListProperty<QDeclarativeGeoMapObject> objects();
static void objects_append(QDeclarativeListProperty<QDeclarativeGeoMapObject>* prop, QDeclarativeGeoMapObject* object);
@@ -160,7 +160,7 @@ public:
void setActiveMouseArea(QDeclarativeGeoMapMouseArea *area);
QDeclarativeGeoMapMouseArea* activeMouseArea() const;
- QGeoMapData* mapData() {return mapData_;}
+ //QGeoMapData* mapData() {return mapData_;}
public Q_SLOTS:
void pan(int dx, int dy);
@@ -182,14 +182,14 @@ Q_SIGNALS:
void sizeChanged(const QSizeF &size);
void zoomLevelChanged(qreal zoomLevel);
void declarativeCenterChanged(const QDeclarativeCoordinate *coordinate);
- void mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType mapType);
- void connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode);
+// void mapTypeChanged(QDeclarativeGraphicsGeoMap::MapType mapType);
+// void connectivityModeChanged(QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode);
private Q_SLOTS:
void updateMapDisplay(const QRectF& target);
void internalCenterChanged(const QGeoCoordinate &coordinate);
- void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType);
- void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode);
+// void internalMapTypeChanged(QGraphicsGeoMap::MapType mapType);
+// void internalConnectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode);
void centerLatitudeChanged(double latitude);
void centerLongitudeChanged(double longitude);
void centerAltitudeChanged(double altitude);
@@ -198,25 +198,25 @@ private:
void setupMapView(QDeclarativeGeoMapObjectView *view);
void populateMap();
void recursiveAddToObjectMap(QDeclarativeGeoMapObject *mapObject);
- void recursiveRemoveFromObjectMap(QGeoMapObject *mapObject);
+ //void recursiveRemoveFromObjectMap(QGeoMapObject *mapObject);
QDeclarativeGeoMapObject* createItem(int modelIndex);
QDeclarativeGeoMapMouseEvent* createMapMouseEvent(QGraphicsSceneMouseEvent *event);
QDeclarativeGeoMapMouseEvent* createMapMouseEvent(QGraphicsSceneHoverEvent *event);
QDeclarativeGeoServiceProvider* plugin_;
- QGeoMapData* mapData_;
+// QGeoMapData* mapData_;
qreal zoomLevel_;
QPointer<QDeclarativeCoordinate> center_;
QGeoCoordinate* initialCoordinate;
- QDeclarativeGraphicsGeoMap::MapType mapType_;
- QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode_;
+// QDeclarativeGraphicsGeoMap::MapType mapType_;
+// QDeclarativeGraphicsGeoMap::ConnectivityMode connectivityMode_;
QSizeF size_;
QList<QDeclarativeGeoMapObject*> mapObjects_;
- QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_;
+// QHash<QGeoMapObject*, QDeclarativeGeoMapObject*> objectMap_;
bool componentCompleted_;
QList<QDeclarativeGeoMapObjectView*> mapViews_;
diff --git a/src/imports/location/qdeclarativeposition_p.h b/src/imports/location/qdeclarativeposition_p.h
index 565742ae..635c9096 100644
--- a/src/imports/location/qdeclarativeposition_p.h
+++ b/src/imports/location/qdeclarativeposition_p.h
@@ -46,7 +46,7 @@
#include <QDateTime>
#include <qgeopositioninfosource.h>
#include <qgeopositioninfo.h>
-#include <qdeclarativecoordinate_p.h>
+#include "qdeclarativecoordinate_p.h"
#include <QtDeclarative/qdeclarative.h>
// Define this to get qDebug messages
diff --git a/src/imports/qimportbase.pri b/src/imports/qimportbase.pri
deleted file mode 100644
index 405af24e..00000000
--- a/src/imports/qimportbase.pri
+++ /dev/null
@@ -1,38 +0,0 @@
-load(qt_module)
-
-symbian:load(qt_plugin)
-TEMPLATE = lib
-CONFIG += qt plugin
-
-win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release
-
-isEmpty(TARGETPATH) {
- error("qimportbase.pri: You must provide a TARGETPATH!")
-}
-isEmpty(TARGET) {
- error("qimportbase.pri: You must provide a TARGET!")
-}
-
-QMLDIRFILE = $${_PRO_FILE_PWD_}/qmldir
-copy2build.input = QMLDIRFILE
-copy2build.output = $$QT.declarative.imports/$$TARGETPATH/qmldir
-!contains(TEMPLATE_PREFIX, vc):copy2build.variable_out = PRE_TARGETDEPS
-copy2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
-copy2build.name = COPY ${QMAKE_FILE_IN}
-copy2build.CONFIG += no_link
-# `clean' should leave the build in a runnable state, which means it shouldn't delete qmldir
-copy2build.CONFIG += no_clean
-QMAKE_EXTRA_COMPILERS += copy2build
-
-TARGET = $$qtLibraryTarget($$TARGET)
-contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
-
-load(qt_targets)
-
-wince*:LIBS += $$QMAKE_LIBS_GUI
-
-symbian: {
- TARGET.EPOCALLOWDLLDATA=1
- TARGET.CAPABILITY = All -Tcb
- load(armcc_warnings)
-}
diff --git a/src/location/location.pro b/src/location/location.pro
index 8e6d89ba..63fd8ce0 100644
--- a/src/location/location.pro
+++ b/src/location/location.pro
@@ -17,15 +17,9 @@ load(qt_module_config)
HEADERS += qtlocationversion.h
include(maps/maps.pri)
+include(mapsgl/mapsgl.pri)
include(places/places.pri)
-contains(proj_enabled, yes) {
- LIBS += -lproj
-} else {
- include($$PWD/../3rdparty/proj.pri)
- LIBS += -L$$OUT_PWD/../3rdparty -lproj
-}
-
PUBLIC_HEADERS += \
qgeoaddress.h \
qgeoareamonitor.h \
@@ -51,7 +45,6 @@ PRIVATE_HEADERS += \
qlocationutils_p.h \
qnmeapositioninfosource_p.h \
qgeoareamonitor_polling_p.h \
- projwrapper_p.h \
qgeocoordinate_p.h
symbian {
@@ -145,7 +138,6 @@ SOURCES += \
qlocationutils.cpp \
qnmeapositioninfosource.cpp \
qgeoareamonitor_polling.cpp \
- projwrapper_p.cpp \
qgeopositioninfosourcefactory.cpp
symbian {
diff --git a/src/location/maps/maps.pri b/src/location/maps/maps.pri
index ffe5bd8e..01603279 100644
--- a/src/location/maps/maps.pri
+++ b/src/location/maps/maps.pri
@@ -1,28 +1,13 @@
INCLUDEPATH += maps
-include(tiled/tiled.pri)
-
PUBLIC_HEADERS += \
maps/qgeocodingmanager.h \
maps/qgeocodingmanagerengine.h \
maps/qgeocodereply.h \
maps/qgeomaneuver.h \
- maps/qgeomapcircleobject.h \
- maps/qgeomapcustomobject.h \
- maps/qgeomapdata.h \
- maps/qgeomapgroupobject.h \
- maps/qgeomapobject.h \
- maps/qgeomapobjectinfo.h \
- maps/qgeomapoverlay.h \
maps/qgeomappingmanager.h \
maps/qgeomappingmanagerengine.h \
- maps/qgeomappixmapobject.h \
- maps/qgeomappolygonobject.h \
- maps/qgeomappolylineobject.h \
- maps/qgeomaprectangleobject.h \
- maps/qgeomaprouteobject.h \
- maps/qgeomaptextobject.h \
maps/qgeoroute.h \
maps/qgeoroutereply.h \
maps/qgeorouterequest.h \
@@ -31,28 +16,15 @@ PUBLIC_HEADERS += \
maps/qgeoroutingmanagerengine.h \
maps/qgeoserviceprovider.h \
maps/qgeoserviceproviderfactory.h \
- maps/qgraphicsgeomap.h
+ maps/qgeotiledmapreply.h
PRIVATE_HEADERS += \
maps/qgeocodingmanager_p.h \
maps/qgeocodingmanagerengine_p.h \
maps/qgeocodereply_p.h \
maps/qgeomaneuver_p.h \
- maps/qgeomapcircleobject_p.h \
- maps/qgeomapcustomobject_p.h \
- maps/qgeomapdata_p.h \
- maps/qgeomapgroupobject_p.h \
- maps/qgeomapobject_p.h \
- maps/qgeomapobjectinfo_p.h \
- maps/qgeomapoverlay_p.h \
maps/qgeomappingmanager_p.h \
maps/qgeomappingmanagerengine_p.h \
- maps/qgeomappixmapobject_p.h \
- maps/qgeomappolygonobject_p.h \
- maps/qgeomappolylineobject_p.h \
- maps/qgeomaprectangleobject_p.h \
- maps/qgeomaprouteobject_p.h \
- maps/qgeomaptextobject_p.h \
maps/qgeoroute_p.h \
maps/qgeoroutereply_p.h \
maps/qgeorouterequest_p.h \
@@ -60,28 +32,15 @@ PRIVATE_HEADERS += \
maps/qgeoroutingmanager_p.h \
maps/qgeoroutingmanagerengine_p.h \
maps/qgeoserviceprovider_p.h \
- maps/qgraphicsgeomap_p.h \
- maps/qgeomapobjectengine_p.h
+ maps/qgeotiledmapreply_p.h
SOURCES += \
maps/qgeocodingmanager.cpp \
maps/qgeocodingmanagerengine.cpp \
maps/qgeocodereply.cpp \
maps/qgeomaneuver.cpp \
- maps/qgeomapcircleobject.cpp \
- maps/qgeomapcustomobject.cpp \
- maps/qgeomapdata.cpp \
- maps/qgeomapgroupobject.cpp \
- maps/qgeomapobject.cpp \
- maps/qgeomapoverlay.cpp \
maps/qgeomappingmanager.cpp \
maps/qgeomappingmanagerengine.cpp \
- maps/qgeomappixmapobject.cpp \
- maps/qgeomappolygonobject.cpp \
- maps/qgeomappolylineobject.cpp \
- maps/qgeomaprectangleobject.cpp \
- maps/qgeomaprouteobject.cpp \
- maps/qgeomaptextobject.cpp \
maps/qgeoroute.cpp \
maps/qgeoroutereply.cpp \
maps/qgeorouterequest.cpp \
@@ -90,6 +49,4 @@ SOURCES += \
maps/qgeoroutingmanagerengine.cpp \
maps/qgeoserviceprovider.cpp \
maps/qgeoserviceproviderfactory.cpp \
- maps/qgraphicsgeomap.cpp \
- maps/qgeomapobjectinfo.cpp \
- maps/qgeomapobjectengine_p.cpp
+ maps/qgeotiledmapreply.cpp
diff --git a/src/location/maps/qgeomapcircleobject.cpp b/src/location/maps/qgeomapcircleobject.cpp
deleted file mode 100644
index 9da75184..00000000
--- a/src/location/maps/qgeomapcircleobject.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapcircleobject.h"
-#include "qgeomapcircleobject_p.h"
-
-#include "qgeocoordinate.h"
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapCircleObject
- \brief The QGeoMapCircleObject class is a QGeoMapObject used to draw the region
- within a given distance of a coordinate.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The circle is specified by either a valid QGeoBoundingCircle instance or a
- valid QGeoCoordinate instance and a qreal with value greater than 0.0,
- which represent the center of the circle and the radius of the circle in
- metres respectively.
-
- The circle may appear as an ellipse on maps which use the Mercator
- projection. This is done so that the circle accurately covers all points at
- a distance of the radius or less from the center.
-*/
-
-/*!
- Constructs a new circle object.
-*/
-QGeoMapCircleObject::QGeoMapCircleObject()
- : d_ptr(new QGeoMapCircleObjectPrivate())
-{
- setUnits(QGeoMapObject::MeterUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Constructs a new circle object based on the circle \a circle.
-*/
-QGeoMapCircleObject::QGeoMapCircleObject(const QGeoBoundingCircle &circle)
- : d_ptr(new QGeoMapCircleObjectPrivate())
-{
- d_ptr->circle = circle;
- setUnits(QGeoMapObject::MeterUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Constructs a new circle object with a center at coordinate \a center
- and a radius in meters of \a radius.
-*/
-QGeoMapCircleObject::QGeoMapCircleObject(const QGeoCoordinate &center, qreal radius)
- : d_ptr(new QGeoMapCircleObjectPrivate())
-{
- d_ptr->circle = QGeoBoundingCircle(center, radius);
- setUnits(QGeoMapObject::MeterUnit);
- setTransformType(QGeoMapObject::ExactTransform);
- setOrigin(center);
-}
-
-/*!
- Destroys this circle object.
-*/
-QGeoMapCircleObject::~QGeoMapCircleObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapCircleObject::type() const
-{
- return QGeoMapObject::CircleType;
-}
-
-/*!
- \property QGeoMapCircleObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw an outline around the circle. The circle is
- filled using the QGeoMapCircleObject::brush property.
-
- The pen will be treated as a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-void QGeoMapCircleObject::setPen(const QPen &pen)
-{
- QPen newPen = pen;
- newPen.setCosmetic(true);
- const QPen oldPen = d_ptr->pen;
-
- if (oldPen == newPen)
- return;
-
- d_ptr->pen = newPen;
- emit penChanged(newPen);
-}
-
-QPen QGeoMapCircleObject::pen() const
-{
- return d_ptr->pen;
-}
-
-/*!
- \reimp
- */
-bool QGeoMapCircleObject::contains(const QGeoCoordinate &coordinate) const
-{
- return d_ptr->circle.contains(coordinate);
-}
-
-/*!
- \property QGeoMapCircleObject::brush
- \brief This property holds the brush that will be used to draw this object.
-
- The brush is used to fill in circle.
-
- The outline around the perimeter of the circle is drawn using the
- QGeoMapCircleObject::pen property.
-*/
-void QGeoMapCircleObject::setBrush(const QBrush &brush)
-{
- if (d_ptr->brush != brush) {
- d_ptr->brush = brush;
- emit brushChanged(brush);
- }
-}
-
-QBrush QGeoMapCircleObject::brush() const
-{
- return d_ptr->brush;
-}
-
-/*!
- \property QGeoMapCircleObject::pointCount
- \brief This property holds the number of vertices used in an approximate polygon.
-
- \since 1.2
-
- For a circle using ExactTransform, this property describes the number
- of sides that should be used to generate a polygonal approximation which
- is then transformed vertex-by-vertex into screen coordinates.
-*/
-quint32 QGeoMapCircleObject::pointCount() const
-{
- return d_ptr->pointCount;
-}
-
-void QGeoMapCircleObject::setPointCount(quint32 pointCount)
-{
- d_ptr->pointCount = pointCount;
-}
-
-/*!
- Returns a QGeoBoundingCircle instance which corresponds to the circle that
- will be drawn by this object.
-
- This is equivalent to
- \code
- QGeoMapCircleObject *object;
- // setup object
- QGeoBoundingCircle(object->center(), object->radius());
- \endcode
-*/
-QGeoBoundingCircle QGeoMapCircleObject::circle() const
-{
- return d_ptr->circle;
-}
-
-/*!
- Sets the circle that will be drawn by this object to \a circle.
-
- This is equivalent to
- \code
- QGeoMapCircleObject *object;
- // setup object
- object->setCenter(circle.center());
- object->setRadius(circle.radius());
- \endcode
-*/
-void QGeoMapCircleObject::setCircle(const QGeoBoundingCircle &circle)
-{
- QGeoBoundingCircle oldCircle = d_ptr->circle;
-
- if (oldCircle == circle)
- return;
-
- d_ptr->circle = circle;
- setOrigin(circle.center());
- setRadius(circle.radius());
-
- if (oldCircle.center() != d_ptr->circle.center())
- emit centerChanged(d_ptr->circle.center());
-
- if (oldCircle.radius() != d_ptr->circle.radius())
- emit radiusChanged(d_ptr->circle.radius());
-}
-
-/*!
- \property QGeoMapCircleObject::center
-
- \brief This property holds the coordinate of the center of the circle to be
- drawn by this circle object.
-
- The default value of this property is an invalid coordinate. While the
- value of this property is invalid the circle object will not be displayed.
-*/
-void QGeoMapCircleObject::setCenter(const QGeoCoordinate &center)
-{
- if (d_ptr->circle.center() != center) {
- d_ptr->circle.setCenter(center);
- setOrigin(center);
- emit centerChanged(center);
- }
-}
-
-QGeoCoordinate QGeoMapCircleObject::center() const
-{
- return d_ptr->circle.center();
-}
-
-/*!
- \property QGeoMapCircleObject::radius
- \brief This property holds the radius in metres of the circle that will be
- drawn by this circle object.
-
- The default value of this property is -1.0. While the value of this
- property is not greater than 0 the circle object will not be displayed.
-*/
-void QGeoMapCircleObject::setRadius(qreal radius)
-{
- if (d_ptr->circle.radius() != radius) {
- d_ptr->circle.setRadius(radius);
- emit radiusChanged(radius);
- }
-}
-
-qreal QGeoMapCircleObject::radius() const
-{
- return d_ptr->circle.radius();
-}
-
-/*!
-\fn void QGeoMapCircleObject::centerChanged(const QGeoCoordinate &center)
-
- This signal is emitted when the center of the circle object has
- changed.
-
- The new value is \a center.
-*/
-
-/*!
-\fn void QGeoMapCircleObject::radiusChanged(qreal radius)
-
- This signal is emitted when the radius of the circle object has
- changed.
-
- The new value is \a radius.
-*/
-
-/*!
-\fn void QGeoMapCircleObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw the edge of
- the circle object has changed.
-
- The new value is \a pen.
-*/
-
-/*!
-\fn void QGeoMapCircleObject::brushChanged(const QBrush &brush)
-
- This signal is emitted when the brush used to fill the inside of
- the circle object has changed.
-
- The new value is \a brush.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapCircleObjectPrivate::QGeoMapCircleObjectPrivate() :
- pointCount(120)
-{
- pen.setCosmetic(true);
-}
-
-QGeoMapCircleObjectPrivate::~QGeoMapCircleObjectPrivate()
-{
-}
-
-#include "moc_qgeomapcircleobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomapcircleobject.h b/src/location/maps/qgeomapcircleobject.h
deleted file mode 100644
index 5fce4504..00000000
--- a/src/location/maps/qgeomapcircleobject.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPCIRCLEOBJECT_H
-#define QGEOMAPCIRCLEOBJECT_H
-
-#include "qgeomapobject.h"
-
-#include <QMetaType>
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoCoordinate;
-class QGeoBoundingCircle;
-class QGeoMapCircleObjectPrivate;
-
-class Q_LOCATION_EXPORT QGeoMapCircleObject : public QGeoMapObject
-{
- Q_OBJECT
-public:
- Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged)
- Q_PROPERTY(quint32 pointCount READ pointCount WRITE setPointCount)
-
- QGeoMapCircleObject();
- QGeoMapCircleObject(const QGeoBoundingCircle &circle);
- QGeoMapCircleObject(const QGeoCoordinate &center, qreal radius);
- ~QGeoMapCircleObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoBoundingCircle circle() const;
- void setCircle(const QGeoBoundingCircle &circle);
-
- bool contains(const QGeoCoordinate &coordinate) const;
-
- QGeoCoordinate center() const;
- void setCenter(const QGeoCoordinate &center);
-
- qreal radius() const;
- void setRadius(qreal radius);
-
- QPen pen() const;
- void setPen(const QPen &pen);
-
- QBrush brush() const;
- void setBrush(const QBrush &brush);
-
- quint32 pointCount() const;
- void setPointCount(quint32 pointCount);
-
-Q_SIGNALS:
- void centerChanged(const QGeoCoordinate &center);
- void radiusChanged(qreal radius);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
-
-private:
- QGeoMapCircleObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapCircleObject)
- Q_DISABLE_COPY(QGeoMapCircleObject)
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(qreal)
-
-#endif
diff --git a/src/location/maps/qgeomapcircleobject_p.h b/src/location/maps/qgeomapcircleobject_p.h
deleted file mode 100644
index 565f6b3c..00000000
--- a/src/location/maps/qgeomapcircleobject_p.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPCIRCLEOBJECT_P_H
-#define QGEOMAPCIRCLEOBJECT_P_H
-
-#include <QPen>
-#include <QBrush>
-
-#include "qgeoboundingcircle.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapCircleObjectPrivate
-{
-public:
- QGeoMapCircleObjectPrivate();
- ~QGeoMapCircleObjectPrivate();
-
- QGeoBoundingCircle circle;
- QPen pen;
- QBrush brush;
- quint32 pointCount;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomapcustomobject.cpp b/src/location/maps/qgeomapcustomobject.cpp
deleted file mode 100644
index 77203818..00000000
--- a/src/location/maps/qgeomapcustomobject.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapcustomobject.h"
-#include "qgeomapcustomobject_p.h"
-#include "qgeoboundingbox.h"
-
-#include <QGraphicsItem>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapCustomObject
- \brief The QGeoMapCustomObject class is a QGeoMapObject used to draw
- a QGraphicsItem on a map.
-
- \inmodule QtLocation
-
- \ingroup maps-mapping-objects
- \since 1.2
-
- Any arbitrary QGraphicsItem can be associated with a QGeoMapCustomObject, and to
- this end it contains support for interpreting the coordinates of the
- QGraphicsItem in a variety of different ways.
-
- For example, the following code creates a QGraphicsEllipseItem and a
- QGeoMapCustomObject to display it. The EllipseItem extends from the origin point,
- out 20 meters to the east and 30 metres south.
-
- \code
- QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem;
- ellipseItem->setRect(0, 0, 20, 30);
-
- QGeoMapCustomObject *mapObject = new QGeoMapCustomObject;
- mapObject->setGraphicsItem(ellipseItem);
- mapObject->setUnits(QGeoMapObject::MeterUnit);
- mapObject->setOrigin(QGeoCoordinate(-27.5796, 153.1));
- \endcode
-
- \section2 Units and coordinates
-
- The local units and coordinates of the QGraphicsItem are transformed
- onto the map based on the \a units, \a origin, \a transformType and
- \a transform properties. Several systems are available, including
- pixels, meters and seconds of arc.
-
- It should be noted that both pixel and meter coordinate systems are south-
- oriented (ie, positive Y axis faces south on the map). However, the
- RelativeArcSeconds unit system faces north to align with the standard
- latitude grid. The Y axis can be flipped if necessary by making use of the
- GraphicsItem's \a transform property
-
- \code
- QTransform northFlip;
- northFlip.scale(0, -1);
-
- ellipseItem->setTransform(northFlip);
- \endcode
-
- \section2 Transform methods
-
- Normally, the GraphicsItem will be transformed into map coordinates using
- a bilinear interpolation. Another option is the ExactTransform, which
- converts the GraphicsItem exactly into map coordinates, but is only available
- for certain subclasses of QGraphicsItem. Other interpolation methods may
- be provided in future for greater accuracy near poles and in different
- map projections, without the limitations of ExactTransform.
-
- Calling setUnits() or setting the units property will result in the
- default value of transformType being restored. See QGeoMapObject::transformType
- for more details.
-
- \section2 Caveats
-
- Other than the coordinate system features, there are a few differences
- with using QGraphicsItems on a map compared to using them on a standard
- QGraphicsScene. One of the most important of these is the use of the
- \a update() function. When an application changes anything that has an
- effect upon the appearance, size, shape etc of the QGraphicsItem, it
- must call \a QGeoMapCustomObject::update() to ensure that the map is updated.
-
- Another is the use of child items of a QGraphicsItem. These are supported
- in more or less the same manner as in QGraphicsScene, with the exception
- of use in concert with \a ExactTransform -- any object with transformType
- set to \a ExactTransform will not have children of its QGraphicsItem drawn
- on the map.
-*/
-
-/*!
- Constructs a new custom object.
-*/
-QGeoMapCustomObject::QGeoMapCustomObject()
- : d_ptr(new QGeoMapCustomObjectPrivate())
-{
-}
-
-/*!
- Constructs a new custom object which will draw a QGraphicsItem at an
- offset of \a offset pixels from the coordinate \a coordinate.
-*/
-QGeoMapCustomObject::QGeoMapCustomObject(const QGeoCoordinate &coordinate, const QPoint &offset)
- : d_ptr(new QGeoMapCustomObjectPrivate())
-{
- setOrigin(coordinate);
- d_ptr->offset = offset;
-}
-
-/*!
- Destroys this custom object.
-*/
-QGeoMapCustomObject::~QGeoMapCustomObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapCustomObject::type() const
-{
- return QGeoMapObject::CustomType;
-}
-
-/*!
- If the graphics item is modified this
- method should be called immediately afterwards to inform
- the map that an update is required. .
-
- This method causes the triggerUpdate() signal to be emitted.
-*/
-void QGeoMapCustomObject::update()
-{
- emit triggerUpdate();
-}
-
-/*!
-\fn void QGeoMapCustomObject::triggerUpdate()
-
- This signal indicates that the graphics item has
- changed and that the map needs to be updated.
-*/
-
-/*!
- \property QGeoMapCustomObject::graphicsItem
- \brief This property holds the graphics item which will
- be drawn by this custom object.
-
- If the graphics item is 0 then nothing will be drawn.
-*/
-
-QGraphicsItem* QGeoMapCustomObject::graphicsItem() const
-{
- return d_ptr->graphicsItem;
-}
-
-void QGeoMapCustomObject::setGraphicsItem(QGraphicsItem *graphicsItem)
-{
- if (d_ptr->graphicsItem == graphicsItem)
- return;
-
- d_ptr->graphicsItem = graphicsItem;
-
- emit graphicsItemChanged(graphicsItem);
-}
-
-/*!
-\fn void QGeoMapCustomObject::graphicsItemChanged(QGraphicsItem *graphicsItem)
-
- This signal is emitted when the graphics item which this custom object
- draws is changed.
-
- The new value will be \a graphicsItem.
-*/
-
-/*!
- \property QGeoMapCustomObject::offset
- \brief This property holds the offset in pixels at which the graphics
- item will be drawn by this custom object.
-
- The default value of this property is QPoint(0, 0). If this value is not
- changed the upper left coordinate of the graphics item will be drawn at the
- coordinate specified by QGeoMapCustomObject::coordinate.
-
- The offset is in pixels and is independent of the zoom level of the map.
-*/
-QPoint QGeoMapCustomObject::offset() const
-{
- return d_ptr->offset;
-// QPointF pt = d_ptr->offset;
-//
-// QPoint rounded;
-// rounded.setX(int(pt.x() > 0 ? pt.x() + 0.5 : pt.x() - 0.5));
-// rounded.setY(int(pt.y() > 0 ? pt.y() + 0.5 : pt.y() - 0.5));
-//
-// return rounded;
-}
-
-void QGeoMapCustomObject::setOffset(const QPoint &offset)
-{
- if (d_ptr->offset != offset) {
- d_ptr->offset = offset;
- emit offsetChanged(offset);
- }
-}
-
-/*!
-\fn void QGeoMapCustomObject::offsetChanged(const QPoint &offset)
-
- This signal is emitted when the on-screen offset from the coordinate
- at which this custom object should be drawn has changed.
-
- The new value will be \a offset.
-*/
-
-/*!
- Sets the origin of the object to \a origin.
-*/
-void QGeoMapCustomObject::setOrigin(const QGeoCoordinate &origin)
-{
- QGeoMapObject::setOrigin(origin);
-}
-
-/*!
- Sets the coordinate units of the object to \a unit.
-
- Note that setting this property will reset the transformType property to
- the default for the units given. For PixelUnit, this is ExactTransform,
- and for all others, BilinearTransform.
-*/
-void QGeoMapCustomObject::setUnits(const CoordinateUnit &unit)
-{
- QGeoMapObject::setUnits(unit);
-}
-
-/*!
- Sets the transform type of the object to \a type.
-*/
-void QGeoMapCustomObject::setTransformType(const TransformType &type)
-{
- QGeoMapObject::setTransformType(type);
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapCustomObjectPrivate::QGeoMapCustomObjectPrivate()
- : graphicsItem(0) {}
-
-QGeoMapCustomObjectPrivate::~QGeoMapCustomObjectPrivate()
-{
-}
-
-#include "moc_qgeomapcustomobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomapcustomobject_p.h b/src/location/maps/qgeomapcustomobject_p.h
deleted file mode 100644
index 5387f193..00000000
--- a/src/location/maps/qgeomapcustomobject_p.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPCUSTOMOBJECT_P_H
-#define QGEOMAPCUSTOMOBJECT_P_H
-
-#include "qgeocoordinate.h"
-
-#include <QPoint>
-
-
-QT_BEGIN_NAMESPACE
-
-class QGraphicsItem;
-class QGeoMapCustomObjectPrivate
-{
-public:
- QGeoMapCustomObjectPrivate();
- ~QGeoMapCustomObjectPrivate();
-
- QGraphicsItem *graphicsItem;
- QPoint offset;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomapdata.cpp b/src/location/maps/qgeomapdata.cpp
deleted file mode 100644
index 6f7a2be3..00000000
--- a/src/location/maps/qgeomapdata.cpp
+++ /dev/null
@@ -1,836 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapdata.h"
-#include "qgeomapdata_p.h"
-
-#include <QGraphicsScene>
-#include <QGraphicsItem>
-#include <QGraphicsPolygonItem>
-#include <QGraphicsLineItem>
-#include <QGraphicsEllipseItem>
-#include <QGraphicsPathItem>
-
-#include "qgeoboundingbox.h"
-#include "qgeocoordinate.h"
-#include "qgraphicsgeomap.h"
-#include "qgeomapobject.h"
-#include "qgeomappixmapobject.h"
-#include "qgeomapgroupobject.h"
-#include "qgeomaptextobject.h"
-#include "qgeomappingmanagerengine.h"
-#include "qgeomapoverlay.h"
-
-#include "qgeomapobjectengine_p.h"
-#include "qgeomapobject_p.h"
-#include <private/projwrapper_p.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapData
-
- \brief The QGeoMapData class are used as a bridge between QGraphicsGeoMap and
- QGeoMappingManager.
-
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-impl
-
- Instances of QGeoMapData are created with
- QGeoMappingManager::createMapData(), and are used internally by
- QGraphicsGeoMap to manage the state of the map and the associated
- QGeoMapObject instances.
-
- Plugin implementers will need to provide implementations of
- coordinateToScreenPosition(const QGeoCoordinate &coordinate) and
- QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition).
-
- The other virtual functions can be overridden. If the screen position to
- coordinate tranformations are expensive then overriding these functions may
- allow optimizations based on caching parts of the geometry information.
-
- Subclasses should override createMapObjectInfo() so that QGeoMapObjectInfo
- instances will be created for each QGeoMapObject type in order to provide
- the QGeoMapData subclass specific behaviours for the map objects.
- */
-
-/*!
- Constructs a new map data object, which makes use of the functionality provided by \a engine.
-*/
-QGeoMapData::QGeoMapData(QGeoMappingManagerEngine *engine)
- : d_ptr(new QGeoMapDataPrivate(this, engine))
-{
- if (engine->supportedConnectivityModes().length() > 0)
- setConnectivityMode(engine->supportedConnectivityModes().at(0));
- else
- setConnectivityMode(QGraphicsGeoMap::NoConnectivity);
-}
-
-/*!
- \internal
-*/
-QGeoMapData::QGeoMapData(QGeoMapDataPrivate *dd) : d_ptr(dd) {}
-
-/*!
- Destroys this map data object.
-*/
-QGeoMapData::~QGeoMapData()
-{
- Q_D(QGeoMapData);
- delete d;
-}
-
-/*!
- This function is run after the QGeoMapData instance has been
- constructed.
-
- Any subclasses which override this function should make sure that
- QGeoMapData::init() is called within the body of the overriding function.
-*/
-void QGeoMapData::init()
-{
- d_ptr->containerObject = new QGeoMapGroupObject();
- d_ptr->containerObject->setMapData(this);
-}
-
-/*!
- Returns the mapping engine that this map data object is associated with.
-*/
-QGeoMappingManagerEngine* QGeoMapData::engine() const
-{
- return d_ptr->engine;
-}
-
-/*!
- Returns the QGeoMapObject which acts as the parent to all QGeoMapObject
- instances which are added to the map by the user.
-*/
-QGeoMapObject* QGeoMapData::containerObject()
-{
- return d_ptr->containerObject;
-}
-
-/*!
- Sets the size of the map viewport to \a size.
-
- The size will be adjusted by the associated QGraphicsGeoMap as it resizes.
-*/
-void QGeoMapData::setWindowSize(const QSizeF &size)
-{
- if (d_ptr->windowSize == size)
- return;
-
- d_ptr->windowSize = size;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit windowSizeChanged(d_ptr->windowSize);
-}
-
-/*!
- \property QGeoMapData::windowSize
- Returns the size of the map viewport.
-
- The size will be adjusted by the associated QGraphicsGeoMap as it resizes.
-*/
-QSizeF QGeoMapData::windowSize() const
-{
- return d_ptr->windowSize;
-}
-
-/*!
- Sets the zoom level of the map to \a zoomLevel.
-
- Larger values of the zoom level correspond to more detailed views of the
- map.
-
- If \a zoomLevel is less than minimumZoomLevel() then minimumZoomLevel()
- will be used, and if \a zoomLevel is larger than
- maximumZoomLevel() then maximumZoomLevel() will be used.
-*/
-void QGeoMapData::setZoomLevel(qreal zoomLevel)
-{
- zoomLevel = qMin(zoomLevel, d_ptr->engine->maximumZoomLevel());
- zoomLevel = qMax(zoomLevel, d_ptr->engine->minimumZoomLevel());
-
- if (d_ptr->zoomLevel == zoomLevel)
- return;
-
- d_ptr->zoomLevel = zoomLevel;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit zoomLevelChanged(d_ptr->zoomLevel);
-}
-
-/*!
- \property QGeoMapData::zoomLevel
-
- Returns the zoom level of the map.
-
- Larger values of the zoom level correspond to more detailed views of the
- map.
-*/
-qreal QGeoMapData::zoomLevel() const
-{
- return d_ptr->zoomLevel;
-}
-
-/*!
- \property QGeoMapData::supportsBearing
-
- Returns whether bearing is supported by this engine.
-*/
-bool QGeoMapData::supportsBearing() const
-{
- return d_ptr->engine->supportsBearing();
-}
-
-/*!
- Sets the bearing of the map to \a bearing.
-
- Value in degrees in the range of 0-360. 0 being equivalent to 0 degrees from
- north.
-*/
-void QGeoMapData::setBearing(qreal bearing)
-{
- if (!supportsBearing())
- return;
-
- bearing = qMin(bearing, qreal(360.0));
- bearing = qMax(bearing, qreal(0.0));
-
- if (d_ptr->bearing == bearing)
- return;
-
- d_ptr->bearing = bearing;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit bearingChanged(d_ptr->bearing);
-}
-
-/*!
- \property QGeoMapData::bearing
-
- Returns the current bearing of the map.
-
- Value in degrees in the range of 0-360. 0 being equivalent to 0 degrees from
- north.
-*/
-qreal QGeoMapData::bearing() const
-{
- return d_ptr->bearing;
-}
-
-/*!
- \property QGeoMapData::supportsTilting
-
- Returns whether tilting is supported by this engine.
-*/
-bool QGeoMapData::supportsTilting() const
-{
- return d_ptr->engine->supportsTilting();
-}
-
-/*!
- \property QGeoMapData::minimumTilt
-
- Returns minimum tilt supported by this engine.
-*/
-qreal QGeoMapData::minimumTilt() const
-{
- return d_ptr->engine->minimumTilt();
-}
-
-/*!
- \property QGeoMapData::maximumTilt
-
- Returns maximum tilt supported by this engine.
-*/
-qreal QGeoMapData::maximumTilt() const
-{
- return d_ptr->engine->maximumTilt();
-}
-
-/*!
- Sets the tilt of the map to \a tilt.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-
- If \a tilt is less than minimumTilt() then minimumTilt()
- will be used, and if \a tilt is larger than
- maximumTilt() then maximumTilt() will be used.
-*/
-void QGeoMapData::setTilt(qreal tilt)
-{
- if (!supportsTilting())
- return;
-
- tilt = qMin(tilt, d_ptr->engine->maximumTilt());
- tilt = qMax(tilt, d_ptr->engine->minimumTilt());
-
- if (d_ptr->tilt == tilt)
- return;
-
- d_ptr->tilt = tilt;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit tiltChanged(d_ptr->tilt);
-}
-
-/*!
- \property QGeoMapData::tilt
-
- Returns the current tilt of the map.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-*/
-qreal QGeoMapData::tilt() const
-{
- return d_ptr->tilt;
-}
-
-/*!
- Pans the map view \a dx pixels in the x direction and \a dy pixels
- in the y direction.
-
- The x and y axes are specified in Graphics View Framework coordinates.
- By default this will mean that positive values of \a dx move the
- viewed area to the right and that positive values of \a dy move the
- viewed area down.
-
- Subclasses should call QGeoMapData::setCenter() when the pan has completed.
-*/
-void QGeoMapData::pan(int dx, int dy)
-{
- QPointF pos = coordinateToScreenPosition(center());
- setCenter(screenPositionToCoordinate(QPointF(pos.x() + dx, pos.y() + dy)));
-}
-
-/*!
- Centers the map viewport on the coordinate \a center.
-*/
-void QGeoMapData::setCenter(const QGeoCoordinate &center)
-{
- if (d_ptr->center == center)
- return;
-
- d_ptr->center = center;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit centerChanged(d_ptr->center);
-}
-
-/*!
- \property QGeoMapData::center
-
- Returns the coordinate of the point in the center of the map viewport.
-*/
-QGeoCoordinate QGeoMapData::center() const
-{
- return d_ptr->center;
-}
-
-/*!
- Changes the type of map data to display to \a mapType.
-*/
-void QGeoMapData::setMapType(QGraphicsGeoMap::MapType mapType)
-{
- if (d_ptr->mapType == mapType)
- return;
-
- d_ptr->mapType = mapType;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit mapTypeChanged(mapType);
-}
-
-/*!
- \property QGeoMapData::mapType
-
- Returns the type of map data which is being displayed.
-*/
-QGraphicsGeoMap::MapType QGeoMapData::mapType() const
-{
- return d_ptr->mapType;
-}
-
-/*!
- Changes the connectivity mode of this map to \a connectivityMode
-*/
-void QGeoMapData::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-{
- if (d_ptr->connectivityMode == connectivityMode)
- return;
-
- d_ptr->connectivityMode = connectivityMode;
-
- if (!d_ptr->blockPropertyChangeSignals)
- emit connectivityModeChanged(connectivityMode);
-}
-
-/*!
- \property QGeoMapData::connectivityMode
-
- Returns the connectivity mode for this map.
-*/
-QGraphicsGeoMap::ConnectivityMode QGeoMapData::connectivityMode() const
-{
- return d_ptr->connectivityMode;
-}
-
-/*!
- Returns the map objects associated with this map.
-*/
-QList<QGeoMapObject*> QGeoMapData::mapObjects() const
-{
- return d_ptr->containerObject->childObjects();
-}
-
-/*!
- Adds \a mapObject to the list of map objects managed by this map.
-
- The children objects are drawn in order of the QGeoMapObject::zValue()
- value. Children objects having the same z value will be drawn
- in the order they were added.
-
- The map will take ownership of the \a mapObject.
-*/
-void QGeoMapData::addMapObject(QGeoMapObject *mapObject)
-{
- d_ptr->addObject(mapObject);
-}
-
-/*!
- Removes \a mapObject from the list of map objects managed by this map.
- The map will release ownership of the \a mapObject.
-*/
-void QGeoMapData::removeMapObject(QGeoMapObject *mapObject)
-{
- d_ptr->removeObject(mapObject);
-}
-
-/*!
- Clears the map objects associated with this map.
-
- The map objects will be deleted.
-*/
-void QGeoMapData::clearMapObjects()
-{
- d_ptr->clearObjects();
-}
-
-/*!
- \fn QGeoBoundingBox QGeoMapData::viewport() const
- Returns a bounding box corresponding to the physical area displayed
- in the viewport of the map.
-
- The bounding box which is returned is defined by the upper left and
- lower right corners of the visible area of the map.
-*/
-
-/*!
- \fn void QGeoMapData::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter)
-
- Attempts to fit the bounding box \a bounds into the viewport of the map.
-
- This method will change the zoom level to the maximum zoom level such
- that all of \a bounds is visible within the resulting viewport.
-
- If \a preserveViewportCenter is false the map will be centered on the
- bounding box \a bounds before the zoom level is changed, otherwise the
- center of the map will not be changed.
-*/
-
-/*!
- Returns the list of visible map objects managed by this map which
- contain the point \a screenPosition within their boundaries.
-*/
-QList<QGeoMapObject*> QGeoMapData::mapObjectsAtScreenPosition(const QPointF &screenPosition) const
-{
- QList<QGeoMapObject*> results;
-
- QGeoCoordinate coord = screenPositionToCoordinate(screenPosition);
- int childObjectCount = d_ptr->containerObject->childObjects().count();
- for (int i = 0; i < childObjectCount; ++i) {
- QGeoMapObject *object = d_ptr->containerObject->childObjects().at(i);
- if (object->contains(coord) && object->isVisible())
- results.append(object);
- }
-
- return results;
-}
-
-/*!
- Returns the list of visible map objects managed by this map which are displayed at
- least partially within the on screen rectangle \a screenRect.
-*/
-QList<QGeoMapObject*> QGeoMapData::mapObjectsInScreenRect(const QRectF &screenRect) const
-{
- QList<QGeoMapObject*> results;
-
- QGeoCoordinate topLeft = screenPositionToCoordinate(screenRect.topLeft());
- QGeoCoordinate bottomRight = screenPositionToCoordinate(screenRect.bottomRight());
-
- QGeoBoundingBox bounds(topLeft, bottomRight);
-
- int childObjectCount = d_ptr->containerObject->childObjects().count();
- for (int i = 0; i < childObjectCount; ++i) {
- QGeoMapObject *object = d_ptr->containerObject->childObjects().at(i);
- if (bounds.intersects(object->boundingBox()) && object->isVisible())
- results.append(object);
- }
-
- return results;
-}
-
-/*!
- Returns the list of visible map objects manager by this widget which
- are displayed at least partially within the viewport of the map.
-*/
-QList<QGeoMapObject*> QGeoMapData::mapObjectsInViewport() const
-{
- return this->mapObjectsInScreenRect(QRectF(0.0,
- 0.0,
- d_ptr->windowSize.width(),
- d_ptr->windowSize.height()));
-}
-
-/*!
-\fn QPointF QGeoMapData::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const
-
- Returns the position on the screen at which \a coordinate is displayed.
-
- An invalid QPointF will be returned if \a coordinate is invalid or is not
- within the current viewport.
-*/
-
-/*!
-\fn QGeoCoordinate QGeoMapData::screenPositionToCoordinate(const QPointF &screenPosition) const
-
- Returns the coordinate corresponding to the point in the viewport at \a
- screenPosition.
-
- An invalid QGeoCoordinate will be returned if \a screenPosition is invalid
- or is not within the current viewport.
-*/
-
-/*!
- Paints the map and everything associated with it on \a painter, using the
- options \a option.
-
- This will paint the map with paintMap(), then the map overlays with
- QGeoMapOverlay::paint(), then the map objects with paintObjects(), and
- finally paintProviderNotices().
-*/
-void QGeoMapData::paint(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- paintMap(painter, option);
-
- for (int i = 0; i < d_ptr->overlays.size(); ++i)
- d_ptr->overlays[i]->paint(painter, option);
-
- paintObjects(painter, option);
-
- paintProviderNotices(painter, option);
-}
-
-/*!
- Paints the map on \a painter, using the options \a option.
-
- The map overlays, map objects and the provider notices (such as copyright
- and powered by notices) are painted in separate methods, which are combined
- in the paint() method.
-
- The default implementation does not paint anything.
-*/
-void QGeoMapData::paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- Q_UNUSED(painter)
- Q_UNUSED(option)
-}
-
-/*!
- Paints the map objects on \a painter, using the options \a option.
-
- The default implementation makes use of the coordinateToScreenPosition
- implemented by the subclass to perform object positioning and rendering.
-
- This implementation should suffice for most common use cases, and supports
- the full range of coordinate systems and transforms available to a
- QGeoMapObject.
-*/
-void QGeoMapData::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- Q_UNUSED(painter)
- Q_UNUSED(option)
-}
-
-/*!
- Paints the provider notices on \a painter, using the options \a option.
-
- The provider notices are things like the copyright and powered by notices.
-
- The provider may not want the client developers to be able to move the
- notices from their standard positions and so we have not provided API
- support for specifying the position of the notices at this time.
-
- If support for hinting at the position of the notices is to be provided by
- plugin parameters, the suggested parameter keys are
- "mapping.notices.copyright.alignment" and
- "mapping.notices.poweredby.alignment", with type Qt::Alignment.
-
- The default implementation does not paint anything.
-*/
-void QGeoMapData::paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- Q_UNUSED(painter)
- Q_UNUSED(option)
-}
-
-/*!
- Creates a QGeoMapObjectInfo instance which implements the behaviours o
- the map object \a object which are specific to this QGeoMapData.
-
- The default implementation returns 0.
-*/
-QGeoMapObjectInfo *QGeoMapData::createMapObjectInfo(QGeoMapObject *object)
-{
- Q_UNUSED(object);
- return 0;
-}
-
-/*!
- Returns the map overlays associated with this map.
-*/
-QList<QGeoMapOverlay*> QGeoMapData::mapOverlays() const
-{
- return d_ptr->overlays;
-}
-
-/*!
- Adds \a overlay to the list of map overlays associated with this map.
-
- The overlays will be drawn in the order in which they were added.
-
- The map will take ownership of \a overlay.
-*/
-void QGeoMapData::addMapOverlay(QGeoMapOverlay *overlay)
-{
- if (!overlay)
- return;
-
- overlay->setMapData(this);
- d_ptr->overlays.append(overlay);
-}
-
-/*!
- Removes \a overlay from the list of map overlays associated with this map.
-
- The map will release ownership of \a overlay.
-*/
-void QGeoMapData::removeMapOverlay(QGeoMapOverlay *overlay)
-{
- if (!overlay)
- return;
-
- d_ptr->overlays.removeAll(overlay);
-}
-
-/*!
- Clears the map overlays associated with this map.
-
- The map overlays will be deleted.
-*/
-void QGeoMapData::clearMapOverlays()
-{
- qDeleteAll(d_ptr->overlays);
- d_ptr->overlays.clear();
-}
-
-
-/*!
- Sets whether changes to properties will trigger their corresponding signals to \a block.
-
- By default the QGeoMapData implementations of the property functions are used
- which cause the property notification signals to be emitted immediately.
-
- Calling this function with \a block set to true will prevent these
- signals from being called, which will allow a subclass to defer the
- emission of the signal until a later time.
-
- If this function needs to be called it should be used as soon as possible,
- preferably in the constructor of the QGeoMapData subclass.
-*/
-void QGeoMapData::setBlockPropertyChangeSignals(bool block)
-{
- d_ptr->blockPropertyChangeSignals = block;
-}
-
-/*!
-\fn void QGeoMapData::windowSizeChanged(const QSizeF &windowSize)
-
- This signal is emitted when the size of the window which contains
- the map has changed.
-
- The new value is \a windowSize.
-*/
-
-/*!
-\fn void QGeoMapData::zoomLevelChanged(qreal zoomLevel)
-
- This signal is emitted when the zoom level of the map has changed.
-
- The new value is \a zoomLevel.
-*/
-
-/*!
-\fn void QGeoMapData::bearingChanged(qreal bearing)
-
- This signal is emitted when the bearing of the map has changed.
-
- The new value is \a bearing.
-*/
-
-/*!
-\fn void QGeoMapData::tiltChanged(qreal tilt)
-
- This signal is emitted when the tilt of the map has changed.
-
- The new value is \a tilt.
-*/
-
-/*!
-\fn void QGeoMapData::centerChanged(const QGeoCoordinate &coordinate)
-
- This signal is emitted when the center of the map has changed.
-
- The new value is \a coordinate.
-*/
-
-/*!
-\fn void QGeoMapData::mapTypeChanged(QGraphicsGeoMap::MapType mapType)
-
- This signal is emitted when the type of the map has changes.
-
- The value is \a mapType.
-*/
-
-/*!
-\fn void QGeoMapData::connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-
- This signal is emitted when the connectivity mode used to fetch the
- map data has changed.
-
- The new value is \a connectivityMode.
-*/
-
-/*!
-\fn void QGeoMapData::updateMapDisplay(const QRectF &target)
-
- This signal is emitted when the region \a target of the window which
- contains the map needs to be updated.
-
-
- If \a target is empty then the entire map will be updated.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapDataPrivate::QGeoMapDataPrivate(QGeoMapData *parent, QGeoMappingManagerEngine *engine)
- : QObject(0),
- engine(engine),
- containerObject(0),
- zoomLevel(-1.0),
- shiftSinceLastInval(0, 0),
- bearing(0.0),
- tilt(0.0),
- windowSize(0, 0),
- blockPropertyChangeSignals(false),
- q_ptr(parent)
-{}
-
-QGeoMapDataPrivate::~QGeoMapDataPrivate()
-{
- if (containerObject)
- delete containerObject;
- qDeleteAll(overlays);
-}
-
-void QGeoMapDataPrivate::addObject(QGeoMapObject *object)
-{
- containerObject->addChildObject(object);
- //emit q_ptr->updateMapDisplay();
-}
-
-void QGeoMapDataPrivate::removeObject(QGeoMapObject *object)
-{
- containerObject->removeChildObject(object);
-}
-
-void QGeoMapDataPrivate::clearObjects()
-{
- foreach (QGeoMapObject *obj, containerObject->childObjects()) {
- this->removeObject(obj);
- delete obj;
- }
-}
-
-QPointF QGeoMapDataPrivate::coordinateToScreenPosition(double lon, double lat) const
-{
- QGeoCoordinate c(lon, lat);
- return q_ptr->coordinateToScreenPosition(c);
-}
-
-void QGeoMapDataPrivate::emitUpdateMapDisplay(const QRectF &target)
-{
- emit q_ptr->updateMapDisplay(target);
-}
-
-
-#include "moc_qgeomapdata.cpp"
-#include "moc_qgeomapdata_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapdata.h b/src/location/maps/qgeomapdata.h
deleted file mode 100644
index 20a22a24..00000000
--- a/src/location/maps/qgeomapdata.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPDATA_H
-#define QGEOMAPDATA_H
-
-#include "qgraphicsgeomap.h"
-
-#include <QObject>
-#include <QSize>
-#include <QRectF>
-#include <QPainter>
-#include <QStyleOptionGraphicsItem>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoCoordinate;
-class QGeoBoundingBox;
-class QGeoMappingManagerEngine;
-class QGeoMapObject;
-class QGeoMapGroupObject;
-class QGeoMapDataPrivate;
-class QGeoMapOverlay;
-class QGeoMapObjectInfo;
-
-class Q_LOCATION_EXPORT QGeoMapData : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QSizeF windowSize READ windowSize WRITE setWindowSize NOTIFY windowSizeChanged)
- Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
- Q_PROPERTY(QGraphicsGeoMap::MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
- Q_PROPERTY(QGraphicsGeoMap::ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged)
- Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged)
- Q_PROPERTY(qreal minimumTilt READ minimumTilt CONSTANT)
- Q_PROPERTY(qreal maximumTilt READ maximumTilt CONSTANT)
- Q_PROPERTY(bool supportsTilting READ supportsTilting CONSTANT)
- Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged)
- Q_PROPERTY(bool supportsBearing READ supportsBearing CONSTANT)
-
-public:
- QGeoMapData(QGeoMappingManagerEngine *engine);
- virtual ~QGeoMapData();
-
- virtual void init();
-
- virtual void setWindowSize(const QSizeF &size);
- virtual QSizeF windowSize() const;
-
- virtual void setZoomLevel(qreal zoomLevel);
- virtual qreal zoomLevel() const;
-
- bool supportsBearing() const;
- void setBearing(qreal bearing);
- qreal bearing() const;
-
- bool supportsTilting() const;
- void setTilt(qreal tilt);
- qreal tilt() const;
- qreal minimumTilt() const;
- qreal maximumTilt() const;
-
- virtual void pan(int dx, int dy);
-
- virtual void setCenter(const QGeoCoordinate &center);
- virtual QGeoCoordinate center() const;
-
- virtual void setMapType(QGraphicsGeoMap::MapType mapType);
- virtual QGraphicsGeoMap::MapType mapType() const;
-
- virtual void setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode);
- virtual QGraphicsGeoMap::ConnectivityMode connectivityMode() const;
-
- QList<QGeoMapObject*> mapObjects() const;
- void addMapObject(QGeoMapObject *mapObject);
- void removeMapObject(QGeoMapObject *mapObject);
- void clearMapObjects();
-
- virtual QGeoBoundingBox viewport() const = 0;
- virtual void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false) = 0;
-
- virtual QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const;
- virtual QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const;
- virtual QList<QGeoMapObject*> mapObjectsInViewport() const;
-
- QList<QGeoMapOverlay*> mapOverlays() const;
- void addMapOverlay(QGeoMapOverlay *overlay);
- void removeMapOverlay(QGeoMapOverlay *overlay);
- void clearMapOverlays();
-
- virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const = 0;
- virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition) const = 0;
-
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option);
-
-protected:
- QGeoMapData(QGeoMapDataPrivate *dd);
-
- QGeoMappingManagerEngine* engine() const;
- QGeoMapObject* containerObject();
-
- void setBlockPropertyChangeSignals(bool block);
-
- virtual void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option);
- virtual void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option);
- virtual void paintProviderNotices(QPainter *painter, const QStyleOptionGraphicsItem *option);
-
- virtual QGeoMapObjectInfo* createMapObjectInfo(QGeoMapObject *object);
-
- QGeoMapDataPrivate* d_ptr;
-
-Q_SIGNALS:
- void windowSizeChanged(const QSizeF &windowSize);
- void zoomLevelChanged(qreal zoomLevel);
- void centerChanged(const QGeoCoordinate &coordinate);
- void mapTypeChanged(QGraphicsGeoMap::MapType mapType);
- void connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode);
- void updateMapDisplay(const QRectF &target = QRectF());
- void bearingChanged(qreal bearing);
- void tiltChanged(qreal tilt);
-
-private:
- Q_DECLARE_PRIVATE(QGeoMapData)
- Q_DISABLE_COPY(QGeoMapData)
-
- friend class QGeoMapObject;
- friend class QGeoMapObjectInfo;
- friend class QGeoMapGroupObject;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomapgroupobject.cpp b/src/location/maps/qgeomapgroupobject.cpp
deleted file mode 100644
index 07b19441..00000000
--- a/src/location/maps/qgeomapgroupobject.cpp
+++ /dev/null
@@ -1,316 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapgroupobject.h"
-#include "qgeomapgroupobject_p.h"
-
-#include "qgeomapobject_p.h"
-#include "qgeomapobjectengine_p.h"
-
-#include "qgeocoordinate.h"
-#include "qgeoboundingbox.h"
-
-#include "qgeomapdata.h"
-#include "qgeomapdata_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapGroupObject
- \brief The QGeoMapGroupObject class is a QGeoMapObject used to
- manager a group of other map objects.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The QGeoMapGroupObject class can be used to quickly add and remove
- groups of objects to a map.
-
- The map objects contained in the group will be ordered relative to
- one another in the usual manner, such that objects with higher z-values
- will be drawn over objects with lower z-values and objects with
- equal z-values will be drawn in insertion order.
-
- This ordering of the objects will be independent of the other
- objects that are added to the map, since the z-value and insertion
- order of the QGeoMapGroupObject is used to determine where the
- group is placed in the scene.
-*/
-
-/*!
- Constructs a new group object.
-*/
-QGeoMapGroupObject::QGeoMapGroupObject()
- : d_ptr(new QGeoMapGroupObjectPrivate(this)) {}
-
-/*!
- Destroys this group object.
-*/
-QGeoMapGroupObject::~QGeoMapGroupObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapGroupObject::type() const
-{
- return QGeoMapObject::GroupType;
-}
-
-/*!
- Returns a bounding box which contains this map object.
-
- If this map object has children, the bounding box will be large
- enough to contain both this map object and all of its children.
-*/
-QGeoBoundingBox QGeoMapGroupObject::boundingBox() const
-{
- QGeoBoundingBox bounds;
-
- if (d_ptr->children.size() == 0)
- return bounds;
-
- bounds = d_ptr->children.at(0)->boundingBox();
-
- for (int i = 1; i < d_ptr->children.size(); ++i)
- bounds = bounds.united(d_ptr->children.at(i)->boundingBox());
-
- return bounds;
-}
-
-/*!
- Returns whether \a coordinate is contained with the boundary of this
- map object.
-
- If this map object has children, this function will return whether
- \a coordinate is contained within the boundary of this map object or
- within the boundary of any of its children.
-*/
-bool QGeoMapGroupObject::contains(const QGeoCoordinate &coordinate) const
-{
- for (int i = 0; i < d_ptr->children.size(); ++i)
- if (d_ptr->children.at(i)->contains(coordinate))
- return true;
-
- return false;
-}
-
-bool mapObjectLessThan(const QGeoMapObject* op1, const QGeoMapObject* op2)
-{
- return op1->operator <(*op2);
-}
-
-/*!
- Adds \a childObject to the list of children of this map object.
-
- The children objects are drawn in order of the QGeoMapObject::zValue()
- value. Children objects having the same z value will be drawn
- in the order they were added.
-
- The map object will take ownership of \a childObject.
-*/
-void QGeoMapGroupObject::addChildObject(QGeoMapObject *childObject)
-{
- if (!childObject || d_ptr->children.contains(childObject))
- return;
-
- childObject->setMapData(mapData());
- childObject->d_func()->serial = d_func()->serial++;
-
- //binary search
- QList<QGeoMapObject*>::iterator i = qUpperBound(d_ptr->children.begin(),
- d_ptr->children.end(),
- childObject,
- mapObjectLessThan);
- d_ptr->children.insert(i, childObject);
-
- connect(childObject, SIGNAL(zValueChanged(int)),
- d_ptr, SLOT(childChangedZValue(int)));
-
- emit childAdded(childObject);
-}
-
-/*!
- Removes \a childObject from the list of children of this map object.
-
- The map object will release ownership of \a childObject.
-*/
-void QGeoMapGroupObject::removeChildObject(QGeoMapObject *childObject)
-{
- if (!childObject)
- return;
-
- if (d_ptr->children.removeAll(childObject) > 0) {
-
- disconnect(childObject, SIGNAL(zValueChanged(int)),
- d_ptr, SLOT(childChangedZValue(int)));
-
- emit childRemoved(childObject);
- childObject->setMapData(0);
-
-// if (this->mapData()) {
-// QGeoMapObjectEngine *oe = this->mapData()->d_ptr->oe;
-// if (oe)
-// oe->removeObject(childObject);
-// }
- }
-
-// update();
-}
-
-/*!
- Returns the children of this object.
-*/
-QList<QGeoMapObject*> QGeoMapGroupObject::childObjects() const
-{
- return d_ptr->children;
-}
-
-/*!
- Clears the children of this object.
-
- The child objects will be deleted.
-*/
-void QGeoMapGroupObject::clearChildObjects()
-{
- for (int i = d_ptr->children.size() - 1; i >=0; --i) {
- QGeoMapObject* child = d_ptr->children[i];
- removeChildObject(child);
- delete child;
- }
-
- d_ptr->children.clear();
-}
-
-/*!
- Sets whether this group of objects is visible to \a visible.
-*/
-void QGeoMapGroupObject::setVisible(bool visible)
-{
- for (int i = 0; i < d_ptr->children.size(); ++i)
- d_ptr->children[i]->setVisible(visible);
-
- QGeoMapObject::setVisible(visible);
-}
-
-/*!
- \reimp
-*/
-void QGeoMapGroupObject::setMapData(QGeoMapData *mapData)
-{
-
- for (int i = 0; i < d_ptr->children.size(); ++i) {
- d_ptr->children[i]->setMapData(mapData);
- if (mapData)
- emit childAdded(d_ptr->children[i]);
- }
-
- QGeoMapObject::setMapData(mapData);
-}
-
-/*!
-\fn void QGeoMapGroupObject::childAdded(QGeoMapObject *childObject)
-
- This signal will be emitted when the map object \a childObject
- is added to the group.
-*/
-
-/*!
-\fn void QGeoMapGroupObject::childUpdated(QGeoMapObject *childObject)
-
- This signal will be emitted if the map object \a childObject has
- changed such that the corresponding QGeoMapObjectInfo class that handles
- the map-specific behaviours of the object needs to be informed of
- the change.
-
- The map object \a childObject must belong to this group.
-
- At the moment this is only emitted when the z-value of the
- child-objects are changed.
-*/
-
-/*!
-\fn void QGeoMapGroupObject::childRemoved(QGeoMapObject *childObject)
-
- This signal will be emitted when the map object \a childObject
- is removed from the group.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapGroupObjectPrivate::QGeoMapGroupObjectPrivate(QGeoMapGroupObject *p) :
- QObject(p),
- serial(1),
- q_ptr(p)
-{}
-
-QGeoMapGroupObjectPrivate::~QGeoMapGroupObjectPrivate()
-{
- qDeleteAll(children);
-}
-
-void QGeoMapGroupObjectPrivate::childChangedZValue(int zValue)
-{
- Q_UNUSED(zValue);
- QGeoMapObject *child = qobject_cast<QGeoMapObject*>(sender());
- if (!child)
- return;
-
- if (children.removeAll(child) > 0) {
- QList<QGeoMapObject*>::iterator i = qUpperBound(children.begin(),
- children.end(),
- child,
- mapObjectLessThan);
- children.insert(i, child);
- emit q_ptr->childUpdated(child);
- }
-}
-
-#include "moc_qgeomapgroupobject.cpp"
-#include "moc_qgeomapgroupobject_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomapobject.cpp b/src/location/maps/qgeomapobject.cpp
deleted file mode 100644
index 3f0b3993..00000000
--- a/src/location/maps/qgeomapobject.cpp
+++ /dev/null
@@ -1,534 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapobject.h"
-#include "qgeomapobject_p.h"
-#include "qgeomapobjectengine_p.h"
-#include "qgeomapobjectinfo.h"
-#include "qgeomapdata.h"
-#include "qgeomapdata_p.h"
-#include "qgeoboundingbox.h"
-#include "qgeocoordinate.h"
-#include <private/projwrapper_p.h>
-
-#include <QtAlgorithms>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapObject
- \brief The QGeoMapObject class is a graphical item to be displayed on a map.
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- QGeoMapObject is the base class used to display graphical items on a map.
-
- Subclasses of QGeoMapObject exist in order to simplify the task of
- creating and managing map objects of various kinds.
-
- QGeoMapCustomObject is the most generic of these objects in that it
- allows QGraphicsItems to be added to a map, however as not all mapping
- plugins use the Qt Graphics View framework so clients should use
- QGraphicsGeoMap::supportsCustomMapObjects() before using
- QGeoMapCustomObject.
-
- QGeoMapObject instances can also be grouped into heirarchies in order to
- simplify the process of creating compound objects and managing groups of
- objects (see QGeoMapGroupObject)
-*/
-
-/*!
- \enum QGeoMapObject::Type
-
- Describes the type of a map object.
-
- \value NullType
- An empty QGeoMapObject.
- \value GroupType
- A QGeoMapObject used to organize other map objects into groups.
- \value RectangleType
- A QGeoMapObject used to display a rectangular region.
- \value CircleType
- A QGeoMapObject used to display a circular region.
- \value PolylineType
- A QGeoMapObject used to display a multi-segment line.
- \value PolygonType
- A QGeoMapObject used to display a polygonal region.
- \value PixmapType
- A QGeoMapObject used to display a pixmap on a map.
- \value TextType
- A QGeoMapObject used to display text on a map
- \value RouteType
- A QGeoMapObject used to display a route.
- \value CustomType
- A QGeoMapObject displaying a custom GraphicsItem.
-*/
-
-/*!
- \enum QGeoMapObject::CoordinateUnit
-
- \since 1.2
-
- Describes the units of measurement used for a map object's
- graphics item.
-
- \value PixelUnit
- Units are in pixels on the screen. Pixel coordinate (0,0) is
- translated to the origin coordinate.
- \value MeterUnit
- Units are in meters on the ground -- a local Transverse Mercator
- coordinate system (on the WGS84 ellipsoid) is used for translation,
- centered on the origin coordinate.
- \value RelativeArcSecondUnit
- Units are in arc seconds relative to the origin coordinate (along the
- WGS84 ellipsoid).
- \value AbsoluteArcSecondUnit
- Units are in arc seconds on WGS84, origin ignored.
-*/
-
-/*!
- \enum QGeoMapObject::TransformType
-
- \since 1.2
-
- Describes the type of transformation applied to change this object's
- coordinate system into screen coordinates.
-
- \value BilinearTransform
- This object's bounding box is taken, and transformed at each of its
- corners into screen coordinates. A bilinear interpolation is then used
- to draw the rest of the object's GraphicsItem.
- \value ExactTransform
- Individual key points on the object are transformed and the GraphicsItem
- is constructed in direct pixel coordinates. This is only available for
- certain subclasses, depending on the implementation of QGeoMapData used.
-*/
-
-/*!
- Constructs a new map object associated with \a mapData.
-
- The object will be in pixel coordinates, with exact transform.
-*/
-QGeoMapObject::QGeoMapObject(QGeoMapData *mapData)
- : d_ptr(new QGeoMapObjectPrivate())
-{
- setMapData(mapData);
-}
-
-/*!
- Destroys this map object.
-*/
-QGeoMapObject::~QGeoMapObject()
-{
- setMapData(0);
- delete d_ptr;
-}
-
-/*!
- Returns the type of this map object.
-*/
-QGeoMapObject::Type QGeoMapObject::type() const
-{
-// if (d_ptr->graphicsItem)
-// return QGeoMapObject::CustomType;
-// else
- return QGeoMapObject::NullType;
-}
-
-/*!
- \property QGeoMapObject::zValue
- \brief This property holds the z-value of the map object.
-
- The z-value determines the order in which the objects are drawn on the
- screen. Objects with the same value will be drawn in the order that
- they were added to the map or map object.
-
- This is the same behaviour as QGraphicsItem.
-*/
-void QGeoMapObject::setZValue(int zValue)
-{
- if (d_ptr->zValue != zValue) {
- d_ptr->zValue = zValue;
- emit zValueChanged(d_ptr->zValue);
- }
-}
-
-int QGeoMapObject::zValue() const
-{
- return d_ptr->zValue;
-}
-
-/*!
- \property QGeoMapObject::visible
- \brief This property holds whether the map object is visible.
-*/
-void QGeoMapObject::setVisible(bool visible)
-{
- if (d_ptr->isVisible != visible) {
- d_ptr->isVisible = visible;
- emit visibleChanged(d_ptr->isVisible);
- }
-}
-
-bool QGeoMapObject::isVisible() const
-{
- return d_ptr->isVisible;
-}
-
-/*!
- \property QGeoMapObject::selected
- \brief This property holds whether the map object is selected.
-*/
-void QGeoMapObject::setSelected(bool selected)
-{
- if (d_ptr->isSelected != selected) {
- d_ptr->isSelected = selected;
- emit selectedChanged(d_ptr->isSelected);
- }
-}
-
-bool QGeoMapObject::isSelected() const
-{
- return d_ptr->isSelected;
-}
-
-/*!
- Returns a bounding box which contains this map object.
-
- The default implementation requires the object to be added to a map
- before this function returns a valid bounding box.
-*/
-QGeoBoundingBox QGeoMapObject::boundingBox() const
-{
- if (!d_ptr->info)
- return QGeoBoundingBox();
-
- return d_ptr->info->boundingBox();
-}
-
-/*!
- Returns whether \a coordinate is contained with the boundary of this
- map object.
-
- The default implementation requires the object to be added to a map
- before this function is able to return true.
-*/
-bool QGeoMapObject::contains(const QGeoCoordinate &coordinate) const
-{
- if (!d_ptr->info)
- return false;
-
- return d_ptr->info->contains(coordinate);
-}
-
-/*!
- \internal
-*/
-bool QGeoMapObject::operator<(const QGeoMapObject &other) const
-{
- return d_ptr->zValue < other.d_ptr->zValue ||
- (d_ptr->zValue == other.d_ptr->zValue && d_ptr->serial < other.d_ptr->serial);
-}
-
-/*!
- \internal
-*/
-bool QGeoMapObject::operator>(const QGeoMapObject &other) const
-{
- return d_ptr->zValue > other.d_ptr->zValue ||
- (d_ptr->zValue == other.d_ptr->zValue && d_ptr->serial > other.d_ptr->serial);
-}
-
-/*!
- Associates the QGeoMapData instance \a mapData with this map object.
-
- This will create an appropriate QGeoMapObjectInfo instance for
- this QGeoMapObject and will connect the appropriate signals to it
- so that it can be kept up to date.
-*/
-void QGeoMapObject::setMapData(QGeoMapData *mapData)
-{
- if (d_ptr->mapData == mapData)
- return;
-
- if (d_ptr->info) {
- delete d_ptr->info;
- d_ptr->info = 0;
- }
-
- d_ptr->mapData = mapData;
- if (!d_ptr->mapData)
- return;
-
- d_ptr->info = mapData->createMapObjectInfo(this);
-
- if (!d_ptr->info)
- return;
-
- connect(d_ptr->mapData,
- SIGNAL(windowSizeChanged(QSizeF)),
- d_ptr->info,
- SLOT(windowSizeChanged(QSizeF)));
- connect(d_ptr->mapData,
- SIGNAL(zoomLevelChanged(qreal)),
- d_ptr->info,
- SLOT(zoomLevelChanged(qreal)));
- connect(d_ptr->mapData,
- SIGNAL(centerChanged(QGeoCoordinate)),
- d_ptr->info,
- SLOT(centerChanged(QGeoCoordinate)));
-
- connect(this,
- SIGNAL(zValueChanged(int)),
- d_ptr->info,
- SLOT(zValueChanged(int)));
- connect(this,
- SIGNAL(visibleChanged(bool)),
- d_ptr->info,
- SLOT(visibleChanged(bool)));
- connect(this,
- SIGNAL(selectedChanged(bool)),
- d_ptr->info,
- SLOT(selectedChanged(bool)));
- connect(this,
- SIGNAL(originChanged(QGeoCoordinate)),
- d_ptr->info,
- SLOT(originChanged(QGeoCoordinate)));
- connect(this,
- SIGNAL(transformTypeChanged(QGeoMapObject::TransformType)),
- d_ptr->info,
- SLOT(transformTypeChanged(QGeoMapObject::TransformType)));
- connect(this,
- SIGNAL(unitsChanged(QGeoMapObject::CoordinateUnit)),
- d_ptr->info,
- SLOT(unitsChanged(QGeoMapObject::CoordinateUnit)));
-
- d_ptr->info->init();
-}
-
-/*!
- Returns the QGeoMapData instance associated with this object.
-
- Will return 0 if not QGeoMapData instance has been set.
-*/
-QGeoMapData* QGeoMapObject::mapData() const
-{
- return d_ptr->mapData;
-}
-
-/*!
- Returns the QGeoMapObjectInfo instance which implements the
- QGeoMapData specific behaviours of this map object.
-
- This will mostly be useful when implementing custom QGeoMapData
- subclasses.
-*/
-QGeoMapObjectInfo *QGeoMapObject::info() const
-{
- return d_ptr->info;
-}
-
-/*!
- \property QGeoMapObject::transformType
- \brief This property holds the transformation type used to draw the object.
-
- \since 1.2
-
- \sa QGeoMapObject::TransformType
-*/
-QGeoMapObject::TransformType QGeoMapObject::transformType() const
-{
- return d_ptr->transType;
-}
-
-/*!
- Sets the transform type of the object to \a type.
-*/
-void QGeoMapObject::setTransformType(const TransformType &type)
-{
- if (type == d_ptr->transType)
- return;
-
- d_ptr->transType = type;
-
- emit transformTypeChanged(type);
-}
-
-/*!
- \property QGeoMapObject::origin
- \brief This property holds the origin of the object's coordinate system.
-
- \since 1.2
-
- How the origin coordinate is used depends on the selected coordinate
- system, see QGeoMapObject::TransformType for more details.
-*/
-QGeoCoordinate QGeoMapObject::origin() const
-{
- return d_ptr->origin;
-}
-
-/*!
- Sets the origin of the object to \a origin.
-*/
-void QGeoMapObject::setOrigin(const QGeoCoordinate &origin)
-{
- if (origin == d_ptr->origin)
- return;
-
- d_ptr->origin = origin;
-
- emit originChanged(origin);
-}
-
-/*!
- \property QGeoMapObject::units
- \brief This property holds the units of measurement for the object.
-
- \since 1.2
-
- \sa QGeoMapObject::CoordinateUnit
-*/
-QGeoMapObject::CoordinateUnit QGeoMapObject::units() const
-{
- return d_ptr->units;
-}
-
-/*!
- Sets the coordinate units of the object to \a unit.
-
- Note that setting this property will reset the transformType property to
- the default for the units given. For PixelUnit, this is ExactTransform,
- and for all others, BilinearTransform.
-*/
-void QGeoMapObject::setUnits(const CoordinateUnit &unit)
-{
- if (unit == d_ptr->units)
- return;
-
- d_ptr->units = unit;
-
- if (unit == QGeoMapObject::PixelUnit)
- setTransformType(QGeoMapObject::ExactTransform);
- else
- setTransformType(QGeoMapObject::BilinearTransform);
-
- emit unitsChanged(unit);
-}
-
-/*!
-\fn void QGeoMapObject::zValueChanged(int zValue)
-
- This signal is emitted when the z value of the map object
- has changed.
-
- The new value is \a zValue.
-*/
-
-/*!
-\fn void QGeoMapObject::visibleChanged(bool visible)
-
- This signal is emitted when the visible state of the map object
- has changed.
-
- The new value is \a visible.
-*/
-
-/*!
-\fn void QGeoMapObject::selectedChanged(bool selected)
-
- This signal is emitted when the selected state of the map object
- has changed.
-
- The new vlaue is \a selected.
-*/
-
-/*!
-\fn void QGeoMapObject::originChanged(QGeoCoordinate origin)
-
- This signal is emitted when the origin of the map object has changed.
-
- The new value is \a origin.
-*/
-
-/*!
-\fn void QGeoMapObject::unitsChanged(QGeoMapObject::CoordinateUnit units)
-
- This signal is emitted when the coordinate units of the map object have changed.
-
- The new value is \a units.
-*/
-
-/*!
-\fn void QGeoMapObject::transformTypeChanged(QGeoMapObject::TransformType transformType)
-
- This signal is emitted when the transform type of the map object has changed.
-
- The new value is \a transformType.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapObjectPrivate::QGeoMapObjectPrivate()
- : zValue(0),
- serial(0),
- isVisible(true),
- isSelected(false),
- mapData(0),
- info(0),
- units(QGeoMapObject::PixelUnit),
- transType(QGeoMapObject::ExactTransform){}
-
-QGeoMapObjectPrivate::~QGeoMapObjectPrivate()
-{
- if (info)
- delete info;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-#include "moc_qgeomapobject.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapobject.h b/src/location/maps/qgeomapobject.h
deleted file mode 100644
index 11e40b25..00000000
--- a/src/location/maps/qgeomapobject.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPOBJECT_H
-#define QGEOMAPOBJECT_H
-
-#include "qmobilityglobal.h"
-
-#include <QList>
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-class QPainter;
-class QRectF;
-class QGraphicsItem;
-
-
-class QGeoCoordinate;
-class QGeoBoundingBox;
-class QGeoMapObjectPrivate;
-class QGeoMapContainer;
-class QGeoMapObjectInfo;
-
-class QGeoMapData;
-
-class Q_LOCATION_EXPORT QGeoMapObject : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int zValue READ zValue WRITE setZValue NOTIFY zValueChanged)
- Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
- Q_PROPERTY(bool selected READ isSelected WRITE setSelected NOTIFY selectedChanged)
- Q_PROPERTY(QGeoCoordinate origin READ origin NOTIFY originChanged)
- Q_PROPERTY(CoordinateUnit units READ units NOTIFY unitsChanged)
- Q_PROPERTY(TransformType transformType READ transformType NOTIFY transformTypeChanged)
-
-public:
- enum Type {
- NullType,
- GroupType,
- RectangleType,
- CircleType,
- PolylineType,
- PolygonType,
- PixmapType,
- TextType,
- RouteType,
- CustomType
- };
-
- enum CoordinateUnit {
- PixelUnit,
- MeterUnit,
- RelativeArcSecondUnit,
- AbsoluteArcSecondUnit
- };
-
- enum TransformType {
- BilinearTransform,
- ExactTransform
- };
-
- QGeoMapObject(QGeoMapData *mapData = 0);
- virtual ~QGeoMapObject();
-
- virtual Type type() const;
-
- void setZValue(int zValue);
- int zValue() const;
-
- void setVisible(bool visible);
- bool isVisible() const;
-
- void setSelected(bool selected);
- bool isSelected() const;
-
- virtual QGeoBoundingBox boundingBox() const;
- virtual bool contains(const QGeoCoordinate &coordinate) const;
-
- bool operator<(const QGeoMapObject &other) const;
- bool operator>(const QGeoMapObject &other) const;
-
- virtual void setMapData(QGeoMapData *mapData);
- virtual QGeoMapData* mapData() const;
-
- QGeoMapObjectInfo *info() const;
-
- QGeoCoordinate origin() const;
- CoordinateUnit units() const;
- TransformType transformType() const;
-
-protected:
- void setOrigin(const QGeoCoordinate &origin);
- void setUnits(const CoordinateUnit &unit);
- void setTransformType(const TransformType &type);
-
-Q_SIGNALS:
- void zValueChanged(int zValue);
- void visibleChanged(bool visible);
- void selectedChanged(bool selected);
-
- void originChanged(QGeoCoordinate origin);
- void unitsChanged(QGeoMapObject::CoordinateUnit units);
- void transformTypeChanged(QGeoMapObject::TransformType transformType);
-
-private:
- QGeoMapObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapObject)
- Q_DISABLE_COPY(QGeoMapObject)
-
- friend class QGeoMapDataPrivate;
- friend class QGeoMapGroupObject;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomapobjectengine_p.cpp b/src/location/maps/qgeomapobjectengine_p.cpp
deleted file mode 100644
index 7579b829..00000000
--- a/src/location/maps/qgeomapobjectengine_p.cpp
+++ /dev/null
@@ -1,1182 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapobjectengine_p.h"
-#include "qgeomaprouteobject.h"
-#include "qgeomapcircleobject.h"
-#include <private/qgeocoordinate_p.h>
-#include "qgeoboundingbox.h"
-#include <private/projwrapper_p.h>
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include <QTransform>
-#include <QGraphicsItem>
-#include <QGraphicsScene>
-#include <QGraphicsPolygonItem>
-#include <QGraphicsPathItem>
-#include <QGraphicsEllipseItem>
-
-#include <cmath>
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*
- A quick note about how the transforms are set up:
-
- Each QGeoMapObject has its own "local" coordinate system, whether this
- a pixel system or meters or whatever.
-
- For local systems that are not in pixels, we do a two-stage transform --
- first we transform the object to arc-seconds, then we transform from
- arc-seconds to pixels on the screen. This is necessary as QGeoMapData
- subclasses only provide a mapping from lat/lon coordinates to screen pixels
- and no other source.
-
- For local systems that are in pixels, we simply translate to the screen
- coordinates. However, we still generate a transform to arc-seconds for these
- objects, to speed up the drawing process.
-
- QGeoMapDataPrivate has two sets of 3 fields that are used here:
- - xxxTrans
- - xxxScene
- - xxxItems
- (where xxx = [latLon, pixel])
-
- xxxTrans = a multi-hash of transforms associated with each QGeoMapObject
- (a given map object may appear at more than one coordinate if
- it wraps over the dateline)
- xxxScene = a QGraphicsScene filled with bounding boxes for each object, one
- for each entry in xxxTrans
- xxxItems = a hash taking the items in the xxxScene and giving back the original
- QGeoMapObject they were created for
-
- the "latLon" entries describe the transformations from local coordinates to
- arc-seconds, and the "pixel" entries describe the transformations from local
- coordinates to pixels on screen.
-
- Items within latLonScene have their coordinates in arc-seconds, and items
- within pixelScene have theirs in pixels.
-
-*/
-
-QGeoMapObjectEngine::QGeoMapObjectEngine(QGeoMapData *mapData, QGeoMapDataPrivate *mapDataP) :
- md(mapData),
- mdp(mapDataP),
- exactMappingTolerance(1.0),
- latLonScene(new QGraphicsScene),
- pixelScene(new QGraphicsScene)
-{
- pixelScene->setItemIndexMethod(QGraphicsScene::NoIndex);
-}
-
-QGeoMapObjectEngine::~QGeoMapObjectEngine()
-{
- delete pixelScene;
- delete latLonScene;
-
- latLonTrans.clear();
- latLonItems.clear();
- latLonItemsRev.clear();
- pixelTrans.clear();
- pixelItems.clear();
- pixelItemsRev.clear();
-
- foreach (QGraphicsItem *i, latLonExact.values())
- delete i;
- latLonExact.clear();
-
- foreach (QGraphicsItem *i, pixelExact.values())
- delete i;
- pixelExact.clear();
-}
-
-/*****************************************************************************
- Object management
- *****************************************************************************/
-
-void QGeoMapObjectEngine::addObject(QGeoMapObject *object)
-{
- objectsForLatLonUpdate << object;
- objectsForPixelUpdate << object;
- updateTransforms();
- rebuildScenes();
-}
-
-void QGeoMapObjectEngine::removeObject(QGeoMapObject *object)
-{
- QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(object);
- if (group) {
- foreach (QGeoMapObject *child, group->childObjects())
- removeObject(child);
- } else {
- QList<QRectF> rectsToUpdate;
- foreach (QGraphicsItem *item, pixelItemsRev.values(object))
- rectsToUpdate << item->boundingRect();
-
- latLonTrans.remove(object);
- foreach (QGraphicsItem *item, latLonItemsRev.values(object)) {
- latLonItems.remove(item);
- latLonScene->removeItem(item);
- delete item;
- }
- latLonItemsRev.remove(object);
-
- pixelTrans.remove(object);
- foreach (QGraphicsItem *item, pixelItemsRev.values(object)) {
- pixelItems.remove(item);
- pixelScene->removeItem(item);
- delete item;
- }
- pixelItemsRev.remove(object);
-
- foreach (QRectF rect, rectsToUpdate)
- mdp->emitUpdateMapDisplay(rect);
-
- objectsForLatLonUpdate.removeAll(object);
- objectsForPixelUpdate.removeAll(object);
- }
-}
-
-/*****************************************************************************
- Transform support functions
- *****************************************************************************/
-
-static QGraphicsPolygonItem *polyCopy(const QGraphicsPolygonItem *polyItem)
-{
- QGraphicsPolygonItem *pi = new QGraphicsPolygonItem;
- pi->setBrush(polyItem->brush());
- pi->setPen(polyItem->pen());
- pi->setVisible(polyItem->isVisible());
- pi->setFillRule(polyItem->fillRule());
- pi->setOpacity(polyItem->opacity());
- pi->setGraphicsEffect(polyItem->graphicsEffect());
- return pi;
-}
-
-static QGraphicsPolygonItem *polyCopy(const QGraphicsEllipseItem *elItem)
-{
- QGraphicsPolygonItem *pi = new QGraphicsPolygonItem;
- pi->setBrush(elItem->brush());
- pi->setPen(elItem->pen());
- pi->setVisible(elItem->isVisible());
- pi->setOpacity(elItem->opacity());
- pi->setGraphicsEffect(elItem->graphicsEffect());
- return pi;
-}
-
-static QGraphicsPathItem *pathCopy(const QGraphicsPathItem *pathItem)
-{
- QGraphicsPathItem *pi = new QGraphicsPathItem;
- pi->setBrush(pathItem->brush());
- pi->setPen(pathItem->pen());
- pi->setVisible(pathItem->isVisible());
- pi->setOpacity(pathItem->opacity());
- pi->setGraphicsEffect(pathItem->graphicsEffect());
- return pi;
-}
-
-static QPolygonF approximateCircle(QGraphicsEllipseItem *elItem,
- QGeoMapObject *object,
- const QGeoCoordinate &center,
- const ProjCoordinate &projCenter)
-{
- const QRectF rect = elItem->rect();
-
- const double a = rect.height() / 2.0;
- const double b = rect.width() / 2.0;
-
- const double asq = a*a;
- const double bsq = b*b;
-
- QPolygonF secPoly;
-
- quint32 detail = 150;
- QGeoMapCircleObject *circObj = dynamic_cast<QGeoMapCircleObject*>(object);
- if (circObj)
- detail = circObj->pointCount();
-
- const double Pi = 3.14159265358;
- const double twopi = 6.283185307179;
-
- const double dth = twopi / detail;
-
- // TODO: make the semantics here the same as in normal graphicsview
- double startAngle = elItem->startAngle();
- startAngle /= 16.0;
- startAngle *= twopi;
- startAngle /= 360.0;
-
- double stopAngle = elItem->startAngle() + elItem->spanAngle();
- stopAngle /= 16.0;
- stopAngle *= twopi;
- stopAngle /= 360.0;
-
- bool drawToCenter = (elItem->spanAngle() != 360 * 16);
-
- for (double theta = startAngle; theta < stopAngle; theta += dth) {
- const double top = b*sin(theta);
- const double bottom = a*cos(theta);
-
- double phi = atan(top / bottom);
- if (bottom < 0)
- phi = phi + Pi;
-
- const double phiDeg = (360.0 * phi) / twopi;
-
- const double costh = cos(theta);
- const double sinth = sin(theta);
-
- const double r = sqrt(asq*costh*costh + bsq*sinth*sinth);
-
- double x, y;
- QGeoCoordinatePrivate::atDistanceAndAzimuth(center, r, phiDeg,
- &x, &y);
- x *= 3600.0;
- y *= 3600.0;
-
- secPoly << QPointF(x,y);
- }
-
- if (drawToCenter)
- secPoly << QPointF(projCenter.x() * 3600.0, projCenter.y() * 3600.0);
-
- return secPoly;
-}
-
-bool QGeoMapObjectEngine::exactMetersToSeconds(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QGraphicsItem *item,
- QList<QPolygonF> &polys)
-{
- QString projStr = QLatin1String("+proj=tmerc +lat_0=%1 +lon_0=%2 +k=1.0 +x_0=0 +y_0=0 +ellps=WGS84");
- projStr = projStr.arg(origin.latitude(), 0, 'f', 12)
- .arg(origin.longitude(), 0, 'f', 12);
-
- ProjCoordinateSystem localSys(projStr, false);
- ProjCoordinateSystem wgs84(QLatin1String("+proj=latlon +ellps=WGS84"));
-
- QTransform west;
- west.translate(360.0 * 3600.0, 0.0);
-
- QTransform east;
- east.translate(-360.0 * 3600.0, 0.0);
-
- foreach (QGraphicsItem *i, latLonExact.values(object))
- delete i;
- latLonExact.remove(object);
-
- QGraphicsEllipseItem *elItem = dynamic_cast<QGraphicsEllipseItem*>(item);
- if (elItem) {
- QRectF rect = elItem->rect();
-
- const QPointF cen = rect.center();
- ProjCoordinate c(cen.x(), -1*cen.y(), 0.0, localSys);
- c.convert(wgs84);
- const QGeoCoordinate center = c.toGeoCoordinate();
-
- QPolygonF wgs = approximateCircle(elItem, object, center, c);
-
- QGraphicsPolygonItem *pi = polyCopy(elItem);
- pi->setPolygon(wgs);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF westPoly = wgs * west;
- pi = polyCopy(elItem);
- pi->setPolygon(westPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF eastPoly = wgs * east;
- pi = polyCopy(elItem);
- pi->setPolygon(eastPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- return true;
- }
-
- QGraphicsPolygonItem *polyItem = dynamic_cast<QGraphicsPolygonItem*>(item);
- if (polyItem) {
- QPolygonF poly = polyItem->polygon() * polyItem->transform();
-
- ProjPolygon p(poly, localSys);
- p.scalarMultiply(1, -1, 1);
- p.convert(wgs84);
- QPolygonF wgs = p.toPolygonF(3600.0);
-
- QGraphicsPolygonItem *pi = polyCopy(polyItem);
- pi->setPolygon(wgs);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF westPoly = wgs * west;
- pi = polyCopy(polyItem);
- pi->setPolygon(westPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF eastPoly = wgs * east;
- pi = polyCopy(polyItem);
- pi->setPolygon(eastPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- return true;
- }
-
- QGraphicsPathItem *pathItem = dynamic_cast<QGraphicsPathItem*>(item);
- if (pathItem) {
- QPainterPath path = pathItem->path() * pathItem->transform();
-
- for (int i = 0; i < path.elementCount(); ++i) {
- QPainterPath::Element e = path.elementAt(i);
-
- ProjCoordinate c(e.x, -1*e.y, 0.0, localSys);
- Q_ASSERT(c.convert(wgs84));
-
- path.setElementPositionAt(i, c.x() * 3600.0, c.y() * 3600.0);
- }
-
- QGraphicsPathItem *pi = pathCopy(pathItem);
- pi->setPath(path);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPainterPath westPath = path * west;
- pi = pathCopy(pathItem);
- pi->setPath(westPath);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPainterPath eastPath = path * east;
- pi = pathCopy(pathItem);
- pi->setPath(eastPath);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- return true;
- }
-
- qWarning("QGeoMapData: did not recognize type of exact-transformed"
- "object: type #%d (object not supported for exact transform)",
- item->type());
- return false;
-}
-
-bool QGeoMapObjectEngine::exactSecondsToSeconds(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QGraphicsItem *item,
- QList<QPolygonF> &polys)
-{
- QTransform west;
- west.translate(360.0 * 3600.0, 0.0);
-
- QTransform east;
- east.translate(-360.0 * 3600.0, 0.0);
-
- QTransform toAbs;
- if (object->units() == QGeoMapObject::RelativeArcSecondUnit) {
- double ox = origin.longitude() * 3600.0;
- double oy = origin.latitude() * 3600.0;
- toAbs.translate(ox, oy);
- }
-
- foreach (QGraphicsItem *i, latLonExact.values(object))
- delete i;
- latLonExact.remove(object);
-
- QGraphicsPolygonItem *polyItem = dynamic_cast<QGraphicsPolygonItem*>(item);
- if (polyItem) {
- if (polyItem->polygon().isEmpty() || polyItem->polygon().size() < 3)
- return false;
-
- QPolygonF poly = polyItem->polygon() * polyItem->transform();
- poly = poly * toAbs;
-
- QGraphicsPolygonItem *pi = polyCopy(polyItem);
- pi->setPolygon(poly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF westPoly = poly * west;
- pi = polyCopy(polyItem);
- pi->setPolygon(westPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- QPolygonF eastPoly = poly * east;
- pi = polyCopy(polyItem);
- pi->setPolygon(eastPoly);
- latLonExact.insertMulti(object, pi);
- polys << pi->boundingRect();
-
- return true;
- }
-
- QGraphicsPathItem *pathItem = dynamic_cast<QGraphicsPathItem*>(item);
- if (pathItem) {
- if (pathItem->path().isEmpty() || pathItem->path().elementCount() < 2)
- return false;
-
- QPainterPath path = pathItem->path() * pathItem->transform();
- path = path * toAbs;
-
- QGraphicsPathItem *pi = pathCopy(pathItem);
- pi->setPath(path);
- latLonExact.insertMulti(object, pi);
- const QPolygonF originalBounds = pi->boundingRect();
- polys << originalBounds;
-
- QPainterPath westPath = path * west;
- pi = pathCopy(pathItem);
- pi->setPath(westPath);
- latLonExact.insertMulti(object, pi);
- polys << originalBounds * west;
-
- QPainterPath eastPath = path * east;
- pi = pathCopy(pathItem);
- pi->setPath(eastPath);
- latLonExact.insertMulti(object, pi);
- polys << originalBounds * east;
-
- return true;
- }
-
- qWarning("QGeoMapData: did not recognize type of exact-transformed "
- "object: type #%d (object not supported for exact transform)",
- item->type());
- return false;
-}
-
-void QGeoMapObjectEngine::bilinearMetersToSeconds(const QGeoCoordinate &origin,
- QGraphicsItem *item,
- QPolygonF &local,
- QTransform &latLon)
-{
- QString projStr = QLatin1String("+proj=tmerc +lat_0=%1 +lon_0=%2 +k=1.0 +x_0=0 +y_0=0 +ellps=WGS84");
- projStr = projStr.arg(origin.latitude(), 0, 'f', 12)
- .arg(origin.longitude(), 0, 'f', 12);
-
- ProjCoordinateSystem localSys(projStr, false);
- ProjCoordinateSystem wgs84(QLatin1String("+proj=latlon +ellps=WGS84"));
-
- ProjPolygon p(local, localSys);
- if (!p.convert(wgs84)) {
- qWarning("QGeoMapData: bilinear transform from meters to arc-seconds "
- "failed: projection is singular");
- return;
- }
- QPolygonF wgs = p.toPolygonF(3600.0);
-
- // QTransform expects the last vertex (closing vertex) to be dropped
- local.remove(4);
- wgs.remove(4);
-
- // perform wrapping
- if (wgs.at(2).x() < wgs.at(3).x()) {
- QPointF topRight = wgs.at(1);
- topRight.setX(topRight.x() + 360.0 * 3600.0);
- wgs.replace(1, topRight);
-
- QPointF bottomRight = wgs.at(2);
- bottomRight.setX(bottomRight.x() + 360.0 * 3600.0);
- wgs.replace(2, bottomRight);
- }
-
- bool ok = QTransform::quadToQuad(local, wgs, latLon);
- if (!ok) {
- qWarning("QGeoMapData: bilinear transform from meters to arc-seconds "
- "failed: could not obtain a transformation matrix");
- return;
- }
-
- QTransform flip;
- flip.scale(1, -1);
-
- latLon = flip * item->transform() * latLon;
-}
-
-void QGeoMapObjectEngine::bilinearPixelsToSeconds(const QGeoCoordinate &origin,
- QGraphicsItem *item,
- QPolygonF &local,
- QTransform &latLon)
-{
- QPointF pixelOrigin = mdp->coordinateToScreenPosition(origin.longitude(),
- origin.latitude());
-
- QPolygonF wgs;
- foreach (const QPointF &pt, local) {
- const QGeoCoordinate coord =
- md->screenPositionToCoordinate(pt + pixelOrigin);
- const QPointF lpt(coord.longitude() * 3600.0, coord.latitude() * 3600.0);
- wgs.append(lpt);
- }
-
- // QTransform expects the last vertex (closing vertex) to be dropped
- local.remove(4);
- wgs.remove(4);
-
- // perform wrapping
- if (wgs.at(2).x() < wgs.at(3).x()) {
- QPointF topRight = wgs.at(1);
- topRight.setX(topRight.x() + 360.0 * 3600.0);
- wgs.replace(1, topRight);
-
- QPointF bottomRight = wgs.at(2);
- bottomRight.setX(bottomRight.x() + 360.0 * 3600.0);
- wgs.replace(2, bottomRight);
- }
-
- bool ok = QTransform::quadToQuad(local, wgs, latLon);
- if (!ok) {
- qWarning("QGeoMapData: bilinear transform from meters to arc-seconds "
- "failed: could not obtain a transformation matrix");
- return;
- }
-
- latLon = item->transform() * latLon;
-}
-
-void QGeoMapObjectEngine::bilinearSecondsToScreen(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys)
-{
- Q_UNUSED(origin)
-
- QList<QTransform> latLons = latLonTrans.values(object);
-
- QGraphicsItem *item = graphicsItemFromMapObject(object);
- if (!item)
- return;
-
- // compute the transform by linearising from the lat/lon space
- foreach (QTransform latLon, latLons) {
- QTransform pixel;
-
-
- QPolygonF local = (item->boundingRect() | item->childrenBoundingRect());
- QPolygonF latLonPoly = latLon.map(local);
-
- QPolygonF pixelPoly = polyToScreen(latLonPoly);
-
- // QTransform expects the last vertex (closing vertex) to be dropped
- local.remove(4);
- pixelPoly.remove(4);
-
- bool ok = QTransform::quadToQuad(local, pixelPoly, pixel);
- if (!ok) {
- qWarning("QGeoMapData: bilinear transform to screen from arc-seconds "
- "failed: could not compute transformation matrix");
- return;
- }
-
- pixelTrans.insertMulti(object, pixel);
-
- polys << pixelPoly;
- }
-}
-
-struct PathStep
-{
- bool tooClose;
- QPointF pixel;
- QPainterPath::Element e;
-};
-
-void QGeoMapObjectEngine::exactPixelMap(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys)
-{
- Q_UNUSED(origin)
-
- QList<QGraphicsItem*> latLonItems = latLonExact.values(object);
-
- foreach (QGraphicsItem *i, pixelExact.values(object))
- delete i;
- pixelExact.remove(object);
-
- double tolerance = exactMappingTolerance;
- QGeoMapRouteObject *robj = qobject_cast<QGeoMapRouteObject*>(object);
- if (robj)
- tolerance = robj->detailLevel();
- // square it
- tolerance = tolerance * tolerance;
-
- foreach (QGraphicsItem *latLonItem, latLonItems) {
- QGraphicsPolygonItem *polyItem = qgraphicsitem_cast<QGraphicsPolygonItem*>(latLonItem);
- if (polyItem) {
- QPolygonF poly = polyItem->polygon();
- QPolygonF pixelPoly = polyToScreen(poly);
-
- QGraphicsPolygonItem *pi = polyCopy(polyItem);
- pi->setPolygon(pixelPoly);
- pixelExact.insertMulti(object, pi);
- polys << pi->boundingRect();
- }
-
- QGraphicsPathItem *pathItem = qgraphicsitem_cast<QGraphicsPathItem*>(latLonItem);
- if (pathItem) {
- const QPainterPath path = pathItem->path();
- const int pathSize = path.elementCount();
- QPainterPath mpath;
-
- const QRectF screen = latLonViewport().boundingRect();
-
- QPointF lastPixelAdded;
- bool lastOutside = true;
-
- struct PathStep *steps = new struct PathStep[pathSize];
-
- for (int i = 0; i < pathSize; ++i) {
- const QPainterPath::Element e = path.elementAt(i);
- steps[i].e = e;
-
- double x = e.x; x /= 3600.0;
- double y = e.y; y /= 3600.0;
-
- const QPointF pixel = mdp->coordinateToScreenPosition(x, y);
- const QPointF deltaP = (pixel - lastPixelAdded);
- const double delta = deltaP.x() * deltaP.x() + deltaP.y() * deltaP.y();
-
- steps[i].pixel = pixel;
-
- if (!lastPixelAdded.isNull() && delta < tolerance) {
- steps[i].tooClose = true;
- } else {
- steps[i].tooClose = false;
- lastPixelAdded = pixel;
- }
- }
-
- QPainterPath::Element em = steps[0].e;
-
- for (int i = 0; i < pathSize; ++i) {
- const QPainterPath::Element &e = steps[i].e;
-
- if (steps[i].tooClose)
- continue;
-
- // guilty until proven innocent
- bool outside = true;
- if (screen.contains(e.x, e.y))
- outside = false;
- if (lastOutside) {
- if (em.x < screen.left() && e.x > screen.right())
- outside = false;
- if (em.x > screen.right() && e.x < screen.left())
- outside = false;
- if (em.y < screen.bottom() && e.y > screen.top())
- outside = false;
- if (em.y > screen.top() && e.y < screen.bottom())
- outside = false;
- }
-
- // skip points not inside the screen rect
- // or attached to points inside it
- if (outside && lastOutside)
- continue;
-
- // entering the screen rect
- if (!outside && lastOutside && i > 0) {
- const QPointF lastPixel = steps[i-1].pixel;
- mpath.moveTo(lastPixel);
- }
- lastOutside = outside;
-
- QPointF pixel = steps[i].pixel;
-
- if (e.isMoveTo())
- mpath.moveTo(pixel);
- else
- mpath.lineTo(pixel);
-
- em = e;
- }
-
- delete[] steps;
-
- QGraphicsPathItem *pi = pathCopy(pathItem);
- pi->setPath(mpath);
- pixelExact.insertMulti(object, pi);
- polys << QPolygonF(pi->boundingRect());
- }
- }
-}
-
-void QGeoMapObjectEngine::pixelShiftToScreen(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys)
-{
- QGraphicsItem *item = graphicsItemFromMapObject(object);
- if (!item)
- return;
-
- const QRectF localRect = item->boundingRect()
- | item->childrenBoundingRect();
-
- // compute the transform as an origin shift
- QList<QPointF> origins;
- origins << QPointF(origin.longitude(), origin.latitude());
- origins << QPointF(origin.longitude() + 360.0, origin.latitude());
- origins << QPointF(origin.longitude() - 360.0, origin.latitude());
-
- foreach (QPointF o, origins) {
- QTransform pixel = item->transform();
- QPointF pixelOrigin = mdp->coordinateToScreenPosition(o.x(), o.y());
- pixel.translate(pixelOrigin.x(), pixelOrigin.y());
- pixelTrans.insertMulti(object, pixel);
- polys << pixel.map(localRect);
- }
-}
-
-/*****************************************************************************
- Update utility functions
- *****************************************************************************/
-
-static void _zoomDepsRecurse(QGeoMapObjectEngine *eng, QGeoMapGroupObject *group)
-{
- foreach (QGeoMapObject *obj, group->childObjects()) {
- QGeoMapGroupObject *subgroup = qobject_cast<QGeoMapGroupObject*>(obj);
- if (subgroup) {
- _zoomDepsRecurse(eng, subgroup);
- } else {
- if (obj->units() == QGeoMapObject::PixelUnit) {
- eng->objectsForLatLonUpdate << obj;
- eng->objectsForPixelUpdate << obj;
- }
- }
- }
-}
-
-void QGeoMapObjectEngine::invalidateZoomDependents()
-{
- if (mdp->containerObject)
- _zoomDepsRecurse(this, mdp->containerObject);
-}
-
-void QGeoMapObjectEngine::invalidatePixelsForViewport(bool updateNow)
-{
- QPolygonF view = latLonViewport();
-
- QList<QGraphicsItem*> itemsInView;
- itemsInView = latLonScene->items(view, Qt::IntersectsItemShape,
- Qt::AscendingOrder);
-
- QSet<QGeoMapObject*> done = objectsForPixelUpdate.toSet();
-
- foreach (QGraphicsItem *latLonItem, itemsInView) {
- QGeoMapObject *object = latLonItems.value(latLonItem);
- Q_ASSERT(object);
- if (!done.contains(object)) {
- objectsForPixelUpdate << object;
- done.insert(object);
- }
- }
-
- if (updateNow)
- mdp->emitUpdateMapDisplay();
-}
-
-void QGeoMapObjectEngine::trimPixelTransforms()
-{
- QPolygonF view = latLonViewport();
-
- QList<QGraphicsItem*> itemsInView;
- itemsInView = latLonScene->items(view, Qt::IntersectsItemShape,
- Qt::AscendingOrder);
-
- QSet<QGeoMapObject*> shouldBe;
- foreach (QGraphicsItem *latLonItem, itemsInView) {
- QGeoMapObject *object = latLonItems.value(latLonItem);
- Q_ASSERT(object);
- shouldBe.insert(object);
- }
-
- QList<QGraphicsItem*> itemsInPixels;
- itemsInPixels = pixelScene->items();
-
- QSet<QGeoMapObject*> currentlyAre;
- foreach (QGraphicsItem *pixelItem, itemsInPixels) {
- QGeoMapObject *object = pixelItems.value(pixelItem);
- Q_ASSERT(object);
- currentlyAre.insert(object);
- }
-
- QSet<QGeoMapObject*> excess = currentlyAre.subtract(shouldBe);
- foreach (QGeoMapObject *object, excess) {
- foreach (QGraphicsItem *item, pixelItemsRev.values(object)) {
- pixelScene->removeItem(item);
- pixelItems.remove(item);
- delete item;
- }
- pixelTrans.remove(object);
- pixelItemsRev.remove(object);
- }
-
- mdp->emitUpdateMapDisplay();
-}
-
-void QGeoMapObjectEngine::invalidateObject(QGeoMapObject *obj)
-{
- // force the lat lon to update now
- // otherwise we can't tell if it's supposed to be on screen
- updateLatLonTransform(obj);
-
- const QRectF view = latLonViewport().boundingRect();
-
- bool needsPixelUpdate = false;
- foreach (QGraphicsItem *item, latLonItemsRev.values(obj)) {
- if (item->boundingRect().intersects(view)) {
- needsPixelUpdate = true;
- break;
- }
- }
-
- if (needsPixelUpdate) {
- objectsForPixelUpdate << obj;
- mdp->emitUpdateMapDisplay();
- }
-}
-
-// update the transform tables as necessary
-void QGeoMapObjectEngine::updateTransforms()
-{
- bool groupUpdated = false;
-
- foreach (QGeoMapObject *obj, objectsForLatLonUpdate) {
- QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj);
- if (group) {
- updateLatLonsForGroup(group);
- groupUpdated = true;
- } else {
- updateLatLonTransform(obj);
- }
- }
-
- objectsForLatLonUpdate.clear();
-
- foreach (QGeoMapObject *obj, objectsForPixelUpdate) {
- QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj);
- if (group) {
- updatePixelsForGroup(group);
- groupUpdated = true;
- } else {
- updatePixelTransform(obj);
- }
- }
-
- objectsForPixelUpdate.clear();
-
- if (groupUpdated)
- rebuildScenes();
-}
-
-void QGeoMapObjectEngine::updatePixelsForGroup(QGeoMapGroupObject *group)
-{
- foreach (QGeoMapObject *obj, group->childObjects()) {
- QGeoMapGroupObject *subgroup = qobject_cast<QGeoMapGroupObject*>(obj);
- if (subgroup) {
- updatePixelsForGroup(subgroup);
- } else {
- updatePixelTransform(obj);
- }
- }
-}
-
-void QGeoMapObjectEngine::updateLatLonsForGroup(QGeoMapGroupObject *group)
-{
- foreach (QGeoMapObject *object, group->childObjects()) {
- QGeoMapGroupObject *subGroup = qobject_cast<QGeoMapGroupObject*>(object);
- if (subGroup)
- updateLatLonsForGroup(subGroup);
- else
- updateLatLonTransform(object);
- }
-}
-
-static void addGroupToScene(QGeoMapObjectEngine *eng, QGeoMapGroupObject *group)
-{
- foreach (QGeoMapObject *object, group->childObjects()) {
- QGeoMapGroupObject *subGroup = qobject_cast<QGeoMapGroupObject*>(object);
- if (subGroup) {
- addGroupToScene(eng, subGroup);
- } else {
- foreach (QGraphicsItem *i, eng->latLonItemsRev.values(object))
- eng->latLonScene->addItem(i);
- foreach (QGraphicsItem *i, eng->pixelItemsRev.values(object))
- eng->pixelScene->addItem(i);
- }
- }
-}
-
-void QGeoMapObjectEngine::rebuildScenes()
-{
- foreach (QGraphicsItem *i, latLonScene->items())
- latLonScene->removeItem(i);
- foreach (QGraphicsItem *i, pixelScene->items())
- pixelScene->removeItem(i);
-
- delete latLonScene;
- delete pixelScene;
-
- latLonScene = new QGraphicsScene;
- pixelScene = new QGraphicsScene;
- pixelScene->setItemIndexMethod(QGraphicsScene::NoIndex);
-
- addGroupToScene(this, mdp->containerObject);
-}
-
-/*****************************************************************************
- Actual update functions
- *****************************************************************************/
-
-void QGeoMapObjectEngine::updateLatLonTransform(QGeoMapObject *object)
-{
- QGeoCoordinate origin = object->origin();
-
- QGraphicsItem *item = graphicsItemFromMapObject(object);
-
- // skip any objects without graphicsitems
- if (!item)
- return;
-
- QRectF localRect = (item->boundingRect() | item->childrenBoundingRect());
-
- // skip any objects with invalid bounds
- if (!localRect.isValid() || localRect.isEmpty() || localRect.isNull())
- return;
-
- QPolygonF local = localRect * item->transform();
- QList<QPolygonF> polys;
-
- latLonTrans.remove(object);
-
- if (object->transformType() == QGeoMapObject::BilinearTransform ||
- object->units() == QGeoMapObject::PixelUnit) {
- QTransform latLon;
-
- if (object->units() == QGeoMapObject::MeterUnit) {
- bilinearMetersToSeconds(origin, item, local, latLon);
- } else if (object->units() == QGeoMapObject::RelativeArcSecondUnit) {
- latLon.translate(origin.longitude() * 3600.0, origin.latitude() * 3600.0);
- } else if (object->units() == QGeoMapObject::PixelUnit) {
- bilinearPixelsToSeconds(origin, item, local, latLon);
- }
-
- polys << latLon.map(localRect);
- latLonTrans.insertMulti(object, latLon);
-
- QTransform latLonWest;
- latLonWest.translate(360.0 * 3600.0, 0.0);
- latLonWest = latLon * latLonWest;
-
- polys << latLonWest.map(localRect);
- latLonTrans.insertMulti(object, latLonWest);
-
- QTransform latLonEast;
- latLonEast.translate(-360.0 * 3600.0, 0.0);
- latLonEast = latLon * latLonEast;
-
- polys << latLonEast.map(localRect);
- latLonTrans.insertMulti(object, latLonEast);
-
- } else if (object->transformType() == QGeoMapObject::ExactTransform) {
- if (object->units() == QGeoMapObject::MeterUnit) {
- if (!exactMetersToSeconds(origin, object, item, polys))
- return;
- } else if (object->units() == QGeoMapObject::AbsoluteArcSecondUnit ||
- object->units() == QGeoMapObject::RelativeArcSecondUnit) {
- if (!exactSecondsToSeconds(origin, object, item, polys))
- return;
- } else {
- qWarning("QGeoMapData: unknown units for map object");
- return;
- }
- }
-
- QList<QGraphicsItem*> items = latLonItemsRev.values(object);
- if (items.size() != polys.size()) {
- foreach (QGraphicsItem *item, items) {
- latLonScene->removeItem(item);
- latLonItems.remove(item);
- delete item;
- }
- latLonItemsRev.remove(object);
-
- foreach (QPolygonF poly, polys) {
- QGraphicsItem *item = new QGraphicsPolygonItem(poly);
- //item->setZValue(object->zValue());
- item->setVisible(true);
- latLonItems.insert(item, object);
- latLonItemsRev.insertMulti(object, item);
- latLonScene->addItem(item);
- }
- } else {
- for (int i = 0; i < polys.size(); ++i) {
- QGraphicsItem *item = items.at(i);
-
- if (!item)
- continue;
-
- QGraphicsPolygonItem *pi = dynamic_cast<QGraphicsPolygonItem*>(item);
- Q_ASSERT(pi);
- pi->setPolygon(polys.at(i));
- // pi->setZValue(object->zValue());
- }
- }
-}
-
-void QGeoMapObjectEngine::updatePixelTransform(QGeoMapObject *object)
-{
- QGeoCoordinate origin = object->origin();
- QGraphicsItem *item = graphicsItemFromMapObject(object);
-
- // skip any objects without graphicsitems
- if (!item)
- return;
-
- QRectF localRect = (item->boundingRect() | item->childrenBoundingRect());
-
- // skip any objects with invalid bounds
- if (!localRect.isValid() || localRect.isEmpty() || localRect.isNull())
- return;
-
- QList<QPolygonF> polys;
-
- pixelTrans.remove(object);
- if (object->transformType() == QGeoMapObject::BilinearTransform) {
- bilinearSecondsToScreen(origin, object, polys);
- } else if (object->transformType() == QGeoMapObject::ExactTransform) {
- if (object->units() == QGeoMapObject::PixelUnit) {
- pixelShiftToScreen(origin, object, polys);
- } else {
- exactPixelMap(origin, object, polys);
- }
- }
-
- QList<QGraphicsItem*> items = pixelItemsRev.values(object);
-
- if (items.size() != polys.size()) {
- foreach (QGraphicsItem *item, items) {
- pixelItems.remove(item);
- pixelScene->removeItem(item);
- delete item;
- }
- pixelItemsRev.remove(object);
- foreach (QPolygonF poly, polys) {
- QGraphicsPolygonItem *item = new QGraphicsPolygonItem(poly);
- //item->setZValue(object->zValue());
- item->setVisible(true);
- pixelItems.insert(item, object);
- pixelItemsRev.insertMulti(object, item);
- pixelScene->addItem(item);
- }
- } else {
- for (int i = 0; i < polys.size(); ++i) {
- QGraphicsItem *item = items.at(i);
-
- if (!item)
- continue;
-
- QGraphicsPolygonItem *pi = dynamic_cast<QGraphicsPolygonItem*>(item);
- Q_ASSERT(pi);
- pi->setPolygon(polys.at(i));
- //pi->setZValue(object->zValue());
- }
- }
-}
-
-QPolygonF QGeoMapObjectEngine::latLonViewport()
-{
- QPolygonF view;
- QGeoBoundingBox viewport = md->viewport();
- QGeoCoordinate c, c2;
- double offset = 0.0;
-
- c = viewport.bottomLeft();
- view << QPointF(c.longitude() * 3600.0, c.latitude() * 3600.0);
- c2 = viewport.bottomRight();
- if (c2.longitude() <= c.longitude())
- offset = 360.0 * 3600.0;
- view << QPointF(c2.longitude() * 3600.0 + offset, c2.latitude() * 3600.0);
- c = viewport.topRight();
- view << QPointF(c.longitude() * 3600.0 + offset, c.latitude() * 3600.0);
- c = viewport.topLeft();
- view << QPointF(c.longitude() * 3600.0, c.latitude() * 3600.0);
-
- return view;
-}
-
-QPolygonF QGeoMapObjectEngine::polyToScreen(const QPolygonF &poly)
-{
- QPolygonF r;
-#if QT_VERSION >= 0x040700
- r.reserve(poly.size());
-#endif
- foreach (QPointF pt, poly) {
- const double x = pt.x() / 3600.0;
- const double y = pt.y() / 3600.0;
- const QPointF pixel = mdp->coordinateToScreenPosition(x, y);
- r.append(pixel);
- }
- return r;
-}
-
-QGraphicsItem* QGeoMapObjectEngine::graphicsItemFromMapObject(QGeoMapObject *object)
-{
- if (!object || !object->info())
- return 0;
-
- QGeoTiledMapObjectInfo *tiledInfo
- = static_cast<QGeoTiledMapObjectInfo*>(object->info());
-
- if (tiledInfo)
- return tiledInfo->graphicsItem;
-
- return 0;
-}
-
-#include "moc_qgeomapobjectengine_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapobjectengine_p.h b/src/location/maps/qgeomapobjectengine_p.h
deleted file mode 100644
index 91d0bc97..00000000
--- a/src/location/maps/qgeomapobjectengine_p.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPOBJECTENGINE_P_H
-#define QGEOMAPOBJECTENGINE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qmobilityglobal.h"
-#include "qgeomapdata_p.h"
-#include "qgeomapdata.h"
-#include "qgeomapobject_p.h"
-#include "qgeomapobject.h"
-
-#include <QHash>
-#include <QList>
-
-QT_BEGIN_NAMESPACE
-class QTransform;
-class QGraphicsItem;
-class QGraphicsScene;
-
-
-class QGeoMapObjectEngine : public QObject
-{
- Q_OBJECT
-public:
- QGeoMapObjectEngine(QGeoMapData *mapData, QGeoMapDataPrivate *mapDataP);
- virtual ~QGeoMapObjectEngine();
-
- QGeoMapData *md;
- QGeoMapDataPrivate *mdp;
-
- double exactMappingTolerance;
-
- /*** Lookup hashes and scenes ***/
-
- QHash<const QGeoMapObject*, QGraphicsItem*> latLonExact;
- QHash<const QGeoMapObject*, QGraphicsItem*> pixelExact;
-
- QHash<const QGeoMapObject*, QTransform> latLonTrans;
- QGraphicsScene *latLonScene;
- QHash<QGraphicsItem*, QGeoMapObject*> latLonItems;
- QHash<QGeoMapObject*, QGraphicsItem*> latLonItemsRev;
-
- QHash<const QGeoMapObject*, QTransform> pixelTrans;
- QGraphicsScene *pixelScene;
- QHash<QGraphicsItem*, QGeoMapObject*> pixelItems;
- QHash<QGeoMapObject*, QGraphicsItem*> pixelItemsRev;
-
- /*** Object management ***/
-
- virtual void addObject(QGeoMapObject *object);
- virtual void removeObject(QGeoMapObject *object);
-
- /*** Updating and validity ***/
-
- virtual void updateTransforms();
-
- QList<QGeoMapObject*> objectsForPixelUpdate;
- QList<QGeoMapObject*> objectsForLatLonUpdate;
-
- virtual void updatePixelsForGroup(QGeoMapGroupObject *group);
- virtual void updateLatLonsForGroup(QGeoMapGroupObject *group);
-
- virtual void updateLatLonTransform(QGeoMapObject *object);
- virtual void updatePixelTransform(QGeoMapObject *object);
-
- virtual void rebuildScenes();
-
- virtual void invalidateObject(QGeoMapObject *obj);
- virtual void invalidateZoomDependents();
- virtual void invalidatePixelsForViewport(bool updateNow=true);
- virtual void trimPixelTransforms();
-
-public:
-
- /*** Exact transform functions ***/
-
- // these are virtual so subclasses can add new types
- // of exact transform
- virtual bool exactMetersToSeconds(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QGraphicsItem *item,
- QList<QPolygonF> &polys);
- virtual bool exactSecondsToSeconds(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QGraphicsItem *item,
- QList<QPolygonF> &polys);
-
- virtual void exactPixelMap(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys);
-
- /*** Bilinear transforms ***/
-
- void bilinearMetersToSeconds(const QGeoCoordinate &origin,
- QGraphicsItem *item,
- QPolygonF &local,
- QTransform &latLon);
- void bilinearPixelsToSeconds(const QGeoCoordinate &origin,
- QGraphicsItem *item,
- QPolygonF &local,
- QTransform &latLon);
- void bilinearSecondsToScreen(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys);
-
- /*** Pixel shift transforms ***/
-
- void pixelShiftToScreen(const QGeoCoordinate &origin,
- QGeoMapObject *object,
- QList<QPolygonF> &polys);
-
- /*** Misc ***/
- virtual QGraphicsItem* graphicsItemFromMapObject(QGeoMapObject *object);
-
-private:
- /*** Internal helpers ***/
- QPolygonF latLonViewport();
- QPolygonF polyToScreen(const QPolygonF &poly);
-
- Q_DISABLE_COPY(QGeoMapObjectEngine)
-};
-
-QT_END_NAMESPACE
-
-#endif // QGEOMAPOBJECTENGINE_P_H
diff --git a/src/location/maps/qgeomapobjectinfo.cpp b/src/location/maps/qgeomapobjectinfo.cpp
deleted file mode 100644
index eeefcb8a..00000000
--- a/src/location/maps/qgeomapobjectinfo.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapobjectinfo.h"
-#include "qgeomapobjectinfo_p.h"
-
-#include "qgeomapdata.h"
-#include "qgeomapdata_p.h"
-#include "qgeomapobject.h"
-#include "qgeomapobject_p.h"
-#include "qgeoboundingbox.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapObjectInfo
- \brief The QGeoMapObjectInfo class is the base class used to define the
- parts of QGeoMapObject and its subclasses that are specific to a
- particular QGeoMapData subclass.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-impl
-
- Most of the mapping functionality is provided by a QGeoMapData subclass,
- including the rendering of the map itself.
-
- This means that QGeoMapData subclasses need to be able to render each of
- the QGeoMapObject instances and instances of the QGeoMapObject subclasses.
-
- Furthermore, the need to be able to create and manipulate map objects
- independently from the QGeoMapData instance precludes the use of a set of
- factory methods for creating QGeoMapData specific map objects.
-
- The QGeoMapObjectInfo class is used to provide the QGeoMapData subclass
- specific behaviours for the map objects in a way which fulfils this need,
- as the QGeoMapObjectInfo instances are only created at the point when a
- map object becomes associated with a QGeoMapData subclass - which is most
- commonly when the object is added to a QGraphicsGeoMap.
-*/
-
-/*!
- Constructs a new object info instance which will provide the behaviours of
- \a mapObject which are specific to \a mapData.
-*/
-QGeoMapObjectInfo::QGeoMapObjectInfo(QGeoMapData *mapData, QGeoMapObject *mapObject)
- : QObject(mapObject),
- d_ptr(new QGeoMapObjectInfoPrivate(mapData, mapObject)) {}
-
-/*!
- Destroys this info object.
-*/
-QGeoMapObjectInfo::~QGeoMapObjectInfo()
-{
- delete d_ptr;
-}
-
-/*!
- This function is run after the constructor.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::init() {}
-
-/*!
- This function is called when the window size of the map changes to
- \a windowSize.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::windowSizeChanged(const QSizeF &windowSize)
-{
- Q_UNUSED(windowSize)
-}
-
-/*!
- This function is called when the zoom level of the map changes to
- \a zoomLevel.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::zoomLevelChanged(qreal zoomLevel)
-{
- Q_UNUSED(zoomLevel)
-}
-
-/*!
- This function is called when the center of the map changes to
- \a coordinate.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::centerChanged(const QGeoCoordinate &coordinate)
-{
- Q_UNUSED(coordinate)
-}
-
-/*!
- This function is run when the z value of the object changes to \a zValue.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::zValueChanged(int zValue)
-{
- Q_UNUSED(zValue)
-}
-
-/*!
- This function is run when the visible state of the object changes to
- \a visible.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::visibleChanged(bool visible)
-{
- Q_UNUSED(visible)
-}
-
-/*!
- This function is run when the selected state of the object changes to
- \a selected.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::selectedChanged(bool selected)
-{
- Q_UNUSED(selected)
-}
-
-/*!
- This function is run when the origin of the object changes to
- \a origin.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::originChanged(const QGeoCoordinate &origin)
-{
- Q_UNUSED(origin);
-}
-
-/*!
- This function is run when the coordinate units of the object changes to
- \a units.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::unitsChanged(QGeoMapObject::CoordinateUnit units)
-{
- Q_UNUSED(units);
-}
-
-/*!
- This function is run when the transform type of the object changes to
- \a transformType.
-
- The default implementation does nothing.
-*/
-void QGeoMapObjectInfo::transformTypeChanged(QGeoMapObject::TransformType transformType)
-{
- Q_UNUSED(transformType);
-}
-
-/*!
- Returns a bounding box which contains this map object.
-
- The default implementation returns an invalid bounding box.
-*/
-QGeoBoundingBox QGeoMapObjectInfo::boundingBox() const
-{
- return QGeoBoundingBox();
-}
-
-/*!
- Returns whether \a coordinate is contained with the boundary of this
- map object.
-
- The default implementation returns false.
-*/
-bool QGeoMapObjectInfo::contains(const QGeoCoordinate &coordinate) const
-{
- Q_UNUSED(coordinate)
- return false;
-}
-
-/*!
- Returns the QGeoMapData instance associated with this info object.
-*/
-QGeoMapData* QGeoMapObjectInfo::mapData()
-{
- return d_ptr->mapData;
-}
-
-// Need to keep this for BC, otherwise would probably replace with const
-// version
-/*!
- Returns the QGeoMapObject instance associated with this info object.
-*/
-QGeoMapObject* QGeoMapObjectInfo::mapObject()
-{
- return d_ptr->mapObject;
-}
-
-/*!
- Returns the QGeoMapObject instance associated with this info object.
-*/
-QGeoMapObject* QGeoMapObjectInfo::mapObject() const
-{
- return d_ptr->mapObject;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapObjectInfoPrivate::QGeoMapObjectInfoPrivate(QGeoMapData *mapData, QGeoMapObject *mapObject)
- : mapData(mapData),
- mapObject(mapObject) {}
-
-QGeoMapObjectInfoPrivate::~QGeoMapObjectInfoPrivate() {}
-
-/*******************************************************************************
-*******************************************************************************/
-
-#include "moc_qgeomapobjectinfo.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapoverlay.cpp b/src/location/maps/qgeomapoverlay.cpp
deleted file mode 100644
index 8ee2e80d..00000000
--- a/src/location/maps/qgeomapoverlay.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomapoverlay.h"
-#include "qgeomapoverlay_p.h"
-
-#include "qgeomapdata.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapOverlay
- \brief The QGeoMapOverlay class is used to draw overlays on the map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping
-
- This allows for general drawing to occur in overlays above the map.
-*/
-
-/*!
- Constructs a new map overlay object.
-*/
-QGeoMapOverlay::QGeoMapOverlay()
- : d_ptr(new QGeoMapOverlayPrivate()) {}
-
-/*!
- Destroys this map overlay object.
-*/
-QGeoMapOverlay::~QGeoMapOverlay()
-{
- delete d_ptr;
-}
-
-/*!
-\fn void QGeoMapOverlay::paint(QPainter *painter, const QStyleOptionGraphicsItem *option)
-
-Paints the overlay on \a painter, using the options \a option.
-*/
-
-/*!
- \internal
-*/
-void QGeoMapOverlay::setMapData(QGeoMapData * mapData)
-{
- d_ptr->mapData = mapData;
-}
-
-/*!
- Returns the QGeoMapData instance that this overlay is associated, or 0
- if there is not such instance.
-
- The QGeoMapData instance provides access to information such as the
- zoom level and viewport position as well as methods to convert
- screen positions to coordinates and vice-versa.
-*/
-QGeoMapData const * QGeoMapOverlay::mapData() const
-{
- return d_ptr->mapData;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapOverlayPrivate::QGeoMapOverlayPrivate()
- : mapData(0) {}
-
-
-QGeoMapOverlayPrivate::~QGeoMapOverlayPrivate() {}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomappingmanager.cpp b/src/location/maps/qgeomappingmanager.cpp
index 23027fa8..adc65691 100644
--- a/src/location/maps/qgeomappingmanager.cpp
+++ b/src/location/maps/qgeomappingmanager.cpp
@@ -42,7 +42,9 @@
#include "qgeomappingmanager.h"
#include "qgeomappingmanager_p.h"
#include "qgeomappingmanagerengine.h"
+#include "qgeotiledmapreply.h"
+#include <QTimer>
#include <QNetworkProxy>
#include <QLocale>
@@ -90,11 +92,36 @@ QGeoMappingManager::QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject
d_ptr(new QGeoMappingManagerPrivate)
{
d_ptr->engine = engine;
- if (d_ptr->engine) {
- d_ptr->engine->setParent(this);
- } else {
+ if (!d_ptr->engine) {
qFatal("The mapping manager engine that was set for this mapping manager was NULL.");
}
+
+ d_ptr->thread= new QThread;
+
+ connect(d_ptr->engine,
+ SIGNAL(tileFinished(TileSpec,QByteArray)),
+ this,
+ SIGNAL(tileFinished(TileSpec,QByteArray)),
+ Qt::QueuedConnection);
+ connect(d_ptr->engine,
+ SIGNAL(tileError(TileSpec,QString)),
+ this,
+ SIGNAL(tileError(TileSpec,QString)),
+ Qt::QueuedConnection);
+ connect(d_ptr->engine,
+ SIGNAL(queueFinished()),
+ this,
+ SIGNAL(queueFinished()),
+ Qt::QueuedConnection);
+
+ connect(d_ptr->thread,
+ SIGNAL(started()),
+ d_ptr->engine,
+ SLOT(threadStarted()),
+ Qt::QueuedConnection);
+
+ d_ptr->engine->moveToThread(d_ptr->thread);
+ QTimer::singleShot(0, d_ptr->thread, SLOT(start()));
}
/*!
@@ -129,29 +156,47 @@ int QGeoMappingManager::managerVersion() const
return d_ptr->engine->managerVersion();
}
-/*!
- Returns a new QGeoMapData instance which will be managed by this manager.
-*/
-QGeoMapData* QGeoMappingManager::createMapData()
+void QGeoMappingManager::requestTiles(const QList<TileSpec> &tiles)
{
- return d_ptr->engine->createMapData();
+ QMetaObject::invokeMethod(d_ptr->engine, "requestTiles",
+ Qt::QueuedConnection,
+ Q_ARG(QList<TileSpec>, tiles));
}
-/*!
- Returns a list of the map types supported by this manager.
-*/
-QList<QGraphicsGeoMap::MapType> QGeoMappingManager::supportedMapTypes() const
-{
- return d_ptr->engine->supportedMapTypes();
-}
-
-/*!
- Returns a list of the connectivity modes supported by this manager.
-*/
-QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManager::supportedConnectivityModes() const
-{
- return d_ptr->engine->supportedConnectivityModes();
-}
+//QGeoTiledMapReply* QGeoMappingManager::getTileImage(const TileSpec &spec)
+//{
+// qWarning() << d_ptr->engine->minimumZoomLevel() << d_ptr->engine->maximumZoomLevel();
+// QGeoTiledMapReply* reply = d_ptr->engine->getTileImage(spec);
+
+// connect(reply, SIGNAL(finished()), this, SLOT(tileFinished()));
+
+// return reply;
+//}
+
+//void QGeoMappingManager::tileFinished()
+//{
+// QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender());
+// if (!reply)
+// return;
+
+// emit finished(reply);
+//}
+
+///*!
+// Returns a list of the map types supported by this manager.
+//*/
+//QList<QGraphicsGeoMap::MapType> QGeoMappingManager::supportedMapTypes() const
+//{
+// return d_ptr->engine->supportedMapTypes();
+//}
+
+///*!
+// Returns a list of the connectivity modes supported by this manager.
+//*/
+//QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManager::supportedConnectivityModes() const
+//{
+// return d_ptr->engine->supportedConnectivityModes();
+//}
/*!
Returns the minimum zoom level supported by this manager.
@@ -214,18 +259,6 @@ qreal QGeoMappingManager::maximumTilt() const
}
/*!
- Returns whether custom map objects are supported by this engine.
-
- Custom map objects are map objects based on QGraphicsItem instances, which
- are hard to support in cases where the map rendering is not being
- performed by the Qt Graphics View framwork.
-*/
-bool QGeoMappingManager::supportsCustomMapObjects() const
-{
- return d_ptr->engine->supportsCustomMapObjects();
-}
-
-/*!
Sets the locale to be used by the this manager to \a locale.
If this mapping manager supports returning map labels
@@ -257,6 +290,7 @@ QGeoMappingManagerPrivate::~QGeoMappingManagerPrivate()
{
if (engine)
delete engine;
+ delete thread;
}
#include "moc_qgeomappingmanager.cpp"
diff --git a/src/location/maps/qgeomappingmanager.h b/src/location/maps/qgeomappingmanager.h
index d2e51b32..59c9b57d 100644
--- a/src/location/maps/qgeomappingmanager.h
+++ b/src/location/maps/qgeomappingmanager.h
@@ -42,7 +42,9 @@
#ifndef QGEOMAPPINGMANAGER_H
#define QGEOMAPPINGMANAGER_H
-#include "qgraphicsgeomap.h"
+//#include "qgraphicsgeomap.h"
+
+#include "qmobilityglobal.h"
#include <QObject>
#include <QSize>
@@ -54,12 +56,14 @@ class QLocale;
class QGeoBoundingBox;
class QGeoCoordinate;
-class QGeoMapData;
class QGeoMappingManagerPrivate;
class QGeoMapRequestOptions;
class QGeoMappingManagerEngine;
+class QGeoTiledMapReply;
+class TileSpec;
+
class Q_LOCATION_EXPORT QGeoMappingManager : public QObject
{
Q_OBJECT
@@ -70,10 +74,20 @@ public:
QString managerName() const;
int managerVersion() const;
- QGeoMapData* createMapData();
-
- QList<QGraphicsGeoMap::MapType> supportedMapTypes() const;
- QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const;
+ void requestTiles(const QList<TileSpec> &tiles);
+
+ /*
+ Possibly replace the MapType enum with some kind of struct / class
+ MapLayer {
+ enum? type
+ QString key;
+ QString description;
+ }
+ where enum includes things like street, satellite (day), satellite (night), traffic
+ but _really_ needs to include custom so people can go wild with layers
+ */
+// QList<QGraphicsGeoMap::MapType> supportedMapTypes() const;
+// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const;
qreal minimumZoomLevel() const;
qreal maximumZoomLevel() const;
@@ -84,11 +98,14 @@ public:
qreal minimumTilt() const;
qreal maximumTilt() const;
- bool supportsCustomMapObjects() const;
-
void setLocale(const QLocale &locale);
QLocale locale() const;
+signals:
+ void tileFinished(const TileSpec &spec, const QByteArray &bytes);
+ void tileError(const TileSpec &spec, const QString &errorString);
+ void queueFinished();
+
private:
QGeoMappingManager(QGeoMappingManagerEngine *engine, QObject *parent = 0);
diff --git a/src/location/maps/qgeomappingmanager_p.h b/src/location/maps/qgeomappingmanager_p.h
index fa0cbbca..73688384 100644
--- a/src/location/maps/qgeomappingmanager_p.h
+++ b/src/location/maps/qgeomappingmanager_p.h
@@ -53,10 +53,11 @@
// We mean it.
//
-#include "qgraphicsgeomap.h"
+#include "qmobilityglobal.h"
#include <QSize>
#include <QList>
+#include <QThread>
QT_BEGIN_NAMESPACE
@@ -68,6 +69,7 @@ public:
QGeoMappingManagerPrivate();
~QGeoMappingManagerPrivate();
+ QThread *thread;
QGeoMappingManagerEngine *engine;
private:
diff --git a/src/location/maps/qgeomappingmanagerengine.cpp b/src/location/maps/qgeomappingmanagerengine.cpp
index 362ec23f..df1f464f 100644
--- a/src/location/maps/qgeomappingmanagerengine.cpp
+++ b/src/location/maps/qgeomappingmanagerengine.cpp
@@ -41,6 +41,8 @@
#include "qgeomappingmanagerengine.h"
#include "qgeomappingmanagerengine_p.h"
+#include "qgeotiledmapreply.h"
+#include "tilespec.h"
#include <QNetworkProxy>
@@ -76,7 +78,7 @@ QGeoMappingManagerEngine::QGeoMappingManagerEngine(const QMap<QString, QVariant>
: QObject(parent),
d_ptr(new QGeoMappingManagerEnginePrivate())
{
- Q_UNUSED(parameters)
+ d_ptr->parameters = parameters;
}
/*!
@@ -95,6 +97,124 @@ QGeoMappingManagerEngine::~QGeoMappingManagerEngine()
delete d;
}
+QMap<QString, QVariant> QGeoMappingManagerEngine::parameters() const
+{
+ Q_D(const QGeoMappingManagerEngine);
+ return d->parameters;
+}
+
+void QGeoMappingManagerEngine::init()
+{
+}
+
+void QGeoMappingManagerEngine::threadStarted()
+{
+ Q_D(QGeoMappingManagerEngine);
+
+ init();
+
+ d->timer_ = new QTimer(this);
+
+ d->timer_->setInterval(0);
+
+ connect(d->timer_,
+ SIGNAL(timeout()),
+ this,
+ SLOT(requestNextTile()));
+
+ d->started_ = true;
+ if (!d->queue_.isEmpty())
+ d->timer_->start();
+}
+
+
+void QGeoMappingManagerEngine::requestTiles(const QList<TileSpec> &tiles)
+{
+ Q_D(QGeoMappingManagerEngine);
+
+ if (!d->started_) {
+ d->queue_ = tiles;
+ return;
+ }
+
+ for (int i = 0; i < d->queue_.size(); ++i) {
+ QGeoTiledMapReply* reply = d->invmap_.value(d->queue_.at(i), 0);
+ if (reply) {
+ reply->abort();
+ d->map_.remove(reply);
+ d->invmap_.remove(d->queue_.at(i));
+ reply->deleteLater();
+ }
+ }
+
+ d->queue_ = tiles;
+
+ if (!d->queue_.empty())
+ d->timer_->start();
+}
+
+void QGeoMappingManagerEngine::requestNextTile()
+{
+ Q_D(QGeoMappingManagerEngine);
+
+ TileSpec ts = d->queue_.takeFirst();
+
+ QGeoTiledMapReply *reply = getTileImage(ts);
+
+ if (reply->isFinished()) {
+ handleReply(reply, ts);
+ } else {
+ connect(reply,
+ SIGNAL(finished()),
+ this,
+ SLOT(finished()));
+
+ d->map_.insert(reply, ts);
+ d->invmap_.insert(ts, reply);
+ }
+
+ if (d->queue_.isEmpty())
+ d->timer_->stop();
+}
+
+void QGeoMappingManagerEngine::finished()
+{
+ Q_D(QGeoMappingManagerEngine);
+
+ QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender());
+ if (!reply)
+ return;
+
+ if (!d->map_.contains(reply)) {
+ reply->deleteLater();
+ return;
+ }
+
+ TileSpec spec = d->map_.value(reply);
+
+ d->map_.remove(reply);
+ d->invmap_.remove(spec);
+
+ handleReply(reply, spec);
+}
+
+void QGeoMappingManagerEngine::handleReply(QGeoTiledMapReply *reply, const TileSpec &spec)
+{
+ Q_D(QGeoMappingManagerEngine);
+
+ if (reply->error() == QGeoTiledMapReply::NoError) {
+ QByteArray bytes = reply->mapImageData();
+ emit tileFinished(spec, bytes);
+ } else {
+ emit tileError(spec, reply->errorString());
+ }
+
+ if (d->queue_.isEmpty())
+ emit queueFinished();
+
+ reply->deleteLater();
+}
+
/*!
Sets the name which this engine implementation uses to distinguish itself
from the implementations provided by other plugins to \a managerName.
@@ -141,42 +261,23 @@ int QGeoMappingManagerEngine::managerVersion() const
return d_ptr->managerVersion;
}
-/*!
-\fn QGeoMapData* QGeoMappingManagerEngine::createMapData()
-
- Returns a new QGeoMapData instance which will be managed by
- this manager.
-
- A QGeoMapData instance contains and manages the information about
- what a QGraphicsGeoMap is looking at. A single manager can be used by several
- QGraphicsGeoMap instances since each instance has an associated QGeoMapData instance.
-
- The QGeoMapData instance can be treated as a kind of session object, or
- as a model in a model-view-controller architecture, with QGraphicsGeoMap
- as the view and QGeoMappingManagerEngine as the controller.
-
- Subclasses of QGeoMappingManagerEngine are free to override this function
- to return subclasses of QGeoMapData in order to customize the
- map.
-*/
-
-/*!
- Returns a list of the map types supported by this engine.
-*/
-QList<QGraphicsGeoMap::MapType> QGeoMappingManagerEngine::supportedMapTypes() const
-{
- Q_D(const QGeoMappingManagerEngine);
- return d->supportedMapTypes;
-}
-
-/*!
- Returns a list of the connectivity modes supported by this engine.
-*/
-QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManagerEngine::supportedConnectivityModes() const
-{
- Q_D(const QGeoMappingManagerEngine);
- return d->supportedConnectivityModes;
-}
+///*!
+// Returns a list of the map types supported by this engine.
+//*/
+//QList<QGraphicsGeoMap::MapType> QGeoMappingManagerEngine::supportedMapTypes() const
+//{
+// Q_D(const QGeoMappingManagerEngine);
+// return d->supportedMapTypes;
+//}
+
+///*!
+// Returns a list of the connectivity modes supported by this engine.
+//*/
+//QList<QGraphicsGeoMap::ConnectivityMode> QGeoMappingManagerEngine::supportedConnectivityModes() const
+//{
+// Q_D(const QGeoMappingManagerEngine);
+// return d->supportedConnectivityModes;
+//}
/*!
Returns the minimum zoom level supported by this engine.
@@ -203,32 +304,44 @@ qreal QGeoMappingManagerEngine::maximumZoomLevel() const
return d->maximumZoomLevel;
}
-/*!
- Sets the list of map types supported by this engine to \a mapTypes.
-
- Subclasses of QGeoMappingManagerEngine should use this function to ensure
- that supportedMapTypes() provides accurate information.
-*/
-void QGeoMappingManagerEngine::setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes)
+///*!
+// Sets the list of map types supported by this engine to \a mapTypes.
+
+// Subclasses of QGeoMappingManagerEngine should use this function to ensure
+// that supportedMapTypes() provides accurate information.
+//*/
+//void QGeoMappingManagerEngine::setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes)
+//{
+// Q_D(QGeoMappingManagerEngine);
+// d->supportedMapTypes = mapTypes;
+//}
+
+///*!
+// Sets the list of connectivity modes supported by this engine to \a connectivityModes.
+
+// Subclasses of QGeoMappingManagerEngine should use this function to ensure
+// that supportedConnectivityModes() provides accurate information.
+
+// If createMapData does not specify a connectivity mode the first mode from
+// \a connectivityModes will be used, or QGraphicsGeoMap::NoConnectivity will
+// be used if \a connectivityModes is empty.
+//*/
+//void QGeoMappingManagerEngine::setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes)
+//{
+// Q_D(QGeoMappingManagerEngine);
+// d->supportedConnectivityModes = connectivityModes;
+//}
+
+void QGeoMappingManagerEngine::setTileSize(const QSize &tileSize)
{
Q_D(QGeoMappingManagerEngine);
- d->supportedMapTypes = mapTypes;
+ d->tileSize = tileSize;
}
-/*!
- Sets the list of connectivity modes supported by this engine to \a connectivityModes.
-
- Subclasses of QGeoMappingManagerEngine should use this function to ensure
- that supportedConnectivityModes() provides accurate information.
-
- If createMapData does not specify a connectivity mode the first mode from
- \a connectivityModes will be used, or QGraphicsGeoMap::NoConnectivity will
- be used if \a connectivityModes is empty.
-*/
-void QGeoMappingManagerEngine::setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes)
+QSize QGeoMappingManagerEngine::tileSize() const
{
- Q_D(QGeoMappingManagerEngine);
- d->supportedConnectivityModes = connectivityModes;
+ Q_D(const QGeoMappingManagerEngine);
+ return d->tileSize;
}
/*!
@@ -364,32 +477,6 @@ void QGeoMappingManagerEngine::setSupportsTilting(bool supportsTilting)
}
/*!
- Returns whether custom map objects are supported by this engine.
-
- Custom map objects are map objects based on QGraphicsItem instances, which
- are hard to support in cases where the map rendering is not being
- performed by the Qt Graphics View framwork.
-*/
-bool QGeoMappingManagerEngine::supportsCustomMapObjects() const
-{
- Q_D(const QGeoMappingManagerEngine);
- return d->supportsCustomMapObjects;
-}
-
-/*!
- Sets whether custom map objects are supported by this engine to \a supportsCustomMapObjects.
-
- Custom map objects are map objects based on QGraphicsItem instances, which
- are hard to support in cases where the map rendering is not being
- performed by the Qt Graphics View framwork.
-*/
-void QGeoMappingManagerEngine::setSupportsCustomMapObjects(bool supportsCustomMapObjects)
-{
- Q_D(QGeoMappingManagerEngine);
- d->supportsCustomMapObjects = supportsCustomMapObjects;
-}
-
-/*!
Sets the locale to be used by the this manager to \a locale.
If this mapping manager supports returning map labels
@@ -422,7 +509,7 @@ QGeoMappingManagerEnginePrivate::QGeoMappingManagerEnginePrivate()
supportsTilting(false),
minimumTilt(0.0),
maximumTilt(0.0),
- supportsCustomMapObjects(false) {}
+ started_(false) {}
QGeoMappingManagerEnginePrivate::~QGeoMappingManagerEnginePrivate() {}
diff --git a/src/location/maps/qgeomappingmanagerengine.h b/src/location/maps/qgeomappingmanagerengine.h
index f8dd9872..be15438c 100644
--- a/src/location/maps/qgeomappingmanagerengine.h
+++ b/src/location/maps/qgeomappingmanagerengine.h
@@ -42,7 +42,9 @@
#ifndef QGEOMAPPINGMANAGERENGINE_H
#define QGEOMAPPINGMANAGERENGINE_H
-#include "qgraphicsgeomap.h"
+//#include "qgraphicsgeomap.h"
+
+#include "qmobilityglobal.h"
#include <QObject>
#include <QSize>
@@ -60,6 +62,9 @@ class QGeoMapRequestOptions;
class QGeoMappingManagerEnginePrivate;
+class QGeoTiledMapReply;
+class TileSpec;
+
class Q_LOCATION_EXPORT QGeoMappingManagerEngine : public QObject
{
Q_OBJECT
@@ -68,13 +73,15 @@ public:
QGeoMappingManagerEngine(const QMap<QString, QVariant> &parameters, QObject *parent = 0);
virtual ~QGeoMappingManagerEngine();
+ QMap<QString, QVariant> parameters() const;
+
QString managerName() const;
int managerVersion() const;
- virtual QGeoMapData* createMapData() = 0;
+// QList<QGraphicsGeoMap::MapType> supportedMapTypes() const;
+// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const;
- QList<QGraphicsGeoMap::MapType> supportedMapTypes() const;
- QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes() const;
+ QSize tileSize() const;
qreal minimumZoomLevel() const;
qreal maximumZoomLevel() const;
@@ -85,16 +92,31 @@ public:
qreal minimumTilt() const;
qreal maximumTilt() const;
- bool supportsCustomMapObjects() const;
-
void setLocale(const QLocale &locale);
QLocale locale() const;
+ virtual void init();
+
+public slots:
+ void threadStarted();
+ void requestTiles(const QList<TileSpec> &tiles);
+
+private slots:
+ void requestNextTile();
+ void finished();
+
+signals:
+ void tileFinished(const TileSpec &spec, const QByteArray &bytes);
+ void tileError(const TileSpec &spec, const QString &errorString);
+ void queueFinished();
+
protected:
QGeoMappingManagerEngine(QGeoMappingManagerEnginePrivate *dd, QObject *parent = 0);
- void setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes);
- void setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes);
+// void setSupportedMapTypes(const QList<QGraphicsGeoMap::MapType> &mapTypes);
+// void setSupportedConnectivityModes(const QList<QGraphicsGeoMap::ConnectivityMode> &connectivityModes);
+
+ void setTileSize(const QSize &tileSize);
void setMinimumZoomLevel(qreal minimumZoom);
void setMaximumZoomLevel(qreal maximumZoom);
@@ -105,11 +127,13 @@ protected:
void setSupportsBearing(bool supportsBearing);
void setSupportsTilting(bool supportsTilting);
- void setSupportsCustomMapObjects(bool supportsCustomMapObjects);
-
QGeoMappingManagerEnginePrivate* d_ptr;
private:
+ virtual QGeoTiledMapReply* getTileImage(const TileSpec &spec) = 0;
+
+ void handleReply(QGeoTiledMapReply *reply, const TileSpec &spec);
+
void setManagerName(const QString &managerName);
void setManagerVersion(int managerVersion);
diff --git a/src/location/maps/qgeomappingmanagerengine_p.h b/src/location/maps/qgeomappingmanagerengine_p.h
index 95decae5..f244c639 100644
--- a/src/location/maps/qgeomappingmanagerengine_p.h
+++ b/src/location/maps/qgeomappingmanagerengine_p.h
@@ -53,11 +53,16 @@
// We mean it.
//
-#include "qgraphicsgeomap.h"
+//#include "qgraphicsgeomap.h"
#include <QSize>
#include <QList>
+#include <QMap>
#include <QLocale>
+#include <QTimer>
+
+class TileSpec;
+class QGeoTiledMapReply;
QT_BEGIN_NAMESPACE
@@ -67,21 +72,29 @@ public:
QGeoMappingManagerEnginePrivate();
virtual ~QGeoMappingManagerEnginePrivate();
+ QMap<QString, QVariant> parameters;
+
QString managerName;
int managerVersion;
- QList<QGraphicsGeoMap::MapType> supportedMapTypes;
- QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes;
+// QList<QGraphicsGeoMap::MapType> supportedMapTypes;
+// QList<QGraphicsGeoMap::ConnectivityMode> supportedConnectivityModes;
+ QSize tileSize;
qreal minimumZoomLevel;
qreal maximumZoomLevel;
bool supportsBearing;
bool supportsTilting;
qreal minimumTilt;
qreal maximumTilt;
- bool supportsCustomMapObjects;
QLocale locale;
+ bool started_;
+ QTimer *timer_;
+ QList<TileSpec> queue_;
+ QHash<QGeoTiledMapReply*, TileSpec> map_;
+ QHash<TileSpec, QGeoTiledMapReply*> invmap_;
+
private:
Q_DISABLE_COPY(QGeoMappingManagerEnginePrivate)
};
diff --git a/src/location/maps/qgeomappixmapobject.cpp b/src/location/maps/qgeomappixmapobject.cpp
deleted file mode 100644
index 3b5a6a74..00000000
--- a/src/location/maps/qgeomappixmapobject.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomappixmapobject.h"
-#include "qgeomappixmapobject_p.h"
-#include "qgeoboundingbox.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapPixmapObject
- \brief The QGeoMapPixmapObject class is a QGeoMapObject used to draw
- a pixmap on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The pixmap object is rendered such that the upper left corner of
- QGeoMapPixmapObject::pixmap will be drawn QGeoMapPixmapObject::offset
- pixels away from the position of QGeoMapPixmapObject::coordinate on the
- map.
-*/
-
-/*!
- Constructs a new pixmap object.
-*/
-QGeoMapPixmapObject::QGeoMapPixmapObject()
- : d_ptr(new QGeoMapPixmapObjectPrivate())
-{
-}
-
-/*!
- Constructs a new pixmap object which will draw the pixmap \a pixmap at an
- offset of \a offset pixels from the coordinate \a coordinate.
-*/
-QGeoMapPixmapObject::QGeoMapPixmapObject(const QGeoCoordinate &coordinate, const QPoint &offset, const QPixmap &pixmap)
- : d_ptr(new QGeoMapPixmapObjectPrivate())
-{
- setOrigin(coordinate);
- d_ptr->pixmap = pixmap;
- d_ptr->offset = offset;
-}
-
-/*!
- Destroys this pixmap object.
-*/
-QGeoMapPixmapObject::~QGeoMapPixmapObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapPixmapObject::type() const
-{
- return QGeoMapObject::PixmapType;
-}
-
-/*!
- \property QGeoMapPixmapObject::coordinate
- \brief This property holds the coordinate that specifies where the pixmap
- will be drawn by this pixmap object.
-
- The default value of this property is an invalid coordinate. While the
- value of this property is invalid the pixmap object will not be displayed.
-*/
-QGeoCoordinate QGeoMapPixmapObject::coordinate() const
-{
- return origin();
-}
-
-void QGeoMapPixmapObject::setCoordinate(const QGeoCoordinate &coordinate)
-{
- if (origin() != coordinate) {
- setOrigin(coordinate);
- emit coordinateChanged(coordinate);
- }
-}
-
-/*!
- \property QGeoMapPixmapObject::pixmap
- \brief This property holds the pixmap that will be drawn by this pixmap
- object.
-
- The default value of this property is a null pixmap. While the value of
- this property is the null pixmap the pixmap object will not be displayed.
-
- The pixmap will be drawn such that the upper left corner of the pixmap
- will be drawn QGeoMapPixmapObject::offset pixels away from the position of
- QGeoMapPixmapObject::coordinate on the map.
-*/
-QPixmap QGeoMapPixmapObject::pixmap() const
-{
- return d_ptr->pixmap;
-}
-
-void QGeoMapPixmapObject::setPixmap(const QPixmap &pixmap)
-{
- QPixmap curPixmap = d_ptr->pixmap;
- if (curPixmap.isNull() && pixmap.isNull())
- return;
-
- if ((curPixmap.isNull() && !pixmap.isNull())
- || (!curPixmap.isNull() && pixmap.isNull())
- || (curPixmap.toImage() != pixmap.toImage())) {
- d_ptr->pixmap = pixmap;
- emit pixmapChanged(pixmap);
- }
-}
-
-/*!
- \property QGeoMapPixmapObject::offset
- \brief This property holds the offset in pixels at which the pixmap will be
- drawn by this pixmap object.
-
- The default value of this property is QPoint(0, 0). If this value is not
- changed the upper left coordinate of the pixmap will be drawn at the
- coordinate specified by QGeoMapPixmapObject::coordinate.
-
- The offset is in pixels and is independent of the zoom level of the map.
- The offset property is provided so that pixmaps such as arrows can be drawn
- with the point of the arrow placed exactly on the associated coordinate.
-*/
-QPoint QGeoMapPixmapObject::offset() const
-{
- return d_ptr->offset;
-// QPointF pt = d_ptr->offset;
-//
-// QPoint rounded;
-// rounded.setX(int(pt.x() > 0 ? pt.x() + 0.5 : pt.x() - 0.5));
-// rounded.setY(int(pt.y() > 0 ? pt.y() + 0.5 : pt.y() - 0.5));
-//
-// return rounded;
-}
-
-void QGeoMapPixmapObject::setOffset(const QPoint &offset)
-{
- if (d_ptr->offset != offset) {
- d_ptr->offset = offset;
- emit offsetChanged(offset);
- }
-}
-
-/*!
-\fn void QGeoMapPixmapObject::coordinateChanged(const QGeoCoordinate &coordinate)
-
- This signal is emitted when the coordinate at which the pixmap
- should be drawn has changed.
-
- The new value will be \a coordinate.
-*/
-
-/*!
-\fn void QGeoMapPixmapObject::pixmapChanged(const QPixmap &pixmap)
-
- This signal is emitted when the pixmap associated with this
- pixmap object has changed.
-
- The new value will be \a pixmap.
-*/
-
-/*!
-\fn void QGeoMapPixmapObject::offsetChanged(const QPoint &offset)
-
- This signal is emitted when the on-screen offset from the coordinate
- at which this pixmap object should be drawn has changed.
-
- The new value will be \a offset.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapPixmapObjectPrivate::QGeoMapPixmapObjectPrivate() {}
-
-QGeoMapPixmapObjectPrivate::~QGeoMapPixmapObjectPrivate() {}
-
-#include "moc_qgeomappixmapobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomappixmapobject.h b/src/location/maps/qgeomappixmapobject.h
deleted file mode 100644
index 6a3ac825..00000000
--- a/src/location/maps/qgeomappixmapobject.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPPIXMAPOBJECT_H
-#define QGEOMAPPIXMAPOBJECT_H
-
-#include "qgeomapobject.h"
-#include "qgeocoordinate.h"
-
-#include <QPixmap>
-#include <QPoint>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapPixmapObjectPrivate;
-
-class Q_LOCATION_EXPORT QGeoMapPixmapObject : public QGeoMapObject
-{
- Q_OBJECT
- Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
- Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap NOTIFY pixmapChanged)
- Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged)
-
-public:
- QGeoMapPixmapObject();
- QGeoMapPixmapObject(const QGeoCoordinate &coordinate, const QPoint &offset = QPoint(0, 0), const QPixmap &pixmap = QPixmap());
- ~QGeoMapPixmapObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoCoordinate coordinate() const;
- void setCoordinate(const QGeoCoordinate &coordinate);
-
- QPixmap pixmap() const;
- void setPixmap(const QPixmap &pixmap);
-
- QPoint offset() const;
- void setOffset(const QPoint &offset);
-
-Q_SIGNALS:
- void coordinateChanged(const QGeoCoordinate &coordinate);
- void pixmapChanged(const QPixmap &pixmap);
- void offsetChanged(const QPoint &offset);
-
-private:
- QGeoMapPixmapObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapPixmapObject)
- Q_DISABLE_COPY(QGeoMapPixmapObject)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomappixmapobject_p.h b/src/location/maps/qgeomappixmapobject_p.h
deleted file mode 100644
index 9f6166fd..00000000
--- a/src/location/maps/qgeomappixmapobject_p.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPPIXMAPOBJECT_P_H
-#define QGEOMAPPIXMAPOBJECT_P_H
-
-#include "qgeocoordinate.h"
-
-#include <QPixmap>
-#include <QPoint>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapPixmapObjectPrivate
-{
-public:
- QGeoMapPixmapObjectPrivate();
- ~QGeoMapPixmapObjectPrivate();
-
- QPixmap pixmap;
- QPoint offset;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomappolygonobject.cpp b/src/location/maps/qgeomappolygonobject.cpp
deleted file mode 100644
index d82aba18..00000000
--- a/src/location/maps/qgeomappolygonobject.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomappolygonobject.h"
-#include "qgeomappolygonobject_p.h"
-
-#include "qgeocoordinate.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapPolygonObject
- \brief The QGeoMapPolygonObject class is a QGeoMapObject used to draw
- a polygon on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The polygon is specified by a set of at least 3 valid QGeoCoordinate
- instances listed in the same order in which the coordinates would be
- traversed when traveling around the border of the polygon.
-*/
-
-/*!
- Constructs a new polygon object.
-*/
-QGeoMapPolygonObject::QGeoMapPolygonObject()
- : d_ptr(new QGeoMapPolygonObjectPrivate())
-{
- setUnits(QGeoMapObject::RelativeArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Destroys this polygon object.
-*/
-QGeoMapPolygonObject::~QGeoMapPolygonObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapPolygonObject::type() const
-{
- return QGeoMapObject::PolygonType;
-}
-
-/*!
- \property QGeoMapPolygonObject::path
- \brief This property holds the ordered list of coordinates which define the
- polygon to be drawn by this polygon object.
-
- The default value of this property is an empty list of coordinates.
-
- The coordinates should be listed in the order in which they would be
- traversed when traveling around the border of the polygon.
-
- Invalid coordinates in the list will be ignored, and if the list of
- coordinates contains less than 3 valid coordinates then the polygon object
- will not be displayed.
-
-*/
-void QGeoMapPolygonObject::setPath(const QList<QGeoCoordinate> &path)
-{
- if (d_ptr->path != path) {
- d_ptr->path = path;
- if (path.size() != 0)
- setOrigin(path.at(0));
- else
- setOrigin(QGeoCoordinate());
- emit pathChanged(emit d_ptr->path);
- }
-}
-
-QList<QGeoCoordinate> QGeoMapPolygonObject::path() const
-{
- return d_ptr->path;
-}
-
-/*!
- \property QGeoMapPolygonObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw an outline around the polygon. The polygon is
- filled using the QGeoMapPolygonObject::brush property.
-
- The pen will be treated as a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-void QGeoMapPolygonObject::setPen(const QPen &pen)
-{
-
- QPen newPen = pen;
- newPen.setCosmetic(true);
-
- if (d_ptr->pen == newPen)
- return;
-
- d_ptr->pen = pen;
- emit penChanged(pen);
-}
-
-QPen QGeoMapPolygonObject::pen() const
-{
- return d_ptr->pen;
-}
-
-/*!
- \property QGeoMapPolygonObject::brush
- \brief This property holds the brush that will be used to draw this object.
-
- The brush is used to fill in polygon.
-
- The outline around the perimeter of the polygon is drawn using the
- QGeoMapPolygonObject::pen property.
-*/
-void QGeoMapPolygonObject::setBrush(const QBrush &brush)
-{
- if (d_ptr->brush != brush) {
- d_ptr->brush = brush;
- emit brushChanged(brush);
- }
-}
-
-QBrush QGeoMapPolygonObject::brush() const
-{
- return d_ptr->brush;
-}
-
-/*!
-\fn void QGeoMapPolygonObject::pathChanged(const QList<QGeoCoordinate> &path)
-
- This signal is emitted when the ordered list of coordinates that define
- the polygon to be drawn by this polygon object has changed.
-
- The new value is \a path.
-*/
-
-/*!
-\fn void QGeoMapPolygonObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw the edge of this
- polygon object has changed.
-
- The new value is \a pen.
-*/
-
-/*!
-\fn void QGeoMapPolygonObject::brushChanged(const QBrush &brush)
-
- This signal is emitted when the brush used to fill in the interior of
- this polygon object has changed.
-
- The new value is \a brush.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapPolygonObjectPrivate::QGeoMapPolygonObjectPrivate()
-{
- pen.setCosmetic(true);
-}
-
-QGeoMapPolygonObjectPrivate::~QGeoMapPolygonObjectPrivate() {}
-
-#include "moc_qgeomappolygonobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomappolygonobject_p.h b/src/location/maps/qgeomappolygonobject_p.h
deleted file mode 100644
index c8bf4509..00000000
--- a/src/location/maps/qgeomappolygonobject_p.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPPOLYGONOBJECT_P_H
-#define QGEOMAPPOLYGONOBJECT_P_H
-
-#include "qgeocoordinate.h"
-
-#include <QList>
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapPolygonObjectPrivate
-{
-public:
- QGeoMapPolygonObjectPrivate();
- ~QGeoMapPolygonObjectPrivate();
-
- QList<QGeoCoordinate> path;
- QPen pen;
- QBrush brush;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomappolylineobject.cpp b/src/location/maps/qgeomappolylineobject.cpp
deleted file mode 100644
index bb3c501c..00000000
--- a/src/location/maps/qgeomappolylineobject.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomappolylineobject.h"
-#include "qgeomappolylineobject_p.h"
-
-#include "qgeocoordinate.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapPolylineObject
- \brief The QGeoMapPolylineObject class is a QGeoMapObject used to draw
- a segmented line on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The polyline is specified by a list of at least 2 valid QGeoCoordinate
- instances and a line will be drawn between every adjacent pairs of
- coordinates in the list.
-*/
-
-/*!
- Constructs a new polyline object.
-*/
-QGeoMapPolylineObject::QGeoMapPolylineObject()
- : d_ptr(new QGeoMapPolylineObjectPrivate())
-{
- setUnits(QGeoMapObject::RelativeArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Destroys this polyline object.
-*/
-QGeoMapPolylineObject::~QGeoMapPolylineObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapPolylineObject::type() const
-{
- return QGeoMapObject::PolylineType;
-}
-
-/*!
- \property QGeoMapPolylineObject::path
- \brief This property holds the ordered list of coordinates which define the
- segmented line to be drawn by this polyline object.
-
- The default value of this property is an empty list of coordinates.
-
- A line will be drawn between every pair of coordinates which are adjacent in
- the list.
-
- Invalid coordinates in the list will be ignored, and if the list of
- coordinates contains less than 2 valid coordinates then the polyline object
- will not be displayed.
-*/
-void QGeoMapPolylineObject::setPath(const QList<QGeoCoordinate> &path)
-{
- if (d_ptr->path != path) {
- d_ptr->path = path;
- if (path.size() != 0)
- setOrigin(path.at(0));
- else
- setOrigin(QGeoCoordinate());
- emit pathChanged(d_ptr->path);
- }
-}
-
-QList<QGeoCoordinate> QGeoMapPolylineObject::path() const
-{
- return d_ptr->path;
-}
-
-/*!
- \property QGeoMapPolylineObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw the polyline.
-
- The pen will be treated as a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-void QGeoMapPolylineObject::setPen(const QPen &pen)
-{
- QPen newPen = pen;
- newPen.setCosmetic(false);
-
- if (d_ptr->pen == newPen)
- return;
-
- d_ptr->pen = pen;
- emit penChanged(pen);
-}
-
-QPen QGeoMapPolylineObject::pen() const
-{
- return d_ptr->pen;
-}
-
-/*!
-\fn void QGeoMapPolylineObject::pathChanged(const QList<QGeoCoordinate> &path)
-
- This signal is emitted when the ordered list of coordinates that define
- the polyline to be drawn by this polyline object has changed.
-
- The new value is \a path.
-*/
-
-/*!
-\fn void QGeoMapPolylineObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw the edge of this
- polyline object has changed.
-
- The new value is \a pen.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapPolylineObjectPrivate::QGeoMapPolylineObjectPrivate()
-{
- pen.setCosmetic(true);
-}
-
-QGeoMapPolylineObjectPrivate::~QGeoMapPolylineObjectPrivate() {}
-
-#include "moc_qgeomappolylineobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomappolylineobject.h b/src/location/maps/qgeomappolylineobject.h
deleted file mode 100644
index ec343841..00000000
--- a/src/location/maps/qgeomappolylineobject.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPPOLYLINEOBJECT_H
-#define QGEOMAPPOLYLINEOBJECT_H
-
-#include "qgeomapobject.h"
-
-#include <QList>
-#include <QPen>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoCoordinate;
-
-class QGeoMapPolylineObjectPrivate;
-
-class Q_LOCATION_EXPORT QGeoMapPolylineObject : public QGeoMapObject
-{
- Q_OBJECT
- Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
-
-public:
- QGeoMapPolylineObject();
- ~QGeoMapPolylineObject();
-
- QGeoMapObject::Type type() const;
-
- void setPath(const QList<QGeoCoordinate> &path);
- QList<QGeoCoordinate> path() const;
-
- void setPen(const QPen &pen);
- QPen pen() const;
-
-Q_SIGNALS:
- void pathChanged(const QList<QGeoCoordinate> &path);
- void penChanged(const QPen &pen);
-
-private:
- QGeoMapPolylineObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapPolylineObject)
- Q_DISABLE_COPY(QGeoMapPolylineObject)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomappolylineobject_p.h b/src/location/maps/qgeomappolylineobject_p.h
deleted file mode 100644
index 845b7953..00000000
--- a/src/location/maps/qgeomappolylineobject_p.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPPOLYLINEOBJECT_P_H
-#define QGEOMAPPOLYLINEOBJECT_P_H
-
-#include "qgeocoordinate.h"
-
-#include <QList>
-#include <QPen>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapPolylineObjectPrivate
-{
-public:
- QGeoMapPolylineObjectPrivate();
- ~QGeoMapPolylineObjectPrivate();
-
- QList<QGeoCoordinate> path;
- QPen pen;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaprectangleobject.cpp b/src/location/maps/qgeomaprectangleobject.cpp
deleted file mode 100644
index 4712ce8b..00000000
--- a/src/location/maps/qgeomaprectangleobject.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomaprectangleobject.h"
-#include "qgeomaprectangleobject_p.h"
-
-#include "qgeocoordinate.h"
-#include "qgeoboundingbox.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapRectangleObject
- \brief The QGeoMapRectangleObject class is a QGeoMapObject used to draw
- a rectangular region on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The rectangle is specified by either a valid QGeoBoundingBox instance or
- a pair of valid QGeoCoordinate instances which represent the top left and
- bottom right coordinates of the rectangle respectively.
-*/
-
-/*!
- Constructs a new rectangle object.
-*/
-QGeoMapRectangleObject::QGeoMapRectangleObject()
- : d_ptr(new QGeoMapRectangleObjectPrivate())
-{
- setUnits(QGeoMapObject::AbsoluteArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Constructs a new rectangle object based on the bounding box \a boundingBox.
-*/
-QGeoMapRectangleObject::QGeoMapRectangleObject(const QGeoBoundingBox &boundingBox)
- : d_ptr(new QGeoMapRectangleObjectPrivate())
-{
- d_ptr->bounds = boundingBox;
- setUnits(QGeoMapObject::AbsoluteArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Constructs a new rectangle object with the top left coordinate at \a
- topLeft and the bottom right coordinate at \a bottomRight.
-*/
-QGeoMapRectangleObject::QGeoMapRectangleObject(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight)
- : d_ptr(new QGeoMapRectangleObjectPrivate())
-{
- d_ptr->bounds = QGeoBoundingBox(topLeft, bottomRight);
- setUnits(QGeoMapObject::AbsoluteArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Destroys this rectangle object.
-*/
-QGeoMapRectangleObject::~QGeoMapRectangleObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapRectangleObject::type() const
-{
- return QGeoMapObject::RectangleType;
-}
-
-/*!
- Returns a QGeoBoundingBox instance which corresponds to the rectangle that
- will be drawn by this object.
-
- This is equivalent to
- \code
- QGeoMapRectangleObject *object;
- // setup object
- QGeoBoundingBox(object->topLeft(), object->bottomRight());
- \endcode
-*/
-QGeoBoundingBox QGeoMapRectangleObject::bounds() const
-{
- return d_ptr->bounds;
-}
-
-/*!
- Sets the rectangle that will be drawn by this object to \a bounds.
-
- This is equivalent to
- \code
- QGeoMapRectangleObject *object;
- // setup object
- object->setTopLeft(bounds.topLeft());
- object->setBottomRight(bounds.bottomRight());
- \endcode
-*/
-void QGeoMapRectangleObject::setBounds(const QGeoBoundingBox &bounds)
-{
- QGeoBoundingBox oldBounds = d_ptr->bounds;
-
- if (oldBounds == bounds)
- return;
-
- d_ptr->bounds = bounds;
-
- if (d_ptr->bounds.topLeft() != oldBounds.topLeft())
- emit topLeftChanged(d_ptr->bounds.topLeft());
-
- if (d_ptr->bounds.bottomRight() != oldBounds.bottomRight())
- emit bottomRightChanged(d_ptr->bounds.bottomRight());
-}
-
-/*!
- \property QGeoMapRectangleObject::topLeft
- \brief This property holds the top left coordinate of the rectangle to be
- drawn by this rectangle object.
-
- The default value of this property is an invalid coordinate. While
- the value of this property is invalid the rectangle object will not be
- displayed.
-*/
-QGeoCoordinate QGeoMapRectangleObject::topLeft() const
-{
- return d_ptr->bounds.topLeft();
-}
-
-void QGeoMapRectangleObject::setTopLeft(const QGeoCoordinate &topLeft)
-{
- if (d_ptr->bounds.topLeft() != topLeft) {
- d_ptr->bounds.setTopLeft(topLeft);
- emit topLeftChanged(d_ptr->bounds.topLeft());
- }
-}
-
-/*!
- \property QGeoMapRectangleObject::bottomRight
- \brief This property holds the bottom right coordinate of the rectangle to
- be drawn by this rectangle object.
-
- The default value of this property is an invalid coordinate. While
- the value of this property is invalid the rectangle object will not be
- displayed.
-*/
-QGeoCoordinate QGeoMapRectangleObject::bottomRight() const
-{
- return d_ptr->bounds.bottomRight();
-}
-
-void QGeoMapRectangleObject::setBottomRight(const QGeoCoordinate &bottomRight)
-{
- if (d_ptr->bounds.bottomRight() != bottomRight) {
- d_ptr->bounds.setBottomRight(bottomRight);
- emit bottomRightChanged(d_ptr->bounds.bottomRight());
- }
-}
-
-/*!
- \property QGeoMapRectangleObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw an outline around the rectangle. The rectangle is
- filled using the QGeoMapRectangleObject::brush property.
-
- The pen will be treated as a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-QPen QGeoMapRectangleObject::pen() const
-{
- return d_ptr->pen;
-}
-
-void QGeoMapRectangleObject::setPen(const QPen &pen)
-{
- QPen newPen = pen;
- newPen.setCosmetic(true);
-
- if (d_ptr->pen == newPen)
- return;
-
- d_ptr->pen = newPen;
- emit penChanged(newPen);
-}
-
-/*!
- \property QGeoMapRectangleObject::brush
- \brief This property holds the brush that will be used to draw this object.
-
- The brush is used to fill in rectangle.
-
- The outline around the perimeter of the rectangle is drawn using the
- QGeoMapRectangleObject::pen property.
-*/
-QBrush QGeoMapRectangleObject::brush() const
-{
- return d_ptr->brush;
-}
-
-void QGeoMapRectangleObject::setBrush(const QBrush &brush)
-{
- if (d_ptr->brush != brush) {
- d_ptr->brush = brush;
- emit brushChanged(d_ptr->brush);
- }
-}
-
-/*!
-\fn void QGeoMapRectangleObject::topLeftChanged(const QGeoCoordinate &topLeft)
-
- This signal is emitted when the top left coordinate of this rectangle
- object has changed.
-
- The new value is \a topLeft.
-*/
-
-/*!
-\fn void QGeoMapRectangleObject::bottomRightChanged(const QGeoCoordinate &bottomRight)
-
- This signal is emitted when the bottom right coordinate of this rectangle
- object has changed.
-
- The new value is \a bottomRight.
-*/
-
-/*!
-\fn void QGeoMapRectangleObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw the perimeter of this
- rectangle object has changed.
-
- The new value is \a pen.
-*/
-
-/*!
-\fn void QGeoMapRectangleObject::brushChanged(const QBrush &brush)
-
- This signal is emitted when the brush used to fill in the interior of
- this rectangle object has changed.
-
- The new value is \a brush.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapRectangleObjectPrivate::QGeoMapRectangleObjectPrivate()
-{
- pen.setCosmetic(true);
-}
-
-QGeoMapRectangleObjectPrivate::~QGeoMapRectangleObjectPrivate() {}
-
-#include "moc_qgeomaprectangleobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomaprectangleobject.h b/src/location/maps/qgeomaprectangleobject.h
deleted file mode 100644
index 6f24450f..00000000
--- a/src/location/maps/qgeomaprectangleobject.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPRECTANGLEOBJECT_H
-#define QGEOMAPRECTANGLEOBJECT_H
-
-#include "qgeomapobject.h"
-
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapRectangleObjectPrivate;
-class QGeoBoundingBox;
-class QGeoCoordinate;
-
-class Q_LOCATION_EXPORT QGeoMapRectangleObject : public QGeoMapObject
-{
- Q_OBJECT
- Q_PROPERTY(QGeoCoordinate topLeft READ topLeft WRITE setTopLeft NOTIFY topLeftChanged)
- Q_PROPERTY(QGeoCoordinate bottomRight READ bottomRight WRITE setBottomRight NOTIFY bottomRightChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged)
-
-public:
- QGeoMapRectangleObject();
- QGeoMapRectangleObject(const QGeoBoundingBox &boundingBox);
- QGeoMapRectangleObject(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight);
- ~QGeoMapRectangleObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoBoundingBox bounds() const;
- void setBounds(const QGeoBoundingBox &bounds);
-
- QGeoCoordinate topLeft() const;
- void setTopLeft(const QGeoCoordinate &topLeft);
-
- QGeoCoordinate bottomRight() const;
- void setBottomRight(const QGeoCoordinate &bottomRight);
-
- QPen pen() const;
- void setPen(const QPen &pen);
-
- QBrush brush() const;
- void setBrush(const QBrush &brush);
-
-Q_SIGNALS:
- void topLeftChanged(const QGeoCoordinate &topLeft);
- void bottomRightChanged(const QGeoCoordinate &bottomRight);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
-
-private:
- QGeoMapRectangleObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapRectangleObject)
- Q_DISABLE_COPY(QGeoMapRectangleObject)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaprectangleobject_p.h b/src/location/maps/qgeomaprectangleobject_p.h
deleted file mode 100644
index 814dc2fb..00000000
--- a/src/location/maps/qgeomaprectangleobject_p.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPRECTANGLEOBJECT_P_H
-#define QGEOMAPRECTANGLEOBJECT_P_H
-
-#include "qgeoboundingbox.h"
-
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapRectangleObjectPrivate
-{
-public:
- QGeoMapRectangleObjectPrivate();
- ~QGeoMapRectangleObjectPrivate();
-
- QGeoBoundingBox bounds;
- QPen pen;
- QBrush brush;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaprouteobject.cpp b/src/location/maps/qgeomaprouteobject.cpp
deleted file mode 100644
index 462d98f0..00000000
--- a/src/location/maps/qgeomaprouteobject.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomaprouteobject.h"
-#include "qgeomaprouteobject_p.h"
-#include "qgeocoordinate.h"
-#include "qgeoroutesegment.h"
-
-#define DEFAULT_ROUTE_DETAIL_LEVEL 6
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapRouteObject
- \brief The QGeoMapRouteObject class is a QGeoMapObject used to draw
- a route on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The route is specified by a QGeoRoute object.
-
- The route might be quite detailed, and so to improve performance the
- detail level can be set with QGeoMapRouteObject::detailLevel.
-
- The route object draws the route as a series of lines with a minimum
- on-screen harmattan length equal to the detail level. This is done so that
- the small changes in direction of a road will be visible at high zoom
- levels but will not slow down the rendering at the lower zoom levels.
-*/
-
-/*!
- Constructs a new route object.
-*/
-QGeoMapRouteObject::QGeoMapRouteObject()
- : d_ptr(new QGeoMapRouteObjectPrivate())
-{
- setUnits(QGeoMapObject::AbsoluteArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Constructs a new route object for the route \a route.
-*/
-QGeoMapRouteObject::QGeoMapRouteObject(const QGeoRoute &route)
- : d_ptr(new QGeoMapRouteObjectPrivate())
-{
- d_ptr->route = route;
- setUnits(QGeoMapObject::AbsoluteArcSecondUnit);
- setTransformType(QGeoMapObject::ExactTransform);
-}
-
-/*!
- Destroys this route object
-*/
-QGeoMapRouteObject::~QGeoMapRouteObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapRouteObject::type() const
-{
- return QGeoMapObject::RouteType;
-}
-
-/*!
- \property QGeoMapRouteObject::route
- \brief This property holds the which will be displayed.
-
- The default value of this property is an empty route.
-
- If QGeoRoute::path() returns a list of less than 2 valid QGeoCoordinates
- then the route object will not be displayed.
-*/
-QGeoRoute QGeoMapRouteObject::route() const
-{
- return d_ptr->route;
-}
-
-void QGeoMapRouteObject::setRoute(const QGeoRoute &route)
-{
- d_ptr->route = route;
- emit routeChanged(d_ptr->route);
-}
-
-/*!
- \property QGeoMapRouteObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw the route.
-
- The pen will be treated like a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-QPen QGeoMapRouteObject::pen() const
-{
- return d_ptr->pen;
-}
-
-void QGeoMapRouteObject::setPen(const QPen &pen)
-{
- QPen newPen = pen;
- newPen.setCosmetic(false);
-
- if (d_ptr->pen == newPen)
- return;
-
- d_ptr->pen = newPen;
- emit penChanged(newPen);
-}
-
-/*!
- \property QGeoMapRouteObject::detailLevel
- \brief This property holds the level of detail used to draw this object.
-
- A QGeoRoute instance can contain a large amount of information about the
- path taken by the route. This property is used as a hint to help reduce the
- amount of information that needs to be drawn on the map.
-
- The path taken by the route is represented as a list of QGeoCoordinate
- instances. This route object will draw lines between these coordinates, but
- will skip members of the list until the manhattan distance between the
- start point and the end point of the line is at least \a detailLevel.
-
- The default value of this property is 6.
-*/
-quint32 QGeoMapRouteObject::detailLevel() const
-{
- return d_ptr->detailLevel;
-}
-
-void QGeoMapRouteObject::setDetailLevel(quint32 detailLevel)
-{
- if (d_ptr->detailLevel != detailLevel) {
- d_ptr->detailLevel = detailLevel;
- emit detailLevelChanged(d_ptr->detailLevel);
- }
-}
-
-/*!
-\fn void QGeoMapRouteObject::routeChanged(const QGeoRoute &route)
-
- This signal is emitted when the route drawn by this route object
- has changed.
-
- The new value is \a route.
-*/
-
-/*!
-\fn void QGeoMapRouteObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw this route object has
- changed.
-
- The new value is \a pen.
-*/
-
-/*!
-\fn void QGeoMapRouteObject::detailLevelChanged(quint32 detailLevel)
-
- This signal is emitted when the level of detail used to draw this
- route object has changed.
-
- The new value is \a detailLevel.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapRouteObjectPrivate::QGeoMapRouteObjectPrivate()
-{
- detailLevel = DEFAULT_ROUTE_DETAIL_LEVEL;
- pen.setCosmetic(true);
-}
-
-QGeoMapRouteObjectPrivate::~QGeoMapRouteObjectPrivate() {}
-
-#include "moc_qgeomaprouteobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomaprouteobject.h b/src/location/maps/qgeomaprouteobject.h
deleted file mode 100644
index 7ea74723..00000000
--- a/src/location/maps/qgeomaprouteobject.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPROUTEOBJECT_H
-#define QGEOMAPROUTEOBJECT_H
-
-#include "qgeomapobject.h"
-#include "qgeoroute.h"
-
-#include <QPen>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapRouteObjectPrivate;
-class QGeoRoute;
-class QGeoCoordinate;
-
-class Q_LOCATION_EXPORT QGeoMapRouteObject : public QGeoMapObject
-{
- Q_OBJECT
- Q_PROPERTY(QGeoRoute route READ route WRITE setRoute NOTIFY routeChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
- Q_PROPERTY(quint32 detailLevel READ detailLevel WRITE setDetailLevel NOTIFY detailLevelChanged)
-
-public:
- QGeoMapRouteObject();
- QGeoMapRouteObject(const QGeoRoute &route);
- ~QGeoMapRouteObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoRoute route() const;
- void setRoute(const QGeoRoute &route);
-
- QPen pen() const;
- void setPen(const QPen &pen);
-
- quint32 detailLevel() const;
- void setDetailLevel(quint32 detailLevel);
-
-Q_SIGNALS:
- void routeChanged(const QGeoRoute &route);
- void penChanged(const QPen &pen);
- void detailLevelChanged(quint32 detailLevel);
-
-private:
- QGeoMapRouteObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapRouteObject)
- Q_DISABLE_COPY(QGeoMapRouteObject)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaprouteobject_p.h b/src/location/maps/qgeomaprouteobject_p.h
deleted file mode 100644
index 4d5fca57..00000000
--- a/src/location/maps/qgeomaprouteobject_p.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPROUTEOBJECT_P_H
-#define QGEOMAPROUTEOBJECT_P_H
-
-#include "qgeoroute.h"
-
-#include <QPen>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapRouteObjectPrivate
-{
-public:
- QGeoMapRouteObjectPrivate();
- ~QGeoMapRouteObjectPrivate();
-
- QGeoRoute route;
- QPen pen;
- quint32 detailLevel;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaptextobject.cpp b/src/location/maps/qgeomaptextobject.cpp
deleted file mode 100644
index 2b9ee8cd..00000000
--- a/src/location/maps/qgeomaptextobject.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeomaptextobject.h"
-#include "qgeomaptextobject_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoMapTextObject
- \brief The QGeoMapTextObject class is a QGeoMapObject used to draw
- text on a map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping-objects
-
- The text is drawn at a given coordinate on the map.
-
- The text object is drawn such that the rendered size of the text object is
- independent of the zoom level of the map.
-*/
-
-/*!
- Constructs a new text object.
-*/
-QGeoMapTextObject::QGeoMapTextObject()
- : d_ptr(new QGeoMapTextObjectPrivate())
-{
- setUnits(QGeoMapObject::PixelUnit);
-}
-
-/*!
- Constructs a new text object which will display the text \a text with font
- \a font at the coordinate \a coordinate on the map.
-
- The text will be displayed at an on-screen offset from the coordinate of \a
- offset pixels, and will be aligned according to \a alignment.
-*/
-QGeoMapTextObject::QGeoMapTextObject(const QGeoCoordinate &coordinate,
- const QString &text,
- const QFont &font,
- const QPoint &offset,
- Qt::Alignment alignment)
- : d_ptr(new QGeoMapTextObjectPrivate())
-{
- setOrigin(coordinate);
- d_ptr->text = text;
- d_ptr->font = font;
- d_ptr->offset = offset;
- d_ptr->alignment = alignment;
- setUnits(QGeoMapObject::PixelUnit);
-}
-
-/*!
- Destroys this text object.
-*/
-QGeoMapTextObject::~QGeoMapTextObject()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QGeoMapObject::Type QGeoMapTextObject::type() const
-{
- return QGeoMapObject::TextType;
-}
-
-/*!
- \property QGeoMapTextObject::coordinate
- \brief This property holds the coordinate at which this text object
- will be rendered.
-
- The default value of this property is an invalid coordinate. While the
- value of this property is invalid the text object will not be displayed.
-
- If QGeoMapTextObject::offset and QGeoMapTextObject::alignment are not set
- the text will be drawn so that it is centered both horizontally and
- vertically around the position of QGeoMapTextObject::coordinate on the
- screen.
-*/
-QGeoCoordinate QGeoMapTextObject::coordinate() const
-{
- return origin();
-}
-
-void QGeoMapTextObject::setCoordinate(const QGeoCoordinate &coordinate)
-{
- if (origin() != coordinate) {
- setOrigin(coordinate);
- emit coordinateChanged(coordinate);
- }
-}
-
-/*!
- \property QGeoMapTextObject::text
- \brief This property holds the text that will be displayed by this text
- object.
-
- The default value of this property is an empty string.
-*/
-QString QGeoMapTextObject::text() const
-{
- return d_ptr->text;
-}
-
-void QGeoMapTextObject::setText(const QString &text)
-{
- if (d_ptr->text != text) {
- d_ptr->text = text;
- emit textChanged(text);
- }
-}
-
-/*!
- \property QGeoMapTextObject::font
- \brief This property holds the font that will be used to render the text
- for this text object.
-
- The default value of this property is the application's default font.
-
- It is not necessary to account for the zoom level of the map, since text
- objects are scaled such that they appear to be independent of the zoom
- level.
-*/
-QFont QGeoMapTextObject::font() const
-{
- return d_ptr->font;
-}
-
-void QGeoMapTextObject::setFont(const QFont &font)
-{
- if (d_ptr->font != font) {
- d_ptr->font = font;
- emit fontChanged(font);
- }
-}
-
-/*!
- \property QGeoMapTextObject::pen
- \brief This property holds the pen that will be used to draw this object.
-
- The pen is used to draw an outline around the text. The text itself is
- filled using the QGeoMapTextObject::brush property.
-
- The pen will be treated as a cosmetic pen, which means that the width
- of the pen will be independent of the zoom level of the map.
-*/
-QPen QGeoMapTextObject::pen() const
-{
- return d_ptr->pen;
-}
-
-void QGeoMapTextObject::setPen(const QPen &pen)
-{
- QPen newPen = pen;
- newPen.setCosmetic(true);
-
- if (d_ptr->pen == newPen)
- return;
-
- d_ptr->pen = newPen;
- emit penChanged(pen);
-}
-
-/*!
- \property QGeoMapTextObject::brush
- \brief This property holds the brush that will be used to draw this object.
-
- The brush is used to fill in the glyphs of the text.
-
- The outline around the perimeter of the glyphs is drawn using the
- QGeoMapTextObject::pen property.
-*/
-QBrush QGeoMapTextObject::brush() const
-{
- return d_ptr->brush;
-}
-
-void QGeoMapTextObject::setBrush(const QBrush &brush)
-{
- if (d_ptr->brush != brush) {
- d_ptr->brush = brush;
- emit brushChanged(brush);
- }
-}
-
-/*!
- \property QGeoMapTextObject::offset
- \brief This property holds the offset in pixels from the screen position of
- QGeoMapTextObject::coordinate at which the text will be rendered when
- drawing this text object.
-
- The default value of this property is QPoint(0,0).
-*/
-QPoint QGeoMapTextObject::offset() const
-{
- return QPoint(d_ptr->offset.x(), d_ptr->offset.y());
-}
-
-void QGeoMapTextObject::setOffset(const QPoint &off)
-{
- if (d_ptr->offset != off) {
- d_ptr->offset = off;
- emit offsetChanged(off);
- }
-}
-
-/*!
- \property QGeoMapTextObject::alignment
- \brief This property holds the alignment options used to align the
- text when drawing this text object.
-
- The default value of this property will align the text so that it is
- centered both horizontally and vertically around the point that is
- QGeoMapTextObject::offset pixels away from the position of
- QGeoMapTextObject::coordinate on the screen.
-
- Using
- \code
- textObject->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- \endcode
- will place the text so that the point halway up the left edge of
- the text is at the anchor point defined by
- QGeoMapTextObject::offset and QGeoMapTextObject::coordinate.
-
- The alignment property is a flag, so using
- \code
- textObject->setAlignment(Qt::AlignLeft);
- \endcode
- may alter the vertical alignment as well.
-
- The Qt::AlignVertical_Mask and Qt::AlignHorizontal_Mask enum
- values can be used to alter one component of the alignment
- independent of the other.
- \code
- textObject->setAlignment(Qt::AlignLeft | (textObject->alignment() & Qt::AlignVertical_Mask));
- \endcode
-
- The alignment does not take the width of QGeoMapTextObject::pen into
- consideration.
-*/
-Qt::Alignment QGeoMapTextObject::alignment() const
-{
- return d_ptr->alignment;
-}
-
-void QGeoMapTextObject::setAlignment(Qt::Alignment alignment)
-{
- if (d_ptr->alignment != alignment) {
- d_ptr->alignment = alignment;
- emit alignmentChanged(d_ptr->alignment);
- }
-}
-
-/*!
-\fn void QGeoMapTextObject::coordinateChanged(const QGeoCoordinate &coordinate)
-
- This signal is emitted when the coordinate at which this text
- object will be drawn has changed.
-
- The new value is \a coordinate.
-*/
-
-/*!
-\fn void QGeoMapTextObject::textChanged(const QString &text)
-
- This signal is emitted when the text to be drawn by this text object
- has changed.
-
- The new value is \a text.
-*/
-
-/*!
-\fn void QGeoMapTextObject::fontChanged(const QFont &font)
-
- This signal is emitted when the font use to draw this text object
- has changed.
-
- The new value is \a font.
-*/
-
-/*!
-\fn void QGeoMapTextObject::penChanged(const QPen &pen)
-
- This signal is emitted when the pen used to draw the outline of the
- letters for this text object has changed.
-
- The new value is \a pen.
-*/
-
-/*!
-\fn void QGeoMapTextObject::brushChanged(const QBrush &brush)
-
- This signal is emitted when the brush used to fill the inside of the
- letters for this text object has changed.
-
- The new value is \a brush.
-*/
-
-/*!
-\fn void QGeoMapTextObject::offsetChanged(const QPoint &offset)
-
- This signal is emitted when the on screen offset from the coordinate at
- which this text object will be drawn has changed.
-
- The new value is \a offset.
-*/
-
-/*!
-\fn void QGeoMapTextObject::alignmentChanged(Qt::Alignment alignment)
-
- This signal is emitted when the alignment of this text object has changed.
-
- The new value is \a alignment.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoMapTextObjectPrivate::QGeoMapTextObjectPrivate() :
- offset(0, 0)
-{
- pen.setCosmetic(true);
- alignment = Qt::AlignCenter;
-}
-
-QGeoMapTextObjectPrivate::~QGeoMapTextObjectPrivate() {}
-
-#include "moc_qgeomaptextobject.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomaptextobject.h b/src/location/maps/qgeomaptextobject.h
deleted file mode 100644
index 0447aea4..00000000
--- a/src/location/maps/qgeomaptextobject.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPTEXTOBJECT_H
-#define QGEOMAPTEXTOBJECT_H
-
-#include "qgeomapobject.h"
-#include "qgeocoordinate.h"
-
-#include <QFont>
-#include <QPoint>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapTextObjectPrivate;
-
-class Q_LOCATION_EXPORT QGeoMapTextObject : public QGeoMapObject
-{
- Q_OBJECT
- Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged)
- Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged)
- Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
-
-public:
- QGeoMapTextObject();
- QGeoMapTextObject(const QGeoCoordinate &coordinate,
- const QString &text = QString(),
- const QFont &font = QFont(),
- const QPoint &offset = QPoint(),
- Qt::Alignment alignment = Qt::AlignCenter);
- ~QGeoMapTextObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoCoordinate coordinate() const;
- void setCoordinate(const QGeoCoordinate &coordinate);
-
- QString text() const;
- void setText(const QString &text);
-
- QFont font() const;
- void setFont(const QFont &font);
-
- QPen pen() const;
- void setPen(const QPen &pen);
-
- QBrush brush() const;
- void setBrush(const QBrush &brush);
-
- QPoint offset() const;
- void setOffset(const QPoint &offset);
-
- Qt::Alignment alignment() const;
- void setAlignment(Qt::Alignment alignment);
-
-Q_SIGNALS:
- void coordinateChanged(const QGeoCoordinate &coordinate);
- void textChanged(const QString &text);
- void fontChanged(const QFont &font);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
- void offsetChanged(const QPoint &offset);
- void alignmentChanged(Qt::Alignment alignment);
-
-private:
- QGeoMapTextObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapTextObject)
- Q_DISABLE_COPY(QGeoMapTextObject)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/qgeomaptextobject_p.h b/src/location/maps/qgeomaptextobject_p.h
deleted file mode 100644
index 4c1a7101..00000000
--- a/src/location/maps/qgeomaptextobject_p.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOMAPTEXTOBJECT_P_H
-#define QGEOMAPTEXTOBJECT_P_H
-
-#include "qgeocoordinate.h"
-
-#include <QFont>
-#include <QString>
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapTextObjectPrivate
-{
-public:
- QGeoMapTextObjectPrivate();
- ~QGeoMapTextObjectPrivate();
-
- QString text;
- QFont font;
- QPen pen;
- QBrush brush;
- QPoint offset;
- Qt::Alignment alignment;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmapreply.cpp b/src/location/maps/qgeotiledmapreply.cpp
index 622db385..6908325b 100644
--- a/src/location/maps/tiled/qgeotiledmapreply.cpp
+++ b/src/location/maps/qgeotiledmapreply.cpp
@@ -42,8 +42,6 @@
#include "qgeotiledmapreply.h"
#include "qgeotiledmapreply_p.h"
-#include "qgeotiledmaprequest.h"
-
#include <qdebug.h>
QT_BEGIN_NAMESPACE
@@ -98,9 +96,9 @@ QT_BEGIN_NAMESPACE
/*!
Constructs a tiled map reply object based on \a request, with parent \a parent.
*/
-QGeoTiledMapReply::QGeoTiledMapReply(const QGeoTiledMapRequest &request, QObject *parent)
+QGeoTiledMapReply::QGeoTiledMapReply(const TileSpec &spec, QObject *parent)
: QObject(parent),
- d_ptr(new QGeoTiledMapReplyPrivate(request))
+ d_ptr(new QGeoTiledMapReplyPrivate(spec))
{
}
@@ -206,9 +204,9 @@ void QGeoTiledMapReply::setCached(bool cached)
/*!
Returns the request which corresponds to this reply.
*/
-QGeoTiledMapRequest QGeoTiledMapReply::request() const
+TileSpec QGeoTiledMapReply::tileSpec() const
{
- return d_ptr->request;
+ return d_ptr->spec;
}
/*!
@@ -309,12 +307,12 @@ void QGeoTiledMapReply::abort()
/*******************************************************************************
*******************************************************************************/
-QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(const QGeoTiledMapRequest &request)
+QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(const TileSpec &spec)
: error(QGeoTiledMapReply::NoError),
errorString(QLatin1String("")),
isFinished(false),
isCached(false),
- request(request) {}
+ spec(spec) {}
QGeoTiledMapReplyPrivate::QGeoTiledMapReplyPrivate(QGeoTiledMapReply::Error error, const QString &errorString)
: error(error),
diff --git a/src/location/maps/tiled/qgeotiledmapreply.h b/src/location/maps/qgeotiledmapreply.h
index 9b3bea4f..8258b22a 100644
--- a/src/location/maps/tiled/qgeotiledmapreply.h
+++ b/src/location/maps/qgeotiledmapreply.h
@@ -42,13 +42,13 @@
#ifndef QGEOTILEDMAPREPLY_H
#define QGEOTILEDMAPREPLY_H
-#include "qmobilityglobal.h"
+#include "qglobal.h"
#include <QObject>
QT_BEGIN_NAMESPACE
-class QGeoTiledMapRequest;
+class TileSpec;
class QGeoTiledMapReplyPrivate;
class Q_LOCATION_EXPORT QGeoTiledMapReply : public QObject
@@ -63,7 +63,7 @@ public:
UnknownError
};
- QGeoTiledMapReply(const QGeoTiledMapRequest &request, QObject *parent = 0);
+ QGeoTiledMapReply(const TileSpec &spec, QObject *parent = 0);
QGeoTiledMapReply(Error error, const QString &errorString, QObject *parent = 0);
virtual ~QGeoTiledMapReply();
@@ -73,7 +73,7 @@ public:
bool isCached() const;
- QGeoTiledMapRequest request() const;
+ TileSpec tileSpec() const;
QByteArray mapImageData() const;
QString mapImageFormat() const;
diff --git a/src/location/maps/tiled/qgeotiledmapreply_p.h b/src/location/maps/qgeotiledmapreply_p.h
index 537a23b7..e5e02235 100644
--- a/src/location/maps/tiled/qgeotiledmapreply_p.h
+++ b/src/location/maps/qgeotiledmapreply_p.h
@@ -54,14 +54,14 @@
//
#include "qgeotiledmapreply.h"
-#include "qgeotiledmaprequest.h"
+#include "tilespec.h"
QT_BEGIN_NAMESPACE
class QGeoTiledMapReplyPrivate
{
public:
- QGeoTiledMapReplyPrivate(const QGeoTiledMapRequest &request);
+ QGeoTiledMapReplyPrivate(const TileSpec &spec);
QGeoTiledMapReplyPrivate(QGeoTiledMapReply::Error error, const QString& errorString);
~QGeoTiledMapReplyPrivate();
@@ -70,7 +70,7 @@ public:
bool isFinished;
bool isCached;
- QGeoTiledMapRequest request;
+ TileSpec spec;
QByteArray mapImageData;
QString mapImageFormat;
};
diff --git a/src/location/maps/qgraphicsgeomap.cpp b/src/location/maps/qgraphicsgeomap.cpp
deleted file mode 100644
index 5ccad8a6..00000000
--- a/src/location/maps/qgraphicsgeomap.cpp
+++ /dev/null
@@ -1,821 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgraphicsgeomap.h"
-#include "qgraphicsgeomap_p.h"
-
-#include "qgeocoordinate.h"
-#include "qgeoboundingbox.h"
-#include "qgeomapobject.h"
-#include "qgeomapoverlay.h"
-
-#include "qgeoserviceprovider.h"
-#include "qgeomappingmanager.h"
-#include "qgeomapdata.h"
-
-#include <QGraphicsSceneResizeEvent>
-#include <QTimer>
-
-#include <QNetworkProxyFactory>
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGraphicsGeoMap
- \brief The QGraphicsGeoMap class is used to display a map and manager the
- interactions between the user and the map.
-
- \inmodule QtLocation
- \since 1.1
-
- \ingroup maps-mapping
-
- Most of the functionality is provided by QGeoMappingManager, which
- handles most aspects of the display.
-
- The map viewport can be panned, the zoom level can be changed and the
- center coordinate of the viewport can be set explicitly.
-
- The screenPositionToCoordinate() and coordinateToScreenPoisition()
- functions can be used to convert between positions on the screen and
- global coordinates.
-
- Mouse and keyboard events should be handled by subclassing QGraphicsGeoMap
- and providing implementations of the event handling functions present in
- QGraphicsWidget.
-*/
-
-/*!
-\enum QGraphicsGeoMap::MapType
-
-Describes a type of map data.
-
-\value NoMap
-Indicates a lack of map valid data.
-
-\value StreetMap
-The map data is a graphical representation of streets and building boundaries.
-
-\value SatelliteMapDay
-The map data is composed of images collected by satellites during the daytime.
-
-\value SatelliteMapNight
-The map data is composed of images collected by satellites during the nighttime.
-
-\value TerrainMap
-The map data is a graphical representation of terrain features. This may also
-include some of the information provided by QGraphicsGeoMap::StreetMap.
-*/
-
-/*!
-\enum QGraphicsGeoMap::ConnectivityMode
-
-Describes the method of obtaining the mapping data.
-
-\value NoConnectivity
-There is no map data.
-
-\value OfflineMode
-The map data will come from an offline source.
-
-\value OnlineMode
-The map data will come from an online source.
-
-\value HybridMode
-The map data will come from a combination of offline and online sources.
-*/
-
-/*!
- Creates a new mapping widget, with the mapping operations managed by
- \a manager, and the specified \a parent.
-
- Note that the \a manager will typically be accessed from an instance of
- QGeoServiceProvider:
- \code
- QGeoServiceProvider serviceProvider("nokia");
- QGeoMappingManager *manager = serviceProvider.mappingManager();
- QGraphicsGeoMap *widget = new QGraphicsGeoMap(manager);
- \endcode
-*/
-QGraphicsGeoMap::QGraphicsGeoMap(QGeoMappingManager *manager, QGraphicsItem *parent)
- : QGraphicsWidget(parent),
- d_ptr(new QGraphicsGeoMapPrivate())
-{
- Q_ASSERT(manager != 0);
- d_ptr->manager = manager;
-
- d_ptr->mapData = d_ptr->manager->createMapData();
- d_ptr->mapData->init();
-
- connect(d_ptr->mapData,
- SIGNAL(updateMapDisplay(QRectF)),
- this,
- SLOT(updateMapDisplay(QRectF)));
-
- setMapType(QGraphicsGeoMap::StreetMap);
- d_ptr->mapData->setWindowSize(size());
-
- connect(d_ptr->mapData,
- SIGNAL(zoomLevelChanged(qreal)),
- this,
- SIGNAL(zoomLevelChanged(qreal)));
- connect(d_ptr->mapData,
- SIGNAL(bearingChanged(qreal)),
- this,
- SIGNAL(bearingChanged(qreal)));
- connect(d_ptr->mapData,
- SIGNAL(tiltChanged(qreal)),
- this,
- SIGNAL(tiltChanged(qreal)));
- connect(d_ptr->mapData,
- SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)),
- this,
- SIGNAL(mapTypeChanged(QGraphicsGeoMap::MapType)));
- connect(d_ptr->mapData,
- SIGNAL(centerChanged(QGeoCoordinate)),
- this,
- SIGNAL(centerChanged(QGeoCoordinate)));
- connect(d_ptr->mapData,
- SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)),
- this,
- SIGNAL(connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode)));
-
- setFlag(QGraphicsItem::ItemIsFocusable);
- setFocus();
-
- setMinimumSize(QSizeF(0, 0));
- setPreferredSize(QSizeF(500, 500));
-}
-
-/*!
- Destroys this map widget.
-*/
-QGraphicsGeoMap::~QGraphicsGeoMap()
-{
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-void QGraphicsGeoMap::resizeEvent(QGraphicsSceneResizeEvent *event)
-{
- if (d_ptr->mapData) {
- d_ptr->mapData->setWindowSize(event->newSize());
- }
-}
-
-/*!
- \reimp
-*/
-QPainterPath QGraphicsGeoMap::shape() const
-{
- QPainterPath path;
- path.addRect(boundingRect());
- return path;
-}
-
-/*!
- \reimp
-*/
-void QGraphicsGeoMap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
-{
- if (d_ptr->mapData)
- d_ptr->mapData->paint(painter, option);
-}
-
-void QGraphicsGeoMap::updateMapDisplay(const QRectF &target)
-{
- update(target);
-}
-
-/*!
- \property QGraphicsGeoMap::minimumZoomLevel
- \brief This property holds the minimum zoom level supported by the
- QGeoMappingManager associated with this widget.
-
- Larger values of the zoom level correspond to more detailed views of the
- map.
-*/
-qreal QGraphicsGeoMap::minimumZoomLevel() const
-{
- if (d_ptr->manager)
- return d_ptr->manager->minimumZoomLevel();
-
- return -1;
-}
-
-/*!
- \property QGraphicsGeoMap::maximumZoomLevel
- \brief This property holds the maximum zoom level supported by the
- QGeoMappingManager associated with this widget.
-
- Larger values of the zoom level correspond to more detailed views of the
- map.
-*/
-qreal QGraphicsGeoMap::maximumZoomLevel() const
-{
- if (d_ptr->manager)
- return d_ptr->manager->maximumZoomLevel();
-
- return -1;
-}
-
-/*!
- \property QGraphicsGeoMap::zoomLevel
- \brief This property holds the zoom level of the map.
-
- Larger values of the zoom level correspond to more detailed views of the
- map.
-
- If zoomLevel is less than minimumZoomLevel then minimumZoomLevel
- will be used, and if zoomLevel is larger than
- maximumZoomLevel then maximumZoomLevel will be used.
-*/
-void QGraphicsGeoMap::setZoomLevel(qreal zoomLevel)
-{
- if (d_ptr->mapData)
- d_ptr->mapData->setZoomLevel(zoomLevel);
-}
-
-qreal QGraphicsGeoMap::zoomLevel() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->zoomLevel();
-
- return -1;
-}
-/*!
- \property QGraphicsGeoMap::supportsBearing
- \brief This property holds whether bearing is supported by the
- QGeoMappingManager associated with this widget.
-*/
-bool QGraphicsGeoMap::supportsBearing() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->supportsBearing();
-
- return false;
-}
-
-/*!
- \property QGraphicsGeoMap::bearing
- \brief This property holds the bearing of the map.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-
- Changes to this property will be ignored if supportsBearing()
- returns false.
-*/
-void QGraphicsGeoMap::setBearing(qreal bearing)
-{
- if (d_ptr->mapData)
- d_ptr->mapData->setBearing(bearing);
-}
-
-qreal QGraphicsGeoMap::bearing() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->bearing();
-
- return 0;
-}
-
-/*!
- \property QGraphicsGeoMap::supportsTilting
- \brief This property holds whether tilting is supported by the
- QGeoMappingManager associated with this widget.
-*/
-bool QGraphicsGeoMap::supportsTilting() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->supportsTilting();
-
- return false;
-}
-
-/*!
- \property QGraphicsGeoMap::minimumTilt
- \brief This property holds the minimum tilt supported by the
- QGeoMappingManager associated with this widget.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-*/
-qreal QGraphicsGeoMap::minimumTilt() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->minimumTilt();
-
- return 0;
-}
-
-/*!
- \property QGraphicsGeoMap::maximumTilt
- \brief This property holds the maximum tilt supported by the
- QGeoMappingManager associated with this widget.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-*/
-qreal QGraphicsGeoMap::maximumTilt() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->maximumTilt();
-
- return 0;
-}
-
-/*!
- \property QGraphicsGeoMap::tilt
- \brief This property holds the tilt of the map.
-
- Value in degrees where 0 is equivalent to 90 degrees between view and earth's
- surface i.e. looking straight down to earth.
-
- If \a tilt is less than minimumTilt() then minimumTilt()
- will be used, and if \a tilt is larger than
- maximumTilt() then maximumTilt() will be used.
-
- Changes to this property will be ignored if supportsTilting()
- returns false.
-*/
-void QGraphicsGeoMap::setTilt(qreal tilt)
-{
- if (d_ptr->mapData)
- d_ptr->mapData->setTilt(tilt);
-}
-
-qreal QGraphicsGeoMap::tilt() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->tilt();
-
- return 0;
-}
-
-/*!
- Pans the map view \a dx pixels in the x direction and \a dy pixels
- in the y direction.
-
- The x and y axes are specified in Graphics View Framework coordinates.
- By default this will mean that positive values of \a dx move the
- viewed area to the right and that positive values of \a dy move the
- viewed area down.
-
- After the panning has occurred the centerChanged() signal will be emitted.
-*/
-void QGraphicsGeoMap::pan(int dx, int dy)
-{
- if (d_ptr->mapData) {
- d_ptr->mapData->pan(dx, dy);
- update();
- }
-}
-
-/*!
- \property QGraphicsGeoMap::center
- \brief This property holds the coordinate at the center of the map viewport.
-
- Panning the map can be more efficient than changing the center by small
- increments.
-*/
-void QGraphicsGeoMap::setCenter(const QGeoCoordinate &center)
-{
- if (d_ptr->mapData)
- d_ptr->mapData->setCenter(center);
-}
-
-QGeoCoordinate QGraphicsGeoMap::center() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->center();
-
- return QGeoCoordinate();
-}
-
-/*!
- Returns the map types supported by the QGeoMappingManager associated with
- this widget.
-*/
-QList<QGraphicsGeoMap::MapType> QGraphicsGeoMap::supportedMapTypes() const
-{
- if (d_ptr->manager)
- return d_ptr->manager->supportedMapTypes();
-
- return QList<QGraphicsGeoMap::MapType>();
-}
-
-/*!
- \property QGraphicsGeoMap::mapType
- \brief This property holds the type of map data displayed by the map.
-
- Setting mapType to a type not present in supportedMapTypes() will do
- nothing.
-*/
-void QGraphicsGeoMap::setMapType(QGraphicsGeoMap::MapType mapType)
-{
- if (d_ptr->mapData && d_ptr->manager) {
- if (!d_ptr->manager->supportedMapTypes().contains(mapType))
- return;
-
- d_ptr->mapData->setMapType(mapType);
- }
-}
-
-QGraphicsGeoMap::MapType QGraphicsGeoMap::mapType() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->mapType();
-
- return QGraphicsGeoMap::NoMap;
-}
-
-/*!
- Returns the connectivity modes supported by the QGeoMappingManager associated with
- this widget.
-*/
-QList<QGraphicsGeoMap::ConnectivityMode> QGraphicsGeoMap::supportedConnectivityModes() const
-{
- if (d_ptr->manager)
- return d_ptr->manager->supportedConnectivityModes();
-
- return QList<QGraphicsGeoMap::ConnectivityMode>();
-}
-
-/*!
- \property QGraphicsGeoMap::connectivityMode
- \brief This property holds the connectivity mode used to obtain the map data.
-
- Setting connectivityMode to a mode not present in supportedConnectivityModes() will do
- nothing.
-*/
-void QGraphicsGeoMap::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-{
- if (d_ptr->mapData && d_ptr->manager) {
- if (!d_ptr->manager->supportedConnectivityModes().contains(connectivityMode))
- return;
-
- d_ptr->mapData->setConnectivityMode(connectivityMode);
- }
-}
-
-QGraphicsGeoMap::ConnectivityMode QGraphicsGeoMap::connectivityMode() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->connectivityMode();
-
- return QGraphicsGeoMap::NoConnectivity;
-}
-
-/*!
- Returns whether custom map objects are supported by this engine.
-
- Custom map objects are map objects based on QGraphicsItem instances, which
- are hard to support in cases where the map rendering is not being
- performed by the Qt Graphics View framwork.
-*/
-bool QGraphicsGeoMap::supportsCustomMapObjects() const
-{
- if (d_ptr->manager)
- return d_ptr->manager->supportsCustomMapObjects();
-
- return false;
-}
-
-/*!
- Returns the map objects associated with this map.
-*/
-QList<QGeoMapObject*> QGraphicsGeoMap::mapObjects() const
-{
- if (!d_ptr->mapData)
- return QList<QGeoMapObject*>();
-
- return d_ptr->mapData->mapObjects();
-}
-
-/*!
- Adds \a mapObject to the list of map objects managed by this widget.
-
- If \a mapObject is within the viewport of the map and
- QGeoMapObject::isVisible() returns true then the map will display the map
- object immediately.
-
- The map will take ownership of the \a mapObject.
-
- If supportsCustomMapObject() returns false and \a mapObject is a custom map
- object then \a mapObject will not be added to the map.
-*/
-void QGraphicsGeoMap::addMapObject(QGeoMapObject *mapObject)
-{
- if (!mapObject || !d_ptr->mapData)
- return;
-
- if ((mapObject->type() == QGeoMapObject::CustomType) && !supportsCustomMapObjects())
- return;
-
- d_ptr->mapData->addMapObject(mapObject);
-
- this->update();
-}
-
-/*!
- Removes \a mapObject from the list of map objects managed by this widget.
-
- If \a mapObject is within the viewport of the map and
- QGeoMapObject::isVisible() returns true then the map will stop displaying
- the map object immediately.
-
- The map will release ownership of the \a mapObject.
-*/
-void QGraphicsGeoMap::removeMapObject(QGeoMapObject *mapObject)
-{
- if (!mapObject || !d_ptr->mapData)
- return;
-
- d_ptr->mapData->removeMapObject(mapObject);
-
- this->update();
-}
-
-/*!
- Clears the map objects associated with this map.
-
- The map objects will be deleted.
-*/
-void QGraphicsGeoMap::clearMapObjects()
-{
- if (!d_ptr->mapData)
- return;
-
- d_ptr->mapData->clearMapObjects();
-}
-
-/*!
- Returns the map overlays associated with this map.
-*/
-QList<QGeoMapOverlay*> QGraphicsGeoMap::mapOverlays() const
-{
- if (!d_ptr->mapData)
- return QList<QGeoMapOverlay*>();
-
- return d_ptr->mapData->mapOverlays();
-}
-
-/*!
- Adds \a overlay to the list of map overlays associated with this map.
-
- The overlays will be drawn in the order in which they were added.
-
- The map will take ownership of \a overlay.
-*/
-void QGraphicsGeoMap::addMapOverlay(QGeoMapOverlay *overlay)
-{
- if (!overlay || !d_ptr->mapData)
- return;
-
- d_ptr->mapData->addMapOverlay(overlay);
-
- this->update();
-}
-
-/*!
- Removes \a overlay from the list of map overlays associated with this map.
-
- The map will release ownership of \a overlay.
-*/
-void QGraphicsGeoMap::removeMapOverlay(QGeoMapOverlay *overlay)
-{
- if (!overlay || !d_ptr->mapData)
- return;
-
- d_ptr->mapData->removeMapOverlay(overlay);
-
- this->update();
-}
-
-/*!
- Clears the map overlays associated with this map.
-
- The map overlays will be deleted.
-*/
-void QGraphicsGeoMap::clearMapOverlays()
-{
- if (!d_ptr->mapData)
- return;
-
- d_ptr->mapData->clearMapOverlays();
-}
-
-/*!
- Returns a bounding box corresponding to the physical area displayed
- in the viewport of the map.
-
- The bounding box which is returned is defined by the upper left and
- lower right corners of the visible area of the map.
-*/
-QGeoBoundingBox QGraphicsGeoMap::viewport() const
-{
- if (!d_ptr->mapData)
- return QGeoBoundingBox();
-
- return d_ptr->mapData->viewport();
-}
-
-/*!
- Attempts to fit the bounding box \a bounds into the viewport of the map.
-
- This method will change the zoom level to the maximum zoom level such
- that all of \a bounds is visible within the resulting viewport.
-
- If \a preserveViewportCenter is false the map will be centered on the
- bounding box \a bounds before the zoom level is changed, otherwise the
- center of the map will not be changed.
-*/
-void QGraphicsGeoMap::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter)
-{
- if (!d_ptr->mapData)
- return;
-
- d_ptr->mapData->fitInViewport(bounds, preserveViewportCenter);
-}
-
-/*!
- Returns the list of visible map objects managed by this widget which
- contain the point \a screenPosition within their boundaries.
-*/
-QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsAtScreenPosition(const QPointF &screenPosition) const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->mapObjectsAtScreenPosition(screenPosition);
-
- return QList<QGeoMapObject*>();
-}
-
-/*!
- Returns the list of visible map objects managed by this widget which are
- displayed at least partially within the on screen rectangle
- \a screenRect.
-*/
-QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsInScreenRect(const QRectF &screenRect) const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->mapObjectsInScreenRect(screenRect);
-
- return QList<QGeoMapObject*>();
-}
-
-/*!
- Returns the list of visible map objects manager by this widget which
- are displayed at least partially within the viewport of the map.
-*/
-QList<QGeoMapObject*> QGraphicsGeoMap::mapObjectsInViewport() const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->mapObjectsInViewport();
-
- return QList<QGeoMapObject*>();
-}
-
-/*!
- Returns the position on the screen at which \a coordinate is displayed.
-
- An invalid QPointF will be returned if \a coordinate is invalid or is not
- within the current viewport.
-*/
-QPointF QGraphicsGeoMap::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->coordinateToScreenPosition(coordinate);
-
- return QPointF();
-}
-
-/*!
- Returns the coordinate corresponding to the point in the viewport at \a
- screenPosition.
-
- An invalid QGeoCoordinate will be returned if \a screenPosition is invalid
- or is not within the current viewport.
-*/
-QGeoCoordinate QGraphicsGeoMap::screenPositionToCoordinate(QPointF screenPosition) const
-{
- if (d_ptr->mapData)
- return d_ptr->mapData->screenPositionToCoordinate(screenPosition);
-
- return QGeoCoordinate();
-}
-
-/*!
-\fn void QGraphicsGeoMap::zoomLevelChanged(qreal zoomLevel)
-
- This signal is emitted when the zoom level of the map changes.
-
- The new value is \a zoomLevel.
-*/
-
-/*!
-\fn void QGraphicsGeoMap::bearingChanged(qreal bearing)
-
- This signal is emitted when the bearing of the map changes.
-
- The new value is \a bearing.
-
- This signal will not be emitted if supportsBearing()
- returns false.
-*/
-
-/*!
-\fn void QGraphicsGeoMap::tiltChanged(qreal tilt)
-
- This signal is emitted when the tilt of the map changes.
-
- The new value is \a tilt.
-
- This signal will not be emitted if supportsTilting()
- returns false.
-*/
-
-/*!
-\fn void QGraphicsGeoMap::centerChanged(const QGeoCoordinate &coordinate)
-
- This signal is emitted when the center of the map changes.
-
- The new value is \a coordinate.
-*/
-
-/*!
-\fn void QGraphicsGeoMap::mapTypeChanged(QGraphicsGeoMap::MapType mapType)
-
- This signal is emitted when the map type changes.
-
- The new value is \a mapType.
-*/
-
-/*!
-\fn void QGraphicsGeoMap::connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-
- This signal is emitted when the connectivity mode used to fetch the
- map data changes.
-
- The new value is \a connectivityMode.
-*/
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGraphicsGeoMapPrivate::QGraphicsGeoMapPrivate()
- : manager(0),
- mapData(0),
- panActive(false) {}
-
-QGraphicsGeoMapPrivate::~QGraphicsGeoMapPrivate()
-{
- if (mapData)
- delete mapData;
-}
-
-#include "moc_qgraphicsgeomap.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/qgraphicsgeomap.h b/src/location/maps/qgraphicsgeomap.h
deleted file mode 100644
index 00a47d8c..00000000
--- a/src/location/maps/qgraphicsgeomap.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGRAPHICSGEOMAP_H
-#define QGRAPHICSGEOMAP_H
-
-#include "qmobilityglobal.h"
-
-#include <QGraphicsWidget>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoCoordinate;
-class QGeoMappingManager;
-class QGeoBoundingBox;
-class QGeoMapObject;
-class QGeoMapOverlay;
-class QGraphicsGeoMapPrivate;
-
-class Q_LOCATION_EXPORT QGraphicsGeoMap : public QGraphicsWidget
-{
- Q_OBJECT
- Q_ENUMS(MapType)
- Q_ENUMS(ConnectivityMode)
-
- Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel CONSTANT)
- Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel CONSTANT)
- Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
- Q_PROPERTY(MapType mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
- Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(ConnectivityMode connectivityMode READ connectivityMode WRITE setConnectivityMode NOTIFY connectivityModeChanged)
- Q_PROPERTY(qreal minimumTilt READ minimumTilt CONSTANT)
- Q_PROPERTY(qreal maximumTilt READ maximumTilt CONSTANT)
- Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged)
- Q_PROPERTY(bool supportsTilting READ supportsTilting CONSTANT)
- Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged)
- Q_PROPERTY(bool supportsBearing READ supportsBearing CONSTANT)
-
-public:
- enum MapType {
- NoMap,
- StreetMap,
- SatelliteMapDay,
- SatelliteMapNight,
- TerrainMap
- };
-
- enum ConnectivityMode {
- NoConnectivity,
- OfflineMode,
- OnlineMode,
- HybridMode
- };
-
- QGraphicsGeoMap(QGeoMappingManager *manager, QGraphicsItem *parent = 0);
- virtual ~QGraphicsGeoMap();
-
- QPainterPath shape() const;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *parent);
-
- qreal minimumZoomLevel() const;
- qreal maximumZoomLevel() const;
-
- void setZoomLevel(qreal zoomLevel);
- qreal zoomLevel() const;
-
- bool supportsBearing() const;
- void setBearing(qreal bearing);
- qreal bearing() const;
-
- bool supportsTilting() const;
- void setTilt(qreal tilt);
- qreal tilt() const;
- qreal minimumTilt() const;
- qreal maximumTilt() const;
-
- void setCenter(const QGeoCoordinate &center);
- QGeoCoordinate center() const;
-
- QList<MapType> supportedMapTypes() const;
- void setMapType(MapType mapType);
- MapType mapType() const;
-
- QList<ConnectivityMode> supportedConnectivityModes() const;
- void setConnectivityMode(ConnectivityMode connectivityMode);
- ConnectivityMode connectivityMode() const;
-
- bool supportsCustomMapObjects() const;
-
- QList<QGeoMapObject*> mapObjects() const;
- void addMapObject(QGeoMapObject *mapObject);
- void removeMapObject(QGeoMapObject *mapObject);
- void clearMapObjects();
-
- QList<QGeoMapOverlay*> mapOverlays() const;
- void addMapOverlay(QGeoMapOverlay *overlay);
- void removeMapOverlay(QGeoMapOverlay *overlay);
- void clearMapOverlays();
-
- QGeoBoundingBox viewport() const;
- void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false);
-
- QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const;
- QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const;
- QList<QGeoMapObject*> mapObjectsInViewport() const;
-
- QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const;
- QGeoCoordinate screenPositionToCoordinate(QPointF screenPosition) const;
-
-public Q_SLOTS:
- void pan(int dx, int dy);
-
-protected:
- void resizeEvent(QGraphicsSceneResizeEvent *event);
-
-Q_SIGNALS:
- void zoomLevelChanged(qreal zoomLevel);
- void centerChanged(const QGeoCoordinate &coordinate);
- void mapTypeChanged(QGraphicsGeoMap::MapType mapType);
- void connectivityModeChanged(QGraphicsGeoMap::ConnectivityMode connectivityMode);
- void bearingChanged(qreal bearing);
- void tiltChanged(qreal tilt);
-
-private Q_SLOTS:
- void updateMapDisplay(const QRectF& target);
-
-private:
- QGraphicsGeoMapPrivate *d_ptr;
- Q_DISABLE_COPY(QGraphicsGeoMap)
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/makepoly_p.h b/src/location/maps/tiled/makepoly_p.h
deleted file mode 100644
index d8b3a852..00000000
--- a/src/location/maps/tiled/makepoly_p.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MAKEPOLY_P_H
-#define MAKEPOLY_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-#include "qgeocoordinate.h"
-
-#include <QList>
-#include <QPolygonF>
-#include <QGraphicsPolygonItem>
-
-QT_BEGIN_NAMESPACE
-
-// TODO: replace boolean parameter by enum
-static inline void makepoly(QPolygonF &points, const QList<QGeoCoordinate> & path, const QGeoTiledMapDataPrivate * mapData, bool closedPath, qreal ypole = -100)
-{
- points.clear();
-
- QGeoCoordinate lastCoord = closedPath ? path.last() : path.first();
- QPointF lastPoint = mapData->q_ptr->coordinateToWorldPixel(lastCoord);
-
- int width = mapData->maxZoomSize.width();
-
- for (int i = 0; i < path.size(); ++i) {
- const QGeoCoordinate &coord = path.at(i);
-
- if (!coord.isValid())
- continue;
-
- const qreal lng = coord.longitude();
- const qreal lastLng = lastCoord.longitude();
-
- // is the dateline crossed = different sign AND gap is large enough
- const bool crossesDateline = lastLng * lng < 0 && abs(lastLng - lng) > 180;
-
- // calculate base point
- QPointF point = mapData->q_ptr->coordinateToWorldPixel(coord);
-
- // if the dateline is crossed, draw "around" the map over the chosen pole
- if (crossesDateline) {
- // is the shortest route east = dateline crossed XOR longitude is east by simple comparison
- const bool goesEast = crossesDateline != (lng > lastLng);
- // direction = positive if east, negative otherwise
- const qreal dir = goesEast ? 1 : -1;
-
- // lastPoint on this side
- const QPointF & L = lastPoint;
-
- // point on the other side
- const QPointF & P = point;
-
- // lastPoint on the other side
- QPointF L_ = L - QPointF(width * dir, 0);
-
- // point on this side
- QPointF P_ = P + QPointF(width * dir, 0);
-
- // TODO: make a better algorithm to make sure the off-screen points P' and L' are far enough from the dateline so the lines to the poles don't flicker through.
- // this works for now :)
- L_ += (L_ - P) * 7;
- P_ += (P_ - L) * 7;
-
- // pole point on this side
- QPointF O1 = QPointF(P_.x(), ypole);
- // pole point on the other side
- QPointF O2 = QPointF(L_.x(), ypole);
-
- //points.append(L); // implicit
- points.append(P_); // P'
- points.append(O1);
- points.append(O2);
- points.append(L_); // L'
- points.append(P);
- } else {
- // add point to polygon
- points.append(point);
- }
-
- lastCoord = coord;
- lastPoint = point;
- }
-}
-
-QT_END_NAMESPACE
-
-#endif //MAKEPOLY_P_H
diff --git a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp
deleted file mode 100644
index 2d726b2b..00000000
--- a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmapcircleobjectinfo_p.h"
-
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomapcircleobject.h"
-
-#include <QGraphicsItem>
-#include <QGraphicsEllipseItem>
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapCircleObjectInfo::QGeoTiledMapCircleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- circle = static_cast<QGeoMapCircleObject*>(mapObject);
-
- connect(circle,
- SIGNAL(radiusChanged(qreal)),
- this,
- SLOT(radiusChanged(qreal)));
- connect(circle,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
- connect(circle,
- SIGNAL(brushChanged(QBrush)),
- this,
- SLOT(brushChanged(QBrush)));
-
- ellipseItem = new QGraphicsEllipseItem;
- ellipseItem->setPos(0, 0);
-
- graphicsItem = ellipseItem;
-
- radiusChanged(circle->radius());
- brushChanged(circle->brush());
- penChanged(circle->pen());
-}
-
-QGeoTiledMapCircleObjectInfo::~QGeoTiledMapCircleObjectInfo() {}
-
-void QGeoTiledMapCircleObjectInfo::radiusChanged(qreal /*radius*/)
-{
- qreal radius = circle->radius();
- ellipseItem->setRect(-1*radius, -1*radius, 2*radius, 2*radius);
- updateItem();
-}
-
-void QGeoTiledMapCircleObjectInfo::penChanged(const QPen &pen)
-{
- ellipseItem->setPen(pen);
- updateItem();
-}
-
-void QGeoTiledMapCircleObjectInfo::brushChanged(const QBrush &brush)
-{
- ellipseItem->setBrush(brush);
- updateItem();
-}
-
-#include "moc_qgeotiledmapcircleobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h
deleted file mode 100644
index c6f07383..00000000
--- a/src/location/maps/tiled/qgeotiledmapcircleobjectinfo_p.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H
-#define QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include <QPolygonF>
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QGraphicsEllipseItem;
-class QGeoMapCircleObject;
-
-class QGeoTiledMapCircleObjectInfo : public QGeoTiledMapObjectInfo
-{
- Q_OBJECT
-public:
- QGeoTiledMapCircleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapCircleObjectInfo();
-
- QGeoMapCircleObject* circle;
- QGraphicsEllipseItem *ellipseItem;
-
-public slots:
- void radiusChanged(qreal radius);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
-};
-
-QT_END_NAMESPACE
-
-#endif //QGEOTILEDMAPCIRCLEOBJECT_INFO_P_H
diff --git a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h
deleted file mode 100644
index cdf2c81c..00000000
--- a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H
-#define QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeoboundingbox.h"
-
-#include <QPixmap>
-
-class QGraphicsPixmapItem;
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapCustomObject;
-
-class QGeoTiledMapCustomObjectInfo : public QGeoTiledMapObjectInfo
-{
- Q_OBJECT
-public:
- QGeoTiledMapCustomObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapCustomObjectInfo();
-
- QGeoMapCustomObject* custom;
-
-public slots:
- void updateTriggered();
- void graphicsItemChanged(QGraphicsItem *graphicsItem);
- void offsetChanged(const QPoint &offset);
-};
-
-QT_END_NAMESPACE
-
-#endif //QGEOTILEDMAPCUSTOMOBJECT_INFO_P_H
-
diff --git a/src/location/maps/tiled/qgeotiledmapdata.cpp b/src/location/maps/tiled/qgeotiledmapdata.cpp
deleted file mode 100644
index 207242f1..00000000
--- a/src/location/maps/tiled/qgeotiledmapdata.cpp
+++ /dev/null
@@ -1,1431 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeotiledmappingmanagerengine.h"
-#include "qgeotiledmappingmanagerengine_p.h"
-#include "qgeotiledmaprequest.h"
-#include "qgeocoordinate.h"
-#include "qgeoboundingbox.h"
-#include "qgeomapoverlay.h"
-#include <private/projwrapper_p.h>
-#include "qgeomapobjectengine_p.h"
-
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeotiledmapcircleobjectinfo_p.h"
-#include "qgeotiledmapgroupobjectinfo_p.h"
-#include "qgeotiledmappixmapobjectinfo_p.h"
-#include "qgeotiledmappolygonobjectinfo_p.h"
-#include "qgeotiledmappolylineobjectinfo_p.h"
-#include "qgeotiledmaprectangleobjectinfo_p.h"
-#include "qgeotiledmaprouteobjectinfo_p.h"
-#include "qgeotiledmaptextobjectinfo_p.h"
-#include "qgeotiledmapcustomobjectinfo_p.h"
-
-#include "qgeomaptextobject.h"
-
-#include <QTimer>
-#include <QImage>
-#include <QGraphicsScene>
-
-#include <QDebug>
-
-//#define DEFAULT_ZOOMLEVEL 8
-#define PI 3.14159265
-//#define HIT_DETECTION_COLOR qRgba(0, 0, 255, 127) //semi-transparent blue
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#include <math.h>
-
-QT_BEGIN_NAMESPACE
-
-uint qHash(const QRectF& key)
-{
- uint result = qHash(qRound(key.x()));
- result += qHash(qRound(key.y()));
- result += qHash(qRound(key.width()));
- result += qHash(qRound(key.height()));
- return result;
-}
-
-
-/*!
- \class QGeoTiledMapData
- \brief The QGeoTiledMapData class is a subclass of QGeoMapData provided
- to make working with tile based mapping services more convenient.
-
- \inmodule QtLocation
-
- \ingroup maps-impl-tiled
-
- \since 1.2
-
- This class assumes that at a zoom level of z the world is represented as a
- 2^z by 2^z grid of tiles, and that the Mercator projection is used to map
- back and forth between coordinate and positions on the map.
-
- Different projections can be provided by reimplementing
- coordinateToWorldReferencePosition() and worldReferencePositionToCoordinate().
-
- Many of the internal calculations deal with positions as though they are
- pixel positions on the map at the maximum zoom level. Several functions are
- provided which expose information about the map and the viewport onto the
- map in these terms for use with custom QGeoMapObjectInfo subclasses.
-
- These functions include worldReferenceViewportCenter(), worldReferenceSize() and
- worldReferenceViewportRect().
-
- NOTE: QGeoTiledMapData blocks property change signals from QGeoMapData by calling
- QGeoMapData::setBlockPropertyChangeSignals() with true. Changing this in
- QGeoTiledMapData subclasses will cause the signals being emitted at wrong time.
-*/
-
-/*!
- Constructs a new tiled map data object, which makes use of the functionality provided by \a engine.
-*/
-QGeoTiledMapData::QGeoTiledMapData(QGeoMappingManagerEngine *engine)
- : QGeoMapData(new QGeoTiledMapDataPrivate(this, engine))
-{
- Q_D(QGeoTiledMapData);
-
- QGeoTiledMappingManagerEngine *tileEngine = static_cast<QGeoTiledMappingManagerEngine *>(d->engine);
-
- setBlockPropertyChangeSignals(true);
-
- setZoomLevel(8.0);
-
- d->worldReferenceSize = (1 << qRound(tileEngine->maximumZoomLevel())) * tileEngine->tileSize();
-
- // TODO get this from the engine, which should give different values depending on if this is running on a device or not
-#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
- d->cache.setMaxCost(5 * 1024 * 1024);
- d->zoomCache.setMaxCost(5 * 1024 * 1024);
-#else
- d->cache.setMaxCost(10 * 1024 * 1024);
- d->zoomCache.setMaxCost(10 * 1024 * 1024);
-#endif
-}
-
-/*!
- Destroys this tiled map data object.
-*/
-QGeoTiledMapData::~QGeoTiledMapData()
-{
-}
-
-
-QPointF QGeoTiledMapDataPrivate::coordinateToScreenPosition(double lon, double lat) const
-{
- QPointF offset = windowOffset();
-
- QPoint pos(coordinateToWorldReferencePosition(lon, lat));
-
- const int x = pos.x() - worldReferenceViewportRect.left();
-// if (x < 0)
-// x += worldReferenceSize.width();
-
- const int y = pos.y() - worldReferenceViewportRect.top();
-
- QPointF posF(offset.x() + qreal(x) / zoomFactor, offset.y() + qreal(y) / zoomFactor);
-
- return posF;
-}
-
-/*!
- \reimp
-*/
-QPointF QGeoTiledMapData::coordinateToScreenPosition(const QGeoCoordinate &coordwgs) const
-{
- Q_D(const QGeoTiledMapData);
- return d->coordinateToScreenPosition(coordwgs.longitude(), coordwgs.latitude());
-}
-
-/*!
- \reimp
-*/
-QGeoCoordinate QGeoTiledMapData::screenPositionToCoordinate(const QPointF &screenPosition) const
-{
- Q_D(const QGeoTiledMapData);
-
- QPoint worldRef = d->screenPositionToWorldReferencePosition(screenPosition);
-
- if (worldRef.isNull())
- return QGeoCoordinate();
-
- const QGeoCoordinate insph = worldReferencePositionToCoordinate(worldRef);
-
- //ProjCoordinate c(insph.longitude(), insph.latitude(), 0.0, d->spherical);
- //c.convert(d->wgs84);
- return insph;
-}
-
-// this belongs to QGeoTiledMapDataPrivate in order to avoid
-// breaking B.C.
-QPoint QGeoTiledMapDataPrivate::screenPositionToWorldReferencePosition(const QPointF &screenPosition) const
-{
- QPointF offset = windowOffset();
-
- QPointF pos(screenPosition.x() - offset.x(), screenPosition.y() - offset.y());
-
- const int worldX = int(worldReferenceViewportRect.left() + pos.x() * zoomFactor + 0.5) % worldReferenceSize.width();
- const int worldY = int(worldReferenceViewportRect.top() + pos.y() * zoomFactor + 0.5) % worldReferenceSize.height();
-
- return QPoint(worldX, worldY);
-}
-
-QPoint QGeoTiledMapDataPrivate::coordinateToWorldReferencePosition(double lng, double lat) const
-{
- lng = lng / 360.0 + 0.5;
-
- lat = 0.5 - (log(tan((PI / 4.0) + (PI / 2.0) * lat / 180.0)) / PI) / 2.0;
- lat = qMax(0.0, lat);
- lat = qMin(1.0, lat);
-
- const double x = lng * worldReferenceSize.width();
- const double y = lat * worldReferenceSize.height();
-
- const QPoint r(int(x > 0 ? x + 0.5 : x - 0.5),
- int(y > 0 ? y + 0.5 : y - 0.5));
- return r;
-}
-
-/*!
- Converts the coordinate \a coordinate to a pixel position on the entire
- map at the maximum zoom level.
-
- The default implementation is based on the Mercator projection.
-*/
-QPoint QGeoTiledMapData::coordinateToWorldReferencePosition(const QGeoCoordinate &coordinate) const
-{
- Q_D(const QGeoTiledMapData);
- return d->coordinateToWorldReferencePosition(coordinate.longitude(),
- coordinate.latitude());
-}
-
-qreal rmod(const qreal a, const qreal b)
-{
- quint64 div = static_cast<quint64>(a / b);
- return a - static_cast<qreal>(div) * b;
-}
-
-/*!
- Converts the pixel position \a pixel on the map to a coordinate.
-
- The pixel position is relative the entire map at the maximum zoom level.
-
- The default implementation is based on the Mercator projection.
-*/
-QGeoCoordinate QGeoTiledMapData::worldReferencePositionToCoordinate(const QPoint &pixel) const
-{
- Q_D(const QGeoTiledMapData);
-
- qreal fx = qreal(pixel.x()) / d->worldReferenceSize.width();
- qreal fy = qreal(pixel.y()) / d->worldReferenceSize.height();
-
- if (fy < 0.0f)
- fy = 0.0f;
- else if (fy > 1.0f)
- fy = 1.0f;
-
- qreal lat;
-
- if (fy == 0.0f)
- lat = 90.0f;
- else if (fy == 1.0f)
- lat = -90.0f;
- else
- lat = (180.0f / PI) * (2.0f * atan(exp(PI * (1.0f - 2.0f * fy))) - (PI / 2.0f));
-
- qreal lng;
- if (fx >= 0) {
- lng = rmod(fx, 1.0f);
- } else {
- lng = rmod(1.0f - rmod(-1.0f * fx, 1.0f), 1.0f);
- }
-
- lng = lng * 360.0f - 180.0f;
-
- return QGeoCoordinate(lat, lng, 0.0);
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::setCenter(const QGeoCoordinate &center)
-{
- Q_D(QGeoTiledMapData);
-
- bool changed = (d->center != center);
-
- if (!changed)
- return;
-
- d->worldReferenceViewportCenter = coordinateToWorldReferencePosition(center);
- d->updateScreenRect();
- emit updateMapDisplay();
-
- emit centerChanged(center);
-
- d->updateMapImage();
-
- QGeoMapData::setCenter(center);
- d->oe->invalidatePixelsForViewport();
- d->oe->trimPixelTransforms();
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::setMapType(QGraphicsGeoMap::MapType mapType)
-{
- Q_D(QGeoTiledMapData);
-
- bool changed = (d->mapType != mapType);
-
- if (!changed)
- return;
-
- QGeoMapData::setMapType(mapType);
-
- d->clearRequests();
- d->cache.clear();
- d->zoomCache.clear();
- emit updateMapDisplay();
-
- emit mapTypeChanged(d->mapType);
-
- d->updateMapImage();
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode)
-{
- QGraphicsGeoMap::ConnectivityMode oldMode = QGeoMapData::connectivityMode();
-
- if (oldMode == connectivityMode)
- return;
-
- QGeoMapData::setConnectivityMode(connectivityMode);
-
- if (oldMode == QGeoMapData::connectivityMode())
- return;
-
- emit connectivityModeChanged(connectivityMode);
-}
-
-/*!
- \reimp
-*/
-QGeoCoordinate QGeoTiledMapData::center() const
-{
- Q_D(const QGeoTiledMapData);
- return worldReferencePositionToCoordinate(d->worldReferenceViewportCenter);
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::setZoomLevel(qreal zoomLevelf)
-{
- Q_D(QGeoTiledMapData);
-
- QPixmap oldImage(windowSize().toSize());
- if (!oldImage.isNull()) {
- // grab the old image
- QPainter painter1(&oldImage);
- d->paintMap(&painter1, 0);
- painter1.end();
- }
-
- qreal oldZoomLevel = d->zoomLevel;
- int zoomLevel = qRound(zoomLevelf);
-
- QGeoMapData::setZoomLevel(zoomLevel);
-
- d->oe->invalidateZoomDependents();
- d->oe->invalidatePixelsForViewport();
- d->oe->trimPixelTransforms();
-
- // QGeoMapData::setZoomLevel clips the zoom level to be
- // in between the minimum and maximum zoom levels
- zoomLevel = QGeoMapData::zoomLevel();
-
- int zoomDiff = qRound(zoomLevel - oldZoomLevel);
-
- if (zoomDiff == 0)
- return;
-
- d->zoomFactor = 1 << qRound(d->engine->maximumZoomLevel() - d->zoomLevel);
-
- QGeoTiledMappingManagerEngine *tileEngine = static_cast<QGeoTiledMappingManagerEngine *>(d->engine);
- QSize tileSize = tileEngine->tileSize();
-
- d->updateScreenRect();
-
- if (oldImage.isNull()) {
- d->updateMapImage();
- emit zoomLevelChanged(d->zoomLevel);
- return;
- }
-
- //scale old image
- QRectF target = oldImage.rect();
- qreal width = target.width() / (1 << qAbs(zoomDiff));
- qreal height = target.height() / (1 << qAbs(zoomDiff));
- qreal x = target.x() + ((target.width() - width) / 2.0);
- qreal y = target.y() + ((target.height() - height) / 2.0);
- QRectF source = QRectF(x, y, width, height);
-
- QPixmap newImage(oldImage.size());
- newImage.fill(Qt::lightGray);
- QPainter painter2(&newImage);
-#if !(defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6))
- painter2.setRenderHint(QPainter::SmoothPixmapTransform, true);
-#endif
- if (zoomDiff < 0) {
- painter2.drawPixmap(source, oldImage, target);
- } else {
- painter2.drawPixmap(target, oldImage, source);
- }
- painter2.end();
-
- d->zoomCache.clear();
-
- QGeoTileIterator it(d);
-
- QPointF offset = d->windowOffset();
-
- while (it.hasNext()) {
- QGeoTiledMapRequest req = it.next();
- QRect tileRect = req.tileRect();
-
- if (d->cache.contains(req))
- continue;
-
- if (!d->intersectsScreen(tileRect))
- continue;
-
- QList<QPair<QRect, QRect> > overlaps = d->intersectedScreen(tileRect);
- for (int i = 0; i < overlaps.size(); ++i) {
- QRect s = overlaps.at(i).first;
- QRect t = overlaps.at(i).second;
-
- QRectF source = QRectF(offset.x() + int(t.left()) / d->zoomFactor,
- offset.y() + int(t.top()) / d->zoomFactor,
- int(t.width()) / d->zoomFactor,
- int(t.height()) / d->zoomFactor);
-
- QPixmap *tile = new QPixmap(tileSize);
- tile->fill(Qt::lightGray); // TODO: this looks useless
-
- QRectF target = QRectF(int(s.left()) / d->zoomFactor,
- int(s.top()) / d->zoomFactor,
- int(s.width()) / d->zoomFactor,
- int(s.height()) / d->zoomFactor);
-
- QPainter painter3(tile);
- painter3.drawPixmap(target, newImage, source);
- painter3.end();
-
- d->zoomCache.insert(req, tile, (tile->depth() * tile->width() * tile->height()) / 8);
- }
- }
-
- emit updateMapDisplay();
-
- d->clearRequests();
- d->updateMapImage();
-
- emit zoomLevelChanged(d->zoomLevel);
-
- // call again
- QGeoMapData::setZoomLevel(zoomLevel);
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::setWindowSize(const QSizeF &size)
-{
- Q_D(QGeoTiledMapData);
-
- bool changed = (d->windowSize != size);
-
- if (!changed)
- return;
-
- QGeoMapData::setWindowSize(size);
-
- d->oe->invalidatePixelsForViewport();
- d->oe->trimPixelTransforms();
-
- d->updateScreenRect();
-
- emit windowSizeChanged(d->windowSize);
-
- d->updateMapImage();
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::pan(int dx, int dy)
-{
- Q_D(QGeoTiledMapData);
-
- int x = d->worldReferenceViewportCenter.x();
- int y = d->worldReferenceViewportCenter.y();
-
- x = (x + dx * d->zoomFactor) % d->worldReferenceSize.width();
- if (x < 0)
- x += d->worldReferenceSize.width();
-
- y = (y + dy * d->zoomFactor);
- int height = int(d->worldReferenceViewportRect.height() / 2.0);
- if (y < height)
- y = height;
- if (y > d->worldReferenceSize.height() - height)
- y = d->worldReferenceSize.height() - height;
-
- d->worldReferenceViewportCenter.setX(x);
- d->worldReferenceViewportCenter.setY(y);
-
- QGeoCoordinate centerCoord = center();
-
- QGeoMapData::setCenter(centerCoord);
- d->oe->invalidatePixelsForViewport();
- d->oe->trimPixelTransforms();
-
- d->updateScreenRect();
-
- emit centerChanged(centerCoord);
-
- d->updateMapImage();
-}
-
-/*!
- \reimp
-*/
-QGeoBoundingBox QGeoTiledMapData::viewport() const
-{
- Q_D(const QGeoTiledMapData);
- if (d->worldReferenceViewportRectRight.isValid()) {
- return QGeoBoundingBox(worldReferencePositionToCoordinate(d->worldReferenceViewportRectLeft.topLeft()),
- worldReferencePositionToCoordinate(d->worldReferenceViewportRectRight.bottomRight()));
- } else {
- return QGeoBoundingBox(worldReferencePositionToCoordinate(d->worldReferenceViewportRect.topLeft()),
- worldReferencePositionToCoordinate(d->worldReferenceViewportRect.bottomRight()));
- }
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter)
-{
- Q_D(QGeoTiledMapData);
-
- if (!preserveViewportCenter)
- setCenter(bounds.center());
-
- int minZoomLevel = engine()->minimumZoomLevel();
- int maxZoomLevel = engine()->maximumZoomLevel();
-
- int zoomFactor = 1 << maxZoomLevel;
-
- for (int i = minZoomLevel; i <= maxZoomLevel; ++i) {
- QRect rect = d->screenRectForZoomFactor(zoomFactor);
- QGeoBoundingBox viewport = QGeoBoundingBox(worldReferencePositionToCoordinate(rect.topLeft()),
- worldReferencePositionToCoordinate(rect.bottomRight()));
-
-// qWarning() << i << zoomFactor
-// << viewport.topLeft()
-// << viewport.bottomRight();
-
- if (!viewport.contains(bounds)) {
- setZoomLevel(qMax(minZoomLevel, i - 1));
- return;
- }
-
- zoomFactor /= 2;
- }
-
- setZoomLevel(maxZoomLevel);
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- Q_D(QGeoTiledMapData);
- d->paintMap(painter, option);
-}
-
-/*!
- \reimp
-*/
-void QGeoTiledMapData::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option)
-{
- Q_D(QGeoTiledMapData);
- d->paintObjects(painter, option);
-}
-
-/*!
- \reimp
-*/
-QGeoMapObjectInfo *QGeoTiledMapData::createMapObjectInfo(QGeoMapObject *mapObject)
-{
- switch (mapObject->type()) {
- case QGeoMapObject::GroupType:
- return new QGeoTiledMapGroupObjectInfo(this, mapObject);
- case QGeoMapObject::RectangleType:
- return new QGeoTiledMapRectangleObjectInfo(this, mapObject);
- case QGeoMapObject::CircleType:
- return new QGeoTiledMapCircleObjectInfo(this, mapObject);
- case QGeoMapObject::PolylineType:
- return new QGeoTiledMapPolylineObjectInfo(this, mapObject);
- case QGeoMapObject::PolygonType:
- return new QGeoTiledMapPolygonObjectInfo(this, mapObject);
- case QGeoMapObject::PixmapType:
- return new QGeoTiledMapPixmapObjectInfo(this, mapObject);
- case QGeoMapObject::TextType:
- return new QGeoTiledMapTextObjectInfo(this, mapObject);
- case QGeoMapObject::RouteType:
- return new QGeoTiledMapRouteObjectInfo(this, mapObject);
- case QGeoMapObject::CustomType:
- return new QGeoTiledMapCustomObjectInfo(this, mapObject);
- default:
- return 0;
- }
-}
-
-void QGeoTiledMapData::processRequests()
-{
- Q_D(QGeoTiledMapData);
-
- QMutableSetIterator<QGeoTiledMapReply*> replyIter(d->replies);
- // Abort off-screen replies
- while (replyIter.hasNext()) {
- QGeoTiledMapReply *reply = replyIter.next();
- if (!d->intersectsScreen(reply->request().tileRect())
- || (zoomLevel() != reply->request().zoomLevel())
- || (mapType() != reply->request().mapType())
- || (connectivityMode() != reply->request().connectivityMode())) {
- d->replyRects.remove(reply->request().tileRect());
- d->zoomCache.remove(reply->request());
- replyIter.remove();
- reply->abort();
- }
- }
-
- QGeoTiledMappingManagerEngine *tiledEngine
- = static_cast<QGeoTiledMappingManagerEngine*>(engine());
-
- QMutableListIterator<QGeoTiledMapRequest> requestIter(d->requests);
- while (requestIter.hasNext()) {
- QGeoTiledMapRequest req = requestIter.next();
-
- d->requestRects.remove(req.tileRect());
- requestIter.remove();
-
- // Do not use the requests which have pending replies or are off screen
- if (d->replyRects.contains(req.tileRect()) || !d->intersectsScreen(req.tileRect())) {
- continue;
- }
-
- QGeoTiledMapReply *reply = tiledEngine->getTileImage(req);
-
- if (!reply) {
- continue;
- }
-
- if (reply->error() != QGeoTiledMapReply::NoError) {
- tileError(reply->error(), reply->errorString());
- reply->deleteLater();
- d->zoomCache.remove(reply->request());
- continue;
- }
-
- connect(reply,
- SIGNAL(finished()),
- this,
- SLOT(tileFinished()));
-
- connect(reply,
- SIGNAL(error(QGeoTiledMapReply::Error, QString)),
- this,
- SLOT(tileError(QGeoTiledMapReply::Error, QString)));
-
- d->replies.insert(reply);
- d->replyRects.insert(reply->request().tileRect());
-
- if (reply->isFinished())
- replyFinished(reply);
- }
-}
-
-void QGeoTiledMapData::tileFinished()
-{
- Q_D(QGeoTiledMapData);
-
- QGeoTiledMapReply *reply = qobject_cast<QGeoTiledMapReply*>(sender());
-
- if (!reply) {
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
- return;
- } else {
- replyFinished(reply);
- }
-}
-
-void QGeoTiledMapData::replyFinished(QGeoTiledMapReply *reply)
-{
- Q_D(QGeoTiledMapData);
-
- d->replyRects.remove(reply->request().tileRect());
- d->replies.remove(reply);
- d->zoomCache.remove(reply->request());
-
- if (reply->error() != QGeoTiledMapReply::NoError) {
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
- reply->deleteLater();
- return;
- }
-
- if ((zoomLevel() != reply->request().zoomLevel())
- || (mapType() != reply->request().mapType())
- || (connectivityMode() != reply->request().connectivityMode())) {
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
- reply->deleteLater();
- return;
- }
-
- //QPixmap *tile = new QPixmap();
- QImage *tile = new QImage();
-
- if (!tile->loadFromData(reply->mapImageData(), reply->mapImageFormat().toAscii())) {
- delete tile;
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
- reply->deleteLater();
- return;
- //setError(QGeoTiledMapReply::ParseError, "The response from the service was not in a recognisable format.");
- }
-
- if (tile->isNull() || tile->size().isEmpty()) {
- delete tile;
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
- reply->deleteLater();
- return;
- //setError(QGeoTiledMapReply::ParseError, "The map image is empty.");
- }
-
- d->cache.insert(reply->request(), tile, (tile->depth() * tile->width() * tile->height()) / 8);
-
- d->cleanupCaches();
-
- QRect tileRect = reply->request().tileRect();
-
- QPointF offset = d->windowOffset();
-
- QList<QPair<QRect, QRect> > overlaps = d->intersectedScreen(tileRect);
- for (int i = 0; i < overlaps.size(); ++i) {
- QRect t = overlaps.at(i).second;
- QRectF target = QRectF(offset.x() + int(t.left()) / d->zoomFactor,
- offset.y() + int(t.top()) / d->zoomFactor,
- int(t.width()) / d->zoomFactor,
- int(t.height()) / d->zoomFactor);
-
- emit updateMapDisplay(target);
- }
-
- if (d->requests.size() > 0)
- QTimer::singleShot(0, this, SLOT(processRequests()));
-
- reply->deleteLater();
-}
-
-void QGeoTiledMapData::tileError(QGeoTiledMapReply::Error error, QString errorString)
-{
- Q_UNUSED(error)
- qWarning() << errorString;
-}
-
-/*!
- \reimp
-*/
-QList<QGeoMapObject*> QGeoTiledMapData::mapObjectsAtScreenPosition(const QPointF &screenPosition) const
-{
- return mapObjectsInScreenRect(QRectF(screenPosition - QPointF(1,1),
- screenPosition + QPointF(1,1)));
-// if (screenPosition.isNull())
-// return QList<QGeoMapObject*>();
-
-// Q_D(const QGeoTiledMapData);
-
-// QList<QGeoMapObject*> results;
-// QSet<QGeoMapObject*> considered;
-
-// d->oe->updateTransforms();
-
-// QList<QGraphicsItem*> pixelItems;
-// pixelItems = d->oe->pixelScene->items(QRectF(screenPosition - QPointF(1,1),
-// screenPosition + QPointF(1,1)),
-// Qt::IntersectsItemShape,
-// Qt::AscendingOrder);
-
-// foreach (QGraphicsItem *item, pixelItems) {
-// QGeoMapObject *object = d->oe->pixelItems.value(item);
-// Q_ASSERT(object);
-
-// if (object->isVisible() && !considered.contains(object)) {
-// bool contains = false;
-
-// if (d->oe->pixelExact.contains(object)) {
-// foreach (QGraphicsItem *item, d->oe->pixelExact.values(object)) {
-// if (item->shape().contains(screenPosition)) {
-// contains = true;
-// break;
-// }
-// }
-// } else {
-// QGraphicsItem *item
-// = d->oe->graphicsItemFromMapObject(object);
-
-// if (item) {
-// QList<QTransform> trans = d->oe->pixelTrans.values(object);
-
-// foreach (QTransform t, trans) {
-// bool ok;
-// QTransform inv = t.inverted(&ok);
-// if (ok) {
-// QPointF testPt = screenPosition * inv;
-
-// // we have to special case text objects here
-// // in order to maintain their old (1.1) behaviour
-// QGeoMapTextObject *tobj = qobject_cast<QGeoMapTextObject*>(object);
-// if (tobj) {
-// if (item->boundingRect().contains(testPt)) {
-// contains = true;
-// break;
-// }
-// } else {
-// if (item->shape().contains(testPt)) {
-// contains = true;
-// break;
-// }
-// }
-// }
-// }
-// }
-// }
-
-// if (contains)
-// results << object;
-
-// considered.insert(object);
-// }
-// }
-
-// return results;
-}
-
-/*!
- \reimp
-*/
-QList<QGeoMapObject*> QGeoTiledMapData::mapObjectsInScreenRect(const QRectF &screenRect) const
-{
- QList<QGeoMapObject*> results;
- QSet<QGeoMapObject*> considered;
-
- Q_D(const QGeoTiledMapData);
-
- d->oe->updateTransforms();
-
- QList<QGraphicsItem*> pixelItems = d->oe->pixelScene->items(screenRect,
- Qt::IntersectsItemShape,
- Qt::AscendingOrder);
-
- foreach (QGraphicsItem *item, pixelItems) {
- QGeoMapObject *object = d->oe->pixelItems.value(item);
- Q_ASSERT(object);
-
- if (object->isVisible() && !considered.contains(object)) {
- bool contains = false;
-
- if (d->oe->pixelExact.contains(object)) {
- foreach (QGraphicsItem *item, d->oe->pixelExact.values(object))
- if (item->shape().intersects(screenRect))
- contains = true;
- } else {
- QGraphicsItem *item
- = d->oe->graphicsItemFromMapObject(object);
-
- if (item) {
- QList<QTransform> trans = d->oe->pixelTrans.values(object);
-
- foreach (QTransform t, trans) {
- bool ok;
- QTransform inv = t.inverted(&ok);
- if (ok) {
- QPolygonF testPoly = screenRect * inv;
-
- QPainterPath testPath;
- testPath.moveTo(testPoly[0]);
- testPath.lineTo(testPoly[1]);
- testPath.lineTo(testPoly[2]);
- testPath.lineTo(testPoly[3]);
- testPath.closeSubpath();
-
- if (item->shape().intersects(testPath))
- contains = true;
- }
- }
- }
- }
-
- if (contains)
- results << object;
-
- considered.insert(object);
- }
- }
-
- return results;
-}
-
-/*!
- Returns the center of the viewport, in pixels on the entire
- map as a pixmap at the maximum zoom level.
-*/
-QPoint QGeoTiledMapData::worldReferenceViewportCenter() const
-{
- Q_D(const QGeoTiledMapData);
- return d->worldReferenceViewportCenter;
-}
-
-/*!
- Returns the size, in pixels, of the entire map as a pixmap at the maximum
- zoom level.
-*/
-QSize QGeoTiledMapData::worldReferenceSize() const
-{
- Q_D(const QGeoTiledMapData);
- return d->worldReferenceSize;
-}
-
-/*!
- Returns the visible screen rectangle, in pixels on the entire map
- as a pixmap at the maximum zoom level.
-*/
-QRect QGeoTiledMapData::worldReferenceViewportRect() const
-{
- Q_D(const QGeoTiledMapData);
- return d->worldReferenceViewportRect;
-}
-
-/*!
- Returns the ratio between a single pixel on the screen and a pixel on
- the entire map as a pixmap at the maximum zoom level.
-*/
-int QGeoTiledMapData::zoomFactor() const
-{
- Q_D(const QGeoTiledMapData);
- return d->zoomFactor;
-}
-
-/*!
- Forces the map display to update in the region specified by \a target.
-
- If \a target is empty the entire map display will be updated.
-*/
-void QGeoTiledMapData::triggerUpdateMapDisplay(const QRectF &target)
-{
- emit updateMapDisplay(target);
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoTiledMapDataPrivate::QGeoTiledMapDataPrivate(QGeoTiledMapData *parent, QGeoMappingManagerEngine *engine)
- : QGeoMapDataPrivate(parent, engine),
- oe(new QGeoMapObjectEngine(parent, this)),
- zoomFactor(0),
- spherical(QLatin1String("+proj=latlon +ellps=sphere")),
- wgs84(QLatin1String("+proj=latlon +ellps=WGS84")) {}
-
-QGeoTiledMapDataPrivate::~QGeoTiledMapDataPrivate()
-{
- foreach(QGeoTiledMapReply * reply, replies) {
- reply->abort();
- reply->deleteLater();
- }
-
- if (oe)
- delete oe;
-}
-
-QPointF QGeoTiledMapDataPrivate::windowOffset() const
-{
- qreal offsetX = ((windowSize.width() * zoomFactor) - worldReferenceViewportRect.width()) / 2.0;
- if (offsetX < 0.0)
- offsetX = 0.0;
- offsetX /= zoomFactor;
-
- qreal offsetY = ((windowSize.height() * zoomFactor) - worldReferenceViewportRect.height()) / 2.0;
- if (offsetY < 0.0)
- offsetY = 0.0;
- offsetY /= zoomFactor;
-
- return QPointF(offsetX, offsetY);
-}
-
-void QGeoTiledMapDataPrivate::updateMapImage()
-{
- Q_Q(QGeoTiledMapData);
-
- if ((zoomLevel == -1.0) || !windowSize.isValid())
- return;
-
- bool wasEmpty = (requests.size() == 0);
- QGeoTileIterator it(this);
-
- while (it.hasNext()) {
- QGeoTiledMapRequest req = it.next();
- QRect tileRect = req.tileRect();
-
- if (!cache.contains(req)) {
- if (!requestRects.contains(tileRect) && !replyRects.contains(tileRect)) {
- requests.append(req);
- requestRects.insert(tileRect);
- }
- }
- }
-
-// qWarning()
-// << d->requests.size()
-// << d->cache.size()
-// << d->cache.totalCost()
-// << d->zoomCache.size()
-// << d->zoomCache.totalCost();
-
- if (wasEmpty && requests.size() > 0) {
- QTimer::singleShot(0, q, SLOT(processRequests()));
- }
-}
-
-void QGeoTiledMapDataPrivate::clearRequests()
-{
- requests.clear();
- requestRects.clear();
-}
-
-void QGeoTiledMapDataPrivate::paintMap(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/)
-{
- QPointF offset = windowOffset();
-
- QGeoTileIterator it(this);
-
- while (it.hasNext()) {
- QGeoTiledMapRequest req = it.next();
- QRect tileRect = req.tileRect();
-
- QList<QPair<QRect, QRect> > overlaps = intersectedScreen(tileRect);
- for (int i = 0; i < overlaps.size(); ++i) {
- QRect s = overlaps.at(i).first;
- QRect t = overlaps.at(i).second;
-
- QRectF source = QRectF(int(s.left()) / zoomFactor,
- int(s.top()) / zoomFactor,
- int(s.width()) / zoomFactor,
- int(s.height()) / zoomFactor);
- QRectF target = QRectF(offset.x() + int(t.left()) / zoomFactor,
- offset.y() + int(t.top()) / zoomFactor,
- int(t.width()) / zoomFactor,
- int(t.height()) / zoomFactor);
-
- if (cache.contains(req)) {
- //painter->drawPixmap(target, *cache.object(req), source);
- painter->drawImage(target, *cache.object(req), source);
- } else {
- if (zoomCache.contains(req)) {
- painter->drawPixmap(target, *zoomCache.object(req), source);
- } else {
- painter->fillRect(target, Qt::lightGray);
- }
- }
- }
- }
-}
-
-void QGeoTiledMapDataPrivate::paintObjects(QPainter *painter, const QStyleOptionGraphicsItem * option)
-{
- painter->save();
- painter->setRenderHint(QPainter::Antialiasing);
-
- QRectF target = option ? option->rect : QRectF(QPointF(0,0), windowSize);
-
- QPointF offset = windowOffset();
-
- target.adjust(offset.x(), offset.y(), -1.0 * offset.x(), -1.0 * offset.y());
-
- painter->setClipRect(target);
-
- oe->updateTransforms();
-
- QList<QGraphicsItem*> items = oe->pixelScene->items(target,
- Qt::IntersectsItemShape,
- Qt::AscendingOrder);
- QSet<QGeoMapObject*> objsDone;
-
- QTransform baseTrans = painter->transform();
-
- QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem;
-
- foreach (QGraphicsItem *item, items) {
- QGeoMapObject *object = oe->pixelItems.value(item);
- Q_ASSERT(object);
- if (object->isVisible() && !objsDone.contains(object)) {
- if (oe->pixelExact.contains(object)) {
- foreach (QGraphicsItem *it, oe->pixelExact.values(object)) {
- painter->setTransform(baseTrans);
-
-// QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem;
- it->paint(painter, style);
-// delete style;
- }
- } else {
- QGraphicsItem *item = oe->graphicsItemFromMapObject(object);
- if (item) {
- foreach (QTransform trans, oe->pixelTrans.values(object)) {
- painter->setTransform(trans * baseTrans);
-
-// QStyleOptionGraphicsItem *style = new QStyleOptionGraphicsItem;
- item->paint(painter, style);
- foreach (QGraphicsItem *child, item->children()) {
- painter->setTransform(child->transform() * trans * baseTrans);
- painter->translate(child->pos());
- child->paint(painter, style);
- }
-
-// delete style;
- }
- }
- }
- objsDone.insert(object);
- }
- }
-
- painter->restore();
-
- delete style;
-}
-
-void QGeoTiledMapDataPrivate::cleanupCaches()
-{
- int boundaryTiles = 3;
-
- QGeoTiledMappingManagerEngine *tiledEngine = static_cast<QGeoTiledMappingManagerEngine*>(engine);
-
- QSize tileSize = tiledEngine->tileSize();
-
- QRectF cacheRect1;
- QRectF cacheRect2;
-
- cacheRect1 = worldReferenceViewportRect.adjusted(-boundaryTiles * tileSize.width(),
- -boundaryTiles * tileSize.height(),
- boundaryTiles * tileSize.width(),
- boundaryTiles * tileSize.height());
-
- if (cacheRect1.width() > worldReferenceSize.width()) {
- cacheRect1.setX(0);
- cacheRect1.setWidth(worldReferenceSize.width());
- } else {
- if (cacheRect1.x() + cacheRect1.width() > worldReferenceSize.width()) {
- int oldWidth = cacheRect1.width();
- cacheRect1.setWidth(worldReferenceSize.width() - cacheRect1.x());
- cacheRect2 = QRectF(0,
- cacheRect1.y(),
- oldWidth - cacheRect1.width(),
- cacheRect1.height());
- }
- }
-
- QList<QGeoTiledMapRequest> keys = cache.keys();
- for (int i = 0; i < keys.size(); ++i) {
- QRectF tileRect = keys.at(i).tileRect();
- if (!cacheRect1.intersects(tileRect)) {
- if (cacheRect2.isNull() || !cacheRect2.intersects(tileRect)) {
- cache.remove(keys.at(i));
- }
- }
- }
-}
-
-QRect QGeoTiledMapDataPrivate::screenRectForZoomFactor(int factor)
-{
- qreal viewportWidth = q_ptr->windowSize().width();
- qreal viewportHeight = q_ptr->windowSize().height();
-
- int width = int(viewportWidth * factor);
- int height = int(viewportHeight * factor);
-
- if (width > worldReferenceSize.width())
- width = worldReferenceSize.width();
-
- if (height > worldReferenceSize.height())
- height = worldReferenceSize.height();
-
- int x = (worldReferenceViewportCenter.x() - (width / 2)) % worldReferenceSize.width();
- if (x < 0)
- x += worldReferenceSize.width();
-
- int y = worldReferenceViewportCenter.y() - (height / 2);
-
- if (y < 0)
- y = 0;
-
- if ((y + height) >= worldReferenceSize.height())
- y = worldReferenceSize.height() - height;
-
- return QRect(x, y, width, height);
-}
-
-void QGeoTiledMapDataPrivate::updateScreenRect()
-{
- worldReferenceViewportRect = screenRectForZoomFactor(zoomFactor);
-
- int x = worldReferenceViewportRect.x();
- int y = worldReferenceViewportRect.y();
- int width = worldReferenceViewportRect.width();
- int height = worldReferenceViewportRect.height();
-
- if (x + width < worldReferenceSize.width()) {
- worldReferenceViewportRectLeft = worldReferenceViewportRect;
- worldReferenceViewportRectRight = QRect();
- } else {
- int widthLeft = worldReferenceSize.width() - x;
- int widthRight = width - widthLeft;
- worldReferenceViewportRectLeft = QRect(x, y, widthLeft, height);
- worldReferenceViewportRectRight = QRect(0, y, widthRight, height);
- }
-}
-
-bool QGeoTiledMapDataPrivate::containedInScreen(const QPoint &point) const
-{
- return (worldReferenceViewportRectLeft.contains(point)
- || (worldReferenceViewportRectRight.isValid()
- && worldReferenceViewportRectRight.contains(point)));
-}
-
-bool QGeoTiledMapDataPrivate::intersectsScreen(const QRect &rect) const
-{
- return (worldReferenceViewportRectLeft.intersects(rect)
- || (worldReferenceViewportRectRight.isValid()
- && worldReferenceViewportRectRight.intersects(rect)));
-}
-
-QList<QPair<QRect, QRect> > QGeoTiledMapDataPrivate::intersectedScreen(const QRect &rect, bool translateToScreen) const
-{
- QList<QPair<QRect, QRect> > result;
-
- QRect rectL = rect.intersected(worldReferenceViewportRectLeft);
- if (!rectL.isEmpty()) {
- QRect source = QRect(rectL.topLeft() - rect.topLeft(), rectL.size());
- QRect target = QRect(rectL.topLeft() - worldReferenceViewportRectLeft.topLeft(), rectL.size());
- result << QPair<QRect, QRect>(source, target);
- }
-
- if (worldReferenceViewportRectRight.isValid()) {
- QRect rectR = rect.intersected(worldReferenceViewportRectRight);
- if (!rectR.isEmpty()) {
- QRect source = QRect(rectR.topLeft() - rect.topLeft(), rectR.size());
- QRect target = QRect(rectR.topLeft() - worldReferenceViewportRectRight.topLeft(), rectR.size());
- if (translateToScreen)
- target.translate(worldReferenceViewportRectLeft.width(), 0);
- result << QPair<QRect, QRect>(source, target);
- }
- }
-
- return result;
-}
-
-// Old version, for reference
-
-//void QGeoMapDataPrivate::addObject(QGeoMapObject *object)
-//{
-// containerObject->addChildObject(object);
-// oe->addObject(object);
-// emit q_ptr->updateMapDisplay();
-//}
-
-//void QGeoMapDataPrivate::removeObject(QGeoMapObject *object)
-//{
-// containerObject->removeChildObject(object);
-// oe->removeObject(object);
-//}
-
-void QGeoTiledMapDataPrivate::addObject(QGeoMapObject *object)
-{
-// containerObject->addChildObject(object);
-// oe->addObject(object);
-// emit q_ptr->updateMapDisplay();
-
- QGeoMapDataPrivate::addObject(object);
- oe->addObject(object);
-}
-
-void QGeoTiledMapDataPrivate::removeObject(QGeoMapObject *object)
-{
- QGeoMapDataPrivate::removeObject(object);
- oe->removeObject(object);
-}
-
-void QGeoTiledMapDataPrivate::update(QObject *object)
-{
- QGeoMapObject *obj = qobject_cast<QGeoMapObject*>(object);
- if (obj) {
- QGeoMapGroupObject *group = qobject_cast<QGeoMapGroupObject*>(obj);
- if (group) {
- oe->objectsForLatLonUpdate << group;
- oe->objectsForPixelUpdate << group;
- static_cast<QGeoTiledMapData*>(q_ptr)->triggerUpdateMapDisplay();
- } else {
- oe->invalidateObject(obj);
- }
- } else {
- static_cast<QGeoTiledMapData*>(q_ptr)->triggerUpdateMapDisplay();
- }
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoTileIterator::QGeoTileIterator(const QGeoTiledMapDataPrivate *mapDataPrivate)
- : atEnd(false),
- row(-1),
- col(-1),
- screenRect(mapDataPrivate->worldReferenceViewportRect),
- mapType(mapDataPrivate->mapType),
- connectivityMode(mapDataPrivate->connectivityMode),
- zoomLevel(mapDataPrivate->zoomLevel)
-{
- QGeoTiledMappingManagerEngine *tiledEngine
- = static_cast<QGeoTiledMappingManagerEngine*>(mapDataPrivate->engine);
- tileSize = tiledEngine->tileSize() * mapDataPrivate->zoomFactor;
- tileRect = QRect(QPoint(0, 0), tileSize);
-
- qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width());
- qulonglong y = static_cast<qulonglong>(screenRect.topLeft().y() / tileSize.height());
-
- width = tileSize.width() * (1 << zoomLevel);
-
- currTopLeft.setX(x * tileSize.width());
- currTopLeft.setY(y * tileSize.height());
-}
-
-QGeoTileIterator::QGeoTileIterator(QGraphicsGeoMap::ConnectivityMode connectivityMode,
- QGraphicsGeoMap::MapType mapType,
- const QRect &screenRect,
- const QSize &tileSize,
- int zoomLevel)
- : atEnd(false),
- row(-1),
- col(-1),
- screenRect(screenRect),
- tileSize(tileSize),
- mapType(mapType),
- connectivityMode(connectivityMode),
- zoomLevel(zoomLevel),
- tileRect(QPoint(0, 0), tileSize)
-{
- qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width());
- qulonglong y = static_cast<qulonglong>(screenRect.topLeft().y() / tileSize.height());
-
- width = tileSize.width() * (1 << zoomLevel);
-
- currTopLeft.setX(x * tileSize.width());
- currTopLeft.setY(y * tileSize.height());
-}
-
-bool QGeoTileIterator::hasNext()
-{
- return !atEnd;
-}
-
-QGeoTiledMapRequest QGeoTileIterator::next()
-{
- int numCols = 1 << zoomLevel;
- col = static_cast<int>(currTopLeft.x() / tileSize.width()) % numCols;
- row = static_cast<int>(currTopLeft.y() / tileSize.height()) % numCols;
- tileRect.moveTopLeft(currTopLeft);
- if (tileRect.left() >= width)
- tileRect.translate(-width, 0);
-
- currTopLeft.rx() += tileSize.width();
-
- if (currTopLeft.x() > screenRect.right()) { //next row
- qulonglong x = static_cast<qulonglong>(screenRect.topLeft().x() / tileSize.width());
- currTopLeft.setX(x * tileSize.width());
- currTopLeft.ry() += tileSize.height();
- }
-
- if (currTopLeft.y() > screenRect.bottom()) //done
- atEnd = true;
-
- return QGeoTiledMapRequest(connectivityMode, mapType, zoomLevel, row, col, tileRect);
-}
-
-#include "moc_qgeotiledmapdata.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/tiled/qgeotiledmapdata.h b/src/location/maps/tiled/qgeotiledmapdata.h
deleted file mode 100644
index 5926f085..00000000
--- a/src/location/maps/tiled/qgeotiledmapdata.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPDATA_H
-#define QGEOTILEDMAPDATA_H
-
-#include "qgeomapdata.h"
-#include "qgeotiledmapreply.h"
-
-#include <QRectF>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoTiledMapDataPrivate;
-
-class Q_LOCATION_EXPORT QGeoTiledMapData : public QGeoMapData
-{
- Q_OBJECT
-
-public:
- QGeoTiledMapData(QGeoMappingManagerEngine *engine);
- virtual ~QGeoTiledMapData();
-
- void setWindowSize(const QSizeF &size);
-
- void setZoomLevel(qreal zoomLevel);
-
- void pan(int dx, int dy);
-
- void setCenter(const QGeoCoordinate &center);
- QGeoCoordinate center() const;
-
- void setMapType(QGraphicsGeoMap::MapType mapType);
-
- void setConnectivityMode(QGraphicsGeoMap::ConnectivityMode connectivityMode);
-
- virtual QGeoBoundingBox viewport() const;
- virtual void fitInViewport(const QGeoBoundingBox &bounds, bool preserveViewportCenter = false);
-
- QList<QGeoMapObject*> mapObjectsAtScreenPosition(const QPointF &screenPosition) const;
- QList<QGeoMapObject*> mapObjectsInScreenRect(const QRectF &screenRect) const;
-
- QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const;
- QGeoCoordinate screenPositionToCoordinate(const QPointF &screenPosition) const;
-
- virtual QPoint coordinateToWorldReferencePosition(const QGeoCoordinate &coordinate) const;
- virtual QGeoCoordinate worldReferencePositionToCoordinate(const QPoint &pixel) const;
-
- QPoint worldReferenceViewportCenter() const;
- QSize worldReferenceSize() const;
- QRect worldReferenceViewportRect() const;
- int zoomFactor() const;
-
- void triggerUpdateMapDisplay(const QRectF &target = QRectF());
-
-protected:
- void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option);
- void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option);
-
- QGeoMapObjectInfo* createMapObjectInfo(QGeoMapObject *mapObject);
-
-private Q_SLOTS:
- void processRequests();
- void tileFinished();
- void replyFinished(QGeoTiledMapReply *reply);
- void tileError(QGeoTiledMapReply::Error error, QString errorString);
-
-private:
- Q_DECLARE_PRIVATE(QGeoTiledMapData)
- Q_DISABLE_COPY(QGeoTiledMapData)
- friend class QGeoTiledMappingManagerEngine;
- friend class QGeoTiledMapObjectInfo;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmapdata_p.h b/src/location/maps/tiled/qgeotiledmapdata_p.h
deleted file mode 100644
index 5df38012..00000000
--- a/src/location/maps/tiled/qgeotiledmapdata_p.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPDATA_P_H
-#define QGEOTILEDMAPDATA_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeomapdata_p.h"
-#include "qgeomapobject.h"
-#include "qgeomapobject_p.h"
-#include <private/projwrapper_p.h>
-
-#include <QRectF>
-#include <QHash>
-#include <QCache>
-#include <QPair>
-#include <QList>
-
-class QGraphicsScene;
-
-QT_BEGIN_NAMESPACE
-
-class QGeoTiledMapData;
-class QGeoTiledMapRequest;
-class QGeoTiledMapReply;
-class QGeoTiledMapObjectInfo;
-class QGeoMapObjectEngine;
-
-class QGeoTiledMapDataPrivate : public QGeoMapDataPrivate
-{
-public:
- QGeoTiledMapDataPrivate(QGeoTiledMapData *parent, QGeoMappingManagerEngine *engine);
- ~QGeoTiledMapDataPrivate();
-
- void updateMapImage();
- void clearRequests();
-
- QPointF windowOffset() const;
-
- void paintMap(QPainter *painter, const QStyleOptionGraphicsItem *option);
- void paintObjects(QPainter *painter, const QStyleOptionGraphicsItem *option);
-
- void cleanupCaches();
-
- bool intersects(QGeoMapObject *mapObject, const QRectF &rect);
-
- QRect screenRectForZoomFactor(int zoomFactor);
- void updateScreenRect();
-
- bool containedInScreen(const QPoint &point) const;
- bool intersectsScreen(const QRect &rect) const;
- QList<QPair<QRect, QRect> > intersectedScreen(const QRect &rect, bool translateToScreen = true) const;
-
- virtual QPoint screenPositionToWorldReferencePosition(const QPointF &screenPosition) const;
- virtual QPoint coordinateToWorldReferencePosition(double lon, double lat) const;
- virtual QPointF coordinateToScreenPosition(double lon, double lat) const;
-
- virtual void addObject(QGeoMapObject *object);
- virtual void removeObject(QGeoMapObject *object);
-
- virtual void update(QObject *object);
-
- QGeoMapObjectEngine *oe;
-
- int zoomFactor;
-
- QPoint worldReferenceViewportCenter;
- QSize worldReferenceSize;
- QRect worldReferenceViewportRect;
-
- QRect worldReferenceViewportRectLeft;
- QRect worldReferenceViewportRectRight;
-
- QSet<QRect> requestRects;
- QSet<QRect> replyRects;
-
- QList<QGeoTiledMapRequest> requests;
- QSet<QGeoTiledMapReply*> replies;
-
- QCache<QGeoTiledMapRequest, QImage> cache;
- QCache<QGeoTiledMapRequest, QPixmap> zoomCache;
-
- ProjCoordinateSystem spherical;
- ProjCoordinateSystem wgs84;
-
- Q_DECLARE_PUBLIC(QGeoTiledMapData)
-private:
- Q_DISABLE_COPY(QGeoTiledMapDataPrivate)
-};
-
-class QGeoTileIterator
-{
-public:
- QGeoTileIterator(const QGeoTiledMapDataPrivate *mapData);
- QGeoTileIterator(QGraphicsGeoMap::ConnectivityMode connectivityMode,
- QGraphicsGeoMap::MapType mapType,
- const QRect &screenRect,
- const QSize &tileSize,
- int zoomLevel);
-
- bool hasNext();
- QGeoTiledMapRequest next();
-
-private:
- bool atEnd;
- int row;
- int col;
- int width;
- QRect screenRect;
- QSize tileSize;
- QGraphicsGeoMap::MapType mapType;
- QGraphicsGeoMap::ConnectivityMode connectivityMode;
- int zoomLevel;
- QPoint currTopLeft;
- QRect tileRect;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp
deleted file mode 100644
index 0bac17f8..00000000
--- a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmapgroupobjectinfo_p.h"
-
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomapobject.h"
-#include "qgeomapgroupobject.h"
-
-#include "qgeomapobjectengine_p.h"
-
-#include <QGraphicsItem>
-#include <QGraphicsScene>
-#include <QGraphicsPathItem>
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapGroupObjectInfo::QGeoTiledMapGroupObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
-
- group = static_cast<QGeoMapGroupObject*>(mapObject);
-
- connect(group,
- SIGNAL(childAdded(QGeoMapObject*)),
- this,
- SLOT(childAdded(QGeoMapObject*)));
- connect(group,
- SIGNAL(childUpdated(QGeoMapObject*)),
- this,
- SLOT(childUpdated(QGeoMapObject*)));
- connect(group,
- SIGNAL(childRemoved(QGeoMapObject*)),
- this,
- SLOT(childRemoved(QGeoMapObject*)));
-
- pathItem = new QGraphicsPathItem();
- graphicsItem = pathItem;
- pathItem->setPos(0.0, 0.0);
-
- QList<QGeoMapObject*> objects = group->childObjects();
-
- foreach(QGeoMapObject * object, objects) {
- QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(object->info());
-
- if (info)
- info->graphicsItem->setParentItem(graphicsItem);
- }
-
- updateItem();
-}
-
-QGeoTiledMapGroupObjectInfo::~QGeoTiledMapGroupObjectInfo()
-{
-}
-
-void QGeoTiledMapGroupObjectInfo::childAdded(QGeoMapObject *childObject)
-{
- if (!childObject)
- return;
-
- QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(childObject->info());
- if (info && info->graphicsItem) {
- // the child's z value will get updated in QGeoTiledMapGroupObjectInfo::childUpdated
- // we do this in order to keep the same order of operations that we had previously
- childObject->disconnect(childObject, SIGNAL(zValueChanged(int)), info, SLOT(zValueChanged(int)));
- info->graphicsItem->setParentItem(graphicsItem);
- tiledMapDataPrivate->update(mapObject());
- //tiledMapDataPrivate->update(childObject);
- }
-}
-
-void QGeoTiledMapGroupObjectInfo::childUpdated(QGeoMapObject *childObject)
-{
- if (!childObject)
- return;
-
- QGeoTiledMapObjectInfo* info = static_cast<QGeoTiledMapObjectInfo*>(childObject->info());
- if (info && info->graphicsItem) {
- //info->graphicsItem->setParentItem(graphicsItem);
- tiledMapDataPrivate->update(mapObject());
- info->zValueChanged(childObject->zValue());
- }
-}
-
-void QGeoTiledMapGroupObjectInfo::childRemoved(QGeoMapObject *childObject)
-{
- if (childObject && tiledMapDataPrivate->oe) {
- tiledMapDataPrivate->oe->removeObject(childObject);
- updateItem();
- }
-}
-
-#include "moc_qgeotiledmapgroupobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h
deleted file mode 100644
index 7ea3de33..00000000
--- a/src/location/maps/tiled/qgeotiledmapgroupobjectinfo_p.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPGROUPOBJECT_INFO_P_H
-#define QGEOTILEDMAPGROUPOBJECT_INFO_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeotiledmapobjectinfo_p.h"
-
-QT_BEGIN_NAMESPACE
-class QGraphicsPathItem;
-
-class QGeoMapGroupObject;
-
-class QGeoTiledMapGroupObjectInfo : public QGeoTiledMapObjectInfo
-{
- Q_OBJECT
-public:
- QGeoTiledMapGroupObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapGroupObjectInfo();
-
- QGeoMapGroupObject *group;
- QGraphicsPathItem *pathItem;
-
-public slots:
- void childAdded(QGeoMapObject *childObject);
- void childUpdated(QGeoMapObject *childObject);
- void childRemoved(QGeoMapObject *childObject);
-};
-
-QT_END_NAMESPACE
-
-#endif //QGEOTILEDMAPGROUPOBJECT_INFO_P_H
diff --git a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp
deleted file mode 100644
index 6b19d571..00000000
--- a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-#include "qgeoboundingbox.h"
-#include "qgeomapobjectengine_p.h"
-
-#include <QGraphicsScene>
-
-#include <QPolygonF>
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapObjectInfo::QGeoTiledMapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoMapObjectInfo(mapData, mapObject),
- inited(false),
- updateAfterInit(false),
- graphicsItem(0)
-{
- tiledMapData = mapData;
- tiledMapDataPrivate = static_cast<QGeoTiledMapDataPrivate*>(mapData->d_ptr);
-}
-
-QGeoTiledMapObjectInfo::~QGeoTiledMapObjectInfo()
-{
- if (graphicsItem) {
- delete graphicsItem;
- graphicsItem = 0;
- }
-}
-
-void QGeoTiledMapObjectInfo::init()
-{
- if (graphicsItem) {
- graphicsItem->setZValue(mapObject()->zValue());
- graphicsItem->setVisible(mapObject()->isVisible());
- //graphicsItem->setFlag(QGraphicsItem::ItemIsSelectable);
- }
- inited = true;
- if (updateAfterInit) {
- tiledMapData->updateMapDisplay();
- updateAfterInit = false;
- }
-}
-
-QGeoMapObject* QGeoTiledMapObjectInfo::mapObject() const
-{
- return QGeoMapObjectInfo::mapObject();
-}
-
-void QGeoTiledMapObjectInfo::zValueChanged(int zValue)
-{
- if (graphicsItem) {
- graphicsItem->setZValue(zValue);
- updateItem();
- if (tiledMapDataPrivate && tiledMapDataPrivate->oe)
- tiledMapDataPrivate->oe->rebuildScenes();
- }
-}
-
-void QGeoTiledMapObjectInfo::visibleChanged(bool visible)
-{
- if (graphicsItem) {
- graphicsItem->setVisible(visible);
- updateItem();
- }
-}
-
-void QGeoTiledMapObjectInfo::selectedChanged(bool /*selected*/)
-{
- // don't want to draw the selection box
-// if (graphicsItem) {
-// graphicsItem->setSelected(selected);
-// updateItem();
-// }
-}
-
-void QGeoTiledMapObjectInfo::originChanged(const QGeoCoordinate &/*origin*/)
-{
- if (graphicsItem)
- updateItem();
-}
-
-void QGeoTiledMapObjectInfo::unitsChanged(QGeoMapObject::CoordinateUnit /*units*/)
-{
- if (graphicsItem)
- updateItem();
-}
-
-void QGeoTiledMapObjectInfo::transformTypeChanged(QGeoMapObject::TransformType /*transformType*/)
-{
- if (graphicsItem)
- updateItem();
-}
-
-QGeoBoundingBox QGeoTiledMapObjectInfo::boundingBox() const
-{
- if (!graphicsItem || !tiledMapData)
- return QGeoBoundingBox();
-
- QGeoMapObjectEngine *e = tiledMapDataPrivate->oe;
-
- QGeoMapObject *object = mapObject();
-
- e->updateTransforms();
-
- if (e->latLonExact.contains(object)) {
- QList<QGraphicsItem*> items = e->latLonExact.values(object);
- QGeoBoundingBox box;
- foreach (QGraphicsItem *item, items) {
- QRectF latLonBounds = item->boundingRect();
- QPointF topLeft = latLonBounds.bottomLeft();
- if (topLeft.x() >= 180.0 * 3600.0)
- topLeft.setX(topLeft.x() - 360.0 * 3600.0);
- if (topLeft.x() < -180.0 * 3600.0)
- topLeft.setX(topLeft.x() + 360.0 * 3600.0);
-
- QPointF bottomRight = latLonBounds.topRight();
- if (bottomRight.x() >= 180.0 * 3600.0)
- bottomRight.setX(bottomRight.x() - 360.0 * 3600.0);
- if (bottomRight.x() < -180.0 * 3600.0)
- bottomRight.setX(bottomRight.x() + 360.0 * 3600.0);
-
- QGeoCoordinate tlc(topLeft.y() / 3600.0, topLeft.x() / 3600.0);
- QGeoCoordinate brc(bottomRight.y() / 3600.0, bottomRight.x() / 3600.0);
-
- return QGeoBoundingBox(tlc, brc);
-
- // it looks like the following is overkill
-// if (box.isValid()) {
-// box |= QGeoBoundingBox(tlc, brc);
-// } else {
-// box = QGeoBoundingBox(tlc, brc);
-// }
- }
- return box;
- } else {
- QTransform trans = e->latLonTrans.value(object);
-
- QRectF bounds = graphicsItem->boundingRect();
- QPolygonF poly = bounds * trans;
-
- QRectF latLonBounds = poly.boundingRect();
- QPointF topLeft = latLonBounds.bottomLeft();
- if (topLeft.x() >= 180.0 * 3600.0)
- topLeft.setX(topLeft.x() - 360.0 * 3600.0);
- if (topLeft.x() < -180.0 * 3600.0)
- topLeft.setX(topLeft.x() + 360.0 * 3600.0);
-
- QPointF bottomRight = latLonBounds.topRight();
- if (bottomRight.x() >= 180.0 * 3600.0)
- bottomRight.setX(bottomRight.x() - 360.0 * 3600.0);
- if (bottomRight.x() < -180.0 * 3600.0)
- bottomRight.setX(bottomRight.x() + 360.0 * 3600.0);
-
- QGeoCoordinate tlc(topLeft.y() / 3600.0, topLeft.x() / 3600.0);
- QGeoCoordinate brc(bottomRight.y() / 3600.0, bottomRight.x() / 3600.0);
-
- return QGeoBoundingBox(tlc, brc);
- }
-}
-
-bool QGeoTiledMapObjectInfo::contains(const QGeoCoordinate &coordinate) const
-{
- if (!graphicsItem || !tiledMapData)
- return false;
-
- QGeoMapObjectEngine *e = tiledMapDataPrivate->oe;
-
- e->updateTransforms();
- QPointF latLonPoint(coordinate.longitude()*3600.0, coordinate.latitude()*3600.0);
-
- QGeoMapObject *object = mapObject();
-
- if (e->latLonExact.contains(object)) {
- QList<QGraphicsItem*> items = e->latLonExact.values(object);
- foreach (QGraphicsItem *item, items) {
- if (item->contains(latLonPoint))
- return true;
- }
- } else {
- QList<QTransform> transList = e->latLonTrans.values(object);
- foreach (QTransform trans, transList) {
- bool ok;
- QTransform inv = trans.inverted(&ok);
- if (!ok)
- continue;
-
- QPointF localPoint = latLonPoint * inv;
-
- if (graphicsItem->contains(localPoint))
- return true;
- }
- }
-
- return false;
-}
-
-void QGeoTiledMapObjectInfo::updateItem(const QRectF& target)
-{
- if (!inited) {
- updateAfterInit = true;
- return;
- }
-
- QGeoMapObject *object = mapObject();
- if (object)
- tiledMapDataPrivate->update(object);
- if (graphicsItem)
- tiledMapData->triggerUpdateMapDisplay(target);
-}
-
-#include "moc_qgeotiledmapobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h
deleted file mode 100644
index ea1fb559..00000000
--- a/src/location/maps/tiled/qgeotiledmapobjectinfo_p.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPOBJECT_INFO_P_H
-#define QGEOTILEDMAPOBJECT_INFO_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeomapobject_p.h"
-
-#include <QRectF>
-
-QT_BEGIN_NAMESPACE
-
-class QGraphicsItem;
-class QRect;
-class QPolygonF;
-
-class QGeoTiledMapData;
-class QGeoBoundingBox;
-class QGeoCoordinate;
-class QGeoTiledMapDataPrivate;
-
-class QGeoTiledMapObjectInfo : public QGeoMapObjectInfo
-{
- Q_OBJECT
-public:
- QGeoTiledMapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapObjectInfo();
-
- virtual void init();
-
- QGeoMapObject* mapObject() const;
-
- QGeoBoundingBox boundingBox() const;
- bool contains(const QGeoCoordinate &coordinate) const;
-
- void updateItem(const QRectF &target = QRectF());
-
- bool inited;
- bool updateAfterInit;
-
- QGraphicsItem *graphicsItem;
- QGeoTiledMapData *tiledMapData;
-
-public slots:
- virtual void zValueChanged(int zValue);
- virtual void visibleChanged(bool visible);
- virtual void selectedChanged(bool selected);
-
- virtual void originChanged(const QGeoCoordinate &origin);
- virtual void unitsChanged(QGeoMapObject::CoordinateUnit units);
- virtual void transformTypeChanged(QGeoMapObject::TransformType transformType);
-
-protected:
- QGeoTiledMapDataPrivate *tiledMapDataPrivate;
-};
-
-QT_END_NAMESPACE
-
-#endif //QGEOTILEDMAPOBJECT_INFO_P_H
-
diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp b/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp
deleted file mode 100644
index aedff2b6..00000000
--- a/src/location/maps/tiled/qgeotiledmappingmanagerengine.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmappingmanagerengine.h"
-#include "qgeotiledmappingmanagerengine_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoTiledMappingManagerEngine
-
- \brief The QGeoTiledMappingManagerEngine class is provided to make writing
- Qt Maps and Navigation API plugins for tiled based mapping services easier.
-
- \inmodule QtLocation
-
- \ingroup maps-impl-tiled
-
- \since 1.2
-
- Subclasses of QGeoTiledMappingManagerEngine need to provide an implementation
- of getTileImage().
-
- It is important that the function setTileSize() is called before
- getTileImage() to ensure that the tile is dealt with correctly after it is
- fetched. If setTileSize() is not calle dfirst the behaviour is undefined.
-
- A subclass of QGeoTiledMappingManagerEngine will often make use of a subclass
- fo QGeoTiledMapReply internally, in order to add any engine-specific
- data (such as a QNetworkReply object for network-based services) to the
- QGeoTiledMapReply instances used by the engine.
-
- QGeoTiledMappingManagerEngine will report that custom map objects are supported
- by default.
-*/
-
-/*!
- Constructs a new tiled mapping manager using the parameters \a parameters
- and the parent \a parent.
-*/
-QGeoTiledMappingManagerEngine::QGeoTiledMappingManagerEngine(const QMap<QString, QVariant> &parameters, QObject *parent)
- : QGeoMappingManagerEngine(new QGeoTiledMappingManagerEnginePrivate(), parent)
-{
- Q_UNUSED(parameters)
- setSupportsCustomMapObjects(true);
-}
-
-/*!
- Destroys this tiled mapping manager.
-*/
-QGeoTiledMappingManagerEngine::~QGeoTiledMappingManagerEngine()
-{
- // deleted in superclass destructor
-}
-
-/*
- Requests the map tiled specified by \a request.
-
- A QGeoTiledMapReply object will be returned, which can be used to manage the
- fetching of the tile and to return the tile data.
-
- This manager and the returned QGeoTiledMapReply object will emit signals
- indicating if the operation completes or if errors occur.
-
- Once the operation has completed, QGeoTiledMapReply::mapImageData() and
- QGeoTiledMapReply::mapImageFormat() can be used to generate the tile image.
-
- The user is responsible for deleting the returned reply object, although
- this can be done in the slot connected to QGeoTiledMappingManagerEngine::finished(),
- QGeoTiledMappingManagerEngine::error(), QGeoTiledMapReply::finished() or
- QGeoTiledMapReply::error() with deleteLater().
-*/
-
-/*!
-\fn virtual QGeoTiledMapReply* QGeoTiledMappingManagerEngine::getTileImage(const QGeoTiledMapRequest &request)
- Requests the map tiled specified by \a request.
-
- A QGeoTiledMapReply object will be returned, which can be used to manage the
- fetching of the tile and to return the tile data.
-
- The returned QGeoTiledMapReply object will emit signals
- indicating if the operation completes or if errors occur.
-
- Once the operation has completed, QGeoTiledMapReply::mapImageData() and
- QGeoTiledMapReply::mapImageFormat() can be used to generate the tile image.
-
- The user is responsible for deleting the returned reply object, although
- this can be done in the slot connected to QGeoTiledMapReply::finished() or
- QGeoTiledMapReply::error() with deleteLater().
-
-*/
-
-/*!
- Returns a new QGeoMapData instance which will be managed by
- this manager.
-
- A QGeoMapData instance contains and manages the information about
- what a map widget is looking at. A single manager can be used by several
- QGraphcisGeoMap instances since each instance has an associated QGeoMapData instance.
-
- The QGeoMapData instance can be treated as a kind of session object, or
- as a model in a model-view-controller architecture, with QGraphicsGeoMap
- as the view and QGeoMappingManagerEngine as the controller.
-
- The instance returned by the default implementation will be a
- QGeoTiledMapData instance. Subclasses of QGeoTiledMappingManagerEngine are
- free to override this function to return subclasses of QGeoTiledMapData in
- order to customize the map.
-*/
-QGeoMapData* QGeoTiledMappingManagerEngine::createMapData()
-{
- return new QGeoTiledMapData(this);
-}
-
-/*!
- Returns the size of the tiles returned by this tiled mapping manager.
-*/
-QSize QGeoTiledMappingManagerEngine::tileSize() const
-{
- Q_D(const QGeoTiledMappingManagerEngine);
- return d->tileSize;
-}
-
-/*!
- Sets the size of the tiles returned by this tiled mapping manager to \a
- tileSize.
-
- Subclasses of QGeoTiledMappingManagerEngine should use this function to
- ensure tileSize() provides accurate information.
-*/
-void QGeoTiledMappingManagerEngine::setTileSize(const QSize &tileSize)
-{
- Q_D(QGeoTiledMappingManagerEngine);
- d->tileSize = tileSize;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoTiledMappingManagerEnginePrivate::QGeoTiledMappingManagerEnginePrivate()
- : QGeoMappingManagerEnginePrivate() {}
-
-QGeoTiledMappingManagerEnginePrivate::~QGeoTiledMappingManagerEnginePrivate() {}
-
-/*******************************************************************************
-*******************************************************************************/
-
-#include "moc_qgeotiledmappingmanagerengine.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine.h b/src/location/maps/tiled/qgeotiledmappingmanagerengine.h
deleted file mode 100644
index 975fd02a..00000000
--- a/src/location/maps/tiled/qgeotiledmappingmanagerengine.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPPINGMANAGERENGINE_H
-#define QGEOTILEDMAPPINGMANAGERENGINE_H
-
-#include "qgeomappingmanagerengine.h"
-
-#include "qgeotiledmapreply.h"
-#include "qgeotiledmaprequest.h"
-#include "qgeotiledmapdata.h"
-
-#include <QMap>
-#include <QVariant>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoTiledMappingManagerEnginePrivate;
-
-class Q_LOCATION_EXPORT QGeoTiledMappingManagerEngine : public QGeoMappingManagerEngine
-{
- Q_OBJECT
-public:
- virtual ~QGeoTiledMappingManagerEngine();
-
- virtual QGeoTiledMapReply* getTileImage(const QGeoTiledMapRequest &request) = 0;
-
- virtual QGeoMapData* createMapData();
-
- QSize tileSize() const;
-
-protected:
- QGeoTiledMappingManagerEngine(const QMap<QString, QVariant> &parameters, QObject *parent = 0);
- void setTileSize(const QSize &tileSize);
-
-private:
- Q_DECLARE_PRIVATE(QGeoTiledMappingManagerEngine)
- Q_DISABLE_COPY(QGeoTiledMappingManagerEngine)
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QGeoTiledMapReply::Error))
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h b/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h
deleted file mode 100644
index 580346f9..00000000
--- a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H
-#define QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeoboundingbox.h"
-
-#include <QPixmap>
-
-QT_BEGIN_NAMESPACE
-
-class QGraphicsPixmapItem;
-class QGeoMapPixmapObject;
-
-class QGeoTiledMapPixmapObjectInfo : public QGeoTiledMapObjectInfo
-{
- Q_OBJECT
-public:
- QGeoTiledMapPixmapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapPixmapObjectInfo();
-
- QGeoMapPixmapObject* pixmap;
- QGraphicsPixmapItem *pixmapItem;
-
-public slots:
- void pixmapChanged(const QPixmap &pixmap);
- void offsetChanged(const QPoint &offset);
-};
-
-QT_END_NAMESPACE
-
-#endif //QGEOTILEDMAPPIXMAPOBJECT_INFO_P_H
-
diff --git a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp
deleted file mode 100644
index 9e5928bd..00000000
--- a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmappolygonobjectinfo_p.h"
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomappolygonobject.h"
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapPolygonObjectInfo::QGeoTiledMapPolygonObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- polygon = static_cast<QGeoMapPolygonObject*>(mapObject);
-
- connect(polygon,
- SIGNAL(pathChanged(QList<QGeoCoordinate>)),
- this,
- SLOT(pathChanged(QList<QGeoCoordinate>)));
- connect(polygon,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
- connect(polygon,
- SIGNAL(brushChanged(QBrush)),
- this,
- SLOT(brushChanged(QBrush)));
-
- polygonItem = new QGraphicsPolygonItem();
- graphicsItem = polygonItem;
-
- penChanged(polygon->pen());
- brushChanged(polygon->brush());
- pathChanged(polygon->path());
-}
-
-QGeoTiledMapPolygonObjectInfo::~QGeoTiledMapPolygonObjectInfo() {}
-
-void QGeoTiledMapPolygonObjectInfo::pathChanged(const QList<QGeoCoordinate> &/*path*/)
-{
- genPoly();
- updateItem();
-}
-
-void QGeoTiledMapPolygonObjectInfo::penChanged(const QPen &/*pen*/)
-{
- polygonItem->setPen(polygon->pen());
- updateItem();
-}
-
-void QGeoTiledMapPolygonObjectInfo::brushChanged(const QBrush &/*brush*/)
-{
- polygonItem->setBrush(polygon->brush());
- updateItem();
-}
-
-void QGeoTiledMapPolygonObjectInfo::genPoly()
-{
- QPolygonF poly;
-
- QList<QGeoCoordinate> path = polygon->path();
-
- if (path.size() > 0) {
- QGeoCoordinate origin = path.at(0);
- double ox = origin.longitude() * 3600.0;
- double oy = origin.latitude() * 3600.0;
-
- double oldx = ox;
-
- poly << QPointF(0,0);
- for (int i = 0; i < path.size(); ++i) {
- QGeoCoordinate pt = path.at(i);
- double x = pt.longitude() * 3600.0;
- double y = pt.latitude() * 3600.0;
-
- if (qAbs(x - oldx) > 180.0 * 3600.0) {
- if (x > oldx) {
- x -= 360.0 * 3600.0;
- } else if (x < oldx) {
- x += 360.0 * 3600.0;
- }
- }
-
- poly << QPointF(x - ox, y - oy);
-
- oldx = x;
- }
- }
-
- polygonItem->setPolygon(poly);
-}
-
-#include "moc_qgeotiledmappolygonobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp
deleted file mode 100644
index 472d032b..00000000
--- a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmappolylineobjectinfo_p.h"
-//#include "makepoly_p.h"
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomappolylineobject.h"
-
-#include "qgeocoordinate.h"
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapPolylineObjectInfo::QGeoTiledMapPolylineObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- polyline = static_cast<QGeoMapPolylineObject*>(mapObject);
-
- connect(polyline,
- SIGNAL(pathChanged(QList<QGeoCoordinate>)),
- this,
- SLOT(pathChanged(QList<QGeoCoordinate>)));
- connect(polyline,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
-
- pathItem = new QGraphicsPathItem();
- graphicsItem = pathItem;
-
- penChanged(polyline->pen());
- pathChanged(polyline->path());
-}
-
-QGeoTiledMapPolylineObjectInfo::~QGeoTiledMapPolylineObjectInfo() {}
-
-void QGeoTiledMapPolylineObjectInfo::pathChanged(const QList<QGeoCoordinate> &/*path*/)
-{
- genPath();
- updateItem();
-}
-
-void QGeoTiledMapPolylineObjectInfo::penChanged(const QPen &/*pen*/)
-{
- pathItem->setPen(polyline->pen());
- updateItem();
-}
-
-void QGeoTiledMapPolylineObjectInfo::genPath()
-{
- QPainterPath p;
-
- QList<QGeoCoordinate> path = polyline->path();
-
- if (path.size() > 0) {
- QGeoCoordinate origin = path.at(0);
- double ox = origin.longitude() * 3600.0;
- double oy = origin.latitude() * 3600.0;
-
- double oldx = ox;
-
- p.moveTo(0, 0);
- for (int i = 1; i < path.size(); ++i) {
- QGeoCoordinate pt = path.at(i);
- double x = pt.longitude() * 3600.0;
- double y = pt.latitude() * 3600.0;
-
- if (qAbs(x - oldx) > 180.0 * 3600.0) {
- if (x > oldx) {
- x -= 360.0 * 3600.0;
- } else if (x < oldx) {
- x += 360.0 * 3600.0;
- }
- }
-
- p.lineTo(x - ox, y - oy);
-
- oldx = x;
- }
- }
-
- pathItem->setPath(p);
-}
-
-#include "moc_qgeotiledmappolylineobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp
deleted file mode 100644
index 7f20bab4..00000000
--- a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmaprectangleobjectinfo_p.h"
-
-#include <QGraphicsPolygonItem>
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeoboundingbox.h"
-
-#include "qgeomaprectangleobject.h"
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapRectangleObjectInfo::QGeoTiledMapRectangleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- rectangle = static_cast<QGeoMapRectangleObject*>(mapObject);
-
- connect(rectangle,
- SIGNAL(topLeftChanged(QGeoCoordinate)),
- this,
- SLOT(topLeftChanged(QGeoCoordinate)));
- connect(rectangle,
- SIGNAL(bottomRightChanged(QGeoCoordinate)),
- this,
- SLOT(bottomRightChanged(QGeoCoordinate)));
- connect(rectangle,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
- connect(rectangle,
- SIGNAL(brushChanged(QBrush)),
- this,
- SLOT(brushChanged(QBrush)));
-
- polygonItem = new QGraphicsPolygonItem();
- graphicsItem = polygonItem;
-
- topLeftChanged(rectangle->topLeft());
- bottomRightChanged(rectangle->bottomRight());
- penChanged(rectangle->pen());
- brushChanged(rectangle->brush());
-}
-
-QGeoTiledMapRectangleObjectInfo::~QGeoTiledMapRectangleObjectInfo() {}
-
-void QGeoTiledMapRectangleObjectInfo::topLeftChanged(const QGeoCoordinate &/*topLeft*/)
-{
- regenPolygon();
- updateItem();
-}
-
-void QGeoTiledMapRectangleObjectInfo::bottomRightChanged(const QGeoCoordinate &/*bottomRight*/)
-{
- regenPolygon();
- updateItem();
-}
-
-void QGeoTiledMapRectangleObjectInfo::penChanged(const QPen &/*pen*/)
-{
- polygonItem->setPen(rectangle->pen());
- updateItem();
-}
-
-void QGeoTiledMapRectangleObjectInfo::brushChanged(const QBrush &/*brush*/)
-{
- polygonItem->setBrush(rectangle->brush());
- updateItem();
-}
-
-void QGeoTiledMapRectangleObjectInfo::regenPolygon()
-{
- QPolygonF poly;
-
- if (!rectangle->bounds().isValid())
- return;
-
- const QGeoCoordinate tl = rectangle->bounds().topLeft();
- if (!tl.isValid())
- return;
-
- const QGeoCoordinate br = rectangle->bounds().bottomRight();
- if (!br.isValid())
- return;
-
- double left = tl.longitude() * 3600.0;
- double right = br.longitude() * 3600.0;
- double top = tl.latitude() * 3600.0;
- double bottom = br.latitude() * 3600.0;
-
- if (left > right)
- right += 360.0 * 3600.0;
-
- poly << QPointF(left, top);
- poly << QPointF(right, top);
- poly << QPointF(right, bottom);
- poly << QPointF(left, bottom);
-
- polygonItem->setPolygon(poly);
-}
-
-#include "moc_qgeotiledmaprectangleobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
-
diff --git a/src/location/maps/tiled/qgeotiledmaprequest.cpp b/src/location/maps/tiled/qgeotiledmaprequest.cpp
deleted file mode 100644
index cad5a7f2..00000000
--- a/src/location/maps/tiled/qgeotiledmaprequest.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmaprequest.h"
-#include "qgeotiledmaprequest_p.h"
-
-#include "qgeotiledmapdata.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QGeoTiledMapRequest
- \brief The QGeoTiledMapRequest class represents a request for a map tile
- from a tile-based mapping service.
-
- \inmodule QtLocation
-
- \ingroup maps-impl-tiled
-
- \since 1.2
-
- The tile is specified by a map type, a zoom level, a row and a column.
-
- At a zoom level of z the world is represented as a 2^z by 2^z grid
- of tiles, and the row and column are relative to the grid of tiles
- for the zoom level of the request.
-*/
-
-/*!
- Constructs a new tiled map request.
-*/
-QGeoTiledMapRequest::QGeoTiledMapRequest()
- : d_ptr(new QGeoTiledMapRequestPrivate()) {}
-
-/*!
- Constructs a new tiled map request.
-
- At a zoom level of z the world is represented as a 2^z by 2^z grid
- of tiles.
-
- This tiled map request represents a request for the tile at row \a row and
- column \a column at zoom level \a zoomLevel and type
- \a mapType.
-
- The request will use connectivity mode \a connectivityMode when
- accessing the map data.
-
- The rectangle that the tile occupies on the map at the maximum zoom level
- is also given as \a tileRect.
-*/
-QGeoTiledMapRequest::QGeoTiledMapRequest(QGraphicsGeoMap::ConnectivityMode connectivityMode,
- QGraphicsGeoMap::MapType mapType,
- qreal zoomLevel,
- int row,
- int column,
- const QRect &tileRect)
- : d_ptr(new QGeoTiledMapRequestPrivate())
-{
- //d_ptr->mapData = mapData;
- d_ptr->row = row;
- d_ptr->column = column;
- d_ptr->tileRect = tileRect;
-
- d_ptr->zoomLevel = zoomLevel;
- d_ptr->mapType = mapType;
- d_ptr->connectivityMode = connectivityMode;
-}
-
-/*!
- Constructs a tiled map request from the contents of \a other.
-*/
-QGeoTiledMapRequest::QGeoTiledMapRequest(const QGeoTiledMapRequest &other)
- : d_ptr(other.d_ptr) {}
-
-/*!
- Destroys this tiled map request.
-*/
-QGeoTiledMapRequest::~QGeoTiledMapRequest() {}
-
-/*!
- Assigns \a other to this tiled map request and then returns a reference to
- this tiled map request.
-*/
-QGeoTiledMapRequest& QGeoTiledMapRequest::operator= (const QGeoTiledMapRequest & other)
-{
- d_ptr = other.d_ptr;
-
- return *this;
-}
-
-/*!
- Returns with this tiled map request is equal to \a other.
-*/
-bool QGeoTiledMapRequest::operator== (const QGeoTiledMapRequest &other) const
-{
- return (d_ptr->row == other.d_ptr->row) &&
- (d_ptr->column == other.d_ptr->column) &&
- (d_ptr->zoomLevel == other.d_ptr->zoomLevel) &&
- (d_ptr->mapType == other.d_ptr->mapType) &&
- (d_ptr->connectivityMode == other.d_ptr->connectivityMode);
-}
-
-/*
- Returns the QGeoMapData instance associated with this request.
-*/
-//QGeoTiledMapData* QGeoTiledMapRequest::mapData() const
-//{
-// return d_ptr->mapData;
-//}
-
-/*!
- Returns the connectivity mode of the tile request.
-*/
-QGraphicsGeoMap::ConnectivityMode QGeoTiledMapRequest::connectivityMode() const
-{
- return d_ptr->connectivityMode;
-}
-
-/*!
- Returns the map type of the requested tile.
-*/
-QGraphicsGeoMap::MapType QGeoTiledMapRequest::mapType() const
-{
- return d_ptr->mapType;
-}
-
-/*!
- Returns the zoom level of the requested tile.
-
- The lower and upper bounds of the zoom level are set by
- the QGeoMappingManager that created this request.
-*/
-int QGeoTiledMapRequest::zoomLevel() const
-{
- return d_ptr->zoomLevel;
-}
-
-/*!
- Returns the row of the requested tile.
-
- At a zoom level of z the world is represented as a 2^z by 2^z grid
- of tiles, and so the row will be between 0 and 2^z - 1.
-*/
-int QGeoTiledMapRequest::row() const
-{
- return d_ptr->row;
-}
-
-/*!
- Returns the column of the requested tile.
-
- At a zoom level of z the world is represented as a 2^z by 2^z grid
- of tiles, and so the column will be between 0 and 2^z - 1.
-*/
-int QGeoTiledMapRequest::column() const
-{
- return d_ptr->column;
-}
-
-/*!
- Returns the rectangle that the tile covers on the map at the maximum zoon
- level.
-
- At a zoom level of z the world is represented as a 2^z by 2^z grid of
- tiles. If m is the maximum zoom level and the tiles are t by t pixel
- squares, then the entire world could be viewed as a 2^m * t by 2^m * t
- pixel image.
-
- The rectangle returned is specified relative to the pixel coordinates of
- the map at the maximum zoom level.
-*/
-QRect QGeoTiledMapRequest::tileRect() const
-{
- return d_ptr->tileRect;
-}
-
-/*!
- Returns a hash of the tiled map request \a key.
-*/
-uint qHash(const QGeoTiledMapRequest &key)
-{
- uint result = QT_PREPEND_NAMESPACE(qHash)(key.row() * 13);
- result += QT_PREPEND_NAMESPACE(qHash)(key.column() * 17);
- result += QT_PREPEND_NAMESPACE(qHash)(key.zoomLevel() * 19);
- result += QT_PREPEND_NAMESPACE(qHash)(static_cast<int>(key.mapType()));
- return result;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QGeoTiledMapRequestPrivate::QGeoTiledMapRequestPrivate()
- : QSharedData(),
- connectivityMode(QGraphicsGeoMap::NoConnectivity),
- mapType(QGraphicsGeoMap::NoMap),
- zoomLevel(0),
- row(0),
- column(0),
- tileRect(QRect()) {}
-//mapData(0) {}
-
-QGeoTiledMapRequestPrivate::QGeoTiledMapRequestPrivate(const QGeoTiledMapRequestPrivate &other)
- : QSharedData(other),
-// mapData(other.mapData),
- connectivityMode(other.connectivityMode),
- mapType(other.mapType),
- zoomLevel(other.zoomLevel),
- row(other.row),
- column(other.column),
- tileRect(other.tileRect) {}
-
-QGeoTiledMapRequestPrivate::~QGeoTiledMapRequestPrivate() {}
-
-QGeoTiledMapRequestPrivate& QGeoTiledMapRequestPrivate::operator= (const QGeoTiledMapRequestPrivate & other)
-{
-// mapData = other.mapData;
- connectivityMode = other.connectivityMode;
- mapType = other.mapType;
- zoomLevel = other.zoomLevel;
- row = other.row;
- column = other.column;
- tileRect = other.tileRect;
-
- return *this;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/qgeotiledmaprequest.h b/src/location/maps/tiled/qgeotiledmaprequest.h
deleted file mode 100644
index bf00f4fb..00000000
--- a/src/location/maps/tiled/qgeotiledmaprequest.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPREQUEST_H
-#define QGEOTILEDMAPREQUEST_H
-
-#include "qgraphicsgeomap.h"
-
-#include <QRect>
-#include <QExplicitlySharedDataPointer>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoTiledMapData;
-class QGeoTiledMapRequestPrivate;
-
-class Q_LOCATION_EXPORT QGeoTiledMapRequest
-{
-public:
- QGeoTiledMapRequest();
- QGeoTiledMapRequest(QGraphicsGeoMap::ConnectivityMode connectivityMode,
- QGraphicsGeoMap::MapType mapType,
- qreal zoomLevel,
- int row,
- int column,
- const QRect &tileRect);
- QGeoTiledMapRequest(const QGeoTiledMapRequest &other);
- ~QGeoTiledMapRequest();
-
- QGeoTiledMapRequest& operator= (const QGeoTiledMapRequest &other);
-
- bool operator== (const QGeoTiledMapRequest &other) const;
-
- //QGeoTiledMapData *mapData() const;
-
- QGraphicsGeoMap::ConnectivityMode connectivityMode() const;
- QGraphicsGeoMap::MapType mapType() const;
- int zoomLevel() const;
-
- int row() const;
- int column() const;
- QRect tileRect() const;
-
-private:
- QExplicitlySharedDataPointer<QGeoTiledMapRequestPrivate> d_ptr;
-};
-
-Q_LOCATION_EXPORT uint qHash(const QGeoTiledMapRequest &key);
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmaprequest_p.h b/src/location/maps/tiled/qgeotiledmaprequest_p.h
deleted file mode 100644
index 5c0a474a..00000000
--- a/src/location/maps/tiled/qgeotiledmaprequest_p.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOTILEDMAPREQUEST_P_H
-#define QGEOTILEDMAPREQUEST_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgraphicsgeomap.h"
-
-#include <QSharedData>
-
-QT_BEGIN_NAMESPACE
-
-//class QGeoTiledMapData;
-
-class QGeoTiledMapRequestPrivate : public QSharedData
-{
-public:
- QGeoTiledMapRequestPrivate();
- QGeoTiledMapRequestPrivate(const QGeoTiledMapRequestPrivate &other);
- ~QGeoTiledMapRequestPrivate();
-
- QGeoTiledMapRequestPrivate& operator= (const QGeoTiledMapRequestPrivate &other);
-
- //QGeoTiledMapData *mapData;
- QGraphicsGeoMap::ConnectivityMode connectivityMode;
- QGraphicsGeoMap::MapType mapType;
- int zoomLevel;
- int row;
- int column;
- QRect tileRect;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp
deleted file mode 100644
index 4b14647f..00000000
--- a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmaprouteobjectinfo_p.h"
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomaprouteobject.h"
-
-#include "qgeoroutesegment.h"
-
-#include <QPointF>
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapRouteObjectInfo::QGeoTiledMapRouteObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- route = static_cast<QGeoMapRouteObject*>(mapObject);
-
- connect(route,
- SIGNAL(routeChanged(QGeoRoute)),
- this,
- SLOT(routeChanged(QGeoRoute)));
- connect(route,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
- connect(route,
- SIGNAL(detailLevelChanged(quint32)),
- this,
- SLOT(detailLevelChanged(quint32)));
-
- pathItem = new QGraphicsPathItem();
- graphicsItem = pathItem;
-
- routeChanged(route->route());
- penChanged(route->pen());
- routeChanged(route->route());
-}
-
-QGeoTiledMapRouteObjectInfo::~QGeoTiledMapRouteObjectInfo() {}
-
-void QGeoTiledMapRouteObjectInfo::routeChanged(const QGeoRoute &/*route*/)
-{
- regenPath();
- updateItem();
-}
-
-void QGeoTiledMapRouteObjectInfo::penChanged(const QPen &/*pen*/)
-{
- pathItem->setPen(route->pen());
- updateItem();
-}
-
-void QGeoTiledMapRouteObjectInfo::detailLevelChanged(quint32 /*detailLevel*/)
-{
- updateItem();
-}
-
-void QGeoTiledMapRouteObjectInfo::regenPath()
-{
- QList<QGeoCoordinate> path;
-
- QGeoRouteSegment segment = route->route().firstRouteSegment();
- while (segment.isValid()) {
- path.append(segment.path());
- segment = segment.nextRouteSegment();
- }
-
- QPainterPath pth;
-
- if (path.size() > 0) {
- double oldx = 0.0;
-
- for (int i = 0; i < path.size(); ++i) {
- double x = path.at(i).longitude() * 3600.0;
- double y = path.at(i).latitude() * 3600.0;
- if (i == 0) {
- pth.moveTo(x, y);
- } else {
- if (qAbs(x - oldx) > 180.0 * 3600.0) {
- if (x > oldx) {
- x -= 360.0 * 3600.0;
- } else if (x < oldx) {
- x += 360.0 * 3600.0;
- }
- }
-
- pth.lineTo(x, y);
- }
-
- oldx = x;
- }
- }
-
- pathItem->setPath(pth);
-}
-
-#include "moc_qgeotiledmaprouteobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp b/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp
deleted file mode 100644
index 576eff82..00000000
--- a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qgeotiledmaptextobjectinfo_p.h"
-
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomaptextobject.h"
-
-#include <QFontMetrics>
-
-QT_BEGIN_NAMESPACE
-
-QGeoTiledMapTextObjectInfo::QGeoTiledMapTextObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- text = static_cast<QGeoMapTextObject*>(mapObject);
-
- connect(text,
- SIGNAL(textChanged(QString)),
- this,
- SLOT(textChanged(QString)));
- connect(text,
- SIGNAL(fontChanged(QFont)),
- this,
- SLOT(fontChanged(QFont)));
- connect(text,
- SIGNAL(penChanged(QPen)),
- this,
- SLOT(penChanged(QPen)));
- connect(text,
- SIGNAL(brushChanged(QBrush)),
- this,
- SLOT(brushChanged(QBrush)));
- connect(text,
- SIGNAL(offsetChanged(QPoint)),
- this,
- SLOT(offsetChanged(QPoint)));
- connect(text,
- SIGNAL(alignmentChanged(Qt::Alignment)),
- this,
- SLOT(alignmentChanged(Qt::Alignment)));
-
- textItem = new QGraphicsSimpleTextItem();
- graphicsItem = textItem;
-
- penChanged(text->pen());
- brushChanged(text->brush());
- originChanged(text->origin());
- fontChanged(text->font());
- textChanged(text->text());
-}
-
-QGeoTiledMapTextObjectInfo::~QGeoTiledMapTextObjectInfo() {}
-
-void QGeoTiledMapTextObjectInfo::textChanged(const QString &/*text*/)
-{
- textItem->setText(text->text());
- doAlignment();
- updateItem();
-}
-
-void QGeoTiledMapTextObjectInfo::fontChanged(const QFont &/*font*/)
-{
- textItem->setFont(text->font());
- doAlignment();
- updateItem();
-}
-
-void QGeoTiledMapTextObjectInfo::offsetChanged(const QPoint &/*offset*/)
-{
- doAlignment();
- updateItem();
-}
-
-void QGeoTiledMapTextObjectInfo::alignmentChanged(Qt::Alignment /*alignment*/)
-{
- doAlignment();
- updateItem();
-}
-
-void QGeoTiledMapTextObjectInfo::penChanged(const QPen &/*pen*/)
-{
- textItem->setPen(text->pen());
- doAlignment();
- updateItem();
-}
-
-void QGeoTiledMapTextObjectInfo::brushChanged(const QBrush &/*brush*/)
-{
- if (textItem) {
- textItem->setBrush(text->brush());
- doAlignment();
- updateItem();
- }
-}
-
-void QGeoTiledMapTextObjectInfo::doAlignment()
-{
- Qt::Alignment align = text->alignment();
- QTransform trans;
- textItem->setTransform(trans);
-
- QRectF rect = textItem->boundingRect();
- QPointF center = rect.center();
-
- if (align & Qt::AlignVCenter) {
- trans.translate(0, -1 * center.y());
- } else if (align & Qt::AlignTop) {
- trans.translate(0, -1 * rect.top());
- } else if (align & Qt::AlignBottom) {
- trans.translate(0, -1 * rect.bottom());
- }
- if (align & Qt::AlignHCenter) {
- trans.translate(-1 * center.x(), 0);
- } else if (align & Qt::AlignLeft) {
- trans.translate(-1 * rect.left(), 0);
- } else if (align & Qt::AlignRight) {
- trans.translate(-1 * rect.right(), 0);
- }
-
- QPoint offset = text->offset();
- trans.translate(offset.x(), offset.y());
- textItem->setTransform(trans);
-}
-
-#include "moc_qgeotiledmaptextobjectinfo_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/location/maps/tiled/tiled.pri b/src/location/maps/tiled/tiled.pri
deleted file mode 100644
index c6a2c108..00000000
--- a/src/location/maps/tiled/tiled.pri
+++ /dev/null
@@ -1,40 +0,0 @@
-
-INCLUDEPATH += maps/tiled
-
-PUBLIC_HEADERS += \
- maps/tiled/qgeotiledmapdata.h \
- maps/tiled/qgeotiledmappingmanagerengine.h \
- maps/tiled/qgeotiledmapreply.h \
- maps/tiled/qgeotiledmaprequest.h
-
-PRIVATE_HEADERS += \
- maps/tiled/qgeotiledmapdata_p.h \
- maps/tiled/qgeotiledmapobjectinfo_p.h \
- maps/tiled/qgeotiledmapcircleobjectinfo_p.h \
- maps/tiled/qgeotiledmapcustomobjectinfo_p.h \
- maps/tiled/qgeotiledmapgroupobjectinfo_p.h \
- maps/tiled/qgeotiledmappixmapobjectinfo_p.h \
- maps/tiled/qgeotiledmappolygonobjectinfo_p.h \
- maps/tiled/qgeotiledmappolylineobjectinfo_p.h \
- maps/tiled/qgeotiledmaprectangleobjectinfo_p.h \
- maps/tiled/qgeotiledmaprouteobjectinfo_p.h \
- maps/tiled/qgeotiledmaptextobjectinfo_p.h \
- maps/tiled/qgeotiledmappingmanagerengine_p.h \
- maps/tiled/qgeotiledmapreply_p.h \
- maps/tiled/qgeotiledmaprequest_p.h
-
-SOURCES += \
- maps/tiled/qgeotiledmapdata.cpp \
- maps/tiled/qgeotiledmapobjectinfo_p.cpp \
- maps/tiled/qgeotiledmapcircleobjectinfo_p.cpp \
- maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp \
- maps/tiled/qgeotiledmapgroupobjectinfo_p.cpp \
- maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp \
- maps/tiled/qgeotiledmappolygonobjectinfo_p.cpp \
- maps/tiled/qgeotiledmappolylineobjectinfo_p.cpp \
- maps/tiled/qgeotiledmaprectangleobjectinfo_p.cpp \
- maps/tiled/qgeotiledmaprouteobjectinfo_p.cpp \
- maps/tiled/qgeotiledmaptextobjectinfo_p.cpp \
- maps/tiled/qgeotiledmappingmanagerengine.cpp \
- maps/tiled/qgeotiledmapreply.cpp \
- maps/tiled/qgeotiledmaprequest.cpp
diff --git a/src/location/mapsgl/cameradata.cpp b/src/location/mapsgl/cameradata.cpp
new file mode 100644
index 00000000..4d522b68
--- /dev/null
+++ b/src/location/mapsgl/cameradata.cpp
@@ -0,0 +1,290 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "cameradata.h"
+
+#include "projection_p.h"
+
+#include <QVariant>
+#include <QVariantAnimation>
+
+#include <QMetaType>
+
+#include <QWeakPointer>
+
+#include <cmath>
+
+
+class CameraDataPrivate : public QSharedData
+{
+public:
+ CameraDataPrivate();
+ CameraDataPrivate(const CameraDataPrivate &rhs);
+
+ CameraDataPrivate& operator = (const CameraDataPrivate &rhs);
+
+ bool operator == (const CameraDataPrivate &rhs) const;
+
+ QGeoCoordinate center_;
+ double distance_;
+ double bearing_;
+ double tilt_;
+ double roll_;
+ double aspectRatio_;
+ int zoomLevel_;
+ double zoomFactor_;
+
+ QWeakPointer<Projection> projection_;
+};
+
+CameraDataPrivate::CameraDataPrivate()
+ : QSharedData(),
+ center_(-27.5, 153),
+ distance_(0.02),
+ bearing_(0.0),
+ tilt_(0.0),
+ roll_(0.0),
+ aspectRatio_(1.0),
+ zoomLevel_(9) {}
+
+CameraDataPrivate::CameraDataPrivate(const CameraDataPrivate &rhs)
+ : QSharedData(rhs),
+ center_(rhs.center_),
+ distance_(rhs.distance_),
+ bearing_(rhs.bearing_),
+ tilt_(rhs.tilt_),
+ roll_(rhs.roll_),
+ aspectRatio_(rhs.aspectRatio_),
+ zoomLevel_(rhs.zoomLevel_),
+ zoomFactor_(rhs.zoomFactor_),
+ projection_(rhs.projection_) {}
+
+CameraDataPrivate& CameraDataPrivate::operator = (const CameraDataPrivate &rhs)
+{
+ center_ = rhs.center_;
+ distance_ = rhs.distance_;
+ bearing_ = rhs.bearing_;
+ tilt_ = rhs.tilt_;
+ roll_ = rhs.roll_;
+ aspectRatio_ = rhs.aspectRatio_;
+ zoomLevel_ = rhs.zoomLevel_;
+ zoomFactor_ = rhs.zoomFactor_;
+ QSharedPointer<Projection> p = rhs.projection_.toStrongRef();
+ if (p)
+ projection_ = p.toWeakRef();
+ else
+ projection_.clear();
+
+ return *this;
+}
+
+bool CameraDataPrivate::operator == (const CameraDataPrivate &rhs) const
+{
+ return ((center_ == rhs.center_)
+ && (distance_ == rhs.distance_)
+ && (bearing_ == rhs.bearing_)
+ && (tilt_ == rhs.tilt_)
+ && (roll_ == rhs.roll_)
+ && (aspectRatio_ == rhs.aspectRatio_)
+ && (zoomLevel_ == rhs.zoomLevel_)
+ && (zoomFactor_ == rhs.zoomFactor_));
+}
+
+QVariant cameraInterpolator(const CameraData &start,
+ const CameraData &end,
+ qreal progress)
+{
+ CameraData result = start;
+
+
+ QSharedPointer<Projection> p = start.projection();
+ if (!p)
+ p = end.projection();
+
+ if (!p)
+ result.setCenter(start.center());
+ else
+ result.setCenter(p->interpolate(start.center(), end.center(), progress));
+
+ double sf = 1.0 - progress;
+ double ef = progress;
+
+ result.setBearing(sf * start.bearing() + ef * end.bearing());
+ result.setTilt(sf * start.tilt() + ef * end.tilt());
+ result.setRoll(sf * start.roll() + ef * end.roll());
+ result.setZoomFactor(sf * start.zoomFactor() + ef * end.zoomFactor());
+
+ return QVariant::fromValue(result);
+}
+
+CameraData::CameraData()
+ : d(new CameraDataPrivate())
+{
+ qRegisterMetaType<CameraData>();
+ qRegisterAnimationInterpolator<CameraData>(cameraInterpolator);
+ setZoomFactor(4.0);
+}
+
+CameraData::CameraData(const CameraData &other)
+ : d(other.d) {}
+
+CameraData::~CameraData()
+{
+}
+
+CameraData& CameraData::operator = (const CameraData &other)
+{
+ d = other.d;
+ return *this;
+}
+
+bool CameraData::operator == (const CameraData &rhs) const
+{
+ return (*(d.constData()) == *(rhs.d.constData()));
+}
+
+bool CameraData::operator != (const CameraData &other) const
+{
+ return !(operator==(other));
+}
+
+void CameraData::setCenter(const QGeoCoordinate &center)
+{
+ d->center_ = center;
+}
+
+QGeoCoordinate CameraData::center() const
+{
+ return d->center_;
+}
+
+void CameraData::setBearing(double bearing)
+{
+ d->bearing_ = bearing;
+}
+
+double CameraData::bearing() const
+{
+ return d->bearing_;
+}
+
+void CameraData::setTilt(double tilt)
+{
+ d->tilt_ = tilt;
+}
+
+double CameraData::tilt() const
+{
+ return d->tilt_;
+}
+
+void CameraData::setRoll(double roll)
+{
+ d->roll_ = roll;
+}
+
+double CameraData::roll() const
+{
+ return d->roll_;
+}
+
+void CameraData::setAspectRatio(double aspectRatio)
+{
+ d->aspectRatio_ = aspectRatio;
+}
+
+double CameraData::aspectRatio() const
+{
+ return d->aspectRatio_;
+}
+
+/*
+ Distance and zoomLevel are only writeable for debugging purposes.
+ The setters will eventually go away and then zoomFactor will be
+ the way to set these.
+*/
+
+void CameraData::setDistance(double distance)
+{
+ d->zoomFactor_ = -1.0 * log(distance) / log(2.0);
+ d->distance_ = distance;
+}
+
+double CameraData::distance() const
+{
+ return d->distance_;
+}
+
+void CameraData::setZoomLevel(int zoomLevel)
+{
+ d->zoomLevel_ = zoomLevel;
+}
+
+int CameraData::zoomLevel() const
+{
+ return d->zoomLevel_;
+}
+
+void CameraData::setZoomFactor(double zoomFactor)
+{
+ d->zoomLevel_ = floor(zoomFactor);
+// qDebug() << __FUNCTION__ << zoomFactor << d->zoomLevel_;
+
+ // FIXME this will need some tuning
+
+ d->distance_ = 1.0 / pow(2.0, zoomFactor);
+
+ d->zoomFactor_ = zoomFactor;
+}
+
+double CameraData::zoomFactor() const
+{
+ return d->zoomFactor_;
+}
+
+void CameraData::setProjection(QSharedPointer<Projection> projection)
+{
+ d->projection_ = projection.toWeakRef();
+}
+
+QSharedPointer<Projection> CameraData::projection() const
+{
+ return d->projection_.toStrongRef();
+}
diff --git a/src/location/maps/qgeomapcustomobject.h b/src/location/mapsgl/cameradata.h
index a79e5b89..27bcd550 100644
--- a/src/location/maps/qgeomapcustomobject.h
+++ b/src/location/mapsgl/cameradata.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,57 +38,68 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef CAMERADATA_H
+#define CAMERADATA_H
-#ifndef QGEOMAPCUSTOMOBJECT_H
-#define QGEOMAPCUSTOMOBJECT_H
+#include "qmobilityglobal.h"
-#include "qgeomapobject.h"
#include "qgeocoordinate.h"
-#include <QPoint>
+#include <QMetaType>
-#include <QGraphicsItem>
+#include <QSharedPointer>
+#include <QSharedDataPointer>
QT_BEGIN_NAMESPACE
-class QGeoMapCustomObjectPrivate;
+class Projection;
+class CameraDataPrivate;
-class Q_LOCATION_EXPORT QGeoMapCustomObject : public QGeoMapObject
+class Q_LOCATION_EXPORT CameraData
{
- Q_OBJECT
- Q_PROPERTY(QGraphicsItem* graphicsItem READ graphicsItem WRITE setGraphicsItem NOTIFY graphicsItemChanged)
- Q_PROPERTY(QPoint offset READ offset WRITE setOffset NOTIFY offsetChanged)
-
public:
- QGeoMapCustomObject();
- QGeoMapCustomObject(const QGeoCoordinate &coordinate, const QPoint &offset = QPoint(0, 0));
- ~QGeoMapCustomObject();
+ CameraData();
+ CameraData(const CameraData &other);
+ ~CameraData();
+
+ CameraData& operator = (const CameraData &other);
+
+ bool operator == (const CameraData &other) const;
+ bool operator != (const CameraData &other) const;
+
+ void setCenter(const QGeoCoordinate &coordinate);
+ QGeoCoordinate center() const;
- QGeoMapObject::Type type() const;
+ void setBearing(double bearing);
+ double bearing() const;
- void update();
+ void setTilt(double tilt);
+ double tilt() const;
- QGraphicsItem* graphicsItem() const;
- void setGraphicsItem(QGraphicsItem *graphicsItem);
+ void setRoll(double roll);
+ double roll() const;
- QPoint offset() const;
- void setOffset(const QPoint &offset);
+ void setAspectRatio(double aspectRatio);
+ double aspectRatio() const;
- void setOrigin(const QGeoCoordinate &origin);
- void setUnits(const CoordinateUnit &unit);
- void setTransformType(const TransformType &type);
+ void setDistance(double distance);
+ double distance() const;
-Q_SIGNALS:
- void triggerUpdate();
- void graphicsItemChanged(QGraphicsItem *graphicsItem);
- void offsetChanged(const QPoint &offset);
+ void setZoomLevel(int zoomLevel);
+ int zoomLevel() const;
+
+ void setZoomFactor(double zoomFactor);
+ double zoomFactor() const;
+
+ void setProjection(QSharedPointer<Projection> projection);
+ QSharedPointer<Projection> projection() const;
private:
- QGeoMapCustomObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapCustomObject)
- Q_DISABLE_COPY(QGeoMapCustomObject)
+ QSharedDataPointer<CameraDataPrivate> d;
};
+Q_DECLARE_METATYPE(CameraData)
+
QT_END_NAMESPACE
-#endif
+#endif // CAMERADATA_H
diff --git a/src/location/mapsgl/frustum.cpp b/src/location/mapsgl/frustum.cpp
new file mode 100644
index 00000000..2b4bd27d
--- /dev/null
+++ b/src/location/mapsgl/frustum.cpp
@@ -0,0 +1,206 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "frustum_p.h"
+
+#include "viewportcamera_p.h"
+
+#include <Qt3D/qglcamera.h>
+
+#include <cmath>
+
+Frustum::Frustum() {}
+
+void Frustum::update(const QGLCamera *camera, double aspectRatio, bool updatePlanes)
+{
+ if (aspectRatio > 1.0) {
+ double fov = atan2(camera->viewSize().height() , (2 * camera->nearPlane()));
+
+ hn_ = 2 * tan(fov) * camera->nearPlane();
+ wn_ = hn_ * aspectRatio;
+
+ hf_ = 2 * tan(fov) * camera->farPlane();
+ wf_ = hf_ * aspectRatio;
+ } else {
+ double fov = atan2(camera->viewSize().width() , (2 * camera->nearPlane()));
+
+ wn_ = 2 * tan(fov) * camera->nearPlane();
+ hn_ = wn_ / aspectRatio;
+
+ wf_ = 2 * tan(fov) * camera->farPlane();
+ hf_ = wf_ / aspectRatio;
+ }
+
+ QVector3D p = camera->eye();
+ QVector3D d = camera->center() - camera->eye();
+ d.normalize();
+
+ QVector3D up = camera->upVector();
+ up.normalize();
+
+ QVector3D right = QVector3D::normal(d, up);
+
+ cf_ = p + d * camera->farPlane();
+ tlf_ = cf_ + (up * hf_ / 2) - (right * wf_ / 2);
+ trf_ = cf_ + (up * hf_ / 2) + (right * wf_ / 2);
+ blf_ = cf_ - (up * hf_ / 2) - (right * wf_ / 2);
+ brf_ = cf_ - (up * hf_ / 2) + (right * wf_ / 2);
+
+ cn_ = p + d * camera->nearPlane();
+ tln_ = cn_ + (up * hn_ / 2) - (right * wn_ / 2);
+ trn_ = cn_ + (up * hn_ / 2) + (right * wn_ / 2);
+ bln_ = cn_ - (up * hn_ / 2) - (right * wn_ / 2);
+ brn_ = cn_ - (up * hn_ / 2) + (right * wn_ / 2);
+
+ if (!updatePlanes)
+ return;
+
+ QPlane3D pn = QPlane3D(bln_, tln_, brn_);
+ pn.setNormal(pn.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Near), pn);
+
+ QPlane3D pf = QPlane3D(blf_, brf_, tlf_);
+ pf.setNormal(pf.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Far), pf);
+
+ QPlane3D pl = QPlane3D(blf_, tlf_, bln_);
+ pl.setNormal(pl.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Left), pl);
+
+ QPlane3D pr = QPlane3D(brf_, brn_, trf_);
+ pr.setNormal(pr.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Right), pr);
+
+ QPlane3D pt = QPlane3D(tlf_, trf_, tln_);
+ pt.setNormal(pt.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Top), pt);
+
+ QPlane3D pb = QPlane3D(blf_, bln_, brf_);
+ pb.setNormal(pb.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Bottom), pb);
+}
+
+void Frustum::update(const ViewportCamera &camera)
+{
+ if (camera.aspectRatio() > 1.0) {
+ double fov = atan2(camera.viewSize().height() , (2 * camera.nearPlane()));
+
+ hn_ = 2 * tan(fov) * camera.nearPlane();
+ wn_ = hn_ * camera.aspectRatio();
+
+ hf_ = 2 * tan(fov) * camera.farPlane();
+ wf_ = hf_ * camera.aspectRatio();
+ } else {
+ double fov = atan2(camera.viewSize().width() , (2 * camera.nearPlane()));
+
+ wn_ = 2 * tan(fov) * camera.nearPlane();
+ hn_ = wn_ / camera.aspectRatio();
+
+ wf_ = 2 * tan(fov) * camera.farPlane();
+ hf_ = wf_ / camera.aspectRatio();
+ }
+
+ QVector3D p = camera.eye();
+ QVector3D d = camera.center() - camera.eye();
+ d.normalize();
+
+ QVector3D up = camera.up();
+ up.normalize();
+
+ QVector3D right = QVector3D::normal(d, up);
+
+ cf_ = p + d * camera.farPlane();
+ tlf_ = cf_ + (up * hf_ / 2) - (right * wf_ / 2);
+ trf_ = cf_ + (up * hf_ / 2) + (right * wf_ / 2);
+ blf_ = cf_ - (up * hf_ / 2) - (right * wf_ / 2);
+ brf_ = cf_ - (up * hf_ / 2) + (right * wf_ / 2);
+
+ cn_ = p + d * camera.nearPlane();
+ tln_ = cn_ + (up * hn_ / 2) - (right * wn_ / 2);
+ trn_ = cn_ + (up * hn_ / 2) + (right * wn_ / 2);
+ bln_ = cn_ - (up * hn_ / 2) - (right * wn_ / 2);
+ brn_ = cn_ - (up * hn_ / 2) + (right * wn_ / 2);
+
+ QPlane3D pn = QPlane3D(bln_, tln_, brn_);
+ pn.setNormal(pn.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Near), pn);
+
+ QPlane3D pf = QPlane3D(blf_, brf_, tlf_);
+ pf.setNormal(pf.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Far), pf);
+
+ QPlane3D pl = QPlane3D(blf_, tlf_, bln_);
+ pl.setNormal(pl.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Left), pl);
+
+ QPlane3D pr = QPlane3D(brf_, brn_, trf_);
+ pr.setNormal(pr.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Right), pr);
+
+ QPlane3D pt = QPlane3D(tlf_, trf_, tln_);
+ pt.setNormal(pt.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Top), pt);
+
+ QPlane3D pb = QPlane3D(blf_, bln_, brf_);
+ pb.setNormal(pb.normal().normalized());
+ planeHash_.insert(Frustum::Planes(Frustum::Bottom), pb);
+}
+
+bool Frustum::contains(const QVector3D &center, double radius) const
+{
+ if (planeHash_.isEmpty())
+ return false;
+
+ QHash<Frustum::Planes, QPlane3D>::const_iterator i = planeHash_.constBegin();
+ QHash<Frustum::Planes, QPlane3D>::const_iterator end = planeHash_.constEnd();
+
+ while (i != end) {
+ if (i.value().distanceTo(center) < -1.0 * radius)
+ return false;
+ ++i;
+ }
+
+ return true;
+}
+
+QPlane3D Frustum::plane(Planes planes) const
+{
+ return planeHash_.value(planes);
+}
diff --git a/src/location/mapsgl/frustum_p.h b/src/location/mapsgl/frustum_p.h
new file mode 100644
index 00000000..5341c360
--- /dev/null
+++ b/src/location/mapsgl/frustum_p.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TILEFRUSTUM_H
+#define TILEFRUSTUM_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qmobilityglobal.h"
+
+#include <QVector3D>
+#include <QHash>
+
+#include <Qt3D/qplane3d.h>
+
+class ViewportCamera;
+
+class QGLCamera;
+
+class Q_AUTOTEST_EXPORT Frustum
+{
+public:
+ enum Plane {
+ Near = 0x001,
+ Far = 0x002,
+ Right = 0x004,
+ Left = 0x008,
+ Top = 0x010,
+ Bottom = 0x020,
+ TopLeftNear = Top | Left | Near,
+ TopLeftFar = Top | Left | Far,
+ TopRightNear = Top | Right | Near,
+ TopRightFar = Top | Right | Far,
+ BottomLeftNear = Bottom | Left | Near,
+ BottomLeftFar = Bottom | Left | Far,
+ BottomRightNear = Bottom | Right | Near,
+ BottomRightFar = Bottom | Right | Far
+ };
+
+ Q_DECLARE_FLAGS(Planes, Plane)
+
+ Frustum();
+
+ void update(const ViewportCamera &camera);
+
+ void update(const QGLCamera *camera, double aspectRatio, bool updatePlanes = false);
+
+ bool contains(const QVector3D &center, double radius) const;
+
+ QVector3D topLeftNear() const {
+ return tln_;
+ }
+ QVector3D topLeftFar() const {
+ return tlf_;
+ }
+ QVector3D bottomLeftNear() const {
+ return bln_;
+ }
+ QVector3D bottomLeftFar() const {
+ return blf_;
+ }
+ QVector3D topRightNear() const {
+ return trn_;
+ }
+ QVector3D topRightFar() const {
+ return trf_;
+ }
+ QVector3D bottomRightNear() const {
+ return brn_;
+ }
+ QVector3D bottomRightFar() const {
+ return brf_;
+ }
+
+ QPlane3D plane(Planes planes) const;
+
+private:
+ double hf_;
+ double wf_;
+ QVector3D cf_;
+ QVector3D tlf_;
+ QVector3D trf_;
+ QVector3D blf_;
+ QVector3D brf_;
+
+ double hn_;
+ double wn_;
+ QVector3D cn_;
+ QVector3D tln_;
+ QVector3D trn_;
+ QVector3D bln_;
+ QVector3D brn_;
+
+ QHash<Planes, QPlane3D> planeHash_;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(Frustum::Planes)
+
+#endif // TILEFRUSTUM_H
diff --git a/src/location/mapsgl/map.cpp b/src/location/mapsgl/map.cpp
new file mode 100644
index 00000000..a61bcead
--- /dev/null
+++ b/src/location/mapsgl/map.cpp
@@ -0,0 +1,402 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "map.h"
+#include "map_p.h"
+#include "map2d_p.h"
+#include "map3d_p.h"
+
+#include "tilecache.h"
+#include "mapsphere_p.h"
+#include "projection_p.h"
+#include "tile.h"
+#include "mapitem.h"
+
+#include <QMutex>
+#include <QMap>
+
+#include <qglscenenode.h>
+#include <qgeometrydata.h>
+#include <qglbuilder.h>
+#include <Qt3D/qglpainter.h>
+#include <Qt3D/qglcamera.h>
+
+#include <cmath>
+
+Map::Map(TileCache *cache, QObject *parent)
+ : QObject(parent),
+ autoUpdate_(true)
+{
+// d_ptr = new Map3DPrivate(this, cache, 20000.0);
+
+ // edge is 2^max zoom * 4
+ d_ptr = new Map2DPrivate(this, cache, 20, 256);
+}
+
+Map::~Map()
+{
+ delete d_ptr;
+}
+
+void Map::setMappingManager(QGeoMappingManager *manager)
+{
+ d_ptr->setMappingManager(manager);
+}
+
+void Map::paintGL(QGLPainter *painter)
+{
+ d_ptr->paintGL(painter);
+}
+
+QGLCamera* Map::glCamera() const
+{
+ return d_ptr->glCamera();
+}
+
+void Map::resize(int width, int height)
+{
+ d_ptr->resize(width, height);
+}
+
+void Map::setAutoUpdate(bool autoUpdate)
+{
+ autoUpdate_ = autoUpdate;
+}
+
+bool Map::autoUpdate() const
+{
+ return autoUpdate_;
+}
+
+void Map::clearCache()
+{
+// sphere_->clearCache();
+}
+
+void Map::setCameraData(const CameraData &cameraData)
+{
+ if (cameraData == d_ptr->cameraData())
+ return;
+
+ d_ptr->setCameraData(cameraData);
+
+ if (autoUpdate_)
+ update();
+
+ emit cameraDataChanged(d_ptr->cameraData());
+}
+
+CameraData Map::cameraData() const
+{
+ return d_ptr->cameraData();
+}
+
+void Map::update()
+{
+ d_ptr->update();
+ emit updateRequired();
+}
+
+int Map::numMapItems() const
+{
+ return d_ptr->numMapItems();
+}
+
+MapItem* Map::mapItem(int index) const
+{
+ return d_ptr->mapItem(index);
+}
+
+QList<MapItem*> Map::mapItems() const
+{
+ return d_ptr->mapItems();
+}
+
+void Map::addMapItem(MapItem *item)
+{
+ d_ptr->addMapItem(item);
+}
+
+void Map::removeMapItem(MapItem *item)
+{
+ d_ptr->removeMapItem(item);
+}
+
+void Map::clearMapItems()
+{
+ d_ptr->clearMapItems();
+}
+
+QGeoCoordinate Map::screenPositionToCoordinate(const QPointF &pos) const
+{
+ return d_ptr->screenPositionToCoordinate(pos);
+}
+
+QPointF Map::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const
+{
+ return d_ptr->coordinateToScreenPosition(coordinate);
+}
+
+//------------------------------------------------------------//
+
+MapPrivate::MapPrivate(Map *parent, TileCache *cache)
+ : manager_(0)
+{
+ sphere_ = new MapSphere(parent, this, cache);
+ mapSceneNode_ = new QGLSceneNode();
+ mapSceneNode_->addNode(sphere_->sphereSceneNode());
+ objectSceneNode_ = new QGLSceneNode();
+ glCamera_ = new QGLCamera();
+}
+
+MapPrivate::~MapPrivate()
+{
+ delete sphere_;
+ delete mapSceneNode_;
+ delete objectSceneNode_;
+ delete glCamera_;
+ // TODO map items are not deallocated!
+ // However: how to ensure this is done in rendering thread?
+}
+
+void MapPrivate::setMappingManager(QGeoMappingManager *manager)
+{
+ manager_ = manager;
+ sphere_->setMappingManager(manager_);
+}
+
+QGeoMappingManager* MapPrivate::manager() const
+{
+ return manager_;
+}
+
+QGLCamera* MapPrivate::glCamera() const
+{
+ return glCamera_;
+}
+
+void MapPrivate::setProjection(const QSharedPointer<Projection> &projection)
+{
+ projection_ = projection;
+}
+
+QSharedPointer<Projection> MapPrivate::projection() const
+{
+ return projection_;
+}
+
+void MapPrivate::setCameraData(const CameraData &cameraData)
+{
+ cameraData_ = cameraData;
+ cameraData_.setAspectRatio(aspectRatio_);
+ cameraData_.setProjection(projection_.toWeakRef());
+ updateGlCamera(glCamera_);
+ updateFrustum(frustum_);
+ visibleTiles_ = updateVisibleTiles();
+ sphere_->update(visibleTiles_);
+}
+
+CameraData MapPrivate::cameraData() const
+{
+ return cameraData_;
+}
+
+void MapPrivate::update()
+{
+ sphere_->update(visibleTiles_);
+}
+
+void MapPrivate::resize(int width, int height)
+{
+ width_ = width;
+ height_ = height;
+ aspectRatio_ = 1.0 * width_ / height_;
+ setCameraData(cameraData_);
+}
+
+Frustum MapPrivate::frustum() const
+{
+ return frustum_;
+}
+
+void MapPrivate::paintGL(QGLPainter *painter)
+{
+ if (!sphere_->updateMutex.tryLock()) {
+ qDebug() << "map will miss a frame, no mutex acquired!------";
+ return;
+ }
+
+ sphere_->GLContextAvailable();
+ GLContextAvailable();
+
+ mapSceneNode_->draw(painter);
+
+ glDisable(GL_DEPTH_TEST);
+ objectSceneNode_->draw(painter);
+ glEnable(GL_DEPTH_TEST);
+
+ sphere_->updateMutex.unlock();
+}
+
+int MapPrivate::numMapItems() const
+{
+ return mapItems_.length();
+}
+
+MapItem* MapPrivate::mapItem(int index) const
+{
+ return mapItems_.at(index);
+}
+
+QList<MapItem*> MapPrivate::mapItems() const
+{
+ return mapItems_;
+}
+
+void MapPrivate::addMapItem(MapItem *item)
+{
+ // TODO bit hard block - on declarative side the coordinate may well be invalid time to time
+ if (!item->coordinate().isValid())
+ return;
+ sphere_->updateMutex.lock();
+ updateMapItemSceneNode(item);
+ if (item->sceneNode()) {
+ objectSceneNode_->addNode(item->sceneNode());
+ }
+ mapItems_.append(item);
+ sphere_->updateMutex.unlock();
+}
+
+// Function is guaranteed to be only called when executing in
+// rendering thread with valid GL context. Furthermore it is
+// safe to update any geometry/structures - mutex is locked.
+void MapPrivate::GLContextAvailable()
+{
+ // remove obsolete items
+ QSet<MapItem *>::const_iterator i = obsoleteItems_.constBegin();
+ while (i != obsoleteItems_.constEnd()) {
+ QGLSceneNode *node = (*i)->sceneNode();
+ if (node) {
+ //sceneNode_->removeNode(node); must be removed in GUI thread, not in rendering thread
+ delete node;
+ }
+ mapItems_.removeAll(*i);
+ ++i;
+ }
+ if (!obsoleteItems_.isEmpty())
+ obsoleteItems_.clear();
+}
+
+// Must not be called from rendering thread
+void MapPrivate::removeMapItem(MapItem *item)
+{
+ sphere_->updateMutex.lock();
+ // nodes need to be removed from the scene node tree in GUI thread,
+ // but the deletion needs to occur in rendering thread
+ if (item->sceneNode())
+ objectSceneNode_->removeNode(item->sceneNode());
+ if (!obsoleteItems_.contains(item))
+ obsoleteItems_.insert(item);
+ sphere_->updateMutex.unlock();
+}
+
+void MapPrivate::clearMapItems()
+{
+ sphere_->updateMutex.lock();
+ for (int i = 0; i < mapItems_.size(); ++i) {
+ if (!obsoleteItems_.contains(mapItems_.at(i))) {
+ if (mapItems_.at(i)->sceneNode())
+ objectSceneNode_->removeNode(mapItems_.at(i)->sceneNode());
+ obsoleteItems_.insert(mapItems_.at(i));
+ }
+ }
+ sphere_->updateMutex.unlock();
+}
+
+QVector2D MapPrivate::pointToTile(const QVector3D &point, int zoom, bool roundUp) const
+{
+ QVector2D p = projection_->pointToMercator(point);
+
+ int z = 1 << zoom;
+ int x = 0;
+ int y = 0;
+
+ if (p.y() == 1.0)
+ y = z - 1;
+ else
+ y = static_cast<int>(z * p.y()) % z;
+
+ if ((qAbs(p.x()) < 1e-6) || (qAbs(p.x() - 1) < 1e-6))
+ if (roundUp)
+ x = z - 1;
+ else
+ x = 0;
+ else
+ x = static_cast<int>(z * p.x()) % z;
+
+ return QVector2D(x, y);
+}
+
+QVector3D MapPrivate::tileXIntersectToPoint(int zoomLevel, int x) const
+{
+ int zpow2 = 1 << zoomLevel;
+ return projection_->mercatorToPoint(QVector2D(x * 1.0 / zpow2, zpow2 / 2.0));
+}
+
+QVector3D MapPrivate::tileYIntersectToPoint(int zoomLevel, int y) const
+{
+ int zpow2 = 1 << zoomLevel;
+ return projection_->mercatorToPoint(QVector2D(zpow2 / 2.0, y * 1.0 / zpow2));
+}
+
+int MapPrivate::width() const
+{
+ return width_;
+}
+
+int MapPrivate::height() const
+{
+ return height_;
+}
+
+double MapPrivate::aspectRatio() const
+{
+ return aspectRatio_;
+}
diff --git a/src/location/maps/qgeomapobjectinfo.h b/src/location/mapsgl/map.h
index f9fafa7c..65ad9751 100644
--- a/src/location/maps/qgeomapobjectinfo.h
+++ b/src/location/mapsgl/map.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,60 +38,76 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOMAPOBJECTINFO_H
-#define QGEOMAPOBJECTINFO_H
-
-#include "qmobilityglobal.h"
-#include "qgeomapobject.h"
+#ifndef MAP_H
+#define MAP_H
#include <QObject>
-#include <QSizeF>
+
+#include "cameradata.h"
QT_BEGIN_NAMESPACE
class QGeoCoordinate;
-class QGeoBoundingBox;
-class QGeoMapData;
-class QGeoMapObject;
-class QGeoMapObjectInfoPrivate;
+class QGeoMappingManager;
+
+class TileCache;
+class MapPrivate;
+class MapItem;
-class Q_LOCATION_EXPORT QGeoMapObjectInfo : public QObject
+class QGLCamera;
+class QGLPainter;
+
+class QPointF;
+
+class Q_LOCATION_EXPORT Map : public QObject
{
Q_OBJECT
+
+ Q_PROPERTY(CameraData camera READ cameraData WRITE setCameraData NOTIFY cameraDataChanged)
+
public:
- QGeoMapObjectInfo(QGeoMapData *mapData, QGeoMapObject *mapObject);
- virtual ~QGeoMapObjectInfo();
+ Map(TileCache *cache, QObject *parent = 0);
+ virtual ~Map();
- virtual void init();
+ void setMappingManager(QGeoMappingManager *manager);
- virtual QGeoBoundingBox boundingBox() const;
- virtual bool contains(const QGeoCoordinate &coordinate) const;
+ QGLCamera* glCamera() const;
+ void paintGL(QGLPainter *painter);
-public slots:
- virtual void windowSizeChanged(const QSizeF &windowSize);
- virtual void zoomLevelChanged(qreal zoomLevel);
- virtual void centerChanged(const QGeoCoordinate &coordinate);
+ void resize(int width, int height);
- virtual void zValueChanged(int zValue);
- virtual void visibleChanged(bool visible);
- virtual void selectedChanged(bool selected);
+ void setAutoUpdate(bool autoUpdate);
+ bool autoUpdate() const;
- virtual void originChanged(const QGeoCoordinate &origin);
- virtual void unitsChanged(QGeoMapObject::CoordinateUnit units);
- virtual void transformTypeChanged(QGeoMapObject::TransformType transformType);
+ void setCameraData(const CameraData &cameraData);
+ CameraData cameraData() const;
-protected:
- QGeoMapData* mapData();
- QGeoMapObject* mapObject();
- QGeoMapObject* mapObject() const;
+ int numMapItems() const;
+ MapItem* mapItem(int index) const;
+ QList<MapItem*> mapItems() const;
+ void addMapItem(MapItem *item);
+ void removeMapItem(MapItem *item);
+ void clearMapItems();
+
+ QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const;
+ QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const;
+
+public slots:
+ void clearCache();
+ void update();
+
+signals:
+ void updateRequired();
+ void updatesFinished();
+ void cameraDataChanged(const CameraData &cameraData);
private:
- QGeoMapObjectInfoPrivate *d_ptr;
- Q_DISABLE_COPY(QGeoMapObjectInfo)
+ MapPrivate *d_ptr;
+
+ bool autoUpdate_;
};
QT_END_NAMESPACE
-#endif
+#endif // MAP_H
diff --git a/src/location/mapsgl/map2d/map2d.pri b/src/location/mapsgl/map2d/map2d.pri
new file mode 100644
index 00000000..0adaaeb4
--- /dev/null
+++ b/src/location/mapsgl/map2d/map2d.pri
@@ -0,0 +1,11 @@
+
+INCLUDEPATH += mapsgl/map2d
+
+SOURCES += \
+ mapsgl/map2d/projection2d_p.cpp \
+ mapsgl/map2d/map2d_p.cpp
+
+PRIVATE_HEADERS += \
+ mapsgl/map2d/projection2d_p.h \
+ mapsgl/map2d/map2d_p.h
+
diff --git a/src/location/mapsgl/map2d/map2d_p.cpp b/src/location/mapsgl/map2d/map2d_p.cpp
new file mode 100644
index 00000000..98e7fe0d
--- /dev/null
+++ b/src/location/mapsgl/map2d/map2d_p.cpp
@@ -0,0 +1,660 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "map2d_p.h"
+#include "projection2d_p.h"
+
+#include "tile.h"
+#include "mapitem.h"
+
+#include <Qt3D/qgeometrydata.h>
+#include <Qt3D/qglbuilder.h>
+#include <Qt3D/qglcamera.h>
+
+#include <cmath>
+
+TileMap::TileMap(int minY, int maxY)
+ : size(0),
+ minY(minY),
+ maxY(maxY),
+ minX(maxY - minY + 1, -1),
+ maxX(maxY - minY + 1, -1)
+{}
+
+void TileMap::adjust(int tileX, int tileY)
+{
+ int index = tileY - minY;
+ int min = minX.at(index);
+ int max = maxX.at(index);
+
+ if (min == -1) {
+ min = tileX;
+ max = tileX;
+ minX[index] = min;
+ maxX[index] = max;
+ size += 1;
+ } else {
+ int oldSize = (max - min);
+ int min2 = qMin(min, tileX);
+ if (min2 != min)
+ minX[index] = min2;
+ int max2 = qMax(max, tileX);
+ if (max2 != max)
+ maxX[index] = max2;
+ int newSize = (max2 - min2);
+ size += (newSize - oldSize);
+ }
+}
+
+IntersectGenerator::IntersectGenerator(const MapPrivate *mp,
+ double p1,
+ double p2,
+ int t1,
+ int t2,
+ IntersectGenerator::Axis axis,
+ int zoomLevel)
+ : mp_(mp),
+ axis_(axis),
+ zoomLevel_(zoomLevel)
+{
+ if (t1 == t2) {
+ hasNext_ = false;
+ return;
+ }
+
+ bool inc = true;
+ if (axis_ == IntersectGenerator::XAxis) {
+ inc = (0 < (p2 - p1));
+ } else {
+ inc = (0 < (p1 - p2));
+ }
+
+ step_ = 1;
+ adjust_ = 0;
+ if (!inc) {
+ step_ = -1;
+ adjust_ = -1;
+ }
+
+ first_ = p1;
+ denom_ = p2 - p1;
+
+ current_ = t1;
+ end_ = t2 + step_;
+
+ hasNext_ = true;
+
+ generateValue();
+}
+
+bool IntersectGenerator::hasNext() const
+{
+ return hasNext_;
+}
+
+QPair<double, int> IntersectGenerator::value() const
+{
+ return value_;
+}
+
+void IntersectGenerator::next()
+{
+ generateValue();
+}
+
+void IntersectGenerator::generateValue()
+{
+ while (current_ != end_) {
+ double alpha = 0.0;
+
+ if (axis_ == IntersectGenerator::XAxis) {
+ double x = mp_->tileXIntersectToPoint(zoomLevel_, current_).x();
+ alpha = (x - first_) / denom_;
+ } else {
+ double y = mp_->tileYIntersectToPoint(zoomLevel_, current_).y();
+ alpha = (y - first_) / denom_;
+ }
+
+ if ((0.0 < alpha) && (alpha < 1.0)) {
+ value_ = QPair<double,int>(alpha, current_ + adjust_);
+ current_ += step_;
+ return;
+ }
+ current_ += step_;
+ }
+ hasNext_ = false;
+}
+
+Map2DPrivate::Map2DPrivate(Map *parent, TileCache *cache, int maxZoom, int tileSize)
+ : MapPrivate(parent, cache),
+ maxZoom_(maxZoom),
+ tileSize_(tileSize),
+ baseHeight_(100.0)
+{
+ sideLength_ = pow(2.0, 1.0 * maxZoom_);
+
+ setProjection(QSharedPointer<Projection>(new Projection2D(baseHeight_, sideLength_)));
+ screenPoly_.resize(4);
+ screenPoly_[0] = QPointF(0.0, 0.0);
+ screenPoly_[1] = QPointF(0.0, sideLength_);
+ screenPoly_[2] = QPointF(sideLength_, sideLength_);
+ screenPoly_[3] = QPointF(sideLength_, 0.0);
+
+ screenPolyLeft_.resize(4);
+ screenPolyLeft_[0] = QPointF(0.0, 0.0);
+ screenPolyLeft_[1] = QPointF(0.0, sideLength_);
+ screenPolyLeft_[2] = QPointF(sideLength_ / 2.0, sideLength_);
+ screenPolyLeft_[3] = QPointF(sideLength_ / 2.0, 0.0);
+
+ screenPolyRight_.resize(4);
+ screenPolyRight_[0] = QPointF(sideLength_ / 2.0, 0.0);
+ screenPolyRight_[1] = QPointF(sideLength_ / 2.0, sideLength_);
+ screenPolyRight_[2] = QPointF(sideLength_, sideLength_);
+ screenPolyRight_[3] = QPointF(sideLength_, 0.0);
+}
+
+Map2DPrivate::~Map2DPrivate() {}
+
+QGLSceneNode* Map2DPrivate::createTileNode(const Tile &tile)
+{
+ int geomZoom = tile.tileSpec().zoom();
+ int tileZoom = geomZoom;
+ int x = tile.tileSpec().x();
+ int y = tile.tileSpec().y();
+
+ QGLBuilder builder;
+
+ int z = 1 << geomZoom;
+
+ bool rightEdge = false;
+
+ double x1 = x * 1.0 / z;
+ double x2 = ((x + 1) % z) * 1.0 / z;
+ if (x2 == 0.0) {
+ x2 = 1.0;
+ rightEdge = true;
+ }
+ double y1 = y * 1.0 / z;
+ double y2 = (y + 1) * 1.0 / z;
+
+ QSharedPointer<Projection> p = projection();
+
+ QVector3D tl = p->mercatorToPoint(QVector2D(x1, y1));
+ QVector3D tr = p->mercatorToPoint(QVector2D(x2, y1));
+ QVector3D bl = p->mercatorToPoint(QVector2D(x1, y2));
+ QVector3D br = p->mercatorToPoint(QVector2D(x2, y2));
+
+ if (rightEdge) {
+ tr.setX(sideLength_);
+ br.setX(sideLength_);
+ }
+
+ int dz = 1 << (geomZoom - tileZoom);
+
+ int tx1 = x % dz;
+ int ty1 = y % dz;
+
+ ty1 = dz - ty1;
+
+ int tx2 = (x + 1) % dz;
+ if (tx2 == 0)
+ tx2 = dz;
+
+ int ty2 = (y + 1) % dz;
+ if (ty2 == 0)
+ ty2 = dz;
+
+ ty2 = dz - ty2;
+
+ QGeometryData g;
+
+ QVector3D n = QVector3D(0, 0, 1);
+
+ g.appendVertex(tl);
+ g.appendNormal(n);
+ g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty1 * 1.0 / dz));
+
+ g.appendVertex(bl);
+ g.appendNormal(n);
+ g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty2 * 1.0 / dz));
+
+ g.appendVertex(br);
+ g.appendNormal(n);
+ g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty2 * 1.0 / dz));
+
+ g.appendVertex(tr);
+ g.appendNormal(n);
+ g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty1 * 1.0 / dz));
+
+ builder.addQuads(g);
+
+ QGLSceneNode *node = builder.finalizedSceneNode();
+
+ QGLMaterial *mat = new QGLMaterial(node);
+// tile.texture()->bind();
+ mat->setTexture(tile.texture());
+ node->setEffect(QGL::LitDecalTexture2D);
+
+ node->setMaterial(mat);
+
+ return node;
+}
+
+void Map2DPrivate::updateGlCamera(QGLCamera* glCamera)
+{
+ bool old = glCamera->blockSignals(true);
+
+ CameraData camera = cameraData();
+
+ double f = 1.0 * qMin(width(), height()) / tileSize_;
+
+ double altitude = sideLength_ * camera.distance() * f / 2.0;
+
+ QSharedPointer<Projection> p = projection();
+
+ QGeoCoordinate coord = camera.center();
+ coord.setAltitude(0.0);
+ QVector3D center = p->coordToPoint(coord);
+ coord.setAltitude(altitude);
+ QVector3D eye = p->coordToPoint(coord);
+
+ QVector3D view = eye - center;
+ QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ QVector3D up = QVector3D::normal(side, view);
+
+ QMatrix4x4 mBearing;
+ mBearing.rotate(-1.0 * camera.bearing(), view);
+ up = mBearing * up;
+
+ QVector3D side2 = QVector3D::normal(up, view);
+ QMatrix4x4 mTilt;
+ mTilt.rotate(camera.tilt(), side2);
+ eye = (mTilt * view) + center;
+
+ view = eye - center;
+ side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ up = QVector3D::normal(view, side2);
+
+ QMatrix4x4 mRoll;
+ mRoll.rotate(camera.roll(), view);
+ up = mRoll * up;
+
+ double nearPlane = 1.0;
+ double farPlane = 2.0 * altitude;
+
+ glCamera->setCenter(center);
+ glCamera->setEye(eye);
+ glCamera->setUpVector(up);
+ glCamera->setNearPlane(nearPlane);
+ glCamera->setFarPlane(farPlane);
+
+ glCamera->blockSignals(old);
+
+ // TODO fold into above code if this works for screen <-> coordinate conversions
+ viewSize_ = glCamera->viewSize();
+ eye_ = eye;
+ projectionMatrix_ = glCamera->projectionMatrix(aspectRatio()) * glCamera->modelViewMatrix();
+}
+
+void Map2DPrivate::updateFrustum(Frustum &frustum)
+{
+ frustum.update(glCamera(), cameraData().aspectRatio());
+}
+
+QList<TileSpec> Map2DPrivate::updateVisibleTiles()
+{
+ Frustum f = frustum();
+
+ QPolygonF poly(4);
+
+ QVector3D tln = f.topLeftNear();
+ QVector3D tlf = f.topLeftFar();
+ double tl = (tln.z() - baseHeight_) / (tln.z() - tlf.z());
+
+ poly[0] = ((1 - tl) * tln + tl * tlf).toPointF();
+
+ QVector3D bln = f.bottomLeftNear();
+ QVector3D blf = f.bottomLeftFar();
+ double bl = (bln.z() - baseHeight_) / (bln.z() - blf.z());
+
+ poly[1] = ((1 - bl) * bln + bl * blf).toPointF();
+
+ QVector3D brn = f.bottomRightNear();
+ QVector3D brf = f.bottomRightFar();
+ double br = (brn.z() - baseHeight_) / (brn.z() - brf.z());
+
+ poly[2] = ((1 - br) * brn + br * brf).toPointF();
+
+ QVector3D trn = f.topRightNear();
+ QVector3D trf = f.topRightFar();
+ double tr = (trn.z() - baseHeight_) / (trn.z() - trf.z());
+
+ poly[3] = ((1 - tr) * trn + tr * trf).toPointF();
+
+ bool widePoly = false;
+ bool clip = false;
+ for (int i = 0; i < poly.size(); ++i) {
+ QPointF p = poly.at(i);
+ if (p.x() >= sideLength_) {
+ widePoly = true;
+ break;
+ }
+ if ((p.x() < 0)
+ || (sideLength_ < p.x())
+ || (p.y() < 0)
+ || (sideLength_ < p.y())) {
+ clip = true;
+ }
+ }
+
+ if (!widePoly) {
+ if (!clip) {
+ QVector<QVector3D> points(poly.size());
+
+ for (int i = 0; i < poly.size(); ++i)
+ points[i] = QVector3D(poly.at(i));
+
+ return tilesFromPoints(points, false);
+ } else {
+ QPolygonF clipped = intersection(poly, screenPoly_);
+
+ QList<TileSpec> tiles;
+
+ if (!clipped.isEmpty()) {
+ QVector<QVector3D> points(clipped.size() - 1);
+
+ for (int i = 0; i < clipped.size() - 1; ++i)
+ points[i] = QVector3D(clipped.at(i));
+
+ return tilesFromPoints(points, false);
+ }
+
+ return tiles;
+ }
+
+ } else {
+ QPolygonF clippedLeft = intersection(poly, screenPolyLeft_);
+ QPolygonF clippedRight = intersection(poly, screenPolyRight_);
+
+ QList<TileSpec> tiles;
+
+ if (!clippedLeft.isEmpty()) {
+ QVector<QVector3D> pointsLeft(clippedLeft.size() - 1);
+
+ for (int i = 0; i < clippedLeft.size() - 1; ++i)
+ pointsLeft[i] = QVector3D(clippedLeft.at(i));
+
+ if (clippedRight.isEmpty())
+ return tilesFromPoints(pointsLeft, false);
+ else
+ tiles.append(tilesFromPoints(pointsLeft, false));
+ }
+
+ if (!clippedRight.isEmpty()) {
+ QVector<QVector3D> pointsRight(clippedRight.size() - 1);
+
+ for (int i = 0; i < clippedRight.size() - 1; ++i)
+ pointsRight[i] = QVector3D(clippedRight.at(i));
+
+ if (tiles.isEmpty())
+ return tilesFromPoints(pointsRight, true);
+ else
+ tiles.append(tilesFromPoints(pointsRight, true));
+ }
+
+ return tiles;
+ }
+}
+
+QPolygonF Map2DPrivate::intersection(const QPolygonF &p1, const QPolygonF &p2) const
+{
+ QVector<double> x(4);
+ QVector<double> y(4);
+
+ x[0] = p1.at(0).x();
+ x[1] = p1.at(2).x();
+ x[2] = p2.at(0).x();
+ x[3] = p2.at(2).x();
+
+ y[0] = p1.at(0).y();
+ y[1] = p1.at(2).y();
+ y[2] = p2.at(0).y();
+ y[3] = p2.at(2).y();
+
+ qSort(x);
+ qSort(y);
+
+ QPolygonF result(5);
+
+ result[0] = QPointF(x.at(1), y.at(1));
+ result[1] = QPointF(x.at(2), y.at(1));
+ result[2] = QPointF(x.at(2), y.at(2));
+ result[3] = QPointF(x.at(1), y.at(2));
+ result[4] = QPointF(x.at(1), y.at(1));
+
+ return result;
+}
+
+void Map2DPrivate::tilesFromLine(const QVector3D &p1,
+ const QVector3D &p2,
+ const QVector2D &t1,
+ const QVector2D &t2,
+ int zoomLevel,
+ TileMap &map) const
+{
+ IntersectGenerator xGen = IntersectGenerator(this, p1.x(), p2.x(), t1.x(), t2.x(),
+ IntersectGenerator::XAxis, zoomLevel);
+ IntersectGenerator yGen = IntersectGenerator(this, p1.y(), p2.y(), t1.y(), t2.y(),
+ IntersectGenerator::YAxis, zoomLevel);
+
+ int tileX = t1.x();
+ int tileY = t1.y();
+
+ map.adjust(tileX, tileY);
+
+ while (xGen.hasNext() && yGen.hasNext()) {
+ QPair<double, int> x = xGen.value();
+ QPair<double, int> y = yGen.value();
+ if (x.first < y.first) {
+ tileX = x.second;
+ map.adjust(tileX, tileY);
+ xGen.next();
+ } else if (x.first > y.first) {
+ tileY = y.second;
+ map.adjust(tileX, tileY);
+ yGen.next();
+ } else {
+ map.adjust(tileX, y.second);
+ map.adjust(x.second, tileY);
+ tileX = x.second;
+ tileY = y.second;
+ map.adjust(tileX, tileY);
+ xGen.next();
+ yGen.next();
+ }
+ }
+
+ while (xGen.hasNext()) {
+ tileX = xGen.value().second;
+ map.adjust(tileX, tileY);
+ xGen.next();
+ }
+
+ while (yGen.hasNext()) {
+ tileY = yGen.value().second;
+ map.adjust(tileX, tileY);
+ yGen.next();
+ }
+}
+
+QList<TileSpec> Map2DPrivate::tilesFromPoints(const QVector<QVector3D> &points, bool roundUp) const
+{
+ int numPoints = points.size();
+
+ if (numPoints == 0)
+ return QList<TileSpec>();
+
+ int zoomLevel = cameraData().zoomLevel();
+
+ int minY = -1;
+ int maxY = -1;
+
+ QVector<QVector2D> tiles(points.size());
+ for (int i = 0; i < numPoints; ++i) {
+ QVector2D t = pointToTile(points.at(i), zoomLevel, roundUp);
+ if (minY == -1) {
+ minY = t.y();
+ maxY = t.y();
+ } else {
+ minY = qMin(minY, static_cast<int>(t.y()));
+ maxY = qMax(maxY, static_cast<int>(t.y()));
+ }
+ tiles[i] = t;
+ }
+
+ TileMap map(minY, maxY);
+
+ for (int i1 = 0; i1 < numPoints; ++i1) {
+ int i2 = (i1 + 1) % numPoints;
+ tilesFromLine(points.at(i1), points.at(i2), tiles.at(i1), tiles.at(i2), zoomLevel, map);
+ }
+
+ QList<TileSpec> results;
+
+ results.reserve(map.size);
+
+ int size = map.minX.size();
+ for (int i = 0; i < size; ++i) {
+ int y = map.minY + i;
+ int minX = map.minX[i];
+ int maxX = map.maxX[i];
+ for (int x = minX; x <= maxX; ++x)
+ results << TileSpec(zoomLevel, x, y);
+ }
+
+ return results;
+}
+
+void Map2DPrivate::updateMapItemSceneNode(MapItem *item)
+{
+ double z = item->zoom();
+
+ if (z < 0) {
+ // TODO draw item on camera
+ return;
+ }
+
+ double scale = sideLength_ / (tileSize_ * pow(2, z));
+ QPointF anchor = item->anchor() * scale;
+ QSizeF size = item->size() * scale;
+ double alt = 0.0;
+ QVector3D point = projection()->coordToPoint(item->coordinate());
+ QVector3D tl = QVector3D(point.x() + anchor.x(), point.y() - anchor.y(), alt);
+ QVector3D tr = QVector3D(tl.x() + size.width(), tl.y(), alt);
+ QVector3D bl = QVector3D(tl.x(), tl.y() - size.height(), alt);
+ QVector3D br = QVector3D(tl.x() + size.width(), tl.y() - size.height(), alt);
+
+ QVector3D up(0.0, 0.0, 1.0);
+
+ QGeometryData g;
+
+ g.appendVertex(tl);
+ g.appendNormal(up);
+ g.appendTexCoord(QVector2D(0.0, 0.0));
+
+ g.appendVertex(bl);
+ g.appendNormal(up);
+ g.appendTexCoord(QVector2D(0.0, 1.0));
+
+ g.appendVertex(br);
+ g.appendNormal(up);
+ g.appendTexCoord(QVector2D(1.0, 1.0));
+
+ g.appendVertex(tr);
+ g.appendNormal(up);
+ g.appendTexCoord(QVector2D(1.0, 0.0));
+
+ QGLBuilder builder;
+ builder.addQuads(g);
+ QGLSceneNode *node = builder.finalizedSceneNode();
+
+ QGLMaterial *mat = new QGLMaterial(node);
+ QColor defaultItemColor(128, 128, 128, 128);
+ mat->setColor(defaultItemColor);
+ mat->setSpecularColor(defaultItemColor);
+ mat->setDiffuseColor(defaultItemColor);
+ mat->setShininess(1.0);
+ node->setEffect(QGL::LitMaterial);
+
+ node->setMaterial(mat);
+ item->setSceneNode(node);
+}
+
+QGeoCoordinate Map2DPrivate::screenPositionToCoordinate(const QPointF &pos) const
+{
+ double w = width() * 1.0 / viewSize_.width();
+ double h = height() * 1.0 / viewSize_.height();
+ double x = (pos.x() - w) / w;
+ double y = (pos.y() - h) / h;
+
+ x = (x + 1.0) / 2.0;
+ y = (y + 1.0) / 2.0;
+
+ QVector3D tl = frustum().topLeftFar();
+ QVector3D tr = frustum().topRightFar();
+ QVector3D bl = frustum().bottomLeftFar();
+
+ QVector3D n = (1 - x - y) * tl + x * tr + y * bl;
+
+ if (eye_.z() == n.z())
+ return QGeoCoordinate();
+
+ double alpha = eye_.z() / (eye_.z() - n.z());
+ QVector3D c = (1 - alpha) * eye_ + alpha * n;
+
+ return projection()->pointToCoord(c);
+}
+
+QPointF Map2DPrivate::coordinateToScreenPosition(const QGeoCoordinate &coordinate) const
+{
+ QVector3D c = projection()->coordToPoint(coordinate);
+ QVector3D d = projectionMatrix_.map(c);
+ return QPointF((d.x() + 1.0) * width() / 2.0, (-d.y() + 1.0) * height() / 2.0);
+}
diff --git a/src/location/mapsgl/map2d/map2d_p.h b/src/location/mapsgl/map2d/map2d_p.h
new file mode 100644
index 00000000..bd790e7a
--- /dev/null
+++ b/src/location/mapsgl/map2d/map2d_p.h
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef MAP2D_P_H
+#define MAP2D_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "map_p.h"
+
+#include <QVector>
+#include <QPair>
+#include <QPolygonF>
+#include <QSizeF>
+#include <QVector3D>
+#include <QMatrix4x4>
+
+struct TileMap
+{
+ TileMap(int minY, int maxY);
+
+ int size;
+ int minY;
+ int maxY;
+ QVector<int> minX;
+ QVector<int> maxX;
+
+ void adjust(int tileX, int tileY);
+};
+
+class IntersectGenerator
+{
+public:
+ enum Axis {
+ XAxis,
+ YAxis
+ };
+ IntersectGenerator(const MapPrivate *mp,
+ double p1,
+ double p2,
+ int t1,
+ int t2,
+ Axis axis,
+ int zoomLevel);
+
+ bool hasNext() const;
+ QPair<double, int> value() const;
+ void next();
+
+private:
+ void generateValue();
+
+protected:
+ const MapPrivate *mp_;
+ Axis axis_;
+ int zoomLevel_;
+
+ bool hasNext_;
+ QPair<double, int> value_;
+
+ int current_;
+ int step_;
+ int end_;
+
+ int adjust_;
+ double first_;
+ double denom_;
+};
+
+class Map2DPrivate : public MapPrivate
+{
+public:
+ Map2DPrivate(Map *parent,
+ TileCache *cache,
+ int maxZoom,
+ int tileSize);
+ virtual ~Map2DPrivate();
+
+ virtual QGLSceneNode* createTileNode(const Tile &tile);
+
+ virtual void updateGlCamera(QGLCamera* glCamera);
+ virtual void updateFrustum(Frustum &frustum);
+ virtual QList<TileSpec> updateVisibleTiles();
+ virtual void updateMapItemSceneNode(MapItem *item);
+
+ virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const;
+ virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const;
+
+private:
+ void tilesFromLine(const QVector3D &p1,
+ const QVector3D &p2,
+ const QVector2D &t1,
+ const QVector2D &t2,
+ int zoomLevel,
+ TileMap &map) const;
+
+ QPolygonF intersection(const QPolygonF &p1, const QPolygonF &p2) const;
+
+ QList<TileSpec> tilesFromPoints(const QVector<QVector3D> &points, bool roundUp) const;
+
+ int maxZoom_;
+ int tileSize_;
+
+ double baseHeight_;
+ double sideLength_;
+ QPolygonF screenPoly_;
+ QPolygonF screenPolyLeft_;
+ QPolygonF screenPolyRight_;
+
+ QSizeF viewSize_;
+ QVector3D eye_;
+ QMatrix4x4 projectionMatrix_;
+};
+
+#endif // MAP2D_P_H
diff --git a/src/location/mapsgl/map2d/projection2d_p.cpp b/src/location/mapsgl/map2d/projection2d_p.cpp
new file mode 100644
index 00000000..98299a7e
--- /dev/null
+++ b/src/location/mapsgl/map2d/projection2d_p.cpp
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "projection2d_p.h"
+
+#include "qgeocoordinate.h"
+
+#include <QVector2D>
+#include <QVector3D>
+
+Projection2D::Projection2D(double baseHeight, double sideLength)
+ : baseHeight_(baseHeight), sideLength_(sideLength) {}
+
+Projection2D::~Projection2D() {}
+
+QVector3D Projection2D::coordToPoint(const QGeoCoordinate &coord) const
+{
+ QVector2D m = coordToMercator(coord);
+ return QVector3D(m.x() * sideLength_, (1.0 - m.y()) * sideLength_, coord.altitude() + baseHeight_);
+}
+
+QGeoCoordinate Projection2D::pointToCoord(const QVector3D &point) const
+{
+ QVector2D m = QVector2D(point.x() / sideLength_, 1.0 - point.y() / sideLength_);
+ QGeoCoordinate coord = mercatorToCoord(m);
+ coord.setAltitude(point.z() - baseHeight_);
+ return coord;
+}
+
+QVector3D Projection2D::mercatorToPoint(const QVector2D &mercator) const
+{
+ return QVector3D(mercator.x() * sideLength_, (1.0 - mercator.y()) * sideLength_, baseHeight_);
+}
+
+QVector2D Projection2D::pointToMercator(const QVector3D &point) const
+{
+ return QVector2D(point.x() / sideLength_, 1.0 - (point.y() / sideLength_));
+}
+
+QGeoCoordinate Projection2D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress)
+{
+ if (start == end) {
+ if (progress < 0.5) {
+ return start;
+ } else {
+ return end;
+ }
+ }
+
+ QGeoCoordinate s2 = start;
+ s2.setAltitude(0.0);
+ QGeoCoordinate e2 = end;
+ e2.setAltitude(0.0);
+ QVector3D s = coordToPoint(s2);
+ QVector3D e = coordToPoint(e2);
+
+ double x = s.x();
+
+ if (sideLength_ / 2.0 < qAbs(e.x() - s.x())) {
+ // handle dateline crossing
+ } else {
+ x = (1.0 - progress) * s.x() + progress * e.x();
+ }
+
+ double y = (1.0 - progress) * s.y() + progress * e.y();
+
+ QGeoCoordinate result = pointToCoord(QVector3D(x, y, 0.0));
+ result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude());
+ return result;
+
+ return start;
+}
diff --git a/src/location/maps/tiled/qgeotiledmappingmanagerengine_p.h b/src/location/mapsgl/map2d/projection2d_p.h
index fc0f89b3..c311e204 100644
--- a/src/location/maps/tiled/qgeotiledmappingmanagerengine_p.h
+++ b/src/location/mapsgl/map2d/projection2d_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPPINGMANAGERENGINE_P_H
-#define QGEOTILEDMAPPINGMANAGERENGINE_P_H
+#ifndef PROJECTION2D_P_H
+#define PROJECTION2D_P_H
//
// W A R N I N G
@@ -53,30 +52,29 @@
// We mean it.
//
-#include "qgeomappingmanagerengine_p.h"
-#include "qgeotiledmapreply.h"
-
-#include <QSize>
+#include "projection_p.h"
QT_BEGIN_NAMESPACE
-class QGeoTiledMappingManagerEngine;
-class QGeoTiledMapRequestHandler;
-class QGeoTiledMapData;
-class QGeoTiledMapRequest;
-
-class QGeoTiledMappingManagerEnginePrivate : public QGeoMappingManagerEnginePrivate
+class Q_AUTOTEST_EXPORT Projection2D : public Projection
{
public:
- QGeoTiledMappingManagerEnginePrivate();
- ~QGeoTiledMappingManagerEnginePrivate();
+ Projection2D(double baseHeight, double sideLength);
+ virtual ~Projection2D();
+
+ virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const;
+ virtual QGeoCoordinate pointToCoord(const QVector3D &point) const;
+
+ virtual QVector3D mercatorToPoint(const QVector2D &mercator) const;
+ virtual QVector2D pointToMercator(const QVector3D &point) const;
- QSize tileSize;
+ virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress);
private:
- Q_DISABLE_COPY(QGeoTiledMappingManagerEnginePrivate)
+ double baseHeight_;
+ double sideLength_;
};
QT_END_NAMESPACE
-#endif
+#endif // PROJECTION2D_P_H
diff --git a/src/location/mapsgl/map3d/map3d.pri b/src/location/mapsgl/map3d/map3d.pri
new file mode 100644
index 00000000..dd53928e
--- /dev/null
+++ b/src/location/mapsgl/map3d/map3d.pri
@@ -0,0 +1,26 @@
+
+INCLUDEPATH += mapsgl/map3d
+
+SOURCES += \
+ mapsgl/map3d/projection3d_p.cpp \
+ mapsgl/map3d/map3d_p.cpp \
+ mapsgl/map3d/sphere.cpp \
+ mapsgl/map3d/spheregeometry.cpp \
+ mapsgl/map3d/viewport.cpp \
+ mapsgl/map3d/viewportcamera.cpp \
+ mapsgl/map3d/viewporttiles.cpp \
+ mapsgl/map3d/viewporttilesold.cpp \
+ mapsgl/map3d/viewporttilesnew.cpp
+
+PRIVATE_HEADERS += \
+ mapsgl/map3d/projection3d_p.h \
+ mapsgl/map3d/map3d_p.h \
+ mapsgl/map3d/sphere_p.h \
+ mapsgl/map3d/spheregeometry_p.h \
+ mapsgl/map3d/viewport_p.h \
+ mapsgl/map3d/viewportcamera_p.h \
+ mapsgl/map3d/viewporttiles_p.h \
+ mapsgl/map3d/viewporttiles_p_p.h \
+ mapsgl/map3d/viewporttilesold_p.h \
+ mapsgl/map3d/viewporttilesnew_p.h
+
diff --git a/src/location/mapsgl/map3d/map3d_p.cpp b/src/location/mapsgl/map3d/map3d_p.cpp
new file mode 100644
index 00000000..404b94ed
--- /dev/null
+++ b/src/location/mapsgl/map3d/map3d_p.cpp
@@ -0,0 +1,221 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "map3d_p.h"
+#include "projection3d_p.h"
+
+#include "tile.h"
+
+#include <qgeometrydata.h>
+#include <qglbuilder.h>
+#include <Qt3D/qglcamera.h>
+
+#include <cmath>
+
+Map3DPrivate::Map3DPrivate(Map *parent, TileCache *cache, double radius)
+ : MapPrivate(parent, cache),
+ minZoom_(6),
+ radius_(radius)
+{
+ Projection3D* p = new Projection3D(radius_);
+ setProjection(QSharedPointer<Projection>(p));
+ viewport_.setProjection(p);
+}
+
+Map3DPrivate::~Map3DPrivate()
+{
+}
+
+QGeometryData Map3DPrivate::generateTileGeometryData(int x, int y, int tileZoom, int geomZoom) const
+{
+ int z = 1 << geomZoom;
+
+ double x1 = x * 1.0 / z;
+ double x2 = ((x + 1) % z) * 1.0 / z;
+ if (x2 == 0.0)
+ x2 = 1.0;
+ double y1 = y * 1.0 / z;
+ double y2 = (y + 1) * 1.0 / z;
+
+ QSharedPointer<Projection> p = projection();
+
+ QVector3D tl = p->mercatorToPoint(QVector2D(x1, y1));
+ QVector3D tr = p->mercatorToPoint(QVector2D(x2, y1));
+ QVector3D bl = p->mercatorToPoint(QVector2D(x1, y2));
+ QVector3D br = p->mercatorToPoint(QVector2D(x2, y2));
+
+ int dz = 1 << (geomZoom - tileZoom);
+
+ int tx1 = x % dz;
+ int ty1 = y % dz;
+
+ ty1 = dz - ty1;
+
+ int tx2 = (x + 1) % dz;
+ if (tx2 == 0)
+ tx2 = dz;
+
+ int ty2 = (y + 1) % dz;
+ if (ty2 == 0)
+ ty2 = dz;
+
+ ty2 = dz - ty2;
+
+ QGeometryData g;
+
+ g.appendVertex(tl);
+ g.appendNormal(tl / radius_);
+ g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty1 * 1.0 / dz));
+
+ g.appendVertex(bl);
+ g.appendNormal(bl / radius_);
+ g.appendTexCoord(QVector2D(tx1 * 1.0 / dz, ty2 * 1.0 / dz));
+
+ g.appendVertex(br);
+ g.appendNormal(br / radius_);
+ g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty2 * 1.0 / dz));
+
+ g.appendVertex(tr);
+ g.appendNormal(tr / radius_);
+ g.appendTexCoord(QVector2D(tx2 * 1.0 / dz, ty1 * 1.0 / dz));
+
+ return g;
+}
+
+QGLSceneNode* Map3DPrivate::createTileNode(const Tile &tile)
+{
+ int tileZoom = tile.tileSpec().zoom();
+ int geomZoom = qMax(minZoom_, tileZoom);
+
+ int dz = 1 << (geomZoom - tileZoom);
+
+ int x1 = tile.tileSpec().x() * dz;
+ int y1 = tile.tileSpec().y() * dz;
+
+ QGLBuilder builder;
+
+ for (int x = 0; x < dz; ++x) {
+ for (int y = 0; y < dz; ++y) {
+ builder.addQuads(generateTileGeometryData(x1 + x, y1 + y, tileZoom, geomZoom));
+ }
+ }
+
+ QGLSceneNode *node = builder.finalizedSceneNode();
+
+ QGLMaterial *mat = new QGLMaterial(node);
+ // tile.texture()->bind();
+ mat->setTexture(tile.texture());
+ node->setEffect(QGL::LitDecalTexture2D);
+
+ node->setMaterial(mat);
+
+ return node;
+}
+
+void Map3DPrivate::updateGlCamera(QGLCamera* glCamera)
+{
+ CameraData camera = cameraData();
+
+ double altitude = radius_ * camera.distance();
+
+ QSharedPointer<Projection> p = projection();
+
+ QGeoCoordinate coord = camera.center();
+ coord.setAltitude(0.0);
+ QVector3D center = p->coordToPoint(coord);
+ coord.setAltitude(altitude);
+ QVector3D eye = p->coordToPoint(coord);
+
+ QVector3D view = eye - center;
+ QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ QVector3D up = QVector3D::normal(side, view);
+
+ QMatrix4x4 mBearing;
+ mBearing.rotate(-1.0 * camera.bearing(), view);
+ up = mBearing * up;
+
+ QVector3D side2 = QVector3D::normal(up, view);
+ QMatrix4x4 mTilt;
+ mTilt.rotate(camera.tilt(), side2);
+ eye = (mTilt * view) + center;
+
+ view = eye - center;
+ side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ up = QVector3D::normal(view, side2);
+
+ QMatrix4x4 mRoll;
+ mRoll.rotate(camera.roll(), view);
+ up = mRoll * up;
+
+ double nearPlane = 1.0;
+ double farPlane = 2.0 * altitude;
+
+ glCamera->setCenter(center);
+ glCamera->setEye(eye);
+ glCamera->setUpVector(up);
+ glCamera->setNearPlane(nearPlane);
+ glCamera->setFarPlane(farPlane);
+}
+
+void Map3DPrivate::updateFrustum(Frustum &frustum)
+{
+ frustum.update(glCamera(), cameraData().aspectRatio());
+ viewport_.setCameraData(cameraData());
+}
+
+QList<TileSpec> Map3DPrivate::updateVisibleTiles()
+{
+ return viewport_.visibleTiles();
+}
+
+void Map3DPrivate::updateMapItemSceneNode(MapItem */*item*/)
+{
+}
+
+QGeoCoordinate Map3DPrivate::screenPositionToCoordinate(const QPointF &/*pos*/) const
+{
+ return QGeoCoordinate();
+}
+
+QPointF Map3DPrivate::coordinateToScreenPosition(const QGeoCoordinate &/*coordinate*/) const
+{
+ return QPointF();
+}
diff --git a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.h b/src/location/mapsgl/map3d/map3d_p.h
index 23e33b76..c5d875f6 100644
--- a/src/location/maps/tiled/qgeotiledmappolylineobjectinfo_p.h
+++ b/src/location/mapsgl/map3d/map3d_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H
-#define QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H
+#ifndef MAP3D_P_H
+#define MAP3D_P_H
//
// W A R N I N G
@@ -53,36 +52,37 @@
// We mean it.
//
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include <QPen>
-#include <QPolygonF>
+#include "map_p.h"
+#include "viewport_p.h"
QT_BEGIN_NAMESPACE
-class QGraphicsPathItem;
-class QPointF;
-
-class QGeoMapPolylineObject;
+class QGeometryData;
-class QGeoTiledMapPolylineObjectInfo : public QGeoTiledMapObjectInfo
+class Map3DPrivate : public MapPrivate
{
- Q_OBJECT
public:
- QGeoTiledMapPolylineObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapPolylineObjectInfo();
+ Map3DPrivate(Map *parent, TileCache *cache, double radius);
+ virtual ~Map3DPrivate();
- QGeoMapPolylineObject *polyline;
- QGraphicsPathItem *pathItem;
+ virtual QGLSceneNode* createTileNode(const Tile &tile);
-public slots:
- void pathChanged(const QList<QGeoCoordinate> &path);
- void penChanged(const QPen &pen);
+ virtual void updateGlCamera(QGLCamera* glCamera);
+ virtual void updateFrustum(Frustum &frustum);
+ virtual QList<TileSpec> updateVisibleTiles();
+ virtual void updateMapItemSceneNode(MapItem *item);
+
+ virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const;
+ virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const;
private:
- void genPath();
+ QGeometryData generateTileGeometryData(int x, int y, int tileZoom, int geomZoom) const;
+
+ int minZoom_;
+ double radius_;
+ Viewport viewport_;
};
QT_END_NAMESPACE
-#endif //QGEOTILEDMAPPOLYLINEOBJECT_INFO_P_H
+#endif // MAP3D_P_H
diff --git a/src/location/mapsgl/map3d/projection3d_p.cpp b/src/location/mapsgl/map3d/projection3d_p.cpp
new file mode 100644
index 00000000..8d131ea2
--- /dev/null
+++ b/src/location/mapsgl/map3d/projection3d_p.cpp
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "projection3d_p.h"
+
+#include "qgeocoordinate.h"
+
+#include <QVector2D>
+#include <QVector3D>
+#include <QMatrix4x4>
+#include <qnumeric.h>
+
+#include <cmath>
+
+Projection3D::Projection3D(double radius)
+ : radius_(radius) {}
+
+Projection3D::~Projection3D() {}
+
+double Projection3D::radius() const
+{
+ return radius_;
+}
+
+QVector3D Projection3D::coordToPoint(const QGeoCoordinate &coord) const
+{
+ double r = radius_ + coord.altitude();
+
+ const double pi = M_PI;
+ double lonRad = pi * -1.0 * (coord.longitude() + 90.0) / 180.0;
+ double latRad = pi * (90.0 - coord.latitude()) / 180.0;
+
+ return QVector3D(r * cos(lonRad) * sin(latRad),
+ r * cos(latRad),
+ r * sin(lonRad) * sin(latRad));
+}
+
+QGeoCoordinate Projection3D::pointToCoord(const QVector3D &point) const
+{
+ const double pi = M_PI;
+
+ double alt = point.length();
+ double lat = 180.0 * acos(point.y() / alt) / pi;
+ double lon = 270.0 - (180.0 * atan2(point.z(), point.x()) / pi);
+
+ if (lon < -180.0)
+ lon += 360.0;
+ if (lon >= 180.0)
+ lon -= 360.0;
+
+ return QGeoCoordinate(90.0 - lat, lon, alt);
+}
+
+QGeoCoordinate Projection3D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress)
+{
+ if (start == end) {
+ if (progress < 0.5) {
+ return start;
+ } else {
+ return end;
+ }
+ }
+
+ QGeoCoordinate s2 = start;
+ s2.setAltitude(0.0);
+ QGeoCoordinate e2 = end;
+ e2.setAltitude(0.0);
+ QVector3D s = coordToPoint(s2).normalized();
+ QVector3D e = coordToPoint(e2).normalized();
+
+ double dot = QVector3D::dotProduct(s, e);
+ const double pi = M_PI;
+ double angle = 180.0 * acos(dot) / pi;
+ if (qFuzzyCompare(qAbs(dot), 1.0) || qIsNaN(angle)) { // qIsNan is extra check, fuzzy compare is sometimes too 'loose'
+ if (progress < 0.5) {
+ return start;
+ } else {
+ return end;
+ }
+ }
+
+ QVector3D axis = QVector3D::crossProduct(s, e);
+ QMatrix4x4 mRot;
+ mRot.rotate(angle * progress, axis);
+ QVector3D p = mRot * s;
+
+ QGeoCoordinate result = pointToCoord(p);
+ result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude());
+ return result;
+}
+
diff --git a/src/location/maps/qgeomapobjectinfo_p.h b/src/location/mapsgl/map3d/projection3d_p.h
index 646f6355..769ae437 100644
--- a/src/location/maps/qgeomapobjectinfo_p.h
+++ b/src/location/mapsgl/map3d/projection3d_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOMAPOBJECTINFO_P_H
-#define QGEOMAPOBJECTINFO_P_H
+#ifndef PROJECTION3D_P_H
+#define PROJECTION3D_P_H
//
// W A R N I N G
@@ -53,26 +52,23 @@
// We mean it.
//
-#include "qmobilityglobal.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapObject;
-class QGeoMapData;
+#include "projection_p.h"
-class QGeoMapObjectInfoPrivate
+class Q_AUTOTEST_EXPORT Projection3D : public Projection
{
public:
- QGeoMapObjectInfoPrivate(QGeoMapData *mapData, QGeoMapObject *mapObject);
- virtual ~QGeoMapObjectInfoPrivate();
+ Projection3D(double radius);
+ virtual ~Projection3D();
- QGeoMapData* mapData;
- QGeoMapObject* mapObject;
+ double radius() const;
+
+ virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const;
+ virtual QGeoCoordinate pointToCoord(const QVector3D &point) const;
+
+ virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress);
private:
- Q_DISABLE_COPY(QGeoMapObjectInfoPrivate)
+ double radius_;
};
-QT_END_NAMESPACE
-
-#endif
+#endif // PROJECTION3D_P_H
diff --git a/src/location/mapsgl/map3d/sphere.cpp b/src/location/mapsgl/map3d/sphere.cpp
new file mode 100644
index 00000000..7c2e75ae
--- /dev/null
+++ b/src/location/mapsgl/map3d/sphere.cpp
@@ -0,0 +1,1234 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "sphere_p.h"
+
+#include <cmath>
+
+Arc::Arc() {}
+
+Arc::Arc(const QPlane3D &plane, double sphereRadius, const QVector3D &start, const QVector3D &end)
+ : plane_(plane),
+ sphereRadius_(sphereRadius),
+ start_(start),
+ end_(end)
+{
+ QVector3D origin;
+ double dist = plane.distanceTo(origin);
+ center_ = -1.0 * dist * plane.normal().normalized();
+ radius_ = sqrt(sphereRadius_ * sphereRadius_ - dist * dist);
+}
+
+void Arc::setPlane(const QPlane3D &plane)
+{
+ plane_ = plane;
+ QVector3D origin;
+ double dist = plane.distanceTo(origin);
+ center_ = -1.0 * dist * plane.normal().normalized();
+ radius_ = sqrt(sphereRadius_ * sphereRadius_ - dist * dist);
+}
+
+bool Arc::operator ==(const Arc &rhs)
+{
+ return (qFuzzyCompare(sphereRadius_, rhs.sphereRadius_)
+ && qFuzzyCompare(radius_, rhs.radius_)
+ && qFuzzyCompare(plane_, rhs.plane_)
+ && qFuzzyCompare(center_, rhs.center_)
+ && qFuzzyCompare(start_, rhs.start_)
+ && qFuzzyCompare(end_, rhs.end_));
+}
+
+QPlane3D Arc::plane() const
+{
+ return plane_;
+}
+
+QVector3D Arc::center() const
+{
+ return center_;
+}
+
+double Arc::sphereRadius() const
+{
+ return sphereRadius_;
+}
+
+double Arc::radius() const
+{
+ return radius_;
+}
+
+void Arc::setStart(const QVector3D &start)
+{
+ start_ = start;
+}
+
+QVector3D Arc::start() const
+{
+ return start_;
+}
+
+void Arc::setEnd(const QVector3D &end)
+{
+ end_ = end;
+}
+
+QVector3D Arc::end() const
+{
+ return end_;
+}
+
+QVector3D Arc::interpolate(double n) const
+{
+ QVector3D a = start_ - center_;
+ QVector3D b = end_ - center_;
+
+ a *= (1 - n);
+ b *= n;
+
+ a += b;
+
+ a.normalize();
+ a *= radius_;
+ a += center_;
+
+ return a;
+}
+
+QPair<QVector3D, QVector3D> Arc::intersect2(const QPlane3D &plane) const
+{
+ QVector3D n1 = plane_.normal();
+ QVector3D n2 = plane.normal();
+ double h1 = QVector3D::dotProduct(n1, plane_.origin());
+ double h2 = QVector3D::dotProduct(n2, plane.origin());
+
+ double dot = QVector3D::dotProduct(n1, n2);
+
+ if (dot == 1.0)
+ return QPair<QVector3D, QVector3D>(start_, QVector3D());
+ if (dot == -1.0)
+ return QPair<QVector3D, QVector3D>(QVector3D(), QVector3D());
+
+ QVector3D b = QVector3D::crossProduct(n1, n2);
+
+ double c1 = h1 - h2 * dot;
+ double c2 = h2 - h1 * dot;
+ double den = 1 - dot * dot;
+
+ n1 *= c1;
+ n2 *= c2;
+
+ n1 += n2;
+ n1 /= den;
+
+ double r2 = sphereRadius_ * sphereRadius_;
+
+ QVector3D a = n1;
+
+// QPair<double, double> f = quadraticResults(b.lengthSquared(), 2 * QVector3D::dotProduct(a, b), a.lengthSquared() - r2, false);
+// qWarning() << "f " << f.first << f.second;
+
+ if (r2 >= a.lengthSquared()) {
+ double alpha = sqrt(r2 - a.lengthSquared()) / b.length();
+ QVector3D v1 = b;
+ v1 *= alpha;
+ v1 += a;
+ QVector3D v2 = b;
+ v2 *= -1.0 * alpha;
+ v2 += a;
+
+
+ // TODO
+ // need a more robust method to determine whether v1, v2 are between start and end
+ // needs to be computationally cheap
+ double se = QVector3D::dotProduct(start_, end_);
+ bool hasV1 = ((se <= QVector3D::dotProduct(start_, v1)) && (se <= QVector3D::dotProduct(v1, end_)));
+ bool hasV2 = ((se <= QVector3D::dotProduct(start_, v2)) && (se <= QVector3D::dotProduct(v2, end_)));
+
+ if (hasV1) {
+ if (hasV2 && !qFuzzyCompare(v1, v2)) {
+ if ((v1 - start_).lengthSquared() > (v2 - start_).lengthSquared())
+ qSwap(v1, v2);
+ return QPair<QVector3D, QVector3D>(v1, v2);
+ } else {
+ return QPair<QVector3D, QVector3D>(v1, QVector3D());
+ }
+ } else if (hasV2) {
+ return QPair<QVector3D, QVector3D>(v2, QVector3D());
+ }
+ }
+
+ return QPair<QVector3D, QVector3D>(QVector3D(), QVector3D());
+}
+
+QPair<QVector3D, QVector3D> Arc::intersects(const QPlane3D &plane) const
+{
+// return intersect2(plane);
+
+ QVector3D va = start_ - center_;
+ QVector3D vb = end_ - center_;
+
+ QVector3D n = plane.normal();
+
+ double na = QVector3D::dotProduct(n, va);
+ double nb = QVector3D::dotProduct(n, vb);
+ double nab = na - nb;
+ double no = QVector3D::dotProduct(n, plane.origin());
+ double nc = QVector3D::dotProduct(n, center_);
+ double ab = QVector3D::dotProduct(va, vb);
+ double r2 = radius_ * radius_;
+ double rab = 1 - (ab / r2);
+
+ double noc = no - nc;
+ noc *= noc;
+
+
+ double a = nab * nab - 2 * noc * rab;
+ double b = 2 * (noc * rab - na * nab);
+ double c = na * na - noc;
+
+ QPair<double, double> factors = quadraticResults(a, b, c);
+
+ double f1 = factors.first;
+ QVector3D v1;
+ bool hasV1 = false;
+
+ double f2 = factors.second;
+ QVector3D v2;
+ bool hasV2 = false;
+
+ if (f1 != -1.0) {
+ v1 = interpolate(f1);
+ if (qAbs(plane.distanceTo(v1) / sphereRadius_) < 1e-6) {
+ hasV1 = true;
+ } else {
+ v1 = QVector3D();
+ }
+ }
+
+ if (f2 != -1.0) {
+ v2 = interpolate(f2);
+ if (qAbs(plane.distanceTo(v2) / sphereRadius_) < 1e-6) {
+ hasV2 = true;
+ if (!hasV1) {
+ v1 = v2;
+ v2 = QVector3D();
+ }
+ } else {
+ v2 = QVector3D();
+ }
+ }
+
+ return QPair<QVector3D, QVector3D>(v1, v2);
+}
+
+QPair<double, double> Arc::xIntersectFactor(double x) const
+{
+ return intersects(start_.x(), end_.x(), center_.x(), x);
+}
+
+QPair<double, double> Arc::yIntersectFactor(double y) const
+{
+ return intersects(start_.y(), end_.y(), center_.y(), y);
+}
+
+QPair<double, double> Arc::tIntersectFactor(double x, double z) const
+{
+ double t;
+ double ax;
+ double az;
+ double bx;
+ double bz;
+ double cx;
+ double cz;
+
+ // TODO deal with x = y = 0
+
+ if (qAbs(x) <= qAbs(z)) {
+ t = x / z;
+ ax = start_.x() - center_.x();
+ az = start_.z() - center_.z();
+ bx = end_.x() - center_.x();
+ bz = end_.z() - center_.z();
+ cx = center_.x();
+ cz = center_.z();
+ } else {
+ t = z / x;
+ ax = start_.z() - center_.z();
+ az = start_.x() - center_.x();
+ bx = end_.z() - center_.z();
+ bz = end_.x() - center_.x();
+ cx = center_.z();
+ cz = center_.x();
+ }
+
+
+ double r2 = radius_ * radius_;
+ double dot = QVector3D::dotProduct(start_ - center_, end_ - center_);
+ double dc = (cx - t * cz);
+ dc *= dc;
+
+ double ta = t * az - ax;
+ double tb = t * bz - bx;
+ double tab = ta - tb;
+
+ double a = r2 * tab * tab + 2 * (dot - r2) * dc;
+ double b = 2 * (-1 * r2 * ta * tab + (r2 - dot) * dc);
+ double c = r2 * ta * ta - r2 * dc;
+
+ QPair<double, double> factors = quadraticResults(a, b, c);
+
+ // Need to check that the signs match
+
+ bool xNeg = (x < 0.0);
+ bool zNeg = (z < 0.0);
+
+ double f1 = factors.first;
+ bool f1Valid = false;
+ if (f1 != -1.0) {
+ QVector3D r = interpolate(f1);
+ bool rxNeg = (r.x() < 0.0);
+ bool rzNeg = (r.z() < 0.0);
+ if ((xNeg == rxNeg) && (zNeg == rzNeg)) {
+ f1Valid = true;
+ } else {
+ f1 = -1.0;
+ }
+ }
+
+ double f2 = factors.second;
+ if (f2 != -1.0) {
+ QVector3D r = interpolate(f2);
+ bool rxNeg = (r.x() < 0.0);
+ bool rzNeg = (r.z() < 0.0);
+ if ((xNeg == rxNeg) && (zNeg == rzNeg)) {
+ if (!f1Valid) {
+ f1 = f2;
+ f2 = -1.0;
+ }
+ } else {
+ f2 = -1.0;
+ }
+ }
+
+ return QPair<double, double>(f1, f2);
+}
+
+QPair<double, double> Arc::intersects(double startValue, double endValue, double centerValue, double target) const
+{
+ double r2 = radius_ * radius_;
+ double dc = (target - centerValue) * (target - centerValue);
+ double dot = QVector3D::dotProduct(start_ - center_, end_ - center_);
+
+ double a = 2 * (r2 - dot) * dc - r2 * (startValue - endValue) * (startValue - endValue);
+ double b = 2 * (dot - r2) * dc - 2 * r2 * (startValue - centerValue) * (endValue - startValue);
+ double c = r2 * (dc - (startValue - centerValue) * (startValue - centerValue));
+
+ return quadraticResults(a, b, c);
+}
+
+QPair<double, double> Arc::quadraticResults(double a, double b, double c, bool clip)
+{
+ if (a == 0.0)
+ return QPair<double, double>(-1.0, -1.0);
+
+ double s = b * b - 4 * a * c;
+
+ if (s < 0.0)
+ return QPair<double, double>(-1.0, -1.0);
+
+ double s2 = sqrt(s);
+
+ double n1 = (-b + s2) / (2 * a);
+ double n2 = (-b - s2) / (2 * a);
+
+ if (clip) {
+ if ((n1 < 0.0) || (n1 > 1.0))
+ n1 = -1.0;
+ if ((n2 < 0.0) || (n2 > 1.0))
+ n2 = -1.0;
+
+ if (n1 != -1.0) {
+ if ((n2 != -1.0) && (n1 != n2)) {
+ if (n2 < n1)
+ qSwap(n1, n2);
+ return QPair<double, double>(n1, n2);
+ } else {
+ return QPair<double, double>(n1, -1.0);
+ }
+ } else if (n2 != -1.0) {
+ return QPair<double, double>(n2, -1.0);
+ } else {
+ return QPair<double, double>(-1.0, -1.0);
+ }
+ } else {
+ if (n2 < n1)
+ qSwap(n1, n2);
+ return QPair<double, double>(n1, n2);
+ }
+}
+
+bool Arc::belowPlane(const QPlane3D &plane) const
+{
+ double ds = plane.distanceTo(start_) / sphereRadius_;
+ double de = plane.distanceTo(end_) / sphereRadius_;
+
+ if ((ds > 1e-6) || (de > 1e-6))
+ return false;
+
+ return ((ds < -1e-6) || (de < -1e-6));
+}
+
+bool PatchData::operator == (const PatchData &rhs)
+{
+ return (qFuzzyCompare(point,rhs.point) && qFuzzyCompare(plane, rhs.plane));
+}
+
+SpherePatch::SpherePatch(double radius, const QList<Arc> arcs, bool roundUp, bool planar)
+ : radius_(radius),
+ roundUp_(roundUp),
+ planar_(planar),
+ debug_(true)
+{
+ data_.reserve(arcs.size());
+ for (int i = 0; i < arcs.size(); ++i) {
+ PatchData d;
+ d.point = arcs.at(i).start();
+ d.plane = arcs.at(i).plane();
+ d.intersectIndex = -1;
+ d.done = false;
+ data_ << d;
+ }
+}
+
+SpherePatch::SpherePatch(double radius, const QList<PatchData> &data, bool roundUp, bool planar)
+ : data_(data),
+ radius_(radius),
+ roundUp_(roundUp),
+ planar_(planar),
+ debug_(true)
+{
+ int size = data_.size();
+
+ for (int i = 0; i < size; ++i) {
+ data_[i].intersectIndex = -1;
+ data_[i].done = false;
+ }
+}
+
+bool SpherePatch::operator ==(const SpherePatch &rhs)
+{
+ // TODO need to be able to handle rotations of the arc list
+ // TODO should also handle list in reverse order and with start/end
+ // in the opposite order
+ return (qFuzzyCompare(radius_, rhs.radius_)
+ && (data_ == rhs.data_)
+ && (roundUp_ == rhs.roundUp_));
+}
+
+bool SpherePatch::isomorphic(const SpherePatch &rhs)
+{
+ if (radius_ != rhs.radius_)
+ return false;
+ if (roundUp_ != rhs.roundUp_)
+ return false;
+ if (data_.size() != rhs.data_.size())
+ return false;
+ if (data_.size() == 0)
+ return true;
+
+ int index = -1;
+ int size = data_.size();
+ PatchData d1 = data_.at(0);
+ for (int i = 0; i < size; ++i) {
+ if (d1 == rhs.data_[i]) {
+ index = i;
+ break;
+ }
+ }
+
+ if (index == -1)
+ return false;
+
+ for (int i1 = 0; i1 < size; ++i1) {
+ int i2 = (i1 + index) % size;
+ if (!(data_[i1] == rhs.data_[i2]))
+ return false;
+ }
+
+ return true;
+}
+
+int SpherePatch::arcCount() const
+{
+ return data_.size();
+}
+
+Arc SpherePatch::arc(int index) const
+{
+ if (index < 0 || index >= data_.size())
+ return Arc();
+
+ int size = data_.size();
+ int index2 = (index + 1) % size;
+
+ return Arc(data_.at(index).plane, radius_, data_.at(index).point, data_.at(index2).point);
+}
+
+void SpherePatch::setRoundUpTiles(bool roundUp)
+{
+ roundUp_ = roundUp;
+}
+
+bool SpherePatch::roundUpTiles() const
+{
+ return roundUp_;
+}
+
+bool SpherePatch::containsPoint(const QVector3D &point) const
+{
+ int size = data_.size();
+
+ for (int i = 0; i < size; ++i) {
+ if (data_.at(i).plane.distanceTo(point) < 0.0)
+ return false;
+ }
+
+ return true;
+}
+
+bool SpherePatch::inFrontOfPlane(const QPlane3D &plane) const
+{
+ int size = data_.size();
+
+ for (int i1 = 0; i1 < size; ++i1) {
+ if (plane.distanceTo(data_.at(i1).point) < 0)
+ return false;
+ }
+
+ return true;
+}
+
+bool SpherePatch::behindPlane(const QPlane3D &plane) const
+{
+ int size = data_.size();
+
+ for (int i1 = 0; i1 < size; ++i1) {
+ if (plane.distanceTo(data_.at(i1).point) > 0)
+ return false;
+ }
+
+ return true;
+}
+
+QList<SpherePatch> SpherePatch::intersect(const QPlane3D &plane)
+{
+ QList<SpherePatch> results;
+
+ /*
+ We need these tests to rule out several cases that would
+ otherwise leave us with two arcs defining the patch.
+
+ We want to save that case for when the plane / sphere
+ circle intersects one arc of this patch at two points.
+
+ If it's a small circle we end up with two arcs between
+ two points (but the arcs are on different planes.
+
+ If it's a bigger circle there may be some additional
+ points on the intersecting plane to make the interpolation
+ unambiguous
+ */
+
+ QVector3D origin;
+ double dist = plane.distanceTo(origin);
+ if (dist > radius_) {
+ if (debug_)
+ qWarning() << "keeping (outside radius)";
+ results << *this;
+ return results;
+ } else if (dist < -1 * radius_) {
+ if (debug_)
+ qWarning() << "removing (outside radius)";
+ return results;
+ }
+
+ // co-planar
+ QPlane3D negPlane = plane;
+ negPlane.setNormal(negPlane.normal() * -1.0);
+ int size = data_.size();
+ for (int i = 0; i < size; ++i) {
+ if (data_[i].plane == plane) {
+ if (debug_)
+ qWarning() << "keeping (co-planar)";
+ results << *this;
+ return results;
+ } else if (data_[i].plane == negPlane) {
+ if (debug_)
+ qWarning() << "removing (co-planar)";
+ return results;
+ }
+ }
+
+ Arc intersectArc(plane, radius_);
+ bool contains = containsPoint(intersectArc.center());
+// if (!contains) {
+// if (behindPlane(plane)) {
+// if (debug_)
+// qWarning() << "removing (intersection in different patch)";
+// return results;
+// } else if (inFrontOfPlane(plane)) {
+// if (debug_)
+// qWarning() << "keeping (intersection in different patch)";
+// results << *this;
+// return results;
+// }
+// }
+
+ /*
+ for each pair of points
+ add first point if above or on plane
+ add intersection points if not start or end point
+ */
+
+ SpherePatch newPatch(radius_, QList<PatchData>(), roundUp_);
+
+ int arcIntersectCount = 0;
+ int doubleIntersectCount = 0;
+
+ QList<int> intersections = split(newPatch, plane, arcIntersectCount, doubleIntersectCount);
+
+ if (debug_) {
+ qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains;
+ for (int i = 0; i < newPatch.data_.size(); ++i)
+ qWarning() << " " << newPatch.data_.at(i).point << newPatch.data_.at(i).plane << newPatch.data_.at(i).intersectIndex;
+ for (int i = 0; i < intersections.size(); ++i)
+ qWarning() << " " << intersections.at(i);
+ }
+
+
+ if ((arcIntersectCount == 0) || ((arcIntersectCount == 1) && (newPatch.data_.size() == 1))) {
+ if (contains)
+ return noIntersectPatches(plane);
+ if (debug_)
+ qWarning() << "keeping (center point in different patch)";
+// results << *this;
+
+ if (behindPlane(plane)) {
+ if (debug_)
+ qWarning() << "removing (intersection in different patch)";
+ return results;
+ } else if (inFrontOfPlane(plane)) {
+ if (debug_)
+ qWarning() << "keeping (intersection in different patch)";
+ results << *this;
+ return results;
+ }
+
+ return results;
+ }
+
+ //qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains;
+
+ if ((intersections.length() == 2) && (doubleIntersectCount == 1))
+ handleCircleEdgeIntersection(newPatch, plane, intersections);
+
+ arrangeIntersections(newPatch, plane, intersections);
+
+ if (debug_) {
+ qWarning() << newPatch.data_.size() << intersections.size() << arcIntersectCount << doubleIntersectCount << contains;
+ for (int i = 0; i < newPatch.data_.size(); ++i)
+ qWarning() << " " << newPatch.data_.at(i).point << newPatch.data_.at(i).plane << newPatch.data_.at(i).intersectIndex;
+ for (int i = 0; i < intersections.size(); ++i)
+ qWarning() << " " << intersections.at(i);
+ }
+
+ return divide(newPatch, plane, intersections);
+}
+
+QList<int> SpherePatch::split(SpherePatch &patch, const QPlane3D &plane, int &arcCount, int &doubleCount)
+{
+ QList<int> intersections;
+
+ arcCount = 0;
+ doubleCount = 0;
+
+ int size = data_.size();
+
+ for (int i1 = 0; i1 < size; ++i1) {
+ int i2 = (i1 + 1) % size;
+
+ PatchData d1 = data_.at(i1);
+ PatchData d2 = data_.at(i2);
+
+ QVector3D p1 = d1.point;
+ QVector3D p2 = d2.point;
+
+ Arc a = Arc(d1.plane, radius_, p1, p2);
+
+ QPair<QVector3D, QVector3D> intersectPoints = a.intersects(plane);
+ QVector3D origin;
+
+ if (intersectPoints.first != origin)
+ ++arcCount;
+
+ if (intersectPoints.second != origin)
+ ++doubleCount;
+
+ if (debug_)
+ qWarning() << "intersects "
+ << intersectPoints.first
+ << intersectPoints.second
+ << "(" << p1 << ", " << p2 << ")";
+
+ double dist = plane.distanceTo(p1);
+
+ if ((dist / radius_ > -1e-6) && (dist <= 2.0 * radius_)) {
+ patch.data_ << d1;
+
+ int lastIndex = patch.data_.size() - 1;
+
+ if (intersectPoints.first != origin) {
+ if (qFuzzyCompare(intersectPoints.first, p1) && (intersections.isEmpty() || !(intersections.last() == lastIndex))) {
+ intersections << lastIndex;
+ }
+ }
+
+ if (intersectPoints.second != origin) {
+ if (qFuzzyCompare(intersectPoints.second, p1) && (intersections.isEmpty() || !(intersections.last() == lastIndex))) {
+ intersections << lastIndex;
+ }
+ }
+
+ } else {
+ if (debug_)
+ qWarning() << "point " << p1 << " below plane";
+ }
+
+ if (intersectPoints.first != origin) {
+ if (!qFuzzyCompare(intersectPoints.first, p1) && !qFuzzyCompare(intersectPoints.first, p2)) {
+ PatchData d = d1;
+ d.point = intersectPoints.first;
+ patch.data_ << d;
+ intersections << patch.data_.size() - 1;
+ if (debug_)
+ qWarning() << "adding " << intersectPoints.first << " as intersect";
+ }
+ }
+
+ if (intersectPoints.second != origin) {
+ if (!qFuzzyCompare(intersectPoints.second, p1) && !qFuzzyCompare(intersectPoints.second, p2)) {
+ PatchData d = d1;
+ d.point = intersectPoints.second;
+ patch.data_ << d;
+ intersections << patch.data_.size() - 1;
+ if (debug_)
+ qWarning() << "adding " << intersectPoints.second << " as intersect";
+ }
+ }
+ }
+
+ return intersections;
+}
+
+void SpherePatch::handleCircleEdgeIntersection(SpherePatch &patch, const QPlane3D &plane, QList<int> &intersections)
+{
+ QList<QVector3D> newPoints;
+
+ Arc a(plane, radius_);
+
+ QVector3D p1 = patch.data_.at(intersections.at(0)).point;
+ QVector3D p2 = patch.data_.at(intersections.at(1)).point;
+
+ bool rhplane = (plane.distanceTo(QVector3D()) < 0.0);
+
+ if (rhplane)
+ intersections.removeFirst();
+ else
+ intersections.removeLast();
+
+ QVector3D up = p1 - p2;
+ up.normalize();
+ up *= a.radius();
+
+ QVector3D right = QVector3D::crossProduct(plane.normal(), up);
+ right.normalize();
+ right *= a.radius();
+
+ QVector3D down = -1 * up;
+
+ QVector3D left = -1 * right;
+
+ up += a.center();
+ right += a.center();
+ down += a.center();
+ left += a.center();
+
+ if (containsPoint(up) && !qFuzzyCompare(up, p1) && !qFuzzyCompare(up, p2))
+ newPoints << up;
+ if (containsPoint(right) && !qFuzzyCompare(right, p1) && !qFuzzyCompare(right, p2))
+ newPoints << right;
+ if (containsPoint(down) && !qFuzzyCompare(down, p1) && !qFuzzyCompare(down, p2))
+ newPoints << down;
+ if (containsPoint(left) && !qFuzzyCompare(left, p1) && !qFuzzyCompare(left, p2))
+ newPoints << left;
+
+ int index = intersections.at(0) + 1;
+
+ while (!newPoints.isEmpty()) {
+ int minIndex = 0;
+ QVector3D p = patch.data_.at(index - 1).point;
+ double minDist = (newPoints.at(0) - p).lengthSquared();
+ for (int j = 1; j < newPoints.size(); ++j) {
+ double d = (newPoints.at(j) - p).lengthSquared();
+ if (d < minDist) {
+ minIndex = j;
+ minDist = d;
+ }
+ }
+
+ PatchData d;
+ d.point = newPoints.takeAt(minIndex);
+ d.plane = plane;
+ d.intersectIndex = -1;
+ d.done = false;
+ patch.data_.insert(index, d);
+
+ intersections << index;
+ ++index;
+ }
+}
+
+void SpherePatch::arrangeIntersections(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections)
+{
+ bool rhplane = (plane.distanceTo(QVector3D()) < 0.0);
+
+ int modifier = 1;
+ if (!rhplane)
+ modifier = -1;
+
+ if (!rhplane) {
+ int intersectSize = intersections.size();
+ int dataSize = patch.data_.size();
+
+ for (int i1 = 0; i1 < intersectSize; ++i1) {
+ int i2 = (i1 + modifier) % intersectSize;
+ if (i2 < 0)
+ i2 += intersectSize;
+ int index1 = intersections.at(i1);
+ int index2 = intersections.at(i2);
+ if (index1 != index2) {
+ patch.data_[index1].intersectIndex = index2;
+
+ if (planar_) {
+ int i3 = (index1 + 1) % dataSize;
+ if (i3 < 0)
+ i3 += dataSize;
+ if (i3 == index2)
+ patch.data_[index1].plane = plane;
+ }
+ }
+ }
+ }
+}
+
+void SpherePatch::setupPlanes(QList<PatchData> &data, const QPlane3D &plane)
+{
+ int ndSize = data.size();
+
+ if (!planar_) {
+ for (int i1 = 0; i1 < ndSize; ++i1) {
+ int i2 = (i1 + 1) % ndSize;
+// if (!qFuzzyCompare(data.at(i1).plane, data.at(i2).plane)) {
+ if (qAbs(data.at(i1).plane.distanceTo(data.at(i2).point) / radius_) > 1e-6) {
+ data[i1].plane = plane;
+ }
+// }
+ }
+ }
+}
+
+QList<SpherePatch> SpherePatch::divide(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections)
+{
+ QList<SpherePatch> results;
+
+ int size = patch.data_.size();
+
+ bool rhplane = (plane.distanceTo(QVector3D()) < 0.0);
+
+ if ((patch.data_.size() > 1) && rhplane) {
+ setupPlanes(patch.data_, plane);
+ results << SpherePatch(radius_, patch.data_, roundUp_);
+ } else if (size != intersections.size()) {
+ int size = patch.data_.size();
+ for (int i = 0; i < size; ++i) {
+ PatchData d1 = patch.data_.at(i);
+ if ((d1.intersectIndex == -1) && !d1.done) {
+
+ bool followingIntersect = false;
+ QList<PatchData> newData;
+
+ newData << d1;
+
+ int j = (i + 1) % size;
+
+ int count = 0;
+ while ((j != i) && (count != size)) {
+ ++count;
+
+ PatchData d2 = patch.data_.at(j);
+ newData << d2;
+
+ int next = (j + 1) % size;
+
+ // if ([this point is not an intersection])
+ if (d2.intersectIndex == -1) {
+ patch.data_[j].done = true;
+ } else {
+ if (followingIntersect) {
+ // followingIntersect = [intersect exists and is adjacent]
+ followingIntersect = (d2.intersectIndex == next);
+ } else {
+ next = d2.intersectIndex;
+ followingIntersect = true;
+ }
+ }
+
+ j = next;
+ }
+
+ if (count == size + 1) {
+ qWarning() << "GAAAAH!!";
+ }
+
+ if (newData.size() > 1) {
+ setupPlanes(newData, plane);
+ SpherePatch sp = SpherePatch(radius_, newData, roundUp_);
+ results << sp;
+ }
+ }
+ }
+ }
+
+ return results;
+}
+
+QList<SpherePatch> SpherePatch::noIntersectPatches(const QPlane3D &plane) const
+{
+ QList<SpherePatch> results;
+
+ Arc a(plane, radius_);
+
+ bool allBigger = true;
+ bool allSmaller = true;
+
+ int size = data_.size();
+
+ for (int i = 0; i < size; ++i) {
+ double dist = (data_.at(i).point - a.center()).length();
+ double r = (dist - a.radius()) / radius_;
+
+ if (r < -1e-6)
+ allSmaller = false;
+ if (r > 1e-6)
+ allBigger = false;
+ }
+
+ if (allBigger) {
+ if (plane.distanceTo(data_.at(0).point) / radius_ > 0.0)
+ results << *this;
+ return results;
+ }
+
+ QList<QVector3D> points;
+
+ const double pi = 3.14159265358;
+ double angle = asin(a.radius() / radius_) * 180.0 / pi;
+ QVector3D center = a.center().normalized() * radius_;
+
+ for (int i = 0; i < size; ++i) {
+ QVector3D axis = QVector3D::crossProduct(center, data_.at(i).point);
+ QMatrix4x4 r;
+ r.rotate(angle, axis);
+ points << r * center;
+ }
+
+ double dist = plane.distanceTo(QVector3D());
+ if (dist > 0.0) {
+ // circle shaped hole
+
+ for (int i1 = 0; i1 < size; ++i1) {
+ int i2 = (i1 + 1) % size;
+
+ QVector3D start = data_.at(i1).point;
+ QVector3D end = data_.at(i2).point;
+
+ QList<PatchData> data;
+
+ PatchData d1;
+ d1.point = start;
+ d1.plane = data_.at(i1).plane;
+ data << d1;
+
+ PatchData d2;
+ d2.point = end;
+ d2.plane = QPlane3D(center, QVector3D::normal(center, end));
+ data << d2;
+
+ PatchData d3;
+ d3.point = points.at(i2);
+ d3.plane = plane;
+ data << d3;
+
+ PatchData d4;
+ d4.point = points.at(i1);
+ d4.plane = QPlane3D(center, QVector3D::normal(center, start));
+ data << d4;
+
+ results << SpherePatch(radius_, data, roundUp_);
+ }
+
+ } else if (dist < 0.0) {
+ // solo circle
+
+ QList<PatchData> data;
+ for (int i = 0; i < size; ++i) {
+ PatchData d;
+ d.point = points.at(i);
+ d.plane = plane;
+ data << d;
+ }
+
+ results << SpherePatch(radius_, data, roundUp_, true);
+ }
+
+ return results;
+}
+
+Sphere::Sphere(double radius, const QList<SpherePatch> &patches)
+ : radius_(radius),
+ patches_(patches) {}
+
+Sphere::Sphere(double radius)
+ : radius_(radius)
+{
+ QVector3D origin;
+
+ patches_.reserve(8);
+
+ QVector3D pxv = QVector3D(radius_, 0.0, 0.0);
+ QVector3D nxv = QVector3D(-1.0 * radius_, 0.0, 0.0);
+ QVector3D pyv = QVector3D(0.0, radius_, 0.0);
+ QVector3D nyv = QVector3D(0.0, -1.0 * radius_, 0.0);
+ QVector3D pzv = QVector3D(0.0, 0.0, radius_);
+ QVector3D nzv = QVector3D(0.0, 0.0, -1.0 * radius_);
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D nxp = QPlane3D(origin, QVector3D(-1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D nyp = QPlane3D(origin, QVector3D(0.0, -1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+ QPlane3D nzp = QPlane3D(origin, QVector3D(0.0, 0.0, -1.0));
+
+ PatchData d;
+
+ QList<PatchData> data;
+ data.reserve(3);
+ data << d;
+ data << d;
+ data << d;
+
+ data[0].point = pxv;
+ data[0].plane = pzp;
+ data[1].point = pyv;
+ data[1].plane = pxp;
+ data[2].point = pzv;
+ data[2].plane = pyp;
+
+ SpherePatch patch000(radius, data, false);
+ patches_ << patch000;
+
+ data[0].point = pxv;
+ data[0].plane = pyp;
+ data[1].point = nzv;
+ data[1].plane = pxp;
+ data[2].point = pyv;
+ data[2].plane = nzp;
+
+ SpherePatch patch001(radius_, data, false);
+ patches_ << patch001;
+
+ data[0].point = pxv;
+ data[0].plane = nyp;
+ data[1].point = pzv;
+ data[1].plane = pxp;
+ data[2].point = nyv;
+ data[2].plane = pzp;
+
+ SpherePatch patch010(radius_, data, false);
+ patches_ << patch010;
+
+ data[0].point = pxv;
+ data[0].plane = nzp;
+ data[1].point = nyv;
+ data[1].plane = pxp;
+ data[2].point = nzv;
+ data[2].plane = nyp;
+
+ SpherePatch patch011(radius_, data, false);
+ patches_ << patch011;
+
+ data[0].point = nxv;
+ data[0].plane = pyp;
+ data[1].point = pzv;
+ data[1].plane = nxp;
+ data[2].point = pyv;
+ data[2].plane = nzp;
+
+ SpherePatch patch100(radius_, data, false);
+ patches_ << patch100;
+
+ data[0].point = nxv;
+ data[0].plane = nzp;
+ data[1].point = pyv;
+ data[1].plane = nxp;
+ data[2].point = nzv;
+ data[2].plane = pyp;
+
+ SpherePatch patch101(radius_, data, false);
+ patches_ << patch101;
+
+ data[0].point = nxv;
+ data[0].plane = pzp;
+ data[1].point = nyv;
+ data[1].plane = nxp;
+ data[2].point = pzv;
+ data[2].plane = nyp;
+
+ SpherePatch patch110(radius_, data, true);
+ patches_ << patch110;
+
+ data[0].point = nxv;
+ data[0].plane = nyp;
+ data[1].point = nyv;
+ data[1].plane = nxp;
+ data[2].point = nzv;
+ data[2].plane = nzp;
+
+ SpherePatch patch111(radius_, data, true);
+ patches_ << patch111;
+}
+
+bool Sphere::operator ==(const Sphere &rhs)
+{
+ // TODO either make canonical ordering for patches
+ // or do order-independent comparison of the patches
+ return (qFuzzyCompare(radius_, rhs.radius_)
+ && (patches_ == rhs.patches_));
+}
+
+bool Sphere::isomorphic (const Sphere &rhs)
+{
+ if (radius_ != rhs.radius_)
+ return false;
+ if (patches_.size() != rhs.patches_.size())
+ return false;
+
+ int size = patches_.size();
+
+ if (size == 0)
+ return true;
+
+ for (int i = 0; i < size; ++i)
+ if (!patches_[i].isomorphic(rhs.patches_.at(i)))
+ return false;
+
+ return true;
+}
+
+QList<SpherePatch> Sphere::patches() const
+{
+ return patches_;
+}
+
+void Sphere::intersect(const QPlane3D &plane)
+{
+ int size = patches_.size();
+
+ QList<SpherePatch> newPatches;
+
+ QPlane3D p = plane;
+ p.setNormal(p.normal().normalized());
+
+ for (int i = 0; i < size; ++i)
+ newPatches.append(patches_[i].intersect(p));
+
+ patches_ = newPatches;
+}
+
+QDebug operator << (QDebug dbg, const Arc &arc)
+{
+ dbg << " Arc [plane: " << arc.plane() << ", start: " << arc.start() << ", end: " << arc.end() << "]\n";
+ return dbg;
+}
+
+QDebug operator << (QDebug dbg, const SpherePatch &patch)
+{
+ dbg << " Patch [\n";
+
+ int arcCount = patch.arcCount();
+ for (int i = 0; i < arcCount; ++i)
+ dbg << patch.arc(i);
+
+ dbg << " ]\n";
+ return dbg;
+}
+
+QDebug operator << (QDebug dbg, const Sphere &sphere)
+{
+ dbg << "Sphere [\n";
+
+ QList<SpherePatch> patches = sphere.patches();
+ for (int i = 0; i < patches.size(); ++i)
+ dbg << patches.at(i);
+
+ dbg << "]\n";
+ return dbg;
+}
diff --git a/src/location/mapsgl/map3d/sphere_p.h b/src/location/mapsgl/map3d/sphere_p.h
new file mode 100644
index 00000000..f6ec0d65
--- /dev/null
+++ b/src/location/mapsgl/map3d/sphere_p.h
@@ -0,0 +1,177 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef SPHERE_P_H
+#define SPHERE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QVector3D>
+#include <QPair>
+#include <qplane3d.h>
+#include <QDebug>
+
+class Q_AUTOTEST_EXPORT Arc {
+public:
+ Arc();
+ Arc(const QPlane3D &plane,
+ double sphereRadius,
+ const QVector3D &start = QVector3D(),
+ const QVector3D &end = QVector3D());
+
+ bool operator == (const Arc &rhs);
+
+ void setPlane(const QPlane3D &plane);
+ QPlane3D plane() const;
+
+ QVector3D center() const;
+ double radius() const;
+ double sphereRadius() const;
+
+ void setStart(const QVector3D &start);
+ QVector3D start() const;
+
+ void setEnd(const QVector3D &end);
+ QVector3D end() const;
+
+ QVector3D interpolate(double n) const;
+ QPair<QVector3D, QVector3D> intersects(const QPlane3D &plane) const;
+
+ QPair<double, double> xIntersectFactor(double x) const;
+ QPair<double, double> yIntersectFactor(double y) const;
+ QPair<double, double> tIntersectFactor(double x, double y) const;
+
+ bool belowPlane(const QPlane3D &plane) const;
+
+private:
+ QPair<double, double> intersects(double start, double end, double center, double target) const;
+ static QPair<double, double> quadraticResults(double a, double b, double c, bool clip = true);
+
+ QPair<QVector3D, QVector3D> intersect2(const QPlane3D &plane) const;
+
+ QPlane3D plane_;
+ double sphereRadius_;
+ QVector3D center_;
+ double radius_;
+ QVector3D start_;
+ QVector3D end_;
+};
+
+QDebug operator << (QDebug dbg, const Arc &arc);
+
+struct PatchData {
+ QVector3D point;
+ QPlane3D plane;
+ int intersectIndex;
+ bool done;
+
+ bool operator == (const PatchData &rhs);
+};
+
+class Q_AUTOTEST_EXPORT SpherePatch {
+public:
+ SpherePatch(double radius, const QList<Arc> arcs, bool roundUp = false, bool planar = false);
+ SpherePatch(double radius, const QList<PatchData> &data, bool roundUp, bool planar = false);
+
+ bool operator == (const SpherePatch &rhs);
+ bool isomorphic(const SpherePatch &rhs);
+
+ int arcCount() const;
+ Arc arc(int index) const;
+
+ void setRoundUpTiles(bool roundUp);
+ bool roundUpTiles() const;
+
+ QList<SpherePatch> intersect(const QPlane3D &plane);
+
+private:
+ bool inFrontOfPlane(const QPlane3D &plane) const;
+ bool behindPlane(const QPlane3D &plane) const;
+ bool containsPoint(const QVector3D &point) const;
+
+ QList<int> split(SpherePatch &patch, const QPlane3D &plane, int &arcCount, int &doubleCount);
+ void handleCircleEdgeIntersection(SpherePatch &patch, const QPlane3D &plane, QList<int> &intersections);
+ QList<SpherePatch> noIntersectPatches(const QPlane3D &plane) const;
+ void arrangeIntersections(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections);
+ void setupPlanes(QList<PatchData> &data, const QPlane3D &plane);
+ QList<SpherePatch> divide(SpherePatch &patch, const QPlane3D &plane, const QList<int> &intersections);
+
+ QList<PatchData> data_;
+// QList<int> intersections_;
+
+ double radius_;
+ //QList<Arc> arcs_;
+ bool roundUp_;
+ bool planar_;
+ bool debug_;
+};
+
+QDebug operator << (QDebug dbg, const SpherePatch &patch);
+
+class Q_AUTOTEST_EXPORT Sphere {
+public:
+ Sphere(double radius = 20000.0);
+ Sphere(double radius, const QList<SpherePatch> &patches);
+
+ bool operator == (const Sphere &rhs);
+ bool isomorphic (const Sphere &rhs);
+
+ QList<SpherePatch> patches() const;
+
+ void intersect(const QPlane3D &plane);
+
+private:
+ double radius_;
+ QList<SpherePatch> patches_;
+};
+
+Q_AUTOTEST_EXPORT QDebug operator << (QDebug dbg, const Sphere &sphere);
+
+
+#endif // SPHERE_P_H
diff --git a/src/location/mapsgl/map3d/spheregeometry.cpp b/src/location/mapsgl/map3d/spheregeometry.cpp
new file mode 100644
index 00000000..b8389d9a
--- /dev/null
+++ b/src/location/mapsgl/map3d/spheregeometry.cpp
@@ -0,0 +1,208 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "spheregeometry_p.h"
+
+#include "qgeocoordinate.h"
+
+#include <QVector2D>
+#include <QVector3D>
+#include <cmath>
+
+#include <QDebug>
+
+SphereGeometry::SphereGeometry()
+ : radius_(20000.0),
+ zoomLevel_(4) {}
+
+SphereGeometry::SphereGeometry(double radius, int zoomLevel)
+ : radius_(radius),
+ zoomLevel_(zoomLevel) {}
+
+void SphereGeometry::setRadius(double radius)
+{
+ radius_ = radius;
+}
+
+double SphereGeometry::radius() const
+{
+ return radius_;
+}
+
+//void SphereGeometry::setZoomLevel(int zoomLevel)
+//{
+// zoomLevel_ = zoomLevel;
+//}
+
+//int SphereGeometry::zoomLevel() const
+//{
+// return zoomLevel_;
+//}
+
+bool SphereGeometry::operator == (const SphereGeometry &rhs) const
+{
+ return ((radius_ == rhs.radius_) && (zoomLevel_ == rhs.zoomLevel_));
+}
+
+QVector3D SphereGeometry::coordToPoint(const QGeoCoordinate &coord) const
+{
+ double r = radius_ + coord.altitude();
+
+ const double pi = 3.14159265358;
+ double lonRad = pi * -1.0 * (coord.longitude() + 90.0) / 180.0;
+ double latRad = pi * (90.0 - coord.latitude()) / 180.0;
+
+ return QVector3D(r * cos(lonRad) * sin(latRad),
+ r * cos(latRad),
+ r * sin(lonRad) * sin(latRad));
+}
+
+QVector3D SphereGeometry::coordToPoint(double lat, double lon, double alt) const
+{
+ double r = radius_ + alt;
+
+ const double pi = 3.14159265358;
+ double lonRad = pi * -1.0 * (lon + 90.0) / 180.0;
+ double latRad = pi * (90.0 - lat) / 180.0;
+
+ return QVector3D(r * cos(lonRad) * sin(latRad),
+ r * cos(latRad),
+ r * sin(lonRad) * sin(latRad));
+}
+
+qreal realmod(const qreal a, const qreal b)
+{
+ quint64 div = static_cast<quint64>(a / b);
+ return a - static_cast<qreal>(div) * b;
+}
+
+QVector3D SphereGeometry::mercatorToPoint(double fx, double fy) const
+{
+ const double pi = 3.14159265358;
+
+ if (fy < 0.0)
+ fy = 0.0;
+ else if (fy > 1.0)
+ fy = 1.0;
+
+ double lat;
+
+ if (fy == 0.0)
+ lat = 90.0;
+ else if (fy == 1.0)
+ lat = -90.0;
+ else
+ lat = (180.0 / pi) * (2.0 * atan(exp(pi * (1.0 - 2.0 * fy))) - (pi / 2.0));
+
+ double lng;
+ if (fx >= 0) {
+ lng = realmod(fx, 1.0);
+ } else {
+ lng = realmod(1.0 - realmod(-1.0 * fx, 1.0), 1.0);
+ }
+
+ lng = lng * 360.0 - 180.0;
+
+ return coordToPoint(lat, lng);
+}
+
+QVector3D SphereGeometry::pointToCoord(const QVector3D &point) const
+{
+ const double pi = 3.14159265358;
+
+ double alt = point.length();
+ double lat = 180.0 * acos(point.y() / alt) / pi;
+ double lon = 270.0 - (180.0 * atan2(point.z(), point.x()) / pi);
+
+ if (lon < -180.0)
+ lon += 360.0;
+ if (lon >= 180.0)
+ lon -= 360.0;
+
+ return QVector3D(90.0 - lat, lon, alt);
+}
+
+QVector2D SphereGeometry::coordToMercator(const QVector2D &coord) const
+{
+ const double pi = 3.14159265358;
+
+ double lon = coord.y() / 360.0 + 0.5;
+
+ double lat = coord.x();
+ lat = 0.5 - (log(tan((pi / 4.0) + (pi / 2.0) * lat / 180.0)) / pi) / 2.0;
+ lat = qMax(0.0, lat);
+ lat = qMin(1.0, lat);
+
+ return QVector2D(lon, lat);
+}
+
+QVector2D SphereGeometry::pointToMercator(const QVector3D &point) const
+{
+ return coordToMercator(pointToCoord(point).toVector2D());
+}
+
+QVector2D SphereGeometry::coordToTile(const QVector2D &coord, int zoom, bool roundUp) const
+{
+ QVector2D p = coordToMercator(coord);
+
+ int z = 1 << zoom;
+ int x = 0;
+ int y = 0;
+
+ if (p.y() == 1.0)
+ y = z - 1;
+ else
+ y = static_cast<int>(z * p.y()) % z;
+
+ if ((qAbs(p.x()) < 1e-6) || (qAbs(p.x() - 1) < 1e-6))
+ if (roundUp)
+ x = z - 1;
+ else
+ x = 0;
+ else
+ x = static_cast<int>(z * p.x()) % z;
+
+ return QVector2D(x, y);
+}
+
+QVector2D SphereGeometry::pointToTile(const QVector3D &point, int zoom, bool roundUp) const
+{
+ return coordToTile(pointToCoord(point).toVector2D(), zoom, roundUp);
+}
diff --git a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.h b/src/location/mapsgl/map3d/spheregeometry_p.h
index 7e4ce9f8..c8e434e0 100644
--- a/src/location/maps/tiled/qgeotiledmaptextobjectinfo_p.h
+++ b/src/location/mapsgl/map3d/spheregeometry_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPTEXTOBJECT_INFO_P_H
-#define QGEOTILEDMAPTEXTOBJECT_INFO_P_H
+#ifndef SPHEREGEOMETRY_P_H
+#define SPHEREGEOMETRY_P_H
//
// W A R N I N G
@@ -53,42 +52,45 @@
// We mean it.
//
-#include "qgeotiledmapobjectinfo_p.h"
-#include "qgeoboundingbox.h"
-
-#include <QFont>
-#include <QPen>
-#include <QBrush>
+#include "qglobal.h"
QT_BEGIN_NAMESPACE
-class QGraphicsSimpleTextItem;
-
-class QGeoMapTextObject;
+class QGeoCoordinate;
+class QVector2D;
+class QVector3D;
-class QGeoTiledMapTextObjectInfo : public QGeoTiledMapObjectInfo
+class Q_LOCATION_EXPORT SphereGeometry
{
- Q_OBJECT
public:
- QGeoTiledMapTextObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapTextObjectInfo();
+ SphereGeometry();
+ SphereGeometry(double radius, int zoomLevel);
+
+ void setRadius(double radius);
+ double radius() const;
+
+// void setZoomLevel(int zoomLevel);
+// int zoomLevel() const;
- QGeoMapTextObject* text;
- QGraphicsSimpleTextItem *textItem;
+ bool operator == (const SphereGeometry &rhs) const;
-public slots:
- void textChanged(const QString &text);
- void fontChanged(const QFont &font);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
- void offsetChanged(const QPoint &offset);
- void alignmentChanged(Qt::Alignment alignment);
+ QVector3D coordToPoint(const QGeoCoordinate &coord) const;
+ QVector3D coordToPoint(double lat, double lon, double alt = 0.0) const;
+ QVector3D mercatorToPoint(double fx, double fy) const;
+
+ QVector3D pointToCoord(const QVector3D &point) const;
+
+ QVector2D coordToMercator(const QVector2D &coord) const;
+ QVector2D pointToMercator(const QVector3D &point) const;
+
+ QVector2D coordToTile(const QVector2D &coord, int zoom, bool roundUp = false) const;
+ QVector2D pointToTile(const QVector3D &point, int zoom, bool roundUp = false) const;
private:
- void doAlignment();
+ double radius_;
+ int zoomLevel_;
};
QT_END_NAMESPACE
-#endif //QGEOTILEDMAPTEXTOBJECT_INFO_P_H
-
+#endif // SPHEREGEOMETRY_P_H
diff --git a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp b/src/location/mapsgl/map3d/viewport.cpp
index 080df3e7..8acdad4c 100644
--- a/src/location/maps/tiled/qgeotiledmapcustomobjectinfo_p.cpp
+++ b/src/location/mapsgl/map3d/viewport.cpp
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,64 +38,89 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include "viewport_p.h"
-#include "qgeotiledmapcustomobjectinfo_p.h"
+#include "sphere_p.h"
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
+#include <QLinkedList>
+#include <QPair>
+#include <QMutableLinkedListIterator>
-#include "qgeomapcustomobject.h"
+#include <qglscenenode.h>
+#include <qglbuilder.h>
+#include <qglmaterial.h>
+#include <qglsphere.h>
+
+#include <cmath>
QT_BEGIN_NAMESPACE
-QGeoTiledMapCustomObjectInfo::QGeoTiledMapCustomObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
+Viewport::Viewport()
+ : viewportTiles_(ViewportTiles(1))
{
- custom = static_cast<QGeoMapCustomObject*>(mapObject);
-
- connect(custom,
- SIGNAL(triggerUpdate()),
- this,
- SLOT(updateTriggered()));
- connect(custom,
- SIGNAL(graphicsItemChanged(QGraphicsItem*)),
- this,
- SLOT(graphicsItemChanged(QGraphicsItem*)));
- connect(custom,
- SIGNAL(offsetChanged(QPoint)),
- this,
- SLOT(offsetChanged(QPoint)));
-
- graphicsItem = 0;
-
- graphicsItemChanged(this->custom->graphicsItem());
- offsetChanged(this->custom->offset());
+// viewportTiles_.setSphere(sphere_);
}
-QGeoTiledMapCustomObjectInfo::~QGeoTiledMapCustomObjectInfo()
+Viewport::~Viewport()
{
- //custom->setGraphicsItem(0);
}
-void QGeoTiledMapCustomObjectInfo::updateTriggered()
+void Viewport::setProjection(Projection3D *projection)
{
- updateItem();
+ viewportCamera_.setProjection(projection);
}
-void QGeoTiledMapCustomObjectInfo::graphicsItemChanged(QGraphicsItem * /*graphicsItem*/)
+void Viewport::setZoomLevel(int zoomLevel)
{
- graphicsItem = this->custom->graphicsItem();
- updateItem();
+ viewportTiles_.setZoomLevel(zoomLevel);
}
-void QGeoTiledMapCustomObjectInfo::offsetChanged(const QPoint &/*offset*/)
+int Viewport::zoomLevel() const
{
- QPoint offset = custom->offset();
- graphicsItem->translate(offset.x(), offset.y());
- updateItem();
+ return viewportTiles_.zoomLevel();
}
-#include "moc_qgeotiledmapcustomobjectinfo_p.cpp"
+//void Viewport::setSphere(const SphereGeometry& sphere)
+//{
+// if (sphere_ == sphere)
+// return;
-QT_END_NAMESPACE
+// sphere_ = sphere;
+// viewportTiles_.setSphere(sphere_);
+
+// calculateVisibleTiles();
+//}
+
+//SphereGeometry Viewport::sphere() const
+//{
+// return sphere_;
+//}
+
+/*
+ Updates the internal QGLCamera, the frustum, and then updates the
+ list of visible tiles.
+*/
+void Viewport::setCameraData(const CameraData &cameraData)
+{
+ viewportTiles_.setZoomLevel(cameraData.zoomLevel());
+ viewportCamera_.setCameraData(cameraData);
+
+ calculateVisibleTiles();
+}
+
+QGLCamera* Viewport::camera() const
+{
+ return viewportCamera_.toGLCamera();
+}
+
+QList<TileSpec> Viewport::visibleTiles() const
+{
+ return visibleTiles_;
+}
+void Viewport::calculateVisibleTiles()
+{
+ visibleTiles_ = viewportTiles_.visibleTiles(viewportCamera_);
+}
+
+QT_END_NAMESPACE
diff --git a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.h b/src/location/mapsgl/map3d/viewport_p.h
index b55b8479..882b2248 100644
--- a/src/location/maps/tiled/qgeotiledmaprectangleobjectinfo_p.h
+++ b/src/location/mapsgl/map3d/viewport_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H
-#define QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H
+#ifndef VIEWPORT_P_H
+#define VIEWPORT_P_H
//
// W A R N I N G
@@ -53,38 +52,55 @@
// We mean it.
//
-#include "qgeotiledmapobjectinfo_p.h"
+#include "spheregeometry_p.h"
+#include "cameradata.h"
+#include "tilespec.h"
+#include "frustum_p.h"
+
+#include "viewportcamera_p.h"
+#include "viewporttiles_p.h"
-#include <QPen>
-#include <QBrush>
+#include <QList>
+#include <QVector2D>
+#include <QVector3D>
+#include <Qt3D/qplane3d.h>
QT_BEGIN_NAMESPACE
-class QGraphicsPolygonItem;
+class QGLCamera;
+class QGLSceneNode;
-class QGeoMapRectangleObject;
+class Arc;
-class QGeoTiledMapRectangleObjectInfo : public QGeoTiledMapObjectInfo
+class Projection3D;
+
+class Q_LOCATION_EXPORT Viewport
{
- Q_OBJECT
public:
- QGeoTiledMapRectangleObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapRectangleObjectInfo();
+ Viewport();
+ ~Viewport();
+
+ void setProjection(Projection3D *projection);
- QGeoMapRectangleObject* rectangle;
- QGraphicsPolygonItem *polygonItem;
+ void setZoomLevel(int zoomLevel);
+ int zoomLevel() const;
-public slots:
- void topLeftChanged(const QGeoCoordinate &topLeft);
- void bottomRightChanged(const QGeoCoordinate &bottomRight);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
+ void setCameraData(const CameraData &cameraData);
+
+ QGLCamera* camera() const;
+
+ QList<TileSpec> visibleTiles() const;
private:
- void regenPolygon();
+ void calculateVisibleTiles();
+
+ ViewportCamera viewportCamera_;
+ ViewportTiles viewportTiles_;
+
+ QList<TileSpec> visibleTiles_;
};
QT_END_NAMESPACE
-#endif //QGEOTILEDMAPRECTANGLEOBJECT_INFO_P_H
+#endif // VIEWPORT_P_H
diff --git a/src/location/mapsgl/map3d/viewportcamera.cpp b/src/location/mapsgl/map3d/viewportcamera.cpp
new file mode 100644
index 00000000..6d8abc76
--- /dev/null
+++ b/src/location/mapsgl/map3d/viewportcamera.cpp
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "viewportcamera_p.h"
+
+#include "cameradata.h"
+
+#include "projection3d_p.h"
+
+#include <qglcamera.h>
+
+ViewportCamera::ViewportCamera()
+ : camera_(new QGLCamera()){}
+
+ViewportCamera::~ViewportCamera()
+{
+ delete camera_;
+}
+
+void ViewportCamera::setProjection(Projection3D *projection)
+{
+ projection_ = projection;
+}
+
+//void ViewportCamera::setSphere(const SphereGeometry &sphere)
+//{
+// sphere_ = sphere;
+//}
+
+void ViewportCamera::setCameraData(const CameraData &cameraData)
+{
+// sphere_.setZoomLevel(cameraData.zoomLevel());
+ double altitude = projection_->radius() * cameraData.distance();
+
+ QGeoCoordinate coord = cameraData.center();
+ coord.setAltitude(0.0);
+ center_ = projection_->coordToPoint(coord);
+ coord.setAltitude(altitude);
+ eye_ = projection_->coordToPoint(coord);
+
+ QVector3D view = eye_ - center_;
+ QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ up_ = QVector3D::normal(side, view);
+
+ QMatrix4x4 mBearing;
+ mBearing.rotate(-1.0 * cameraData.bearing(), view);
+ up_ = mBearing * up_;
+
+ QVector3D side2 = QVector3D::normal(up_, view);
+ QMatrix4x4 mTilt;
+ mTilt.rotate(cameraData.tilt(), side2);
+ eye_ = (mTilt * view) + center_;
+
+ view = eye_ - center_;
+ side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ up_ = QVector3D::normal(view, side2);
+
+ QMatrix4x4 mRoll;
+ mRoll.rotate(cameraData.roll(), view);
+ up_ = mRoll * up_;
+
+ nearPlane_ = 1.0;
+ farPlane_ = 2.0 * altitude;
+
+ viewSize_ = camera_->viewSize();
+ aspectRatio_ = cameraData.aspectRatio();
+
+ updateGLCamera();
+ updateFrustum();
+}
+
+void ViewportCamera::updateGLCamera()
+{
+ camera_->setCenter(center_);
+ camera_->setEye(eye_);
+ camera_->setUpVector(up_);
+ camera_->setNearPlane(nearPlane_);
+ camera_->setFarPlane(farPlane_);
+}
+
+void ViewportCamera::updateFrustum()
+{
+ frustum_.update(*this);
+}
+
+QVector3D ViewportCamera::center() const
+{
+ return center_;
+}
+
+QVector3D ViewportCamera::eye() const
+{
+ return eye_;
+}
+
+QVector3D ViewportCamera::up() const
+{
+ return up_;
+}
+
+QSizeF ViewportCamera::viewSize() const
+{
+ return viewSize_;
+}
+
+double ViewportCamera::aspectRatio() const
+{
+ return aspectRatio_;
+}
+
+double ViewportCamera::nearPlane() const
+{
+ return nearPlane_;
+}
+
+double ViewportCamera::farPlane() const
+{
+ return farPlane_;
+}
+
+QGLCamera* ViewportCamera::toGLCamera() const
+{
+ return camera_;
+}
+
+Frustum ViewportCamera::toFrustum() const
+{
+ return frustum_;
+}
diff --git a/src/location/mapsgl/map3d/viewportcamera_p.h b/src/location/mapsgl/map3d/viewportcamera_p.h
new file mode 100644
index 00000000..01f0f52a
--- /dev/null
+++ b/src/location/mapsgl/map3d/viewportcamera_p.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef VIEWPORTCAMERA_P_H
+#define VIEWPORTCAMERA_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QSizeF>
+#include <QVector3D>
+
+#include "spheregeometry_p.h"
+#include "cameradata.h"
+#include "frustum_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class Projection3D;
+
+class QGLCamera;
+
+class Q_AUTOTEST_EXPORT ViewportCamera {
+public:
+ ViewportCamera();
+ ~ViewportCamera();
+
+ void setProjection(Projection3D *projection);
+
+// void setSphere(const SphereGeometry &sphere);
+
+ void setCameraData(const CameraData &cameraData);
+
+ QVector3D center() const;
+ QVector3D eye() const;
+ QVector3D up() const;
+ QSizeF viewSize() const;
+ double aspectRatio() const;
+ double nearPlane() const;
+ double farPlane() const;
+
+ QGLCamera* toGLCamera() const;
+ Frustum toFrustum() const;
+
+private:
+ void updateGLCamera();
+ void updateFrustum();
+
+// SphereGeometry sphere_;
+ Projection3D *projection_;
+
+ QVector3D center_;
+ QVector3D eye_;
+ QVector3D up_;
+ QSizeF viewSize_;
+ double aspectRatio_;
+ double nearPlane_;
+ double farPlane_;
+
+ QGLCamera* camera_;
+ Frustum frustum_;
+};
+
+QT_END_NAMESPACE
+
+#endif // VIEWPORTCAMERA_P_H
diff --git a/src/location/mapsgl/map3d/viewporttiles.cpp b/src/location/mapsgl/map3d/viewporttiles.cpp
new file mode 100644
index 00000000..8dcc8774
--- /dev/null
+++ b/src/location/mapsgl/map3d/viewporttiles.cpp
@@ -0,0 +1,424 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "viewporttiles_p.h"
+#include "viewporttiles_p_p.h"
+
+#include "viewporttilesold_p.h"
+#include "viewporttilesnew_p.h"
+
+#include "tilespec.h"
+#include "cameradata.h"
+#include "spheregeometry_p.h"
+#include "sphere_p.h"
+
+#include <QVector2D>
+#include <QVector>
+
+ViewportTiles::ViewportTiles(int codePath)
+{
+ if (codePath == 1) {
+ d_ptr = new ViewportTilesPrivateOld();
+ } else {
+ d_ptr = new ViewportTilesPrivateNew();
+ }
+}
+
+ViewportTiles::~ViewportTiles()
+{
+ delete d_ptr;
+}
+
+void ViewportTiles::setZoomLevel(int zoomLevel)
+{
+ d_ptr->setZoomLevel(zoomLevel);
+}
+
+int ViewportTiles::zoomLevel() const
+{
+ return d_ptr->zoomLevel();
+}
+
+void ViewportTiles::setSphere(const SphereGeometry &sphere)
+{
+ d_ptr->setSphere(sphere);
+}
+
+QList<TileSpec> ViewportTiles::visibleTiles(const ViewportCamera &viewportCamera) const
+{
+ return d_ptr->visibleTiles(viewportCamera);
+}
+
+ViewportTilesPrivate::ViewportTilesPrivate()
+{
+}
+
+ViewportTilesPrivate::~ViewportTilesPrivate()
+{
+}
+
+void ViewportTilesPrivate::setZoomLevel(int zoomLevel)
+{
+ zoomLevel_ = zoomLevel;
+}
+
+int ViewportTilesPrivate::zoomLevel() const
+{
+ return zoomLevel_;
+}
+
+void ViewportTilesPrivate::setSphere(const SphereGeometry &sphere)
+{
+ sphere_ = sphere;
+}
+
+SphereGeometry ViewportTilesPrivate::sphere() const
+{
+ return sphere_;
+}
+
+bool sorter(const QPair<double, int> &v1, const QPair<double, int> &v2)
+{
+ return v1.first < v2.first;
+}
+
+struct TileMap2
+{
+ int minY;
+ int maxY;
+ QHash<int, QPair<int, int> > range;
+
+ void adjust(int tileX, int tileY);
+};
+
+void TileMap2::adjust(int tileX, int tileY)
+{
+ if (minY == -1)
+ minY = tileY;
+ if (maxY == -1)
+ maxY = tileY;
+
+ minY = qMin(minY, tileY);
+ maxY = qMax(maxY, tileY);
+
+ if (range.contains(tileY)) {
+ QPair<int,int> r = range[tileY];
+ range[tileY] = QPair<int, int>(qMin(r.first, tileX), qMax(r.second, tileX));
+ } else {
+ range[tileY] = QPair<int, int>(tileX, tileX);
+ }
+}
+
+/*
+ This function returns the tiles that are touched by the line
+ running from start to end at zoom level zoom.
+
+ We first determine the tiles that the start and end points are in,
+ and from that we determine the minumum and maximum tile x and tile y values.
+
+ Between the minimum and maximum y values we calculate the points at which
+ the line intersects the tile boundaries.
+
+ The tile y value is entirely determined by the y value of the point, and
+ we do some algebra to find the the point of intersection for a give tile y value.
+
+ For each intersection we store the fraction of the way along the
+ line from start-end the intersection occurs and what the new tile y value
+ should be. These are stored in a QList<<QPair<double, int> >
+
+ There is a slight difference between the case of ascending and
+ descending y values and which tile value should be stored, which is accounted for.
+
+ We do something similar for the x values, although in this case the ratio of
+ the x and z values determines where the line of intersection is.
+
+ We have to treat x > z and x < z as special cases to avoid dividing by zero.
+
+ We sort both QList<<QPair<double, int> > by the double value and initialise tileX
+ and tileY to the tile values of the starting point.
+
+ We then look at the double values at the start of both lists. If one is smaller than
+ the other we take it from the list, update tileX or tileY appropriately, and add it to
+ the list of resulting tiles. If both values are equal we need to add (tileX, newTileY),
+ (newTileX, tileY) and (newTileX, newTileY) to the results.
+
+ If either of the lists is exhausted we can just add anything that remains in the other list.
+*/
+void ViewportTilesPrivate::tilesFromArc(const Arc &arc, bool roundUp, TileMap2 &map) const
+{
+ QVector3D start = arc.start();
+ QVector3D end = arc.end();
+
+ int zpow2 = 1 << zoomLevel_;
+
+ QVector2D t1 = sphere().pointToTile(start, zoomLevel_, roundUp);
+ QVector2D t2 = sphere().pointToTile(end, zoomLevel_, roundUp);
+
+ QVector<QPair<double, int> > yVals(qAbs(t1.y() - t2.y()) + 2);
+ int yIndex = -1;
+
+ yVals[++yIndex] = QPair<double, int>(0.0, t1.y());
+ yVals[++yIndex] = QPair<double, int>(1.0, t2.y());
+
+ int yStep = t2.y() - t1.y();
+
+ if (yStep != 0) {
+
+ yStep /= qAbs(yStep);
+
+ int yAdjust = 0;
+
+ int startY = t1.y();
+ int endY = t2.y();
+ if (yStep < 0) {
+ yAdjust = -1;
+ } else {
+ ++startY;
+ ++endY;
+ }
+
+ for (int y = startY; y != endY; y += yStep) {
+ QVector3D p = sphere().mercatorToPoint(zpow2 / 2.0, y * 1.0 / zpow2);
+ QPair<double, double> factors = arc.yIntersectFactor(p.y());
+
+ bool found = false;
+ double tf;
+
+ if (factors.first != -1.0) {
+ found = true;
+ tf = factors.first;
+
+ if (factors.second != -1.0) {
+ double e1 = qAbs(p.y() - arc.interpolate(factors.first).y());
+ double e2 = qAbs(p.y() - arc.interpolate(factors.second).y());
+ if (e2 < e1)
+ tf = factors.second;
+ }
+ }
+
+ if (found) {
+ yVals[++yIndex] = QPair<double, int>(tf, y + yAdjust);
+// qWarning() << "y " << y << " factor " << tf << te;
+// } else {
+// qWarning() << " no y solution for " << y;
+ }
+ }
+
+ }
+
+ yVals.resize(yIndex + 1);
+ qSort(yVals.begin(), yVals.end(), sorter);
+
+ QVector<QPair<double, int> > xVals(qAbs(t1.x() - t2.x()) + 2);
+ int xIndex = -1;
+
+ xVals[++xIndex] = QPair<double, int>(0.0, t1.x());
+ xVals[++xIndex] = QPair<double, int>(1.0, t2.x());
+
+ int xStep = t2.x() - t1.x();
+
+ if (xStep != 0) {
+
+ xStep /= qAbs(xStep);
+
+ int xAdjust = 0;
+
+ int startX = t1.x();
+ int endX = t2.x();
+ if (xStep < 0) {
+ xAdjust = -1;
+ } else {
+ ++startX;
+ ++endX;
+ }
+
+ for (int x = startX; x != endX; x += xStep) {
+ QVector3D p = sphere().mercatorToPoint(x * 1.0 / zpow2, zpow2 / 2.0);
+ QPair<double, double> factors = arc.tIntersectFactor(p.x(), p.z());
+
+ double t;
+ if (qAbs(p.x()) < qAbs(p.z()))
+ t = p.x() / p.z();
+ else
+ t = p.z() / p.x();
+
+ bool found = false;
+ double tf;
+
+ if (factors.first != -1.0) {
+ found = true;
+ tf = factors.first;
+
+ if (factors.second != -1.0) {
+ QVector3D v = arc.interpolate(factors.first);
+ double e1 = 0.0;
+ if (qAbs(v.x()) < qAbs(v.z()))
+ e1 = qAbs(t - v.x() / v.z());
+ else
+ e1 = qAbs(t - v.z() / v.x());
+
+ v = arc.interpolate(factors.second);
+
+ double e2 = 0.0;
+ if (qAbs(v.x()) < qAbs(v.z()))
+ e2 = qAbs(t - v.x() / v.z());
+ else
+ e2 = qAbs(t - v.z() / v.x());
+
+ if (e2 < e1)
+ tf = factors.second;
+ }
+ }
+
+ if (found) {
+ xVals[++xIndex] = QPair<double, int>(tf, x + xAdjust);
+// qWarning() << "x " << x << " factor " << tf << te;
+// } else {
+// qWarning() << " no x solution for " << x;
+ }
+ }
+ }
+
+ xVals.resize(xIndex + 1);
+ qSort(xVals.begin(), xVals.end(), sorter);
+
+ int tileX = t1.x();
+ int tileY = t1.y();
+
+ int ySize = yVals.size();
+ int xSize = xVals.size();
+ yIndex = 0;
+ xIndex = 0;
+
+ map.adjust(tileX, tileY);
+
+ while ((xIndex != xSize) && (yIndex != ySize)) {
+ QPair<double, int> x = xVals.at(xIndex);
+ QPair<double, int> y = yVals.at(yIndex);
+ if (x.first < y.first) {
+ tileX = xVals.at(xIndex++).second;
+ map.adjust(tileX, tileY);
+ } else if (x.first > y.first) {
+ tileY = yVals.at(yIndex++).second;
+ map.adjust(tileX, tileY);
+ } else {
+ int tileX2 = xVals.at(xIndex++).second;
+ int tileY2 = yVals.at(yIndex++).second;
+ map.adjust(tileX, tileY2);
+ map.adjust(tileX2, tileY);
+ tileX = tileX2;
+ tileY = tileY2;
+ map.adjust(tileX, tileY);
+ }
+ }
+
+ for (int x = xIndex; x < xSize; ++x) {
+ tileX = xVals.at(x).second;
+ map.adjust(tileX, tileY);
+ }
+
+ for (int y = yIndex; y < ySize; ++y) {
+ tileY = yVals.at(y).second;
+ map.adjust(tileX, tileY);
+ }
+}
+
+/*
+ This function takes a list of points at which the view frustum intersects the world sphere,
+ and returns the list of visible tiles that are bounded by that list of points.
+
+ It is assumed that the polygon described by the list of points doesn't cross the dateline
+ or contain a pole. The visibleTiles(int zoom) function takes care of that.
+
+ The tiles along the line for each of the points are gathered, and from that we can
+ determine which tiles are contained in the polygon.
+
+ The minumum and maximum tile y values are found by a linear scan, after which we
+ determine the minimum and maximum x values for each of the y values. We request all of the
+ tile with that y value which have an x value between the minimum and maximum x values (inclusive).
+*/
+QList<TileSpec> ViewportTilesPrivate::tilesFromSpherePatch(const SpherePatch &patch) const
+{
+ QList<TileSpec> results;
+
+ int numArcs = patch.arcCount();
+
+ if (numArcs == 0)
+ return results;
+
+ TileMap2 map;
+ map.minY = -1;
+ map.maxY = -1;
+
+ for (int i = 0; i < numArcs; ++i) {
+ tilesFromArc(patch.arc(i), patch.roundUpTiles(), map);
+ }
+
+ int minY = map.minY;
+ int maxY = map.maxY;
+
+
+ for (int y = minY; y <= maxY; ++y) {
+ if (!map.range.contains(y))
+ continue;
+ int minX = map.range[y].first;
+ int maxX = map.range[y].second;
+ for (int x = minX; x <= maxX; ++x) {
+ results << TileSpec(zoomLevel_, x, y);
+ }
+ }
+
+ return results;
+}
+
+QList<TileSpec> ViewportTilesPrivate::tilesFromSphere(const Sphere &sphere) const
+{
+ QList<TileSpec> tiles;
+
+// qWarning() << "sphere";
+// qWarning() << sphere;
+
+ int numPatches = sphere.patches().size();
+ for (int i = 0; i < numPatches; ++i) {
+ tiles.append(tilesFromSpherePatch(sphere.patches().at(i)));
+ }
+
+ return tiles;
+}
diff --git a/src/location/maps/qgraphicsgeomap_p.h b/src/location/mapsgl/map3d/viewporttiles_p.h
index c3818c99..04b1da19 100644
--- a/src/location/maps/qgraphicsgeomap_p.h
+++ b/src/location/mapsgl/map3d/viewporttiles_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGRAPHICSGEOMAP_P_H
-#define QGRAPHICSGEOMAP_P_H
+#ifndef VIEWPORTTILES_P_H
+#define VIEWPORTTILES_P_H
//
// W A R N I N G
@@ -53,28 +52,31 @@
// We mean it.
//
-#include "qmobilityglobal.h"
+#include <QList>
QT_BEGIN_NAMESPACE
-class QGeoServiceProvider;
-class QGeoMappingManager;
-class QGeoMapData;
+class ViewportTilesPrivate;
+class SphereGeometry;
+class TileSpec;
+class ViewportCamera;
-class QGraphicsGeoMapPrivate
-{
+class ViewportTiles {
public:
- QGraphicsGeoMapPrivate();
- ~QGraphicsGeoMapPrivate();
+ ViewportTiles(int codePath = 1);
+ ~ViewportTiles();
+
+ void setZoomLevel(int zoomLevel);
+ int zoomLevel() const;
+
+ void setSphere(const SphereGeometry &sphere);
- QGeoMappingManager *manager;
- QGeoMapData *mapData;
- bool panActive;
+ QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const;
private:
- Q_DISABLE_COPY(QGraphicsGeoMapPrivate)
+ ViewportTilesPrivate *d_ptr;
};
QT_END_NAMESPACE
-#endif
+#endif // VIEWPORTTILES_P_H
diff --git a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.h b/src/location/mapsgl/map3d/viewporttiles_p_p.h
index e275ab56..64f6c3fd 100644
--- a/src/location/maps/tiled/qgeotiledmaprouteobjectinfo_p.h
+++ b/src/location/mapsgl/map3d/viewporttiles_p_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPROUTEOBJECT_INFO_P_H
-#define QGEOTILEDMAPROUTEOBJECT_INFO_P_H
+#ifndef VIEWPORTTILES_P_P_H
+#define VIEWPORTTILES_P_P_H
//
// W A R N I N G
@@ -53,36 +52,44 @@
// We mean it.
//
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include "qgeoroute.h"
+#include <QList>
-#include <QPen>
+#include "spheregeometry_p.h"
+#include "tilespec.h"
QT_BEGIN_NAMESPACE
-class QGraphicsPathItem;
-class QGeoMapRouteObject;
-class QGeoTiledMapRouteObjectInfo : public QGeoTiledMapObjectInfo
-{
- Q_OBJECT
+class ViewportCamera;
+
+class Sphere;
+class SpherePatch;
+class Arc;
+
+struct TileMap2;
+
+class ViewportTilesPrivate {
public:
- QGeoTiledMapRouteObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapRouteObjectInfo();
+ ViewportTilesPrivate();
+ virtual ~ViewportTilesPrivate();
- QGeoMapRouteObject *route;
- QGraphicsPathItem *pathItem;
+ void setZoomLevel(int zoomLevel);
+ int zoomLevel() const;
-public slots:
- void routeChanged(const QGeoRoute &route);
- void penChanged(const QPen &pen);
- void detailLevelChanged(quint32 detailLevel);
+ void setSphere(const SphereGeometry &sphere);
+ SphereGeometry sphere() const;
+
+ virtual QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const = 0;
+
+ QList<TileSpec> tilesFromSphere(const Sphere &sphere) const;
private:
- void regenPath();
+ QList<TileSpec> tilesFromSpherePatch(const SpherePatch &patch) const;
+ void tilesFromArc(const Arc &arc, bool roundUp, TileMap2 &map) const;
+
+ int zoomLevel_;
+ SphereGeometry sphere_;
};
QT_END_NAMESPACE
-#endif //QGEOTILEDMAPROUTEOBJECT_INFO_P_H
-
+#endif // VIEWPORTTILES_P_P_H
diff --git a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp b/src/location/mapsgl/map3d/viewporttilesnew.cpp
index 405af88e..e2df4680 100644
--- a/src/location/maps/tiled/qgeotiledmappixmapobjectinfo_p.cpp
+++ b/src/location/mapsgl/map3d/viewporttilesnew.cpp
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,59 +38,66 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include "viewporttilesnew_p.h"
-#include "qgeotiledmappixmapobjectinfo_p.h"
+#include "viewportcamera_p.h"
-#include "qgeotiledmapdata.h"
-#include "qgeotiledmapdata_p.h"
-
-#include "qgeomappixmapobject.h"
+#include "sphere_p.h"
QT_BEGIN_NAMESPACE
-QGeoTiledMapPixmapObjectInfo::QGeoTiledMapPixmapObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject)
- : QGeoTiledMapObjectInfo(mapData, mapObject)
-{
- pixmap = static_cast<QGeoMapPixmapObject*>(mapObject);
-
- connect(pixmap,
- SIGNAL(pixmapChanged(QPixmap)),
- this,
- SLOT(pixmapChanged(QPixmap)));
- connect(pixmap,
- SIGNAL(offsetChanged(QPoint)),
- this,
- SLOT(offsetChanged(QPoint)));
-
- pixmapItem = new QGraphicsPixmapItem();
- graphicsItem = pixmapItem;
-
- originChanged(this->pixmap->origin());
- pixmapChanged(this->pixmap->pixmap());
- offsetChanged(this->pixmap->offset());
-}
+ViewportTilesPrivateNew::ViewportTilesPrivateNew()
+ : debug_(false) {}
-QGeoTiledMapPixmapObjectInfo::~QGeoTiledMapPixmapObjectInfo() {}
+ViewportTilesPrivateNew::~ViewportTilesPrivateNew() {}
-void QGeoTiledMapPixmapObjectInfo::pixmapChanged(const QPixmap &/*pixmap*/)
+QList<TileSpec> ViewportTilesPrivateNew::visibleTiles(const ViewportCamera &viewportCamera) const
{
- pixmapItem->setPixmap(this->pixmap->pixmap());
- pixmapItem->setScale(1.0);
- updateItem();
-}
+ Frustum frustum = viewportCamera.toFrustum();
-void QGeoTiledMapPixmapObjectInfo::offsetChanged(const QPoint &/*offset*/)
-{
- QPoint offset = pixmap->offset();
+ Sphere sphere = Sphere(this->sphere().radius());
- QTransform trans;
- trans.translate(offset.x(), offset.y());
- pixmapItem->setTransform(trans);
+ if (debug_)
+ qWarning() << "sphere " << sphere;
- updateItem();
-}
+ sphere.intersect(frustum.plane(Frustum::Far));
-#include "moc_qgeotiledmappixmapobjectinfo_p.cpp"
+ if (debug_)
+ qWarning() << "sphere (far)" << sphere;
-QT_END_NAMESPACE
+ sphere.intersect(frustum.plane(Frustum::Left));
+
+ if (debug_)
+ qWarning() << "sphere (left)" << sphere;
+
+ sphere.intersect(frustum.plane(Frustum::Top));
+
+ if (debug_)
+ qWarning() << "sphere (top)" << sphere;
+
+ sphere.intersect(frustum.plane(Frustum::Right));
+ if (debug_)
+ qWarning() << "sphere (right)" << sphere;
+
+ sphere.intersect(frustum.plane(Frustum::Bottom));
+
+ if (debug_)
+ qWarning() << "sphere (bottom)" << sphere;
+
+ sphere.intersect(frustum.plane(Frustum::Near));
+
+ if (debug_)
+ qWarning() << "sphere (near)" << sphere;
+
+ QList<TileSpec> tiles = tilesFromSphere(sphere);
+
+ if (debug_) {
+ for (int i = 0; i < tiles.size(); ++i)
+ qWarning() << " " << tiles.at(i).x() << tiles.at(i).y();
+ }
+
+ return tiles;
+}
+
+QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapoverlay_p.h b/src/location/mapsgl/map3d/viewporttilesnew_p.h
index 491006b1..33214ab4 100644
--- a/src/location/maps/qgeomapoverlay_p.h
+++ b/src/location/mapsgl/map3d/viewporttilesnew_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOMAPOVERLAY_P_H
-#define QGEOMAPOVERLAY_P_H
+#ifndef VIEWPORTTILESNEW_P_H
+#define VIEWPORTTILESNEW_P_H
//
// W A R N I N G
@@ -53,24 +52,17 @@
// We mean it.
//
-#include "qmobilityglobal.h"
-
-QT_BEGIN_NAMESPACE
+#include "viewporttiles_p_p.h"
-class QGeoMapData;
-
-class QGeoMapOverlayPrivate
-{
+class ViewportTilesPrivateNew : public ViewportTilesPrivate {
public:
- QGeoMapOverlayPrivate();
- virtual ~QGeoMapOverlayPrivate();
+ ViewportTilesPrivateNew();
+ ~ViewportTilesPrivateNew();
- QGeoMapData *mapData;
+ QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const;
private:
- Q_DISABLE_COPY(QGeoMapOverlayPrivate)
+ bool debug_;
};
-QT_END_NAMESPACE
-
-#endif
+#endif // VIEWPORTTILESNEW_P_H
diff --git a/src/location/mapsgl/map3d/viewporttilesold.cpp b/src/location/mapsgl/map3d/viewporttilesold.cpp
new file mode 100644
index 00000000..e1cb4943
--- /dev/null
+++ b/src/location/mapsgl/map3d/viewporttilesold.cpp
@@ -0,0 +1,690 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "viewporttilesold_p.h"
+
+#include "sphere_p.h"
+#include "tilespec.h"
+#include "viewportcamera_p.h"
+
+#include <QLinkedList>
+#include <QVector2D>
+
+#include <cmath>
+
+ViewportTilesPrivateOld::ViewportTilesPrivateOld() {}
+
+ViewportTilesPrivateOld::~ViewportTilesPrivateOld() {}
+
+QList<TileSpec> ViewportTilesPrivateOld::visibleTiles(const ViewportCamera &viewportCamera) const
+{
+ Frustum frustum = viewportCamera.toFrustum();
+
+ int lineIntersections = 0;
+
+ QList<Arc> points = pointIntersections(frustum, &lineIntersections);
+
+ if (lineIntersections < 3) {
+ return visibleTilesFromPlanes(viewportCamera);
+ }
+
+ return tilesFromSphere(sphereFromArcs(points));
+}
+
+Sphere ViewportTilesPrivateOld::sphereFromArcs(QList<Arc> &arcs) const
+{
+ QList<int> zeroIndices = addDatelineCrossings(arcs);
+
+ int zeroes = zeroIndices.size();
+
+ if (zeroes == 0) {
+ QList<SpherePatch> patches;
+ patches << SpherePatch(sphere().radius(), arcs, false);
+ return Sphere(sphere().radius(), patches);
+ } else if (zeroes == 1) {
+ return sphereForPole(arcs, zeroIndices.at(0));
+ } else if (zeroes == 2) {
+ return sphereForDateline(arcs, zeroIndices.at(0), zeroIndices.at(1));
+ } else {
+ qWarning() << "zeroes: " << zeroes;
+ return Sphere(sphere().radius());
+ }
+}
+
+/*
+ We assume we a have a polygon with a pole in the middle, and a point on the dateline.
+
+ We split the polygon into two, and then add copies of each point shifted up into the
+ tile in the first or last row of tiles (for the north or south pole respectively) in
+ reverse order.
+
+ This is pretty buggy at present.
+*/
+Sphere ViewportTilesPrivateOld::sphereForPole(const QList<Arc> &arcs, int zeroIndex1) const
+{
+// QVector3D northPole = QVector3D(0, sphere().radius(), 0);
+// QVector3D southPole = QVector3D(0, -1.0 * sphere().radius(), 0);
+
+// qWarning() << "north";
+// for (int i = 0; i < size; ++i) {
+// qWarning() << " " << arcs.at(i).plane().distanceTo(northPole);
+// }
+
+// qWarning() << "south";
+// for (int i = 0; i < size; ++i) {
+// qWarning() << " " << arcs.at(i).plane().distanceTo(southPole);
+// }
+
+ int size = arcs.size();
+ double y = 0.0;
+ for (int i = 0; i < size; ++i) {
+ y += arcs.at(i).start().y();
+ }
+
+ int z = 1 << zoomLevel();
+ double newY = 0.5 / z;
+ if (y < 0.0)
+ newY = (z - 0.5) / z;
+
+ QPlane3D datelinePlane(QVector3D(0.0, 0.0, 0.0),
+ QVector3D(0.0, 0.0, 1.0));
+
+ double topY = sphere().mercatorToPoint(0, newY).y();
+
+ QPlane3D topPlane(QVector3D(0.0, topY, 0.0),
+ QVector3D(0.0, -1.0, 0.0));
+
+ QList<SpherePatch> patches;
+
+ QList<Arc> patch1;
+
+ for (int i = zeroIndex1; i < zeroIndex1 + size; ++i) {
+ int index = i % size;
+ patch1 << arcs.at(index);
+ }
+
+ QList<Arc> patch2;
+
+ for (int i = zeroIndex1; i < zeroIndex1 + size; ++i) {
+ int index = size - (i % size) - 1;
+
+ QVector2D start = sphere().pointToMercator(arcs.at(index).end());
+ QVector2D end = sphere().pointToMercator(arcs.at(index).start());
+
+ QVector3D start2 = sphere().mercatorToPoint(start.x(), newY);
+ QVector3D end2 = sphere().mercatorToPoint(end.x(), newY);
+
+ Arc a = Arc(topPlane, sphere().radius(), start2, end2);
+
+ patch2 << a;
+ }
+
+ Arc endCap1 = Arc(datelinePlane, sphere().radius(), patch1.last().end(), patch2.first().start());
+ Arc endCap2 = Arc(datelinePlane, sphere().radius(), patch2.last().end(), patch1.first().start());
+
+ QList<Arc> patch;
+
+ patch.append(patch1);
+ patch.append(endCap1);
+ patch.append(patch2);
+ patch.append(endCap2);
+
+ patches << SpherePatch(sphere().radius(), patch, false);
+
+ return Sphere(sphere().radius(), patches);
+}
+
+// This assumes that addDatelineCrossings has already been called, in which
+// case the polygon points will have points on the dateline instead of lines
+// crossing the dateline.
+
+// In that case we just need to split the polygon into two - one before the dateline
+// and one after the dateline - and add the visible tiles for both polygons.
+Sphere ViewportTilesPrivateOld::sphereForDateline(const QList<Arc> &arcs, int zeroIndex1, int zeroIndex2) const
+{
+ QList<SpherePatch> patches;
+
+ int size = arcs.size();
+
+ QList<Arc> lines1;
+ bool roundUp1 = false;
+ for (int i = zeroIndex1; i < zeroIndex2; ++i) {
+ Arc v = arcs.at(i);
+ if ((i != zeroIndex1) && (v.start().x() < 0))
+ roundUp1 = true;
+ lines1.append(v);
+ }
+
+ QPlane3D datelinePlane(QVector3D(0.0, 0.0, 0.0),
+ QVector3D(0.0, 0.0, 1.0));
+
+ lines1 << Arc(datelinePlane, sphere().radius(), lines1.last().end(), lines1.first().start());
+
+ patches << SpherePatch(sphere().radius(), lines1, roundUp1);
+
+ QList<Arc> lines2;
+ bool roundUp2 = false;
+ for (int i = zeroIndex2; i < zeroIndex1 + size; ++i) {
+ int index = i % size;
+ Arc v = arcs.at(index);
+ if ((i != zeroIndex2) && (v.start().x() < 0))
+ roundUp2 = true;
+ lines2.append(v);
+ }
+
+ lines2 << Arc(datelinePlane, sphere().radius(), lines2.last().end(), lines2.first().start());
+
+ patches << SpherePatch(sphere().radius(), lines2, roundUp2);
+
+ return Sphere(sphere().radius(), patches);
+}
+
+QList<int> ViewportTilesPrivateOld::addDatelineCrossings(QList<Arc> &points) const
+{
+ QList<int> results;
+
+ for (int i = 0; i < points.size(); ++i) {
+ Arc p = points.at(i);
+ QPair<double, double> factors = p.xIntersectFactor(0.0);
+
+ bool found = false;
+ double tf;
+ double te = 0.0;
+
+ if ((factors.first > 0.0) && (factors.first < 1.0)) {
+ QVector3D v = p.interpolate(factors.first);
+ if ((qAbs(v.x()) / sphere().radius() < 1e-6) && (v.z() >= 0.0)) {
+ found = true;
+ tf = factors.first;
+ te = qAbs(v.x());
+ }
+ }
+
+ if ((factors.second > 0.0) && (factors.second < 1.0)) {
+ QVector3D v = p.interpolate(factors.second);
+ if ((qAbs(v.x()) / sphere().radius() < 1e-6) && (v.z() >= 0.0)) {
+ if (!found || (qAbs(v.x()) < te)) {
+ found = true;
+ tf = factors.second;
+ }
+ }
+ }
+
+// for (int j = 0; j < factors.size(); ++j) {
+// double n = factors.at(j);
+// if ((n == 0.0) || (n == 1.0))
+// continue;
+
+// QVector3D v = p.interpolate(n);
+
+// double relativeError = qAbs(v.x() / sphere().radius());
+
+//// qWarning() << " checked " << i << n << v.x() << v.z() << relativeError;
+
+// if ((relativeError < 1e-6) && (v.z() >= 0)) {
+// double e = qAbs(v.x());
+// if (!found || (e < te)) {
+// tf = n;
+// te = e;
+// found = true;
+// }
+// }
+// }
+
+ if (found) {
+ QVector3D v = p.interpolate(tf);
+
+ qWarning() << " found " << tf << v.x() << v.z();
+
+ Arc q = p;
+ p.setEnd(v);
+ points[i] = p;
+ q.setStart(v);
+ points.insert(i + 1, q);
+ ++i;
+ results << i;
+ }
+ }
+
+ return results;
+
+// QVector3D s = points.at(i)
+// QVector3D e = points.at((i + 1) % points.size());
+// if ((s.x() != 0.0) && (e.x() != 0) && (s.x() != e.x())) {
+// double n = s.x() / (s.x() - e.x());
+// QVector3D v = (1.0 - n) * s + n * e;
+// if ((v.z() >= 0.0) && (0.0 <= n) && (n <= 1.0))
+// points.insert(i + 1, v);
+// }
+}
+
+bool ViewportTilesPrivateOld::LengthSorter::operator()(const IntersectionPoint &lhs, const IntersectionPoint &rhs)
+{
+ bool lPlane = (lhs.planes & base.planes);
+ bool rPlane = (rhs.planes & base.planes);
+ if (lPlane == rPlane)
+ return (lhs.point - base.point).lengthSquared() < (rhs.point - base.point).lengthSquared();
+ else
+ return lPlane;
+}
+
+/*
+ We find all of the points of intersection between the earth sphere and
+ the lines along the edges of the view frustum.
+
+ We then sort them so that form a polygon. The last point becomes
+ the first result. We then sort the points by distance^2 from the last
+ result, and the nearest point becomes the last result.
+*/
+QList<Arc> ViewportTilesPrivateOld::pointIntersections(const Frustum &frustum, int *linesIntersected) const
+{
+ QList<ViewportTilesPrivateOld::IntersectionPoint> points;
+
+ if (linesIntersected)
+ *linesIntersected = 0;
+
+ double radius = sphere().radius();
+
+ QList<ViewportTilesPrivateOld::IntersectionPoint> v;
+
+ v = lineIntersectsSphere(radius,
+ frustum.topLeftNear(),
+ frustum.topLeftFar(),
+ Frustum::TopLeftNear,
+ Frustum::TopLeftFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.topRightNear(),
+ frustum.topRightFar(),
+ Frustum::TopRightNear,
+ Frustum::TopRightFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomRightNear(),
+ frustum.bottomRightFar(),
+ Frustum::BottomRightNear,
+ Frustum::BottomRightFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomLeftNear(),
+ frustum.bottomLeftFar(),
+ Frustum::BottomLeftNear,
+ Frustum::BottomLeftFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.topLeftFar(),
+ frustum.topRightFar(),
+ Frustum::TopLeftFar,
+ Frustum::TopRightFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.topRightFar(),
+ frustum.bottomRightFar(),
+ Frustum::TopRightFar,
+ Frustum::BottomRightFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomRightFar(),
+ frustum.bottomLeftFar(),
+ Frustum::BottomRightFar,
+ Frustum::BottomLeftFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomLeftFar(),
+ frustum.topLeftFar(),
+ Frustum::BottomLeftFar,
+ Frustum::TopLeftFar);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.topLeftNear(),
+ frustum.topRightNear(),
+ Frustum::TopLeftNear,
+ Frustum::TopRightNear);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.topRightNear(),
+ frustum.bottomRightNear(),
+ Frustum::TopRightNear,
+ Frustum::BottomRightNear);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomRightNear(),
+ frustum.bottomLeftNear(),
+ Frustum::BottomRightNear,
+ Frustum::BottomLeftNear);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ v = lineIntersectsSphere(radius,
+ frustum.bottomLeftNear(),
+ frustum.topLeftNear(),
+ Frustum::BottomLeftNear,
+ Frustum::TopLeftNear);
+ if (linesIntersected && !v.isEmpty())
+ ++(*linesIntersected);
+ points.append(v);
+
+ QList<Arc> results;
+
+ if (points.isEmpty())
+ return results;
+
+ LengthSorter sorter;
+ sorter.base = points.first();
+ qSort(points.begin(), points.end(), sorter);
+ for (int i = points.size() - 1; i > 0; --i) {
+ if (points.at(i).point == points.at(i - 1).point)
+ points.removeAt(i);
+ }
+
+ QList<ViewportTilesPrivateOld::IntersectionPoint>::iterator i;
+ for (i = points.begin(); i != points.end(); ++i) {
+ sorter.base = *i;
+ if (i + 1 != points.end())
+ qSort(i + 1, points.end(), sorter);
+ }
+
+ QVector3D origin;
+
+
+ int size = points.size();
+ for (int i = 0; i < size; ++i) {
+ ViewportTilesPrivateOld::IntersectionPoint a = points.at(i);
+ ViewportTilesPrivateOld::IntersectionPoint b = points.at((i + 1) % size);
+
+
+ QPlane3D plane = frustum.plane(a.planes & b.planes);
+ if (plane.origin() != origin)
+ results << Arc(plane, sphere().radius(), a.point, b.point);
+
+// if (plane.origin() == origin) {
+// result.center = origin;
+// result.radius = sphere_.radius();
+// } else {
+// results << Arc(plane, sphere_.radius(), a.point, b.point);
+// result.center = -1.0 * plane.distanceTo(origin) * plane.normal().normalized();
+// result.radius = sqrt(sphere_.radius() * sphere_.radius() - result.center().lengthSquared());
+// }
+// result.setStart(a.point);
+// result.setEnd(b.point);
+
+// results << result;
+ }
+
+ return results;
+}
+
+/*
+ This returns the points along the line from start to end that intersect a sphere with radius \a radius.
+
+ It returns the intersection in order of proximity to start.
+*/
+QList<ViewportTilesPrivateOld::IntersectionPoint> ViewportTilesPrivateOld::lineIntersectsSphere(double radius,
+ const QVector3D &start,
+ const QVector3D &end,
+ Frustum::Planes planesStart,
+ Frustum::Planes planesEnd)
+{
+ QVector3D v = end - start;
+
+ double maxN = v.length();
+
+ v.normalize();
+
+ double b = 2 * QVector3D::dotProduct(start, v);
+ double c = start.lengthSquared() - (radius * radius);
+
+ double s = (b * b) - (4 * c);
+
+ if (s < 0)
+ return QList<ViewportTilesPrivateOld::IntersectionPoint>();
+
+ double s2 = sqrt(s);
+
+ double n1 = -1.0 * (b - s2) / 2.0;
+ if (n1 > maxN)
+ n1 = -1.0;
+ if (n1 < 0)
+ n1 = -1.0;
+
+ double n2 = -1.0 * (b + s2) / 2.0;
+ if (n2 > maxN)
+ n2 = -1.0;
+ if (n2 < 0)
+ n2 = -1.0;
+
+ if (n1 < 0.0) {
+ if (n2 >= 0)
+ n1 = n2;
+ } else if (n2 < 0) {
+ n2 = n1;
+ } else {
+ if (n2 < n1)
+ qSwap(n1, n2);
+ }
+
+ QList<ViewportTilesPrivateOld::IntersectionPoint> results;
+
+ if (n1 != -1.0) {
+ ViewportTilesPrivateOld::IntersectionPoint r1;
+
+ r1.point = interpolate(start, end, n1);
+
+ if (r1.point == start)
+ r1.planes = planesStart;
+ else if (r1.point == end)
+ r1.planes = planesEnd;
+ else
+ r1.planes = (planesStart & planesEnd);
+ results << r1;
+
+ if ((n2 != -1.0) && (n2 != n1)) {
+ ViewportTilesPrivateOld::IntersectionPoint r2;
+
+ r2.point = interpolate(start, end, n2);
+
+ if (r2.point == start)
+ r2.planes = planesStart;
+ else if (r2.point == end)
+ r2.planes = planesEnd;
+ else
+ r2.planes = (planesStart & planesEnd);
+ results << r2;
+ }
+ }
+
+ return results;
+}
+
+QVector3D ViewportTilesPrivateOld::interpolate(const QVector3D &start, const QVector3D &end, double n)
+{
+ QVector3D v = end - start;
+ v.normalize();
+ return start + n * v;
+}
+
+QPair<QVector3D, double> ViewportTilesPrivateOld::tileInfo(const TileSpec &spec) const
+{
+ int z = 1 << spec.zoom();
+
+ double xl = spec.x() * 1.0 / z;
+ double xc = (spec.x() + 0.5) / z;
+ double xr = ((spec.x() + 1) % z * 1.0) / z;
+ double yt = (spec.y() * 1.0) / z;
+ double yc = (spec.y() + 0.5) / z;
+ double yb = ((spec.y() + 1) * 1.0) / z;
+
+ QVector3D tl = sphere().mercatorToPoint(xl, yt);
+ QVector3D br = sphere().mercatorToPoint(xr, yb);
+ QVector3D c = sphere().mercatorToPoint(xc, yc);
+
+ double r = sqrt(qMax((tl - c).lengthSquared(), (br - c).lengthSquared()));
+
+ return QPair<QVector3D, double>(c, 2 * r);
+}
+
+/*
+ This is the least good of the functions in here.
+
+ It's used when we don't have enough of a frustum intersect to determine which
+ tiles to fetch analytically.
+
+ It treats tiles as spheres and then determines if the sphere is inside
+ the frustum. If it is, it considers the neighbours of the tile.
+
+ There are smarter ways to do this via plane intersection (hence the
+ function name). I'll revisit this soon.
+*/
+QList<TileSpec> ViewportTilesPrivateOld::visibleTilesFromPlanes(const ViewportCamera &viewportCamera) const
+{
+ QList<TileSpec> results;
+
+ QVector3D center = viewportCamera.center();
+ QVector3D eye = viewportCamera.eye();
+
+ QVector3D v = center - eye;
+ v.normalize();
+
+ QVector2D t = sphere().pointToTile(center, zoomLevel());
+
+ QLinkedList<TileSpec> queue;
+ QSet<TileSpec> queued;
+ QSet<TileSpec> done;
+
+ int zoom = zoomLevel();
+
+ queue << TileSpec(zoom, t.x(), t.y());
+ queued << TileSpec(zoom, t.x(), t.y());
+
+ int z = 1 << zoom;
+
+ Frustum frustum = viewportCamera.toFrustum();
+
+ while (!queue.isEmpty()) {
+ TileSpec spec = queue.takeLast();
+ QPair<QVector3D, double> info = tileInfo(spec);
+ if (frustum.contains(info.first, info.second) && (QVector3D::dotProduct(v, info.first - eye) > 0)) {
+ results << spec;
+
+ QList<TileSpec> tiles;
+
+ int xp = spec.x() - 1;
+ if (xp < 0)
+ xp = z - 1;
+ int xn = (spec.x() + 1) % z;
+
+ tiles << TileSpec(zoom, xp, spec.y());
+ tiles << TileSpec(zoom, xn, spec.y());
+
+ if (spec.y() == 0) {
+ int x2 = (spec.x() + z / 2) % z;
+ int xp2 = ((spec.x() + z / 2 - 1) % z);
+ if (xp2 < 0)
+ xp2 += z;
+ int xn2 = ((spec.x() + z / 2 + 1) % z);
+ tiles << TileSpec(zoom, xp2, spec.y());
+ tiles << TileSpec(zoom, x2, spec.y());
+ tiles << TileSpec(zoom, xn2, spec.y());
+ } else {
+ tiles << TileSpec(zoom, xp, spec.y() - 1);
+ tiles << TileSpec(zoom, spec.x(), spec.y() - 1);
+ tiles << TileSpec(zoom, xn, spec.y() - 1);
+ }
+
+ if (spec.y() == (z - 1)) {
+ int x2 = (spec.x() + z / 2) % z;
+ int xp2 = ((spec.x() + z / 2 - 1) % z);
+ if (xp2 < 0)
+ xp2 += z;
+ int xn2 = ((spec.x() + z / 2 + 1) % z);
+ tiles << TileSpec(zoom, xp2, spec.y());
+ tiles << TileSpec(zoom, x2, spec.y());
+ tiles << TileSpec(zoom, xn2, spec.y());
+ } else {
+ tiles << TileSpec(zoom, xp, spec.y() + 1);
+ tiles << TileSpec(zoom, t.x(), spec.y() + 1);
+ tiles << TileSpec(zoom, xn, spec.y() + 1);
+ }
+
+ for (int i = 0; i < tiles.size(); ++i) {
+ TileSpec ts = tiles.at(i);
+ if (!done.contains(ts) && !queued.contains(ts)) {
+ queue << ts;
+ queued << ts;
+ }
+ }
+ }
+ done << spec;
+ queued.remove(spec);
+ }
+
+ return results;
+}
diff --git a/src/location/projwrapper_p.h b/src/location/mapsgl/map3d/viewporttilesold_p.h
index e0a7040a..8a2a7414 100644
--- a/src/location/projwrapper_p.h
+++ b/src/location/mapsgl/map3d/viewporttilesold_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,10 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-
-#ifndef PROJWRAPPER_P_H
-#define PROJWRAPPER_P_H
+#ifndef VIEWPORTTILESOLD_P_H
+#define VIEWPORTTILESOLD_P_H
//
// W A R N I N G
@@ -54,76 +52,57 @@
// We mean it.
//
-#include "qmobilityglobal.h"
-#include <QSharedDataPointer>
-#include <QString>
-#include <QList>
-#include <QPolygonF>
-
-QT_BEGIN_NAMESPACE
-
-class ProjCoordinate;
-class QGeoCoordinate;
-
-class ProjCoordinateSystemPrivate;
-class ProjCoordinateSystem
-{
-public:
- ProjCoordinateSystem(const QString &projection = QString::fromLatin1("+proj=latlon +ellps=WGS84"), bool latLon=true);
- ProjCoordinateSystem(const ProjCoordinateSystem &other);
- ~ProjCoordinateSystem();
+#include "viewporttiles_p_p.h"
- bool isLatLon() const;
+#include "frustum_p.h"
-private:
- QSharedDataPointer<ProjCoordinateSystemPrivate> d;
+QT_BEGIN_NAMESPACE
- friend class ProjCoordinate;
-};
+class ViewportCamera;
-class ProjPolygon;
+class Arc;
-class ProjCoordinatePrivate;
-class ProjCoordinate
-{
+class ViewportTilesPrivateOld : public ViewportTilesPrivate {
public:
- ProjCoordinate(double x, double y, double z, const ProjCoordinateSystem &system);
- ProjCoordinate(const ProjCoordinate &other);
- ~ProjCoordinate();
+ ViewportTilesPrivateOld();
+ ~ViewportTilesPrivateOld();
- double x() const;
- double y() const;
- double z() const;
+ QList<TileSpec> visibleTiles(const ViewportCamera &viewportCamera) const;
- QGeoCoordinate toGeoCoordinate() const;
+private:
+ void calculateVisibleTiles();
- bool convert(const ProjCoordinateSystem &system);
+ class IntersectionPoint {
+ public:
+ Frustum::Planes planes;
+ QVector3D point;
+ bool operator == (const IntersectionPoint &rhs) const {
+ return ((planes == rhs.planes) && (point == rhs.point));
+ }
+ };
- ProjCoordinate &operator=(const ProjCoordinate &other);
+ class LengthSorter {
+ public:
+ IntersectionPoint base;
+ bool operator()(const IntersectionPoint &lhs, const IntersectionPoint &rhs);
+ };
-private:
- ProjCoordinatePrivate *d;
+ QList<Arc> pointIntersections(const Frustum &frustum, int *linesIntersected = 0) const;
- friend class ProjPolygon;
-};
+ Sphere sphereFromArcs(QList<Arc> &arcs) const;
-class ProjPolygonPrivate;
-class ProjPolygon : public QList<ProjCoordinate>
-{
-public:
- ProjPolygon(const ProjCoordinateSystem &system);
- ProjPolygon(const QPolygonF &poly, const ProjCoordinateSystem &system, double scale=1.0);
- ~ProjPolygon();
+ Sphere sphereForPole(const QList<Arc> &Arcs, int zeroIndex1) const;
+ Sphere sphereForDateline(const QList<Arc> &arcs, int zeroIndex1, int zeroIndex2) const;
- void scalarMultiply(double sx, double sy, double sz);
+ static QList<IntersectionPoint> lineIntersectsSphere(double radius, const QVector3D &start, const QVector3D &end, Frustum::Planes planesStart, Frustum::Planes planesEnd);
+ static QVector3D interpolate(const QVector3D &start, const QVector3D &end, double n);
- bool convert(const ProjCoordinateSystem &system);
- QPolygonF toPolygonF(double scale=1.0) const;
+ QList<int> addDatelineCrossings(QList<Arc> &points) const;
-private:
- ProjPolygonPrivate *d;
+ QPair<QVector3D, double> tileInfo(const TileSpec &spec) const;
+ QList<TileSpec> visibleTilesFromPlanes(const ViewportCamera &viewportCamera) const;
};
QT_END_NAMESPACE
-#endif // PROJWRAPPER_P_H
+#endif // VIEWPORTTILESOLD_P_H
diff --git a/src/location/mapsgl/map_p.h b/src/location/mapsgl/map_p.h
new file mode 100644
index 00000000..37aaeb9c
--- /dev/null
+++ b/src/location/mapsgl/map_p.h
@@ -0,0 +1,154 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef MAP_P_H
+#define MAP_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QList>
+#include <QSet>
+
+#include "cameradata.h"
+#include "frustum_p.h"
+
+#include <QSharedPointer>
+
+class QGeoMappingManager;
+
+class Tile;
+class TileCache;
+class TileSpec;
+class Map;
+class MapSphere;
+class Projection;
+class MapItem;
+
+class QGLCamera;
+class QGLSceneNode;
+class QGLPainter;
+
+class MapPrivate
+{
+public:
+ MapPrivate(Map *parent, TileCache *cache);
+ virtual ~MapPrivate();
+
+ void setMappingManager(QGeoMappingManager *manager);
+
+ QGLCamera* glCamera() const;
+ void paintGL(QGLPainter *painter);
+
+ QSharedPointer<Projection> projection() const;
+
+ void setCameraData(const CameraData &cameraData);
+ CameraData cameraData() const;
+
+ void resize(int width, int height);
+
+ virtual QGLSceneNode* createTileNode(const Tile &tile) = 0;
+
+ void update();
+
+ int numMapItems() const;
+ MapItem* mapItem(int index) const;
+ QList<MapItem*> mapItems() const;
+ void addMapItem(MapItem *item);
+ void removeMapItem(MapItem *item);
+ void clearMapItems();
+
+ virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos) const = 0;
+ virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate) const = 0;
+
+ QVector2D pointToTile(const QVector3D &point, int zoom, bool roundUp = false) const;
+ QVector3D tileXIntersectToPoint(int zoomLevel, int x) const;
+ QVector3D tileYIntersectToPoint(int zoomLevel, int y) const;
+
+protected:
+ Frustum frustum() const;
+
+ void setProjection(const QSharedPointer<Projection> &projection);
+
+ int width() const;
+ int height() const;
+ double aspectRatio() const;
+
+ QGeoMappingManager* manager() const;
+
+private:
+ virtual void updateGlCamera(QGLCamera* glCamera) = 0;
+ virtual void updateFrustum(Frustum &frustum) = 0;
+ virtual QList<TileSpec> updateVisibleTiles() = 0;
+ virtual void updateMapItemSceneNode(MapItem *item) = 0;
+ void GLContextAvailable();
+
+ int width_;
+ int height_;
+ double aspectRatio_;
+
+ QGeoMappingManager *manager_;
+
+ QSharedPointer<Projection> projection_;
+
+ QGLCamera *glCamera_;
+ QGLSceneNode *mapSceneNode_;
+ QGLSceneNode *objectSceneNode_;
+
+ CameraData cameraData_;
+ Frustum frustum_;
+ QList<TileSpec> visibleTiles_;
+
+ MapSphere *sphere_;
+
+ QList<MapItem*> mapItems_;
+ QSet<MapItem*> obsoleteItems_;
+ QSet<MapItem*> newItems_;
+};
+
+#endif // MAP_P_H
diff --git a/src/location/mapsgl/mapitem.cpp b/src/location/mapsgl/mapitem.cpp
new file mode 100644
index 00000000..7bd98497
--- /dev/null
+++ b/src/location/mapsgl/mapitem.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "mapitem.h"
+
+#include <Qt3D/qglscenenode.h>
+#include <Qt3D/qgltexture2d.h>
+#include <Qt3D/qglmaterial.h>
+
+MapItem::MapItem()
+ : zoom_(8.0),
+ sceneNode_(0),
+ textureId_(0), // invalid value according to specs
+ textureDirty_(false),
+ texture_(0),
+ defaultMaterial_(0)
+{
+ // TODO optimize the defaultMaterial be common for all
+ defaultMaterial_ = new QGLMaterial();
+ defaultMaterial_->setColor(QColor(255, 128, 0));
+ defaultMaterial_->setSpecularColor(QColor(255, 128, 0));
+ defaultMaterial_->setDiffuseColor(QColor(255, 128, 0));
+ defaultMaterial_->setShininess(1.0);
+}
+
+MapItem::~MapItem()
+{
+ delete defaultMaterial_;
+}
+
+void MapItem::setCoordinate(const QGeoCoordinate &coordinate)
+{
+ coordinate_ = coordinate;
+}
+
+QGeoCoordinate MapItem::coordinate() const
+{
+ return coordinate_;
+}
+
+void MapItem::setAnchor(const QPointF &anchor)
+{
+ anchor_ = anchor;
+}
+
+void MapItem::setTextureId(GLuint textureId)
+{
+ if (textureId_ == textureId)
+ return;
+ textureId_ = textureId;
+ textureDirty_ = true;
+}
+
+GLuint MapItem::textureId()
+{
+ return textureId_;
+}
+
+// Note: this function 'must be only' / 'is guaranteed only to be called'
+// when running in the thread that has valid GL context (rendering thread).
+// TODO refactor this function, poorly written
+void MapItem::update()
+{
+ if (!textureDirty_ || !sceneNode_)
+ return;
+ textureDirty_ = false;
+ if (texture_) {
+ // todo this will likely crash..
+ sceneNode_->material()->setTexture(0);
+ sceneNode_->material()->setColor(QColor(255, 128, 0));
+ sceneNode_->material()->setSpecularColor(QColor(255, 128, 0));
+ sceneNode_->material()->setDiffuseColor(QColor(255, 128, 0));
+ sceneNode_->material()->setShininess(1.0);
+ sceneNode_->setEffect(QGL::LitMaterial);
+ delete texture_;
+ texture_ = 0;
+ }
+ if (textureId_ != 0) {
+ texture_ = QGLTexture2D::fromTextureId(textureId_, size_.toSize()); // todo optimize out the .toSize() call
+ sceneNode_->material()->setTexture(texture_);
+ sceneNode_->setEffect(QGL::LitDecalTexture2D);
+ }
+}
+
+QGLTexture2D* MapItem::texture()
+{
+ return texture_;
+}
+
+QPointF MapItem::anchor() const
+{
+ return anchor_;
+}
+
+void MapItem::setSize(const QSizeF &size)
+{
+ size_ = size;
+}
+
+QSizeF MapItem::size() const
+{
+ return size_;
+}
+
+void MapItem::setZoom(double zoom)
+{
+ zoom_ = zoom;
+}
+
+double MapItem::zoom() const
+{
+ return zoom_;
+}
+
+void MapItem::setSceneNode(QGLSceneNode *sceneNode)
+{
+ if (sceneNode_ == sceneNode)
+ return;
+ sceneNode_ = sceneNode;
+ if (sceneNode_ && !sceneNode_->material()) {
+ // todo figure out default material setting if
+ // texture for any reason disappears. this crashes:
+ //sceneNode_->setMaterial(defaultMaterial_);
+ }
+}
+
+QGLSceneNode* MapItem::sceneNode() const
+{
+ return sceneNode_;
+}
diff --git a/src/location/maps/qgeomapobject_p.h b/src/location/mapsgl/mapitem.h
index 0d0c160a..906667ca 100644
--- a/src/location/maps/qgeomapobject_p.h
+++ b/src/location/mapsgl/mapitem.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,53 +38,58 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef MAPITEM_H
+#define MAPITEM_H
-#ifndef QGEOMAPOBJECT_P_H
-#define QGEOMAPOBJECT_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qgeomapobject.h"
-#include "qgeomapobjectinfo.h"
#include "qgeocoordinate.h"
-
+#include <QPointF>
+#include <QSizeF>
+#include <QtOpenGL/qgl.h>
QT_BEGIN_NAMESPACE
-class QGraphicsItem;
-class QGeoMapObject;
-class QGeoMapData;
+class QGLTexture2D;
+class QGLMaterial;
+class QGLSceneNode;
-class QGeoMapObjectPrivate
+class Q_LOCATION_EXPORT MapItem
{
public:
- QGeoMapObjectPrivate();
- virtual ~QGeoMapObjectPrivate();
+ MapItem();
+ ~MapItem();
+
+ void setCoordinate(const QGeoCoordinate &coordinate);
+ QGeoCoordinate coordinate() const;
+
+ void setTextureId(GLuint textureId);
+ GLuint textureId();
+ QGLTexture2D* texture();
+ void update();
+
+ void setAnchor(const QPointF &anchor);
+ QPointF anchor() const;
- int zValue;
- quint32 serial;
- bool isVisible;
- bool isSelected;
+ void setSize(const QSizeF &size);
+ QSizeF size() const;
- QGeoMapData *mapData;
- mutable QGeoMapObjectInfo *info;
+ void setZoom(double zoom);
+ double zoom() const;
- QGeoMapObject::CoordinateUnit units;
- QGeoMapObject::TransformType transType;
- QGeoCoordinate origin;
+ void setSceneNode(QGLSceneNode *sceneNode);
+ QGLSceneNode* sceneNode() const;
- Q_DISABLE_COPY(QGeoMapObjectPrivate)
+private:
+ QGeoCoordinate coordinate_;
+ QPointF anchor_;
+ QSizeF size_;
+ double zoom_;
+ QGLSceneNode* sceneNode_;
+ GLuint textureId_;
+ bool textureDirty_;
+ QGLTexture2D* texture_;
+ QGLMaterial* defaultMaterial_;
};
QT_END_NAMESPACE
-#endif
+#endif // MAPITEM_H
diff --git a/src/location/mapsgl/mapsgl.pri b/src/location/mapsgl/mapsgl.pri
new file mode 100644
index 00000000..59f40f08
--- /dev/null
+++ b/src/location/mapsgl/mapsgl.pri
@@ -0,0 +1,33 @@
+
+INCLUDEPATH += mapsgl
+
+QT += network
+CONFIG += qt3d
+
+include(map2d/map2d.pri)
+include(map3d/map3d.pri)
+
+SOURCES += \
+ mapsgl/cameradata.cpp \
+ mapsgl/frustum.cpp \
+ mapsgl/map.cpp \
+ mapsgl/mapitem.cpp \
+ mapsgl/mapsphere.cpp \
+ mapsgl/projection.cpp \
+ mapsgl/tilecache.cpp \
+ mapsgl/tile.cpp \
+ mapsgl/tilespec.cpp
+
+PUBLIC_HEADERS += \
+ mapsgl/cameradata.h \
+ mapsgl/map.h \
+ mapsgl/mapitem.h \
+ mapsgl/tilecache.h \
+ mapsgl/tile.h \
+ mapsgl/tilespec.h
+
+PRIVATE_HEADERS += \
+ mapsgl/frustum_p.h \
+ mapsgl/map_p.h \
+ mapsgl/mapsphere_p.h \
+ mapsgl/projection_p.h
diff --git a/src/location/mapsgl/mapsphere.cpp b/src/location/mapsgl/mapsphere.cpp
new file mode 100644
index 00000000..529d88e6
--- /dev/null
+++ b/src/location/mapsgl/mapsphere.cpp
@@ -0,0 +1,234 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "mapsphere_p.h"
+
+#include "tilecache.h"
+#include "tilespec.h"
+#include "tile.h"
+#include "map.h"
+#include "map_p.h"
+
+#include <Qt3D/qglscenenode.h>
+
+#include <QVector>
+
+MapSphere::MapSphere(Map* map, MapPrivate *mapPrivate, TileCache *tileCache)
+ : QObject(0),
+ tileCache_(tileCache),
+ mapPrivate_(mapPrivate)
+{
+
+ sphereNode_ = new QGLSceneNode(this);
+
+ connect(tileCache_,
+ SIGNAL(prefetchingFinished()),
+ this,
+ SLOT(prefetchingFinished()));
+ connect(tileCache_,
+ SIGNAL(tileFetched(TileSpec)),
+ this,
+ SLOT(tileFetched(TileSpec)));
+
+ connect(this,
+ SIGNAL(tileUpdated()),
+ map,
+ SIGNAL(updateRequired()));
+
+ connect(this,
+ SIGNAL(sphereUpdated()),
+ map,
+ SIGNAL(updatesFinished()));
+}
+
+MapSphere::~MapSphere()
+{
+ QList<QGLSceneNode*> nodes = built_.values();
+ for (int i = 0; i < nodes.size(); ++i) {
+ QGLSceneNode *node = nodes.at(i);
+ //node->material()->texture()->release();
+ node->geometry().clear();
+ sphereNode_->removeNode(node);
+ delete node;
+ }
+}
+
+void MapSphere::setMappingManager(QGeoMappingManager *manager)
+{
+ tileCache_->setMappingManager(manager);
+}
+
+QGLSceneNode* MapSphere::sphereSceneNode() const
+{
+ return sphereNode_;
+}
+
+void MapSphere::clearCache()
+{
+ // clear cache
+}
+
+// Function to perform housekeeping that require access to GL context
+// (access to GL context varies depending on if we are running as
+// c++ app or QML app).
+void MapSphere::GLContextAvailable()
+{
+ // need something like this in the cache for
+ // releasing textures and freeing nodes that
+ // have been evicted from the GPU
+ tileCache_->GLContextAvailable(sphereNode_);
+// qDeleteAll(obsoleteNodes_);
+// obsoleteNodes_.clear();
+}
+
+void MapSphere::update(const QList<TileSpec> &tiles)
+{
+ QHash<TileSpec, QGLSceneNode*> stillBuilt;
+
+ QVector<TileSpec> req(tiles.size());
+ QVector<TileSpec> draw(tiles.size());
+
+ int reqSize = 0;
+ int drawSize = 0;
+ QList<TileSpec>::const_iterator i = tiles.constBegin();
+ QList<TileSpec>::const_iterator tilesEnd = tiles.constEnd();
+ while (i != tilesEnd) {
+ bool use = true;
+
+ /*
+ If the tile is already built or has been requested then we
+ shouldn't use it (where "use" means drawing a cached tile or
+ requested an uncached tile).
+ */
+
+ if (built_.contains(*i)) {
+ stillBuilt.insert(*i, built_.value(*i));
+ use = false;
+ } else if (requested_.contains(*i)){
+ use = false;
+ }
+
+ /*
+ Otherwise we add it to the correct list
+ */
+
+ if (use) {
+ if (tileCache_->contains(*i)) {
+ draw[drawSize] = *i;
+ ++drawSize;
+ } else {
+ req[reqSize] = *i;
+ ++reqSize;
+ requested_.insert(*i);
+ }
+ }
+
+ ++i;
+ }
+
+ req.resize(reqSize);
+// draw.resize(drawSize);
+
+ updateMutex.lock();
+
+ QHash<TileSpec, QGLSceneNode*>::const_iterator j = built_.constBegin();
+ QHash<TileSpec, QGLSceneNode*>::const_iterator end = built_.constEnd();
+ while (j != end) {
+ TileSpec spec = j.key();
+ if (!stillBuilt.contains(spec)) {
+ sphereNode_->removeNode(j.value());
+ }
+ ++j;
+ }
+ built_.swap(stillBuilt);
+
+ updateMutex.unlock();
+
+ for (int i = 0; i < drawSize; ++i)
+ displayTile(draw.at(i));
+
+ if (req.isEmpty()) {
+ emit sphereUpdated();
+ } else {
+ tileCache_->prefetch(req.toList());
+ }
+}
+
+void MapSphere::prefetchingFinished()
+{
+ emit sphereUpdated();
+}
+
+void MapSphere::tileFetched(const TileSpec &spec)
+{
+ if (!requested_.contains(spec))
+ return;
+
+ displayTile(spec);
+
+ requested_.remove(spec);
+
+ emit tileUpdated();
+}
+
+void MapSphere::displayTile(const TileSpec &spec)
+{
+ if (built_.contains(spec))
+ return;
+
+ updateMutex.lock();
+ Tile tile = tileCache_->get(spec);
+ QGLSceneNode *node = tile.sceneNode();
+ if (!node) {
+ node = mapPrivate_->createTileNode(tile);
+ tile.setSceneNode(node);
+ tile.bind();
+ tileCache_->update(spec, tile);
+ }
+ if (node) {
+ sphereNode_->addNode(node);
+ built_.insert(spec, node);
+ }
+ updateMutex.unlock();
+
+// qWarning() << tileCache_->diskUsage() << tileCache_->maxDiskUsage()
+// << tileCache_->memoryUsage() << tileCache_->maxMemoryUsage()
+// << tileCache_->textureUsage() << tileCache_->maxTextureUsage();
+}
diff --git a/src/location/maps/qgeomapdata_p.h b/src/location/mapsgl/mapsphere_p.h
index 1bd1ccc5..95d015a1 100644
--- a/src/location/maps/qgeomapdata_p.h
+++ b/src/location/mapsgl/mapsphere_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOMAPDATA_P_H
-#define QGEOMAPDATA_P_H
+#ifndef MAPSPHERE_H
+#define MAPSPHERE_H
//
// W A R N I N G
@@ -53,58 +52,71 @@
// We mean it.
//
-#include "qgeomapgroupobject.h"
+#include "qglobal.h"
-#include <QGraphicsScene>
-#include <QGraphicsItem>
-#include "qgeocoordinate.h"
-#include "qgraphicsgeomap.h"
-#include <private/projwrapper_p.h>
+#include <QObject>
+#include <QSet>
+#include <QHash>
#include <QList>
+#include <QMutex>
+
QT_BEGIN_NAMESPACE
-class QGeoMappingManagerEngine;
-class QGeoMapObjectEngine;
-class QGeoMapOverlay;
+class QGLSceneNode;
+
+class TileSpec;
+class TileCache;
+
+class Map;
+class MapPrivate;
+
+class QGeoMappingManager;
-class QGeoMapDataPrivate : public QObject
+class Q_LOCATION_EXPORT MapSphere : public QObject
{
Q_OBJECT
public:
- QGeoMapDataPrivate(QGeoMapData *parent, QGeoMappingManagerEngine *engine);
- virtual ~QGeoMapDataPrivate();
+ MapSphere(Map* map, MapPrivate *mapPrivate, TileCache *tileCache);
+ ~MapSphere();
- QGeoMappingManagerEngine *engine;
- QGeoMapGroupObject* containerObject;
+ void setMappingManager(QGeoMappingManager *manager);
- qreal zoomLevel;
- QPointF shiftSinceLastInval;
- qreal bearing;
- qreal tilt;
- QGeoCoordinate center;
- QSizeF windowSize;
- QGraphicsGeoMap::MapType mapType;
- QGraphicsGeoMap::ConnectivityMode connectivityMode;
+ QGLSceneNode* sphereSceneNode() const;
- QList<QGeoMapOverlay*> overlays;
+ // TODO Quick temporary thread protection.
+ QMutex updateMutex;
+ // when running as QML app we can't access GL context anywhere
+ // but QSG rendering thread.
+ void GLContextAvailable();
- bool blockPropertyChangeSignals;
+public slots:
+ void clearCache();
+ void update(const QList<TileSpec> &tiles);
- virtual void addObject(QGeoMapObject *object);
- virtual void removeObject(QGeoMapObject *object);
- void clearObjects();
+private slots:
+ void tileFetched(const TileSpec &spec);
+ void prefetchingFinished();
- virtual QPointF coordinateToScreenPosition(double lon, double lat) const;
+signals:
+ void tileUpdated();
+ void sphereUpdated();
- void emitUpdateMapDisplay(const QRectF &target = QRectF());
-
- QGeoMapData *q_ptr;
- Q_DECLARE_PUBLIC(QGeoMapData)
private:
- Q_DISABLE_COPY(QGeoMapDataPrivate)
+ void displayTile(const TileSpec &spec);
+
+ TileCache *tileCache_;
+ int minZoom_;
+
+ QSet<TileSpec> requested_;
+ QHash<TileSpec, QGLSceneNode*> built_;
+
+ QGLSceneNode* sphereNode_;
+
+ MapPrivate* mapPrivate_;
+ QList<QGLSceneNode*> obsoleteNodes_;
};
QT_END_NAMESPACE
-#endif
+#endif // MAPSPHERE_H
diff --git a/src/location/mapsgl/projection.cpp b/src/location/mapsgl/projection.cpp
new file mode 100644
index 00000000..906fe47f
--- /dev/null
+++ b/src/location/mapsgl/projection.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "projection_p.h"
+
+#include "qgeocoordinate.h"
+
+#include <qvector2d.h>
+#include <qvector3d.h>
+#include <QMatrix4x4>
+#include <qnumeric.h>
+
+#include <cmath>
+
+Projection::Projection() {}
+
+Projection::~Projection() {}
+
+QVector3D Projection::mercatorToPoint(const QVector2D &mercator) const
+{
+ return this->coordToPoint(mercatorToCoord(mercator));
+}
+
+QVector2D Projection::pointToMercator(const QVector3D &point) const
+{
+ return coordToMercator(this->pointToCoord(point));
+}
+
+QVector2D Projection::coordToMercator(const QGeoCoordinate &coord) const
+{
+ const double pi = M_PI;
+
+ double lon = coord.longitude() / 360.0 + 0.5;
+
+ double lat = coord.latitude();
+ lat = 0.5 - (log(tan((pi / 4.0) + (pi / 2.0) * lat / 180.0)) / pi) / 2.0;
+ lat = qMax(0.0, lat);
+ lat = qMin(1.0, lat);
+
+ return QVector2D(lon, lat);
+}
+
+double Projection::realmod(const double a, const double b)
+{
+ quint64 div = static_cast<quint64>(a / b);
+ return a - static_cast<double>(div) * b;
+}
+
+QGeoCoordinate Projection::mercatorToCoord(const QVector2D &mercator) const
+{
+ const double pi = M_PI;
+
+ double fx = mercator.x();
+ double fy = mercator.y();
+
+ if (fy < 0.0)
+ fy = 0.0;
+ else if (fy > 1.0)
+ fy = 1.0;
+
+ double lat;
+
+ if (fy == 0.0)
+ lat = 90.0;
+ else if (fy == 1.0)
+ lat = -90.0;
+ else
+ lat = (180.0 / pi) * (2.0 * atan(exp(pi * (1.0 - 2.0 * fy))) - (pi / 2.0));
+
+ double lng;
+ if (fx >= 0) {
+ lng = realmod(fx, 1.0);
+ } else {
+ lng = realmod(1.0 - realmod(-1.0 * fx, 1.0), 1.0);
+ }
+
+ lng = lng * 360.0 - 180.0;
+
+ return QGeoCoordinate(lat, lng, 0.0);
+}
diff --git a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.h b/src/location/mapsgl/projection_p.h
index 1dec8a55..d3585503 100644
--- a/src/location/maps/tiled/qgeotiledmappolygonobjectinfo_p.h
+++ b/src/location/mapsgl/projection_p.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,9 +38,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#ifndef QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H
-#define QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H
+#ifndef PROJECTION_H
+#define PROJECTION_H
//
// W A R N I N G
@@ -53,38 +52,34 @@
// We mean it.
//
-#include "qgeotiledmapobjectinfo_p.h"
-
-#include <QPen>
-#include <QBrush>
-#include <QPolygonF>
-
+#include "qglobal.h"
QT_BEGIN_NAMESPACE
-class QGraphicsPolygonItem;
-class QGeoMapPolygonObject;
+class QGeoCoordinate;
+class QVector2D;
+class QVector3D;
-class QGeoTiledMapPolygonObjectInfo : public QGeoTiledMapObjectInfo
+class Q_AUTOTEST_EXPORT Projection
{
- Q_OBJECT
public:
- QGeoTiledMapPolygonObjectInfo(QGeoTiledMapData *mapData, QGeoMapObject *mapObject);
- ~QGeoTiledMapPolygonObjectInfo();
+ Projection();
+ virtual ~Projection();
- QGeoMapPolygonObject *polygon;
- QGraphicsPolygonItem *polygonItem;
+ virtual QVector3D coordToPoint(const QGeoCoordinate &coord) const = 0;
+ virtual QGeoCoordinate pointToCoord(const QVector3D &point) const = 0;
-public slots:
- void pathChanged(const QList<QGeoCoordinate> &path);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
+ QVector2D coordToMercator(const QGeoCoordinate &coord) const;
+ QGeoCoordinate mercatorToCoord(const QVector2D &mercator) const;
+ virtual QVector3D mercatorToPoint(const QVector2D &mercator) const;
+ virtual QVector2D pointToMercator(const QVector3D &point) const;
+
+ virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) = 0;
private:
- void genPoly();
+ static double realmod(const double a, const double b);
};
QT_END_NAMESPACE
-#endif //QGEOTILEDMAPPOLYGONOBJECT_INFO_P_H
-
+#endif // PROJECTION_H
diff --git a/src/imports/location/qdeclarativegeomapobjectborder.cpp b/src/location/mapsgl/tile.cpp
index d0364410..4e1d24a1 100644
--- a/src/imports/location/qdeclarativegeomapobjectborder.cpp
+++ b/src/location/mapsgl/tile.cpp
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,49 +38,75 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include "tile.h"
-#include "qdeclarativegeomapobjectborder_p.h"
-
-#include <QColor>
-#include <QBrush>
+#include <Qt3D/qgltexture2d.h>
+#include <Qt3D/qglscenenode.h>
QT_BEGIN_NAMESPACE
-QDeclarativeGeoMapObjectBorder::QDeclarativeGeoMapObjectBorder(QObject *parent)
- : QObject(parent),
- m_width(1) {}
+Tile::Tile() {}
-QDeclarativeGeoMapObjectBorder::~QDeclarativeGeoMapObjectBorder() {}
+Tile::Tile(const TileSpec &spec)
+ : spec_(spec),
+ texture_(0),
+ sceneNode_(0),
+ bound_(false) {}
-void QDeclarativeGeoMapObjectBorder::setColor(const QColor &color)
+bool Tile::operator == (const Tile &rhs) const
{
- if (m_color == color)
- return;
+ return (spec_ == rhs.spec_);
+}
+
+void Tile::setTileSpec(const TileSpec &spec)
+{
+ spec_ = spec;
+}
+
+TileSpec Tile::tileSpec() const
+{
+ return spec_;
+}
+
+void Tile::setTexture(QGLTexture2D *texture)
+{
+ texture_ = texture;
+}
+
+QGLTexture2D* Tile::texture() const
+{
+ return texture_;
+}
- m_color = color;
- emit colorChanged(m_color);
+void Tile::setSceneNode(QGLSceneNode *sceneNode)
+{
+ sceneNode_ = sceneNode;
}
-QColor QDeclarativeGeoMapObjectBorder::color() const
+QGLSceneNode* Tile::sceneNode() const
{
- return m_color;
+ return sceneNode_;
}
-void QDeclarativeGeoMapObjectBorder::setWidth(int width)
+void Tile::bind()
{
- if (m_width == width || width <= 0)
+ if (bound_)
return;
- m_width = width;
- emit widthChanged(width);
+ texture_->bind();
+// texture_->clearImage();
+
+ bound_ = true;
}
-int QDeclarativeGeoMapObjectBorder::width() const
+void Tile::setBound(bool bound)
{
- return m_width;
+ bound_ = bound;
}
-#include "moc_qdeclarativegeomapobjectborder_p.cpp"
+bool Tile::isBound() const
+{
+ return bound_;
+}
QT_END_NAMESPACE
-
diff --git a/src/location/maps/qgeomapoverlay.h b/src/location/mapsgl/tile.h
index 2e887282..6a83bf78 100644
--- a/src/location/maps/qgeomapoverlay.h
+++ b/src/location/mapsgl/tile.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,44 +38,46 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef TILE_H
+#define TILE_H
-#ifndef QGEOMAPOVERLAY_H
-#define QGEOMAPOVERLAY_H
+#include "qglobal.h"
-#include "qmobilityglobal.h"
-
-#include <QList>
-#include <QObject>
+#include "tilespec.h"
QT_BEGIN_NAMESPACE
-class QPainter;
-class QStyleOptionGraphicsItem;
-
-class QGeoMapData;
-class QGeoMapOverlayPrivate;
+class QGLTexture2D;
+class QGLSceneNode;
-class Q_LOCATION_EXPORT QGeoMapOverlay
+class Q_LOCATION_EXPORT Tile
{
public:
- QGeoMapOverlay();
- virtual ~QGeoMapOverlay();
+ Tile();
+ Tile(const TileSpec &spec);
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option) = 0;
+ bool operator == (const Tile &rhs) const;
-protected:
- QGeoMapData const * mapData() const;
+ void setTileSpec(const TileSpec &spec);
+ TileSpec tileSpec() const;
-private:
- void setMapData(QGeoMapData * mapData);
+ void setTexture(QGLTexture2D *texture);
+ QGLTexture2D* texture() const;
- QGeoMapOverlayPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapOverlay)
- Q_DISABLE_COPY(QGeoMapOverlay)
+ void setSceneNode(QGLSceneNode *sceneNode);
+ QGLSceneNode *sceneNode() const;
- friend class QGeoMapData;
+ void bind();
+ void setBound(bool bound);
+ bool isBound() const;
+
+private:
+ TileSpec spec_;
+ QGLTexture2D *texture_;
+ QGLSceneNode *sceneNode_;
+ bool bound_;
};
QT_END_NAMESPACE
-#endif
+#endif // TILE_H
diff --git a/src/location/mapsgl/tilecache.cpp b/src/location/mapsgl/tilecache.cpp
new file mode 100644
index 00000000..50111e2e
--- /dev/null
+++ b/src/location/mapsgl/tilecache.cpp
@@ -0,0 +1,455 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "tilecache.h"
+
+#include "tile.h"
+#include "tilespec.h"
+
+#include "qgeomappingmanager.h"
+
+#include <QDir>
+#include <QRegExp>
+#include <QThread>
+#include <QMetaType>
+#include <QDebug>
+
+#include <Qt3D/qgltexture2d.h>
+#include <Qt3D/qglscenenode.h>
+
+Q_DECLARE_METATYPE(TileSpec)
+Q_DECLARE_METATYPE(QList<TileSpec>)
+
+struct TileDisk
+{
+ ~TileDisk()
+ {
+// qWarning() << "evicting (disk) " << spec;
+ cache->evictFromDiskCache(this);
+ }
+
+ TileSpec spec;
+ QString filename;
+ TileCache *cache;
+};
+
+struct TileMemory
+{
+ ~TileMemory()
+ {
+// qWarning() << "evicting (memory) " << spec;
+ cache->evictFromMemoryCache(this);
+ }
+
+ TileSpec spec;
+ QPixmap pixmap;
+ TileCache *cache;
+};
+
+struct TileTexture
+{
+ ~TileTexture()
+ {
+// qWarning() << "evicting (texture) " << spec;
+ cache->evictFromTextureCache(this);
+ }
+
+ TileSpec spec;
+ bool bound;
+ QGLTexture2D *texture;
+ QGLSceneNode *node;
+ TileCache *cache;
+};
+
+TileCache::TileCache(
+ const QString &directory,
+ QObject *parent)
+ : QObject(parent),
+ directory_(directory)
+{
+ qRegisterMetaType<TileSpec>();
+ qRegisterMetaType<QList<TileSpec> >();
+
+
+ if (directory_.isEmpty()) {
+ QString dirname = QLatin1String(".tilecache");
+ QDir home = QDir::home();
+ if (!home.exists(dirname))
+ home.mkdir(dirname);
+ directory_ = home.filePath(dirname);
+ }
+ qDebug() << __FUNCTION__ << directory_;
+
+ diskCache_.setMaxCost(100 * 1024 * 1024);
+ memoryCache_.setMaxCost(50 * 1024 * 1024);
+ textureCache_.setMaxCost(100 * 1024 * 1024);
+
+ loadTiles();
+}
+
+TileCache::~TileCache()
+{
+ delete manager_;
+}
+
+void TileCache::setMappingManager(QGeoMappingManager *manager)
+{
+ manager_ = manager;
+ connect(manager_,
+ SIGNAL(tileFinished(TileSpec,QByteArray)),
+ this,
+ SLOT(insert(TileSpec,QByteArray)));
+ connect(manager_,
+ SIGNAL(tileError(TileSpec,QString)),
+ this,
+ SLOT(handleError(TileSpec,QString)));
+ connect(manager_,
+ SIGNAL(queueFinished()),
+ this,
+ SIGNAL(prefetchingFinished()));
+}
+
+void TileCache::setMaxDiskUsage(int diskUsage)
+{
+ diskCache_.setMaxCost(diskUsage);
+}
+
+int TileCache::maxDiskUsage() const
+{
+ return diskCache_.maxCost();
+}
+
+int TileCache::diskUsage() const
+{
+ return diskCache_.totalCost();
+}
+
+void TileCache::setMaxMemoryUsage(int memoryUsage)
+{
+ memoryCache_.setMaxCost(memoryUsage);
+}
+
+int TileCache::maxMemoryUsage() const
+{
+ return memoryCache_.maxCost();
+}
+
+int TileCache::memoryUsage() const
+{
+ return memoryCache_.totalCost();
+}
+
+void TileCache::setMaxTextureUsage(int textureUsage)
+{
+ textureCache_.setMaxCost(textureUsage);
+}
+
+int TileCache::maxTextureUsage() const
+{
+ return textureCache_.maxCost();
+}
+
+int TileCache::textureUsage() const
+{
+ return textureCache_.totalCost();
+}
+
+void TileCache::prefetch(const QList<TileSpec> &tiles)
+{
+ if (!manager_)
+ return;
+
+ manager_->requestTiles(tiles);
+}
+
+void TileCache::GLContextAvailable(QGLSceneNode *parentNode)
+{
+ int size = cleanupList_.size();
+ for (int i = 0; i < size; ++i) {
+ Tile t = cleanupList_.at(i);
+ QGLSceneNode *node = t.sceneNode();
+ if (node) {
+ parentNode->removeNode(node);
+ delete node;
+ }
+ QGLTexture2D *texture = t.texture();
+ if (texture) {
+ texture->release();
+ delete texture;
+ }
+ }
+ cleanupList_.clear();
+}
+
+bool TileCache::contains(const TileSpec &spec) const
+{
+ return keys_.contains(spec);
+}
+
+Tile TileCache::get(const TileSpec &spec)
+{
+ if (textureCache_.contains(spec)) {
+ TileTexture *tt = textureCache_.object(spec);
+
+ Tile t = Tile(tt->spec);
+ t.setTexture(tt->texture);
+ t.setSceneNode(tt->node);
+ t.setBound(tt->bound);
+ return t;
+ }
+// if (memoryCache_.contains(spec)) {
+// TileMemory *tm = memoryCache_.object(spec);
+// TileTexture *tt = addToTextureCache(tm->spec, tm->pixmap);
+
+// Tile t = Tile(tt->spec);
+// t.setTexture(tt->texture);
+// t.setSceneNode(tt->node);
+// t.setBound(tt->bound);
+// return t;
+// }
+ if (diskCache_.contains(spec)) {
+ TileDisk *td = diskCache_.object(spec);
+// TileMemory *tm = addToMemoryCache(td->spec, QPixmap(td->filename));
+// TileTexture *tt = addToTextureCache(tm->spec, tm->pixmap);
+ TileTexture *tt = addToTextureCache(td->spec, QPixmap(td->filename));
+
+ Tile t = Tile(tt->spec);
+ t.setTexture(tt->texture);
+ t.setSceneNode(tt->node);
+ t.setBound(tt->bound);
+ return t;
+ }
+
+ return Tile();
+}
+
+// TODO rename so this is less strange
+// OR do node creation in here somehow
+void TileCache::update(const TileSpec &spec, const Tile &tile)
+{
+ TileTexture *tt = textureCache_.object(spec);
+ if (tt) {
+ tt->node = tile.sceneNode();
+ tt->texture = tile.texture();
+ tt->bound = tile.isBound();
+ }
+}
+
+void TileCache::insert(const TileSpec &spec, const QByteArray &bytes)
+{
+ keys_.insert(spec);
+
+ QString filename = tileSpecToFilename(spec, directory_);
+
+ QPixmap pixmap;
+ if (!pixmap.loadFromData(bytes)) {
+ handleError(spec, QLatin1String("Problem with tile image"));
+ return;
+ }
+
+ QFile file(filename);
+ file.open(QIODevice::WriteOnly);
+ file.write(bytes);
+ file.close();
+
+ addToDiskCache(spec, filename);
+// addToMemoryCache(spec, pixmap);
+ addToTextureCache(spec, pixmap);
+
+ emit tileFetched(spec);
+}
+
+void TileCache::evictFromDiskCache(TileDisk *td)
+{
+ keys_.remove(td->spec);
+ QFile::remove(td->filename);
+}
+
+void TileCache::evictFromMemoryCache(TileMemory */*tm*/)
+{
+}
+
+void TileCache::evictFromTextureCache(TileTexture *tt)
+{
+ Tile t(tt->spec);
+ t.setTexture(tt->texture);
+ t.setSceneNode(tt->node);
+ cleanupList_ << t;
+}
+
+TileDisk* TileCache::addToDiskCache(const TileSpec &spec, const QString &filename)
+{
+ keys_.insert(spec);
+
+// qWarning() << "adding (disk) " << spec;
+
+ TileDisk *td = new TileDisk;
+ td->spec = spec;
+ td->filename = filename;
+ td->cache = this;
+
+ QFileInfo fi(filename);
+ int diskCost = fi.size();
+
+ diskCache_.insert(spec,
+ td,
+ diskCost);
+
+ return td;
+}
+
+TileMemory* TileCache::addToMemoryCache(const TileSpec &spec, const QPixmap &pixmap)
+{
+ keys_.insert(spec);
+
+// qWarning() << "adding (memory) " << spec;
+
+ TileMemory *tm = new TileMemory;
+ tm->spec = spec;
+ tm->pixmap = pixmap;
+ tm->cache = this;
+
+ int memoryCost = pixmap.width() * pixmap.height() * pixmap.depth() / 8;
+
+ memoryCache_.insert(spec,
+ tm,
+ memoryCost);
+
+ return tm;
+}
+
+TileTexture* TileCache::addToTextureCache(const TileSpec &spec, const QPixmap &pixmap)
+{
+ keys_.insert(spec);
+
+// qWarning() << "adding (texture) " << spec;
+
+ TileTexture *tt = new TileTexture;
+ tt->spec = spec;
+ tt->texture = new QGLTexture2D();
+ tt->texture->setPixmap(pixmap);
+ tt->texture->setHorizontalWrap(QGL::ClampToEdge);
+ tt->texture->setVerticalWrap(QGL::ClampToEdge);
+
+// tt->texture->bind();
+// tt->texture->clearImage();
+
+ tt->node = 0;
+ tt->cache = this;
+
+ int textureCost = pixmap.width() * pixmap.height() * pixmap.depth() / 8;;
+
+ textureCache_.insert(spec,
+ tt,
+ textureCost);
+
+ return tt;
+}
+
+void TileCache::handleError(const TileSpec &, const QString &error)
+{
+ qWarning() << "tile request error " << error;
+}
+
+void TileCache::loadTiles()
+{
+ QStringList formats;
+ formats << QLatin1String("*.png");
+
+ QDir dir(directory_);
+ //QStringList files = dir.entryList(formats, QDir::Files, QDir::Time | QDir::Reversed);
+ QStringList files = dir.entryList(formats, QDir::Files);
+
+ qDebug() << __FUNCTION__ << "tiles: " << files.size();
+ for (int i = 0; i < files.size(); ++i) {
+
+ TileSpec spec = filenameToTileSpec(files.at(i));
+ if (spec.zoom() == -1)
+ continue;
+ QString filename = dir.filePath(files.at(i));
+ qDebug() << __FUNCTION__ << "tile iteration: " << i;
+ addToDiskCache(spec, filename);
+ }
+}
+
+QString TileCache::tileSpecToFilename(const TileSpec &spec, const QString &directory)
+{
+ QString filename = QString::number(spec.zoom());
+ filename += QLatin1String("-");
+ filename += QString::number(spec.x());
+ filename += QLatin1String("-");
+ filename += QString::number(spec.y());
+ filename += QLatin1String(".png");
+
+ QDir dir = QDir(directory);
+
+ return dir.filePath(filename);
+}
+
+TileSpec TileCache::filenameToTileSpec(const QString &filename)
+{
+ TileSpec spec;
+ QRegExp r(QLatin1String("(\\d+)-(\\d+)-(\\d+).png"));
+
+ int index = r.indexIn(filename);
+ if (index != -1) {
+ bool ok = false;
+
+ int zoom = r.cap(1).toInt(&ok);
+ if (!ok)
+ return spec;
+
+ ok = false;
+ int x = r.cap(2).toInt(&ok);
+ if (!ok)
+ return spec;
+
+ ok = false;
+ int y = r.cap(3).toInt(&ok);
+ if (!ok)
+ return spec;
+
+ spec.setZoom(zoom);
+ spec.setX(x);
+ spec.setY(y);
+ }
+
+ return spec;
+}
diff --git a/src/location/mapsgl/tilecache.h b/src/location/mapsgl/tilecache.h
new file mode 100644
index 00000000..8dba2221
--- /dev/null
+++ b/src/location/mapsgl/tilecache.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TILECACHE_H
+#define TILECACHE_H
+
+#include "qmobilityglobal.h"
+
+#include <QObject>
+#include <QCache>
+#include <QSet>
+
+class QGeoMappingManager;
+
+class TileSpec;
+class Tile;
+
+class TileDisk;
+class TileMemory;
+class TileTexture;
+
+class QGLSceneNode;
+
+class QPixmap;
+class QThread;
+
+class Q_LOCATION_EXPORT TileCache : public QObject
+{
+ Q_OBJECT
+public:
+ TileCache(const QString &directory = QString(), QObject *parent = 0);
+ ~TileCache();
+
+ void setMappingManager(QGeoMappingManager *manager);
+
+ void setMaxDiskUsage(int diskUsage);
+ int maxDiskUsage() const;
+ int diskUsage() const;
+
+ void setMaxMemoryUsage(int memoryUsage);
+ int maxMemoryUsage() const;
+ int memoryUsage() const;
+
+ void setMaxTextureUsage(int textureUsage);
+ int maxTextureUsage() const;
+ int textureUsage() const;
+
+ void GLContextAvailable(QGLSceneNode *parentNode);
+
+ bool contains(const TileSpec &spec) const;
+ Tile get(const TileSpec &spec);
+
+ void update(const TileSpec &spec, const Tile &tile);
+
+ void prefetch(const QList<TileSpec> &tiles);
+
+ void evictFromDiskCache(TileDisk *td);
+ void evictFromMemoryCache(TileMemory *tm);
+ void evictFromTextureCache(TileTexture *tt);
+
+private slots:
+ void insert(const TileSpec &spec, const QByteArray &bytes);
+ void handleError(const TileSpec &spec, const QString &errorString);
+
+signals:
+ void beginPrefetch(const QList<TileSpec> &tiles);
+ void tileFetched(const TileSpec &spec);
+ void prefetchingFinished();
+
+private:
+ void loadTiles();
+
+ TileDisk* addToDiskCache(const TileSpec &spec, const QString &filename);
+ TileMemory* addToMemoryCache(const TileSpec &spec, const QPixmap &pixmap);
+ TileTexture* addToTextureCache(const TileSpec &spec, const QPixmap &pixmap);
+
+ static QString tileSpecToFilename(const TileSpec &spec, const QString &directory);
+ static TileSpec filenameToTileSpec(const QString &filename);
+
+ QString directory_;
+
+ int diskSize_;
+ int memorySize_;
+ int textureSize_;
+
+ QSet<TileSpec> keys_;
+ QCache<TileSpec, TileDisk > diskCache_;
+ QCache<TileSpec, TileMemory > memoryCache_;
+ QCache<TileSpec, TileTexture > textureCache_;
+
+ QList<Tile> cleanupList_;
+
+ QGeoMappingManager *manager_;
+};
+
+
+#endif // TILECACHE_H
diff --git a/src/location/mapsgl/tilecamera.cpp b/src/location/mapsgl/tilecamera.cpp
new file mode 100644
index 00000000..9c10f423
--- /dev/null
+++ b/src/location/mapsgl/tilecamera.cpp
@@ -0,0 +1,261 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "tilecamera.h"
+
+#include "spheregeometry.h"
+
+#include <QVector3D>
+#include <qnumeric.h>
+#include <qglcamera.h>
+
+#include <cmath>
+
+TileCamera::TileCamera()
+ : latitude_(-27.5),
+ longitude_(153),
+ distance_(0.1),
+ bearing_(0.0),
+ tilt_(0.0),
+ aspectRatio_(1.0),
+ camera_(new QGLCamera())
+{
+}
+
+TileCamera::~TileCamera()
+{
+ delete camera_;
+}
+
+// Up and right units are bit obscure still, fixme
+void TileCamera::rotateCamera(const SphereGeometry & sphere, double up, double right)
+{
+ QVector3D view = camera_->eye() - camera_->center();
+ QVector3D side = QVector3D::normal(view, camera_->upVector());
+ QMatrix4x4 rotationMatrix;
+ // First determine how big angle and about which axis' to rotate
+ // and express them with a rotation matrix (spherical rotation around origin)
+ rotationMatrix.rotate(right / sphere.zoomLevel(), camera_->upVector());
+ rotationMatrix.rotate(up / sphere.zoomLevel(), side);
+ // Then rotate the eye and center of the camera
+ camera_->setCenter(camera_->center() * rotationMatrix);
+ camera_->setEye(camera_->eye() * rotationMatrix);
+}
+
+void TileCamera::setCamera(const SphereGeometry &sphere,
+ double latitude,
+ double longitude,
+ double distance,
+ double bearing,
+ double tilt,
+ double aspectRatio)
+{
+ QVector3D c = sphere.coordToPoint(latitude, longitude);
+ QVector3D e = sphere.coordToPoint(latitude, longitude, sphere.radius() * distance);
+
+ camera_->setCenter(c);
+ camera_->setEye(e);
+
+ QVector3D view = camera_->eye() - camera_->center();
+ QVector3D side = QVector3D::normal(view, QVector3D(0.0, 1.0, 0.0));
+ QVector3D up = QVector3D::normal(side, view);
+
+ // define rotation around view vector and apply it to up vector
+ QMatrix4x4 mBearing;
+ mBearing.rotate(-1.0 * bearing, view);
+ camera_->setUpVector(mBearing * up);
+
+ // define rotation around new side vector and apply it to eye
+ QVector3D side2 = QVector3D::normal(mBearing * up, view);
+ QMatrix4x4 mTilt;
+ mTilt.rotate(tilt, side2);
+ camera_->setEye((mTilt * view) + c);
+
+ // reset the up vector after tilting
+ view = camera_->eye() - camera_->center();
+ up = QVector3D::normal(view, side2);
+ camera_->setUpVector(up);
+
+ // set near and far planes
+ camera_->setNearPlane(1);
+ camera_->setFarPlane(2.0 * sphere.radius() * distance);
+ zoom_ = sphere.zoomLevel();
+}
+
+/* TODO improve zoomCamera a lot. Current implementation is very hacky.
+
+ @factor: fractions of a zoom level to zoom in. Doubling a zoom level
+ roughly doubles the distance from the earth.
+
+ @detailPreference: whether the distance from the earth should be that of the eye from
+ closest point on earth, or from eye to center (center is where we are looking at).
+
+ */
+void TileCamera::zoomCamera(SphereGeometry& sphere, double factor, DetailPreference detailPreference)
+{
+ if (!(-1.0 < factor && factor < 1.0)) {
+ qWarning() << "Zoom factor must be between -1.0 and 1.0, you gave: " << factor;
+ return;
+ }
+
+ QVector3D view = camera_->eye() - camera_->center();
+ Q_ASSERT(view.length() > 0.0);
+ double viewVectorLength = view.length();
+ double eyeVectorLength = camera_->eye().length();
+ double sphereRadius = sphere.radius();
+ double zoomDistance;
+ if (detailPreference == DetailPreferenceNear) {
+ qDebug() << "Zooming, preferring details/tiles near, factor: " << factor;
+ double viewEyeDotProduct = QVector3D::dotProduct(view, camera_->eye());
+ // Dodgy, fixme
+ bool zoomOut = false;
+ if (factor < 0.0) {
+ factor = -factor;
+ zoomOut = true;
+ }
+ factor += 1.0;
+ // Look for the multiplication factor so that multiplying the view with the factor
+ // will result in eye height changing according to given factor.
+ double sqrtResult = sqrt(pow(viewEyeDotProduct, 2) - 4 * pow(viewVectorLength, 2) * (pow(eyeVectorLength, 2) - pow(sphereRadius + factor * eyeVectorLength - factor * sphereRadius , 2)));
+ double viewVectorFactor = (-viewEyeDotProduct + sqrtResult) / (2 * pow(viewVectorLength, 2));
+ // Dodgy, fixme
+ if (!zoomOut)
+ camera_->setEye(camera_->eye() - view * viewVectorFactor);
+ else
+ camera_->setEye(view * viewVectorFactor + camera_->eye());
+ // Fixme, far too big farplane (no pun intended)
+ view = camera_->eye() - camera_->center();
+ camera_->setFarPlane(sphere.radius() + view.length());
+ zoomDistance = camera_->eye().length() - sphere.radius();
+ } else if (detailPreference == DetailPreferenceCenter) {
+ qDebug() << "Zooming, preferring details/tiles at center, factor: " << factor;
+ factor = -factor;
+ factor += 1;
+ camera_->setEye(camera_->center() + view * factor);
+ view = camera_->eye() - camera_->center();
+ camera_->setFarPlane(sphere.radius() + view.length());
+ zoomDistance = view.length();
+ } else {
+ qWarning("Unsupported detail preference for zoom.");
+ return;
+ }
+ // Adjust sphere zoom level if necessary
+ double maxZoomLevel = 18; // TODO this needs to come from the current plugin
+ double zoomCoefficient = 0.5; // TODO just initial guess
+ int zoomLevel = int(maxZoomLevel - log(zoomDistance / zoomCoefficient) / log(2.0));
+ qDebug() << "Zoom, tilesphere zoom was : " << sphere.zoomLevel();
+ qDebug() << "Zoom level (fractional) would be : " << maxZoomLevel - log2(zoomDistance / zoomCoefficient);
+ if ((int)zoomLevel != sphere.zoomLevel() && zoomLevel < maxZoomLevel && zoomLevel >= 0) {
+ sphere.setZoomLevel(int(zoomLevel));
+// sphere.update(*this);
+ }
+}
+
+// Can be done like this if quaternions ease the animation
+//void TileCamera::tiltCamera(double tilt, QQuaternion = QQuaternion()) {
+// {
+// if (!quaternion.isIdentity()) // use quaternion. However, keeping track of 'tilt_' needs to be done
+// ...
+// else // use tilt angle
+
+void TileCamera::tiltCamera(const SphereGeometry& sphere, double tilt)
+{
+ Q_ASSERT(!qIsNaN(tilt));
+ camera_->rotateCenter(camera_->tilt(tilt));
+ // Don't fall through the sphere surface
+ if (camera_->eye().length() - sphere.radius() < 0.0) {
+ qDebug() << "Camera tilt safestop, would go through earth.";
+ camera_->rotateCenter(camera_->tilt(-tilt));
+ }
+}
+
+void TileCamera::rollCamera(const SphereGeometry& sphere, double roll)
+{
+ Q_UNUSED(sphere);
+ Q_ASSERT(!qIsNaN(roll));
+ camera_->rotateCenter(camera_->roll(roll));
+}
+
+void TileCamera::panCamera(const SphereGeometry& sphere, double pan)
+{
+ Q_ASSERT(!qIsNaN(pan));
+ camera_->rotateCenter(camera_->pan(pan));
+ if (camera_->eye().length() - sphere.radius() < 0.0) {
+ qDebug() << "Camera pan safety stop, would go through earth.";
+ camera_->rotateCenter(camera_->pan(-pan));
+ }
+}
+
+QGLCamera* TileCamera::camera() const
+{
+ return camera_;
+}
+
+QVector3D TileCamera::eye() const
+{
+ return camera_->eye();
+}
+
+QVector3D TileCamera::view(double x, double y) const
+{
+ double fov = atan(camera_->viewSize().height() / (2 * camera_->nearPlane()));
+
+ double hf = 2 * tan(fov) * camera_->farPlane();
+ double wf = hf * aspectRatio_;
+
+ QVector3D p = camera_->eye();
+ QVector3D d = camera_->center() - camera_->eye();
+ d.normalize();
+
+ QVector3D up = camera_->upVector();
+ up.normalize();
+
+ QVector3D right = QVector3D::normal(d, up);
+
+ double x1 = qMin(qMax(x, 0.0), 1.0) - 0.5;
+ double y1 = qMin(qMax(y, 0.0), 1.0) - 0.5;
+
+ QVector3D c = d * camera_->farPlane();
+ c += up * hf * y1;
+ c += right * wf * x1;
+
+ return c.normalized();
+}
+
diff --git a/src/location/maps/qgeomapgroupobject.h b/src/location/mapsgl/tilecamera.h
index 364e01fd..5fde909b 100644
--- a/src/location/maps/qgeomapgroupobject.h
+++ b/src/location/mapsgl/tilecamera.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,50 +38,59 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef TILECAMERA_H
+#define TILECAMERA_H
-#ifndef QGEOMAPGROUPOBJECT_H
-#define QGEOMAPGROUPOBJECT_H
-
-#include "qgeomapobject.h"
+#include "qglobal.h"
QT_BEGIN_NAMESPACE
-class QGeoCoordinate;
-class QGeoBoundingBox;
-class QGeoMapGroupObjectPrivate;
+class SphereGeometry;
+class QGLCamera;
+class QGLSceneNode;
+class QVector3D;
-class Q_LOCATION_EXPORT QGeoMapGroupObject : public QGeoMapObject
+class Q_LOCATION_EXPORT TileCamera
{
- Q_OBJECT
public:
- QGeoMapGroupObject();
- ~QGeoMapGroupObject();
-
- QGeoMapObject::Type type() const;
-
- QGeoBoundingBox boundingBox() const;
- bool contains(const QGeoCoordinate &coordinate) const;
+ TileCamera();
+ ~TileCamera();
- QList<QGeoMapObject*> childObjects() const;
- void addChildObject(QGeoMapObject *childObject);
- void removeChildObject(QGeoMapObject *childObject);
- void clearChildObjects();
+ enum DetailPreference {
+ DetailPreferenceNear,
+ DetailPreferenceCenter
+ };
- void setVisible(bool visible);
+ // Reset the camera (to look at lon,lat, with given distance, tilt etc.)
+ void setCamera(const SphereGeometry &sphere,
+ double latitude,
+ double longitude,
+ double distance,
+ double bearing,
+ double tilt,
+ double aspectRatio);
+ void tiltCamera(const SphereGeometry& sphere, double tilt);
+ void rollCamera(const SphereGeometry& sphere, double roll);
+ void panCamera(const SphereGeometry& sphere, double pan);
+ void rotateCamera(const SphereGeometry& sphere, double up, double right);
+ void zoomCamera(SphereGeometry& sphere, double factor, DetailPreference detailPreference = DetailPreferenceNear);
- void setMapData(QGeoMapData *mapData);
+ QGLCamera* camera() const;
-Q_SIGNALS:
- void childAdded(QGeoMapObject *childObject);
- void childUpdated(QGeoMapObject *childObject);
- void childRemoved(QGeoMapObject *childObject);
+ QVector3D eye() const;
+ QVector3D view(double x, double y) const;
private:
- QGeoMapGroupObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapGroupObject)
- Q_DISABLE_COPY(QGeoMapGroupObject)
+ double latitude_;
+ double longitude_;
+ double distance_;
+ double bearing_;
+ double tilt_;
+ double zoom_;
+ double aspectRatio_;
+ QGLCamera* camera_;
};
QT_END_NAMESPACE
-#endif
+#endif // TILECAMERA_H
diff --git a/src/location/maps/qgeomappolygonobject.h b/src/location/mapsgl/tilespec.cpp
index a293f0af..17d51682 100644
--- a/src/location/maps/qgeomappolygonobject.h
+++ b/src/location/mapsgl/tilespec.cpp
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,53 +38,93 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#include "tilespec.h"
+#include <QDebug>
-#ifndef QGEOMAPPOLYGONOBJECT_H
-#define QGEOMAPPOLYGONOBJECT_H
+QT_BEGIN_NAMESPACE
-#include "qgeomapobject.h"
+TileSpec::TileSpec()
+ : zoom_(-1),
+ x_(-1),
+ y_(-1) {}
-#include <QList>
-#include <QPen>
-#include <QBrush>
+TileSpec::TileSpec(int zoom, int x, int y)
+ : zoom_(zoom),
+ x_(x),
+ y_(y) {}
-QT_BEGIN_NAMESPACE
+void TileSpec::setZoom(int zoom)
+{
+ zoom_ = zoom;
+}
-class QGeoMapPolygonObjectPrivate;
+int TileSpec::zoom() const
+{
+ return zoom_;
+}
-class Q_LOCATION_EXPORT QGeoMapPolygonObject : public QGeoMapObject
+void TileSpec::setX(int x)
{
- Q_OBJECT
- Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged)
+ x_ = x;
+}
-public:
- QGeoMapPolygonObject();
- ~QGeoMapPolygonObject();
+int TileSpec::x() const
+{
+ return x_;
+}
- QGeoMapObject::Type type() const;
+void TileSpec::setY(int y)
+{
+ y_ = y;
+}
- void setPath(const QList<QGeoCoordinate> &path);
- QList<QGeoCoordinate> path() const;
+int TileSpec::y() const
+{
+ return y_;
+}
- void setPen(const QPen &pen);
- QPen pen() const;
+bool TileSpec::operator == (const TileSpec &rhs) const
+{
+ if (zoom_ != rhs.zoom_)
+ return false;
- void setBrush(const QBrush &brush);
- QBrush brush() const;
+ if (x_ != rhs.x_)
+ return false;
-Q_SIGNALS:
- void pathChanged(const QList<QGeoCoordinate> &path);
- void penChanged(const QPen &pen);
- void brushChanged(const QBrush &brush);
+ if (y_ != rhs.y_)
+ return false;
-private:
- QGeoMapPolygonObjectPrivate *d_ptr;
- Q_DECLARE_PRIVATE(QGeoMapPolygonObject)
- Q_DISABLE_COPY(QGeoMapPolygonObject)
-};
+ return true;
+}
-QT_END_NAMESPACE
+bool TileSpec::operator < (const TileSpec &rhs) const
+{
+ if (zoom_ < rhs.zoom_)
+ return true;
+ if (zoom_ > rhs.zoom_)
+ return false;
+
+ if (x_ < rhs.x_)
+ return true;
+ if (x_ > rhs.x_)
+ return false;
+
+ return (y_ < rhs.y_);
-#endif
+}
+
+unsigned int qHash(const TileSpec &spec)
+{
+ unsigned int result = (spec.zoom() * 17) % 31;
+ result += ((spec.x() * 19) % 31) << 5;
+ result += ((spec.y() * 23) % 31) << 10;
+ return result;
+}
+
+QDebug operator<< (QDebug dbg, const TileSpec &spec)
+{
+ dbg << spec.zoom() << spec.x() << spec.y();
+ return dbg;
+}
+
+QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapgroupobject_p.h b/src/location/mapsgl/tilespec.h
index 9971b533..121ed08e 100644
--- a/src/location/maps/qgeomapgroupobject_p.h
+++ b/src/location/mapsgl/tilespec.h
@@ -1,10 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Mobility Components.
+** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
@@ -38,36 +38,41 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef TILESPEC_H
+#define TILESPEC_H
-#ifndef QGEOMAPGROUPOBJECT_P_H
-#define QGEOMAPGROUPOBJECT_P_H
-
-#include "qgeomapobject.h"
-
-#include <QObject>
-#include <QList>
+#include "qglobal.h"
QT_BEGIN_NAMESPACE
-class QGeoMapGroupObject;
-
-class QGeoMapGroupObjectPrivate : public QObject
+class Q_LOCATION_EXPORT TileSpec
{
- Q_OBJECT
public:
- QGeoMapGroupObjectPrivate(QGeoMapGroupObject *p);
- ~QGeoMapGroupObjectPrivate();
+ TileSpec();
+ TileSpec(int zoom, int x, int y);
+
+ void setZoom(int zoom);
+ int zoom() const;
- QList<QGeoMapObject *> children;
- quint32 serial;
+ void setX(int x);
+ int x() const;
-public slots:
- void childChangedZValue(int zValue);
+ void setY(int y);
+ int y() const;
+
+ bool operator == (const TileSpec &rhs) const;
+ bool operator < (const TileSpec &rhs) const;
private:
- QGeoMapGroupObject *q_ptr;
+ int zoom_;
+ int x_;
+ int y_;
};
+unsigned int qHash(const TileSpec &spec);
+
+QDebug operator<<(QDebug, const TileSpec &);
+
QT_END_NAMESPACE
-#endif
+#endif // TILESPEC_H
diff --git a/src/location/projwrapper_p.cpp b/src/location/projwrapper_p.cpp
deleted file mode 100644
index 463cc735..00000000
--- a/src/location/projwrapper_p.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "projwrapper_p.h"
-#include <proj_api.h>
-#include <QSharedData>
-#include <QString>
-#include <QPolygonF>
-#include <QPointF>
-#include "qgeocoordinate.h"
-
-QT_BEGIN_NAMESPACE
-
-class ProjCoordinateSystemPrivate : public QSharedData
-{
-public:
- ProjCoordinateSystemPrivate(const QString &projection, bool latLon);
- ProjCoordinateSystemPrivate(const ProjCoordinateSystemPrivate &other);
- ~ProjCoordinateSystemPrivate();
-
- projPJ projection;
- bool latLon;
-};
-
-ProjCoordinateSystemPrivate::ProjCoordinateSystemPrivate(const QString &projStr, bool isLatLon)
-{
- projection = pj_init_plus(projStr.toLatin1().constData());
- Q_ASSERT_X(projection, "pj_init_plus", "invalid projection string");
- latLon = isLatLon;
-}
-
-ProjCoordinateSystemPrivate::ProjCoordinateSystemPrivate(const ProjCoordinateSystemPrivate &other) :
- QSharedData(other),
- latLon(other.latLon)
-{
- char *str = pj_get_def(other.projection, 0);
- projection = pj_init_plus(str);
- Q_ASSERT_X(projection, "pj_init_plus", "invalid projection string");
- free(str);
-}
-
-ProjCoordinateSystemPrivate::~ProjCoordinateSystemPrivate()
-{
- pj_free(projection);
-}
-
-ProjCoordinateSystem::ProjCoordinateSystem(const QString &projection, bool latLon) :
- d(new ProjCoordinateSystemPrivate(projection, latLon))
-{}
-
-ProjCoordinateSystem::ProjCoordinateSystem(const ProjCoordinateSystem &other) :
- d(other.d)
-{}
-
-ProjCoordinateSystem::~ProjCoordinateSystem()
-{}
-
-bool ProjCoordinateSystem::isLatLon() const
-{
- return d->latLon;
-}
-
-class ProjCoordinatePrivate
-{
-public:
- ProjCoordinateSystem currentSystem;
- double x;
- double y;
- double z;
-};
-
-ProjCoordinate::ProjCoordinate(double x, double y, double z, const ProjCoordinateSystem &system) :
- d(new ProjCoordinatePrivate)
-{
- d->x = x;
- d->y = y;
- d->z = z;
- d->currentSystem = system;
-}
-
-ProjCoordinate::ProjCoordinate(const ProjCoordinate &other) :
- d(new ProjCoordinatePrivate)
-{
- *this = other;
-}
-
-ProjCoordinate &ProjCoordinate::operator=(const ProjCoordinate &other)
-{
- d->x = other.d->x;
- d->y = other.d->y;
- d->z = other.d->z;
- d->currentSystem = other.d->currentSystem;
- return *this;
-}
-
-ProjCoordinate::~ProjCoordinate()
-{
- delete d;
-}
-
-double ProjCoordinate::x() const
-{
- return d->x;
-}
-
-double ProjCoordinate::y() const
-{
- return d->y;
-}
-
-double ProjCoordinate::z() const
-{
- return d->z;
-}
-
-bool ProjCoordinate::convert(const ProjCoordinateSystem &system)
-{
- int result;
- double x = d->x, y = d->y, z = d->z;
-
- if (d->currentSystem.isLatLon()) {
- x *= DEG_TO_RAD;
- y *= DEG_TO_RAD;
- }
-
- result = pj_transform(d->currentSystem.d->projection,
- system.d->projection,
- 1, 1, &x, &y, &z);
- if (result) {
- return false;
- } else {
- if (system.isLatLon()) {
- x *= RAD_TO_DEG;
- y *= RAD_TO_DEG;
- }
- d->x = x;
- d->y = y;
- d->z = z;
- d->currentSystem = system;
- return true;
- }
-}
-
-QGeoCoordinate ProjCoordinate::toGeoCoordinate() const
-{
- double x = d->x;
- double y = d->y;
-
- if (x < -180.0)
- x = -180.0;
- if (x > 180.0)
- x = 180.0;
-
- if (y < -90.0)
- y = -90.0;
- if (y > 90.0)
- y = 90.0;
-
- return QGeoCoordinate(y, x, d->z);
-}
-
-class ProjPolygonPrivate
-{
-public:
- ProjCoordinateSystem currentSystem;
-};
-
-ProjPolygon::ProjPolygon(const ProjCoordinateSystem &system) :
- QList<ProjCoordinate>(),
- d(new ProjPolygonPrivate)
-{
- d->currentSystem = system;
-}
-
-ProjPolygon::ProjPolygon(const QPolygonF &poly, const ProjCoordinateSystem &system, double scale) :
- QList<ProjCoordinate>(),
- d(new ProjPolygonPrivate)
-{
- d->currentSystem = system;
- foreach (QPointF point, poly) {
- double x = point.x();
- x /= scale;
- double y = point.y();
- y /= scale;
- append(ProjCoordinate(x, y, 0.0, system));
- }
-}
-
-ProjPolygon::~ProjPolygon()
-{
- delete d;
-}
-
-bool ProjPolygon::convert(const ProjCoordinateSystem &system)
-{
- for (int i=0; i<size(); ++i) {
- ProjCoordinate coord = at(i);
- if (!coord.convert(system))
- return false;
- replace(i, coord);
- }
-
- d->currentSystem = system;
- return true;
-}
-
-void ProjPolygon::scalarMultiply(double sx, double sy, double sz)
-{
- for (int i=0; i<size(); ++i) {
- ProjCoordinate &c = operator [](i);
- c.d->x *= sx;
- c.d->y *= sy;
- c.d->z *= sz;
- }
-}
-
-QPolygonF ProjPolygon::toPolygonF(double scale) const
-{
- QPolygonF poly;
- for (int i=0; i<size(); ++i) {
- const ProjCoordinate &coord = at(i);
- double x = coord.x() * scale;
- double y = coord.y() * scale;
- poly << QPointF(x, y);
- }
- return poly;
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/geoservices/nokia/nokia.pro b/src/plugins/geoservices/nokia/nokia.pro
index 807a8249..82080215 100644
--- a/src/plugins/geoservices/nokia/nokia.pro
+++ b/src/plugins/geoservices/nokia/nokia.pro
@@ -18,8 +18,7 @@ HEADERS += \
qgeoroutexmlparser.h \
qgeoroutingmanagerengine_nokia.h \
qgeoserviceproviderplugin_nokia.h \
- marclanguagecodes.h \
- qgeotiledmapdata_nokia.h
+ marclanguagecodes.h
SOURCES += \
qgeocodereply_nokia.cpp \
@@ -30,8 +29,7 @@ SOURCES += \
qgeoroutereply_nokia.cpp \
qgeoroutexmlparser.cpp \
qgeoroutingmanagerengine_nokia.cpp \
- qgeoserviceproviderplugin_nokia.cpp \
- qgeotiledmapdata_nokia.cpp
+ qgeoserviceproviderplugin_nokia.cpp
include(places/places.pri)
diff --git a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
index 3bd6b708..b5cc9c7d 100644
--- a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
+++ b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
@@ -48,9 +48,8 @@
#include "qgeomappingmanagerengine_nokia.h"
#include "qgeomapreply_nokia.h"
-#include "qgeotiledmapdata_nokia.h"
-#include <qgeotiledmaprequest.h>
+#include <tilespec.h>
#include <QNetworkAccessManager>
#include <QNetworkDiskCache>
@@ -69,12 +68,15 @@
#define DISK_CACHE_ENABLED 1
#endif
-QT_BEGIN_NAMESPACE
+#undef DISK_CACHE_ENABLED
-#if defined(Q_OS_SYMBIAN)
+#ifdef Q_OS_SYMBIAN
#include <f32file.h>
+#endif
+QT_BEGIN_NAMESPACE
+#if defined(Q_OS_SYMBIAN)
QChar QGeoMappingManagerEngineNokia::findFirstInternalFlashDrive()
{
QChar flashDrive;
@@ -105,7 +107,7 @@ QChar QGeoMappingManagerEngineNokia::findFirstInternalFlashDrive()
#endif //Q_OS_SYMBIAN
QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, QVariant> &parameters, QGeoServiceProvider::Error *error, QString *errorString)
- : QGeoTiledMappingManagerEngine(parameters),
+ : QGeoMappingManagerEngine(parameters),
m_cache(0),
m_host("maptile.maps.svc.ovi.com"),
m_token(QGeoServiceProviderFactoryNokia::defaultToken),
@@ -113,23 +115,30 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString,
{
Q_UNUSED(error)
Q_UNUSED(errorString)
+}
+QGeoMappingManagerEngineNokia::~QGeoMappingManagerEngineNokia() {}
+
+void QGeoMappingManagerEngineNokia::init()
+{
setTileSize(QSize(256, 256));
setMinimumZoomLevel(0.0);
- setMaximumZoomLevel(18.0);
+ setMaximumZoomLevel(20.0);
- QList<QGraphicsGeoMap::MapType> types;
- types << QGraphicsGeoMap::StreetMap;
- types << QGraphicsGeoMap::SatelliteMapDay;
- types << QGraphicsGeoMap::TerrainMap;
- setSupportedMapTypes(types);
+// QList<QGraphicsGeoMap::MapType> types;
+// types << QGraphicsGeoMap::StreetMap;
+// types << QGraphicsGeoMap::SatelliteMapDay;
+// types << QGraphicsGeoMap::TerrainMap;
+// setSupportedMapTypes(types);
- QList<QGraphicsGeoMap::ConnectivityMode> modes;
- modes << QGraphicsGeoMap::OnlineMode;
- setSupportedConnectivityModes(modes);
+// QList<QGraphicsGeoMap::ConnectivityMode> modes;
+// modes << QGraphicsGeoMap::OnlineMode;
+// setSupportedConnectivityModes(modes);
m_networkManager = new QNetworkAccessManager(this);
+ QMap<QString, QVariant> parameters = this->parameters();
+
if (parameters.contains("mapping.proxy")) {
QString proxy = parameters.value("mapping.proxy").toString();
if (!proxy.isEmpty()) {
@@ -199,22 +208,10 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString,
#endif
}
-QGeoMappingManagerEngineNokia::~QGeoMappingManagerEngineNokia() {}
-
-QGeoMapData* QGeoMappingManagerEngineNokia::createMapData()
-{
- QGeoMapData *data = new QGeoTiledMapDataNokia(this);
- if (!data)
- return 0;
-
- data->setConnectivityMode(QGraphicsGeoMap::OnlineMode);
- return data;
-}
-
-QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMapRequest &request)
+QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const TileSpec &spec)
{
// TODO add error detection for if request.connectivityMode() != QGraphicsGeoMap::OnlineMode
- QString rawRequest = getRequestString(request);
+ QString rawRequest = getRequestString(spec);
QNetworkRequest netRequest((QUrl(rawRequest))); // The extra pair of parens disambiguates this from a function declaration
netRequest.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
@@ -225,7 +222,7 @@ QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMa
QNetworkReply* netReply = m_networkManager->get(netRequest);
- QGeoTiledMapReply* mapReply = new QGeoMapReplyNokia(netReply, request);
+ QGeoTiledMapReply* mapReply = new QGeoMapReplyNokia(netReply, spec);
// TODO goes badly on linux
//qDebug() << "request: " << QString::number(reinterpret_cast<int>(mapReply), 16) << " " << request.row() << "," << request.column();
@@ -234,10 +231,10 @@ QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMa
return mapReply;
}
-QString QGeoMappingManagerEngineNokia::getRequestString(const QGeoTiledMapRequest &request) const
+QString QGeoMappingManagerEngineNokia::getRequestString(const TileSpec &spec) const
{
const int maxDomains = 11; // TODO: hmmm....
- const char subdomain = 'a' + (request.row() + request.column()) % maxDomains; // a...k
+ const char subdomain = 'a' + (spec.x() + spec.y()) % maxDomains; // a...k
static const QString http("http://");
static const QString path("/maptiler/maptile/newest/");
static const QChar dot('.');
@@ -248,13 +245,14 @@ QString QGeoMappingManagerEngineNokia::getRequestString(const QGeoTiledMapReques
requestString += dot;
requestString += m_host;
requestString += path;
- requestString += mapTypeToStr(request.mapType());
+ //requestString += mapTypeToStr(request.mapType());
+ requestString += QLatin1String("normal.day");
requestString += slash;
- requestString += QString::number(request.zoomLevel());
+ requestString += QString::number(spec.zoom());
requestString += slash;
- requestString += QString::number(request.column());
+ requestString += QString::number(spec.x());
requestString += slash;
- requestString += QString::number(request.row());
+ requestString += QString::number(spec.y());
requestString += slash;
requestString += sizeToStr(tileSize());
//#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
@@ -291,17 +289,17 @@ QString QGeoMappingManagerEngineNokia::sizeToStr(const QSize &size)
return s128;
}
-QString QGeoMappingManagerEngineNokia::mapTypeToStr(QGraphicsGeoMap::MapType type)
-{
- if (type == QGraphicsGeoMap::StreetMap)
- return "normal.day";
- else if (type == QGraphicsGeoMap::SatelliteMapDay ||
- type == QGraphicsGeoMap::SatelliteMapNight) {
- return "satellite.day";
- } else if (type == QGraphicsGeoMap::TerrainMap)
- return "terrain.day";
- else
- return "normal.day";
-}
+//QString QGeoMappingManagerEngineNokia::mapTypeToStr(QGraphicsGeoMap::MapType type)
+//{
+// if (type == QGraphicsGeoMap::StreetMap)
+// return "normal.day";
+// else if (type == QGraphicsGeoMap::SatelliteMapDay ||
+// type == QGraphicsGeoMap::SatelliteMapNight) {
+// return "satellite.day";
+// } else if (type == QGraphicsGeoMap::TerrainMap)
+// return "terrain.day";
+// else
+// return "normal.day";
+//}
QT_END_NAMESPACE
diff --git a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
index 70c6cfe1..17e118b0 100644
--- a/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
+++ b/src/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
@@ -52,14 +52,17 @@
#include "qgeoserviceproviderplugin_nokia.h"
#include <qgeoserviceprovider.h>
-#include <qgeotiledmappingmanagerengine.h>
+#include <qgeomappingmanagerengine.h>
QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
class QNetworkDiskCache;
-class QGeoMappingManagerEngineNokia : public QGeoTiledMappingManagerEngine
+class QGeoTiledMapReply;
+class TileSpec;
+
+class QGeoMappingManagerEngineNokia : public QGeoMappingManagerEngine
{
Q_OBJECT
public:
@@ -68,16 +71,17 @@ public:
QString *errorString);
~QGeoMappingManagerEngineNokia();
- QGeoMapData* createMapData();
- QGeoTiledMapReply* getTileImage(const QGeoTiledMapRequest &request);
+ void init();
+
+ QGeoTiledMapReply* getTileImage(const TileSpec &spec);
private:
Q_DISABLE_COPY(QGeoMappingManagerEngineNokia)
- QString getRequestString(const QGeoTiledMapRequest &request) const;
+ QString getRequestString(const TileSpec &spec) const;
static QString sizeToStr(const QSize &size);
- static QString mapTypeToStr(QGraphicsGeoMap::MapType type);
+// static QString mapTypeToStr(QGraphicsGeoMap::MapType type);
#if defined(Q_OS_SYMBIAN)
QChar findFirstInternalFlashDrive();
#endif //Q_OS_SYMBIAN
diff --git a/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp b/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp
index 1f11d72a..2440ae46 100644
--- a/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp
+++ b/src/plugins/geoservices/nokia/qgeomapreply_nokia.cpp
@@ -53,8 +53,8 @@
QT_BEGIN_NAMESPACE
-QGeoMapReplyNokia::QGeoMapReplyNokia(QNetworkReply *reply, const QGeoTiledMapRequest &request, QObject *parent)
- : QGeoTiledMapReply(request, parent),
+QGeoMapReplyNokia::QGeoMapReplyNokia(QNetworkReply *reply, const TileSpec &spec, QObject *parent)
+ : QGeoTiledMapReply(spec, parent),
m_reply(reply)
{
m_reply->setParent(this);
@@ -104,19 +104,19 @@ void QGeoMapReplyNokia::networkFinished()
if (m_reply->error() != QNetworkReply::NoError)
return;
- QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
- setCached(fromCache.toBool());
-
- if (!isCached()) {
- QAbstractNetworkCache *cache = m_reply->manager()->cache();
- if (cache) {
- QNetworkCacheMetaData metaData = cache->metaData(m_reply->url());
- QDateTime exp = QDateTime::currentDateTime();
- exp = exp.addDays(14);
- metaData.setExpirationDate(exp);
- cache->updateMetaData(metaData);
- }
- }
+// QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
+// setCached(fromCache.toBool());
+
+// if (!isCached()) {
+// QAbstractNetworkCache *cache = m_reply->manager()->cache();
+// if (cache) {
+// QNetworkCacheMetaData metaData = cache->metaData(m_reply->url());
+// QDateTime exp = QDateTime::currentDateTime();
+// exp = exp.addDays(14);
+// metaData.setExpirationDate(exp);
+// cache->updateMetaData(metaData);
+// }
+// }
setMapImageData(m_reply->readAll());
setMapImageFormat("PNG");
diff --git a/src/plugins/geoservices/nokia/qgeomapreply_nokia.h b/src/plugins/geoservices/nokia/qgeomapreply_nokia.h
index ee0195bb..40b5aa01 100644
--- a/src/plugins/geoservices/nokia/qgeomapreply_nokia.h
+++ b/src/plugins/geoservices/nokia/qgeomapreply_nokia.h
@@ -49,6 +49,7 @@
#ifndef QGEOMAPREPLY_NOKIA_H
#define QGEOMAPREPLY_NOKIA_H
+#include <tilespec.h>
#include <qgeotiledmapreply.h>
#include <QNetworkReply>
@@ -59,7 +60,7 @@ class QGeoMapReplyNokia : public QGeoTiledMapReply
Q_OBJECT
public:
- QGeoMapReplyNokia(QNetworkReply *reply, const QGeoTiledMapRequest &request, QObject *parent = 0);
+ QGeoMapReplyNokia(QNetworkReply *reply, const TileSpec &spec, QObject *parent = 0);
~QGeoMapReplyNokia();
void abort();
diff --git a/src/src.pro b/src/src.pro
index 75e0983e..b321da3d 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -1,3 +1,3 @@
TEMPLATE = subdirs
CONFIG+=ordered
-SUBDIRS += 3rdparty/proj.pro location plugins imports
+SUBDIRS += location plugins imports
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index 7e1ac347..ad5c6453 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -1,11 +1,5 @@
TEMPLATE = subdirs
-#TODO: disable for now since
-#declarative testing classes are not yet
-#in the main branch of qt declarative
-#SUBDIRS += declarative
-
-CONFIG += ordered
SUBDIRS += geotestplugin \
qgeocodingmanagerplugins \
qgeoaddress \
@@ -26,7 +20,8 @@ SUBDIRS += geotestplugin \
qplacereview \
qplacesearchrequest \
qplacesupplier \
- declarative
+ declarative \
+ sphere
contains(config_test_jsondb, yes) {
SUBDIRS += qplacemanager_jsondb
diff --git a/tests/auto/geotestplugin/qplacemanagerengine_test.h b/tests/auto/geotestplugin/qplacemanagerengine_test.h
index 120d85c3..ea66b581 100644
--- a/tests/auto/geotestplugin/qplacemanagerengine_test.h
+++ b/tests/auto/geotestplugin/qplacemanagerengine_test.h
@@ -143,7 +143,7 @@ public:
return QPlaceManager::PublicScope;
}
- QPlaceReply *removePlace(const QGeoPlace &place)
+ QPlaceIdReply *removePlace(const QGeoPlace &place)
{
Q_UNUSED(place)
diff --git a/tests/auto/sphere/sphere.pro b/tests/auto/sphere/sphere.pro
new file mode 100644
index 00000000..936ce57f
--- /dev/null
+++ b/tests/auto/sphere/sphere.pro
@@ -0,0 +1,8 @@
+load(qttest_p4)
+
+QT += location
+CONFIG += qt3d
+
+INCLUDEPATH = ../../../src/location/mapsgl
+
+SOURCES += tst_sphere.cpp
diff --git a/tests/auto/sphere/tst_sphere.cpp b/tests/auto/sphere/tst_sphere.cpp
new file mode 100644
index 00000000..11cfd5c7
--- /dev/null
+++ b/tests/auto/sphere/tst_sphere.cpp
@@ -0,0 +1,1493 @@
+#include <QObject>
+#include <QtTest/QtTest>
+
+#include "../../../src/location/mapsgl/map3d/sphere_p.h"
+#include "../../../src/location/mapsgl/map3d/viewportcamera_p.h"
+#include "../../../src/location/mapsgl/frustum_p.h"
+#include "../../../src/location/mapsgl/map3d/projection3d_p.h"
+
+#include <QMetaType>
+
+#include <cmath>
+
+Q_DECLARE_METATYPE(Sphere)
+
+class tst_Sphere : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_Sphere() {
+
+ }
+
+private slots:
+ void x_plane();
+ void x_plane_data();
+
+ void xy_plane_straight();
+ void xy_plane_straight_data();
+
+ void xy_plane_skew();
+ void xy_plane_skew_data();
+
+ void xyz_plane();
+ void xyz_plane_data();
+
+ void camera();
+
+private:
+ Sphere emptySphere(double radius) const;
+ Sphere basicSphere(double radius) const;
+
+ bool test(const QPlane3D &plane, const Sphere &sphereOut);
+
+ QList<QPlane3D> planes() const;
+ Sphere planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const;
+};
+
+
+Sphere tst_Sphere::emptySphere(double radius) const
+{
+ return Sphere(radius, QList<SpherePatch>());
+}
+
+Sphere tst_Sphere::basicSphere(double radius) const
+{
+ QList<Arc> arcs1In;
+
+ QVector3D origin;
+
+ QVector3D pxv = QVector3D(radius, 0.0, 0.0);
+ QVector3D pyv = QVector3D(0.0, radius, 0.0);
+ QVector3D pzv = QVector3D(0.0, 0.0, radius);
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+
+ arcs1In << Arc(pzp, radius, pxv, pyv);
+ arcs1In << Arc(pxp, radius, pyv, pzv);
+ arcs1In << Arc(pyp, radius, pzv, pxv);
+
+ SpherePatch patch1In(radius, arcs1In);
+
+ QList<SpherePatch> patchesIn;
+
+ patchesIn << patch1In;
+
+ Sphere sphereIn(radius, patchesIn);
+
+ return sphereIn;
+}
+
+bool tst_Sphere::test(const QPlane3D &plane, const Sphere &sphereOut)
+{
+ Sphere sphereIn = basicSphere(20000.0);
+
+ sphereIn.intersect(plane);
+
+ if (sphereIn == sphereOut) {
+ return true;
+ } else {
+ qWarning() << sphereIn;
+ qWarning() << sphereOut;
+
+ return false;
+ }
+}
+
+void tst_Sphere::x_plane()
+{
+ QFETCH(QPlane3D, plane);
+ QFETCH(Sphere, sphereOut);
+
+ QVERIFY(test(plane, sphereOut));
+}
+
+void tst_Sphere::x_plane_data()
+{
+ QTest::addColumn<QPlane3D>("plane");
+ QTest::addColumn<Sphere>("sphereOut");
+
+ double radius = 20000.0;
+
+ QVector3D origin;
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+
+ Sphere empty = emptySphere(radius);
+ Sphere basic = basicSphere(radius);
+
+ double factor = radius * 0.0;
+ double factor2 = sqrt((radius * radius) - (factor * factor));
+
+ QTest::newRow("positive x forward 0.0")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("positive x backward 0.0")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << empty;
+
+ QTest::newRow("negative x forward 0.0")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x backward 0.0")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << empty;
+
+
+ factor = radius * 0.5;
+ factor2 = sqrt((radius * radius) - (factor * factor));
+
+ QPlane3D pxf050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0));
+
+ QList<Arc> pxf050_patch0_arcs;
+ pxf050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(factor, factor2, 0));
+ pxf050_patch0_arcs << Arc(pxf050_plane, radius,
+ QVector3D(factor, factor2, 0),
+ QVector3D(factor, 0, factor2));
+ pxf050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(factor, 0, factor2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxf050_patches;
+ pxf050_patches << SpherePatch(radius, pxf050_patch0_arcs);
+
+ Sphere pxf050 = Sphere(radius, pxf050_patches);
+
+ QTest::newRow("positive x forward 0.5")
+ << pxf050_plane
+ << pxf050;
+
+ QPlane3D pxb050_plane = QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0));
+
+ QList<Arc> pxb050_patch0_arcs;
+ pxb050_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxb050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(factor, 0, factor2));
+ pxb050_patch0_arcs << Arc(pxb050_plane, radius,
+ QVector3D(factor, 0, factor2),
+ QVector3D(factor, factor2, 0));
+ pxb050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(factor, factor2, 0),
+ QVector3D(0, radius, 0));
+
+
+ QList<SpherePatch> pxb050_patches;
+ pxb050_patches << SpherePatch(radius, pxb050_patch0_arcs);
+
+ Sphere pxb050 = Sphere(radius, pxb050_patches);
+
+ QTest::newRow("positive x backward 0.5")
+ << pxb050_plane
+ << pxb050;
+
+ QTest::newRow("negative x forward 0.5")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x backward 0.5")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << empty;
+
+
+ factor = radius * 1.0;
+
+
+ QTest::newRow("positive x forward 1.0")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << empty;
+
+ QTest::newRow("positive x backward 1.0")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x forward 1.0")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x backward 1.0")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << empty;
+
+
+ factor = radius * 1.25;
+
+ QTest::newRow("positive x forward 1.25")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << empty;
+
+ QTest::newRow("positive x backward 1.25")
+ << QPlane3D(QVector3D(factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x forward 1.25")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(1.0, 0.0, 0.0))
+ << basic;
+
+ QTest::newRow("negative x backward 1.25")
+ << QPlane3D(QVector3D(-1.0 * factor, 0.0, 0.0), QVector3D(-1.0, 0.0, 0.0))
+ << empty;
+}
+
+void tst_Sphere::xy_plane_straight()
+{
+ QFETCH(QPlane3D, plane);
+ QFETCH(Sphere, sphereOut);
+
+ QVERIFY(test(plane, sphereOut));
+}
+
+void tst_Sphere::xy_plane_straight_data()
+{
+ QTest::addColumn<QPlane3D>("plane");
+ QTest::addColumn<Sphere>("sphereOut");
+
+ double radius = 20000.0;
+
+ QVector3D origin;
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+
+ Sphere empty = emptySphere(radius);
+ Sphere basic = basicSphere(radius);
+
+ double factor1 = radius * 0.0;
+ double factor2 = radius * 0.0;
+
+ QPlane3D pxpyf_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("positive x positive y forward 0.0 0.0")
+ << pxpyf_000_000_plane
+ << basic;
+
+ QPlane3D pxpyb_000_000_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("positive x positive y backward 0.0 0.0")
+ << pxpyb_000_000_plane
+ << empty;
+
+ QPlane3D pxnyf_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ double f1 = radius / sqrt(2);
+ double f2 = radius / sqrt(2);
+
+ QList<Arc> pxnyf_000_000_patch0_arcs;
+ pxnyf_000_000_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f1, f2, 0));
+ pxnyf_000_000_patch0_arcs << Arc(pxnyf_000_000_plane, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(0, 0, radius));
+ pxnyf_000_000_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+
+
+ QList<SpherePatch> pxnyf_000_000_patches;
+ pxnyf_000_000_patches << SpherePatch(radius, pxnyf_000_000_patch0_arcs);
+
+ Sphere pxnyf_000_000 = Sphere(radius, pxnyf_000_000_patches);
+
+ QTest::newRow("positive x negative y forward 0.0 0.0")
+ << pxnyf_000_000_plane
+ << pxnyf_000_000;
+
+ QPlane3D pxnyb_000_000_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> pxnyb_000_000_patch0_arcs;
+ pxnyb_000_000_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxnyb_000_000_patch0_arcs << Arc(pxnyb_000_000_plane, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, f2, 0));
+ pxnyb_000_000_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(0, radius, 0));
+
+
+ QList<SpherePatch> pxnyb_000_000_patches;
+ pxnyb_000_000_patches << SpherePatch(radius, pxnyb_000_000_patch0_arcs);
+
+ Sphere pxnyb_000_000(radius, pxnyb_000_000_patches);
+
+ QTest::newRow("positive x negative y backward 0.0 0.0")
+ << pxnyb_000_000_plane
+ << pxnyb_000_000;
+
+ QPlane3D nxpyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QList<Arc> nxpyf_000_000_patch0_arcs;
+ nxpyf_000_000_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f1, f2, 0));
+ nxpyf_000_000_patch0_arcs << Arc(nxpyf_000_000_plane, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(0, 0, radius));
+ nxpyf_000_000_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> nxpyf_000_000_patches;
+ nxpyf_000_000_patches << SpherePatch(radius, nxpyf_000_000_patch0_arcs);
+
+ Sphere nxpyf_000_000 = Sphere(radius, nxpyf_000_000_patches);
+
+ QTest::newRow("negative x positive y forward 0.0 0.0")
+ << nxpyf_000_000_plane
+ << nxpyf_000_000;
+
+ QPlane3D nxpyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> nxpyb_000_000_patch0_arcs;
+ nxpyb_000_000_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ nxpyb_000_000_patch0_arcs << Arc(nxpyb_000_000_plane, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, f2, 0));
+ nxpyb_000_000_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(0, radius, 0));
+
+ QList<SpherePatch> nxpyb_000_000_patches;
+ nxpyb_000_000_patches << SpherePatch(radius, nxpyb_000_000_patch0_arcs);
+
+ Sphere nxpyb_000_000(radius, nxpyb_000_000_patches);
+
+ QTest::newRow("negative x positive y backward 0.0 0.0")
+ << nxpyb_000_000_plane
+ << nxpyb_000_000;
+
+ QPlane3D nxnyf_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.0 0.0")
+ << nxnyf_000_000_plane
+ << basic;
+
+ QPlane3D nxnyb_000_000_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.0 0.0")
+ << nxnyb_000_000_plane
+ << empty;
+
+ factor1 = radius * 0.25;
+ factor2 = radius * 0.25;
+
+ QPlane3D pxpyf_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ f1 = radius / 2.0;
+ f2 = radius * sqrt(3) / 2.0;
+
+ QList<Arc> pxpyf_025_025_patch0_arcs;
+ pxpyf_025_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(0, radius, 0));
+ pxpyf_025_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, f1, f2));
+ pxpyf_025_025_patch0_arcs << Arc(pxpyf_025_025_plane, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(f1, 0, f2));
+ pxpyf_025_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxpyf_025_025_patches;
+ pxpyf_025_025_patches << SpherePatch(radius, pxpyf_025_025_patch0_arcs);
+
+ Sphere pxpyf_025_025(radius, pxpyf_025_025_patches);
+
+ QTest::newRow("positive x positive y forward 0.25 0.25")
+ << pxpyf_025_025_plane
+ << pxpyf_025_025;
+
+ QPlane3D pxpyb_025_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QList<Arc> pxpyb_025_025_patch0_arcs;
+ pxpyb_025_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, 0, f2));
+ pxpyb_025_025_patch0_arcs << Arc(pxpyb_025_025_plane, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(0, f1, f2));
+ pxpyb_025_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(0, 0, radius));
+
+ QList<SpherePatch> pxpyb_025_025_patches;
+ pxpyb_025_025_patches << SpherePatch(radius, pxpyb_025_025_patch0_arcs);
+
+ Sphere pxpyb_025_025(radius, pxpyb_025_025_patches);
+
+ QTest::newRow("positive x positive y backward 0.25 0.25")
+ << pxpyb_025_025_plane
+ << pxpyb_025_025;
+
+ QPlane3D pxnyf_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ /*
+ f3 = positive intersection of x = y + 0.5 * r and x^2 + y^2 = r^2
+ f4 = f3 - 0.5 * r
+ */
+
+ double f3 = radius * (1.0 + sqrt(7)) / 4.0;
+ double f4 = f3 - radius / 2.0;
+
+ QList<Arc> pxnyf_025_025_patch0_arcs;
+ pxnyf_025_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f3, f4, 0));
+ pxnyf_025_025_patch0_arcs << Arc(pxnyf_025_025_plane, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(f1, 0, f2));
+ pxnyf_025_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxnyf_025_025_patches;
+ pxnyf_025_025_patches << SpherePatch(radius, pxnyf_025_025_patch0_arcs);
+
+ Sphere pxnyf_025_025(radius, pxnyf_025_025_patches);
+
+ QTest::newRow("positive x negative y forward 0.25 0.25")
+ << pxnyf_025_025_plane
+ << pxnyf_025_025;
+
+ QPlane3D pxnyb_025_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> pxnyb_025_025_patch0_arcs;
+ pxnyb_025_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxnyb_025_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, 0, f2));
+ pxnyb_025_025_patch0_arcs << Arc(pxnyb_025_025_plane, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(f3, f4, 0));
+ pxnyb_025_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(0, radius, 0));
+
+ QList<SpherePatch> pxnyb_025_025_patches;
+ pxnyb_025_025_patches << SpherePatch(radius, pxnyb_025_025_patch0_arcs);
+
+ Sphere pxnyb_025_025(radius, pxnyb_025_025_patches);
+
+ QTest::newRow("positive x negative y backward 0.25 0.25")
+ << pxnyb_025_025_plane
+ << pxnyb_025_025;
+
+ QPlane3D nxpyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QList<Arc> nxpyf_025_025_patch0_arcs;
+ nxpyf_025_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f4, f3, 0));
+ nxpyf_025_025_patch0_arcs << Arc(nxpyf_025_025_plane, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(0, f1, f2));
+ nxpyf_025_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(0, 0, radius));
+ nxpyf_025_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> nxpyf_025_025_patches;
+ nxpyf_025_025_patches << SpherePatch(radius, nxpyf_025_025_patch0_arcs);
+
+ Sphere nxpyf_025_025(radius, nxpyf_025_025_patches);
+
+ QTest::newRow("negative x positive y forward 0.25 0.25")
+ << nxpyf_025_025_plane
+ << nxpyf_025_025;
+
+ QPlane3D nxpyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> nxpyb_025_025_patch0_arcs;
+ nxpyb_025_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(0, radius, 0));
+ nxpyb_025_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, f1, f2));
+ nxpyb_025_025_patch0_arcs << Arc(nxpyb_025_025_plane, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(f4, f3, 0));
+
+ QList<SpherePatch> nxpyb_025_025_patches;
+ nxpyb_025_025_patches << SpherePatch(radius, nxpyb_025_025_patch0_arcs);
+
+ Sphere nxpyb_025_025(radius, nxpyb_025_025_patches);
+
+ QTest::newRow("negative x positive y backward 0.25 0.25")
+ << nxpyb_025_025_plane
+ << nxpyb_025_025;
+
+ QPlane3D nxnyf_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.25 0.25")
+ << nxnyf_025_025_plane
+ << basic;
+
+ QPlane3D nxnyb_025_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.25 0.25")
+ << nxnyb_025_025_plane
+ << empty;
+
+ factor1 = radius * 0.5;
+ factor2 = radius * 0.5;
+
+ f1 = radius * 0.5;
+ f2 = radius / sqrt(2);
+
+ QPlane3D pxpyf_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> pxpyf_050_050_patch0_arcs;
+ pxpyf_050_050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(0, radius, 0));
+ pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(f1, f1, f2));
+ pxpyf_050_050_patch0_arcs << Arc(pxpyf_050_050_plane, radius,
+ QVector3D(f1, f1, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxpyf_050_050_patches;
+ pxpyf_050_050_patches << SpherePatch(radius, pxpyf_050_050_patch0_arcs);
+
+ Sphere pxpyf_050_050(radius, pxpyf_050_050_patches);
+
+ QTest::newRow("positive x positive y forward 0.5 0.5")
+ << pxpyf_050_050_plane
+ << pxpyf_050_050;
+
+ QPlane3D pxpyb_050_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QList<Arc> pxpyb_050_050_patch0_arcs;
+ pxpyb_050_050_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxpyb_050_050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+ pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f1, f1, f2));
+ pxpyb_050_050_patch0_arcs << Arc(pxpyb_050_050_plane, radius,
+ QVector3D(f1, f1, f2),
+ QVector3D(0, radius, 0));
+
+ QList<SpherePatch> pxpyb_050_050_patches;
+ pxpyb_050_050_patches << SpherePatch(radius, pxpyb_050_050_patch0_arcs);
+
+ Sphere pxpyb_050_050(radius, pxpyb_050_050_patches);
+
+ QTest::newRow("positive x positive y backward 0.5 0.5")
+ << pxpyb_050_050_plane
+ << pxpyb_050_050;
+
+ QPlane3D pxnyf_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y forward 0.5 0.5")
+ << pxnyf_050_050_plane
+ << empty;
+
+ QPlane3D pxnyb_050_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y backward 0.5 0.5")
+ << pxnyb_050_050_plane
+ << basic;
+
+ QPlane3D nxpyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y forward 0.5 0.5")
+ << nxpyf_050_050_plane
+ << basic;
+
+ QPlane3D nxpyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y backward 0.5 0.5")
+ << nxpyb_050_050_plane
+ << empty;
+
+ QPlane3D nxnyf_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.5 0.5")
+ << nxnyf_050_050_plane
+ << basic;
+
+ QPlane3D nxnyb_050_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.5 0.5")
+ << nxnyb_050_050_plane
+ << empty;
+
+ factor1 = radius * 0.6;
+ factor2 = radius * 0.6;
+
+ f1 = radius * 0.6;
+ f2 = f1 * sqrt(7.0 / 9.0);
+ f3 = f1 + f2 / sqrt(2);
+ f4 = f1 - f2 / sqrt(2);
+
+ QPlane3D pxpyf_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QList<Arc> pxpyf_060_060_patch0_arcs;
+ pxpyf_060_060_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(f4, f3, 0));
+ pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(f1, f1, f2));
+ pxpyf_060_060_patch0_arcs << Arc(pxpyf_060_060_plane, radius,
+ QVector3D(f1, f1, f2),
+ QVector3D(f3, f4, 0));
+
+ QList<SpherePatch> pxpyf_060_060_patches;
+ pxpyf_060_060_patches << SpherePatch(radius, pxpyf_060_060_patch0_arcs);
+
+ Sphere pxpyf_060_060(radius, pxpyf_060_060_patches);
+
+ QTest::newRow("positive x positive y forward 0.6 0.6")
+ << pxpyf_060_060_plane
+ << pxpyf_060_060;
+
+ QPlane3D pxpyb_060_060_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QList<Arc> pxpyb_060_060_patch0_arcs;
+ pxpyb_060_060_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f3, f4, 0));
+ pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(f1, f1, f2));
+ pxpyb_060_060_patch0_arcs << Arc(pxpyb_060_060_plane, radius,
+ QVector3D(f1, f1, f2),
+ QVector3D(f4, f3, 0));
+ pxpyb_060_060_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(0, radius, 0));
+ pxpyb_060_060_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxpyb_060_060_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxpyb_060_060_patches;
+ pxpyb_060_060_patches << SpherePatch(radius, pxpyb_060_060_patch0_arcs);
+
+ Sphere pxpyb_060_060(radius, pxpyb_060_060_patches);
+
+ QTest::newRow("positive x positive y backward 0.6 0.6")
+ << pxpyb_060_060_plane
+ << pxpyb_060_060;
+
+ QPlane3D pxnyf_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y forward 0.6 0.6")
+ << pxnyf_060_060_plane
+ << empty;
+
+ QPlane3D pxnyb_060_060_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y backward 0.6 0.6")
+ << pxnyb_060_060_plane
+ << basic;
+
+ QPlane3D nxpyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y forward 0.6 0.6")
+ << nxpyf_060_060_plane
+ << basic;
+
+ QPlane3D nxpyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y backward 0.6 0.6")
+ << nxpyb_060_060_plane
+ << empty;
+
+ QPlane3D nxnyf_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.6 0.6")
+ << nxnyf_060_060_plane
+ << basic;
+
+ QPlane3D nxnyb_060_060_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.6 0.6")
+ << nxnyb_060_060_plane
+ << empty;
+
+ factor1 = radius * 0.75;
+ factor2 = radius * 0.75;
+
+ QPlane3D pxpyf_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("positive x positive y forward 0.75 0.75")
+ << pxpyf_075_075_plane
+ << empty;
+
+ QPlane3D pxpyb_075_075_plane = QPlane3D(QVector3D(factor1, factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("positive x positive y backward 0.75 0.75")
+ << pxpyb_075_075_plane
+ << basic;
+
+ QPlane3D pxnyf_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y forward 0.75 0.75")
+ << pxnyf_075_075_plane
+ << empty;
+
+ QPlane3D pxnyb_075_075_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("positive x negative y backward 0.75 0.75")
+ << pxnyb_075_075_plane
+ << basic;
+
+ QPlane3D nxpyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y forward 0.75 0.75")
+ << nxpyf_075_075_plane
+ << basic;
+
+ QPlane3D nxpyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0), QVector3D(-1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x positive y backward 0.75 0.75")
+ << nxpyb_075_075_plane
+ << empty;
+
+ QPlane3D nxnyf_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(1.0, 1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.75 0.75")
+ << nxnyf_075_075_plane
+ << basic;
+
+ QPlane3D nxnyb_075_075_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0), QVector3D(-1.0, -1.0, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.75 0.75")
+ << nxnyb_075_075_plane
+ << empty;
+}
+
+void tst_Sphere::xy_plane_skew()
+{
+ QFETCH(QPlane3D, plane);
+ QFETCH(Sphere, sphereOut);
+
+ QVERIFY(test(plane, sphereOut));
+}
+
+void tst_Sphere::xy_plane_skew_data()
+{
+ QTest::addColumn<QPlane3D>("plane");
+ QTest::addColumn<Sphere>("sphereOut");
+
+ double radius = 20000.0;
+
+ QVector3D origin;
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+
+ Sphere empty = emptySphere(radius);
+ Sphere basic = basicSphere(radius);
+
+ double factor1 = radius * 0.25;
+ double factor2 = radius * 0.5;
+
+ double f1 = radius * 0.5;
+ double f2 = radius * sqrt(3) / 2.0;
+ double f3 = radius * 0.8;
+ double f4 = radius * 0.6;
+
+ QPlane3D pxpyf_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0),
+ QVector3D(0.5, 0.25, 0.0).normalized());
+
+ QList<Arc> pxpyf_025_050_patch0_arcs;
+ pxpyf_025_050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(0, radius, 0));
+ pxpyf_025_050_patch0_arcs << Arc(pxpyf_025_050_plane, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(f1, 0, f2));
+ pxpyf_025_050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxpyf_025_050_patches;
+ pxpyf_025_050_patches << SpherePatch(radius, pxpyf_025_050_patch0_arcs);
+
+ Sphere pxpyf_025_050(radius, pxpyf_025_050_patches);
+
+ QTest::newRow("positive x positive y forward 0.25 0.5")
+ << pxpyf_025_050_plane
+ << pxpyf_025_050;
+
+ QPlane3D pxpyb_025_050_plane = QPlane3D(QVector3D(factor1, factor2, 0.0),
+ QVector3D(-0.5, -0.25, 0.0).normalized());
+
+ QList<Arc> pxpyb_025_050_patch0_arcs;
+ pxpyb_025_050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, 0, f2));
+ pxpyb_025_050_patch0_arcs << Arc(pxpyb_025_050_plane, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(0, radius, 0));
+ pxpyb_025_050_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+
+
+ QList<SpherePatch> pxpyb_025_050_patches;
+ pxpyb_025_050_patches << SpherePatch(radius, pxpyb_025_050_patch0_arcs);
+
+ Sphere pxpyb_025_050(radius, pxpyb_025_050_patches);
+
+ QTest::newRow("positive x positive y backward 0.25 0.5")
+ << pxpyb_025_050_plane
+ << pxpyb_025_050;
+
+ QPlane3D pxnyf_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0),
+ QVector3D(-0.5, 0.25, 0.0).normalized());
+
+ QList<Arc> pxnyf_025_050_patch0_arcs;
+ pxnyf_025_050_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, 0, radius));
+ pxnyf_025_050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f1, 0, f2));
+ pxnyf_025_050_patch0_arcs << Arc(pxnyf_025_050_plane, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(f3, f4, 0));
+ pxnyf_025_050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(0, radius, 0));
+
+ QList<SpherePatch> pxnyf_025_050_patches;
+ pxnyf_025_050_patches << SpherePatch(radius, pxnyf_025_050_patch0_arcs);
+
+ Sphere pxnyf_025_050(radius, pxnyf_025_050_patches);
+
+ QTest::newRow("positive x negative y forward 0.25 0.5")
+ << pxnyf_025_050_plane
+ << pxnyf_025_050;
+
+ QPlane3D pxnyb_025_050_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0),
+ QVector3D(0.5, -0.25, 0.0).normalized());
+
+ QList<Arc> pxnyb_025_050_patch0_arcs;
+ pxnyb_025_050_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f3, f4, 0));
+ pxnyb_025_050_patch0_arcs << Arc(pxnyb_025_050_plane, radius,
+ QVector3D(f3, f4, 0),
+ QVector3D(f1, 0, f2));
+ pxnyb_025_050_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxnyb_025_050_patches;
+ pxnyb_025_050_patches << SpherePatch(radius, pxnyb_025_050_patch0_arcs);
+
+ Sphere pxnyb_025_050(radius, pxnyb_025_050_patches);
+
+ QTest::newRow("positive x negative y backward 0.25 0.5")
+ << pxnyb_025_050_plane
+ << pxnyb_025_050;
+
+ QPlane3D nxpyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0),
+ QVector3D(0.5, -0.25, 0.0).normalized());
+
+ QTest::newRow("negative x positive y forward 0.25 0.5")
+ << nxpyf_025_050_plane
+ << basic;
+
+ QPlane3D nxpyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0),
+ QVector3D(-0.5, 0.25, 0.0).normalized());
+
+ QTest::newRow("negative x positive y backward 0.25 0.5")
+ << nxpyb_025_050_plane
+ << empty;
+
+ QPlane3D nxnyf_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0),
+ QVector3D(0.5, 0.25, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.25 0.5")
+ << nxnyf_025_050_plane
+ << basic;
+
+ QPlane3D nxnyb_025_050_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0),
+ QVector3D(-0.5, -0.25, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.25 0.5")
+ << nxnyb_025_050_plane
+ << empty;
+
+ factor1 = radius * 0.5;
+ factor2 = radius * 0.25;
+
+ QPlane3D pxpyf_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0),
+ QVector3D(0.25, 0.5, 0.0).normalized());
+
+ QList<Arc> pxpyf_050_025_patch0_arcs;
+ pxpyf_050_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(0, radius, 0));
+ pxpyf_050_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, f1, f2));
+ pxpyf_050_025_patch0_arcs << Arc(pxpyf_050_025_plane, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> pxpyf_050_025_patches;
+ pxpyf_050_025_patches << SpherePatch(radius, pxpyf_050_025_patch0_arcs);
+
+ Sphere pxpyf_050_025(radius, pxpyf_050_025_patches);
+
+ QTest::newRow("positive x positive y forward 0.5 0.25")
+ << pxpyf_050_025_plane
+ << pxpyf_050_025;
+
+ QPlane3D pxpyb_050_025_plane = QPlane3D(QVector3D(factor1, factor2, 0.0),
+ QVector3D(-0.25, -0.5, 0.0).normalized());
+
+ QList<Arc> pxpyb_050_025_patch0_arcs;
+ pxpyb_050_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+ pxpyb_050_025_patch0_arcs << Arc(pxpyb_050_025_plane, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(0, f1, f2));
+ pxpyb_050_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(0, 0, radius));
+
+ QList<SpherePatch> pxpyb_050_025_patches;
+ pxpyb_050_025_patches << SpherePatch(radius, pxpyb_050_025_patch0_arcs);
+
+ Sphere pxpyb_050_025(radius, pxpyb_050_025_patches);
+
+ QTest::newRow("positive x positive y backward 0.5 0.25")
+ << pxpyb_050_025_plane
+ << pxpyb_050_025;
+
+ QPlane3D pxnyf_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0),
+ QVector3D(-0.25, 0.5, 0.0).normalized());
+
+ QTest::newRow("positive x negative y forward 0.5 0.25")
+ << pxnyf_050_025_plane
+ << basic;
+
+ QPlane3D pxnyb_050_025_plane = QPlane3D(QVector3D(factor1, -1.0 * factor2, 0.0),
+ QVector3D(0.25, -0.5, 0.0).normalized());
+
+ QTest::newRow("positive x negative y backward 0.5 0.25")
+ << pxnyb_050_025_plane
+ << empty;
+
+ QPlane3D nxpyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0),
+ QVector3D(0.25, -0.5, 0.0).normalized());
+
+ QList<Arc> nxpyf_050_025_patch0_arcs;
+ nxpyf_050_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f4, f3, 0));
+ nxpyf_050_025_patch0_arcs << Arc(nxpyf_050_025_plane, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(0, f1, f2));
+ nxpyf_050_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(0, 0, radius));
+ nxpyf_050_025_patch0_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(radius, 0, 0));
+
+ QList<SpherePatch> nxpyf_050_025_patches;
+ nxpyf_050_025_patches << SpherePatch(radius, nxpyf_050_025_patch0_arcs);
+
+ Sphere nxpyf_050_025(radius, nxpyf_050_025_patches);
+
+ QTest::newRow("negative x positive y forward 0.5 0.25")
+ << nxpyf_050_025_plane
+ << nxpyf_050_025;
+
+ QPlane3D nxpyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, factor2, 0.0),
+ QVector3D(-0.25, 0.5, 0.0).normalized());
+
+ QList<Arc> nxpyb_050_025_patch0_arcs;
+ nxpyb_050_025_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f4, f3, 0),
+ QVector3D(0, radius, 0));
+ nxpyb_050_025_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, f1, f2));
+ nxpyb_050_025_patch0_arcs << Arc(nxpyb_050_025_plane, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(f4, f3, 0));
+
+ QList<SpherePatch> nxpyb_050_025_patches;
+ nxpyb_050_025_patches << SpherePatch(radius, nxpyb_050_025_patch0_arcs);
+
+ Sphere nxpyb_050_025(radius, nxpyb_050_025_patches);
+
+ QTest::newRow("negative x positive y backward 0.5 0.25")
+ << nxpyb_050_025_plane
+ << nxpyb_050_025;
+
+ QPlane3D nxnyf_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0),
+ QVector3D(0.25, 0.5, 0.0).normalized());
+
+ QTest::newRow("negative x negative y forward 0.5 0.25")
+ << nxnyf_050_025_plane
+ << basic;
+
+ QPlane3D nxnyb_050_025_plane = QPlane3D(QVector3D(-1.0 * factor1, -1.0 * factor2, 0.0),
+ QVector3D(-0.25, -0.5, 0.0).normalized());
+
+ QTest::newRow("negative x negative y backward 0.5 0.25")
+ << nxnyb_050_025_plane
+ << empty;
+}
+
+void tst_Sphere::xyz_plane()
+{
+ QFETCH(QPlane3D, plane);
+ QFETCH(Sphere, sphereOut);
+
+ QVERIFY(test(plane, sphereOut));
+}
+
+void tst_Sphere::xyz_plane_data()
+{
+ QTest::addColumn<QPlane3D>("plane");
+ QTest::addColumn<Sphere>("sphereOut");
+
+ double radius = 20000.0;
+
+ QVector3D origin;
+
+ QPlane3D pxp = QPlane3D(origin, QVector3D(1.0, 0.0, 0.0));
+ QPlane3D pyp = QPlane3D(origin, QVector3D(0.0, 1.0, 0.0));
+ QPlane3D pzp = QPlane3D(origin, QVector3D(0.0, 0.0, 1.0));
+
+ Sphere empty = emptySphere(radius);
+ Sphere basic = basicSphere(radius);
+
+ double factor1 = radius * 0.0;
+ double factor2 = radius * 0.0;
+ double factor3 = radius * 0.0;
+
+ QPlane3D pxpypzf_000 = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z forward 0.0")
+ << pxpypzf_000
+ << basic;
+
+ QPlane3D pxpypzb_000 = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z backward 0.0")
+ << pxpypzb_000
+ << empty;
+
+ factor1 = radius * 0.25;
+ factor2 = radius * 0.25;
+ factor3 = radius * 0.25;
+
+ QPlane3D pxpypzf_025 = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z forward 0.25")
+ << pxpypzf_025
+ << basic;
+
+ QPlane3D pxpypzb_025 = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z backward 0.25")
+ << pxpypzb_025
+ << empty;
+
+ factor1 = radius / 3.0;
+ factor2 = radius / 3.0;
+ factor3 = radius / 3.0;
+
+ QPlane3D pxpypzf_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z forward 0.33")
+ << pxpypzf_033_plane
+ << basic;
+
+ QPlane3D pxpypzb_033_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z backward 0.33")
+ << pxpypzb_033_plane
+ << empty;
+
+ factor1 = radius * 0.4;
+ factor2 = radius * 0.4;
+ factor3 = radius * 0.4;
+
+ QPlane3D pxpypzf_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ double f1 = 19483.3;
+ double f2 = 4516.69;
+
+ QList<Arc> pxpypzf_040_patch0_arcs;
+ pxpypzf_040_patch0_arcs << Arc(pzp, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(f2, f1, 0));
+ pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius,
+ QVector3D(f2, f1, 0),
+ QVector3D(0, f1, f2));
+ pxpypzf_040_patch0_arcs << Arc(pxp, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(0, f2, f1));
+ pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius,
+ QVector3D(0, f2, f1),
+ QVector3D(f2, 0, f1));
+ pxpypzf_040_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f2, 0, f1),
+ QVector3D(f1, 0, f2));
+ pxpypzf_040_patch0_arcs << Arc(pxpypzf_040_plane, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(f1, f2, 0));
+
+ QList<SpherePatch> pxpypzf_040_patches;
+ pxpypzf_040_patches << SpherePatch(radius, pxpypzf_040_patch0_arcs);
+
+ Sphere pxpypzf_040(radius, pxpypzf_040_patches);
+
+ QTest::newRow("positive x positive y positive z forward 0.4")
+ << pxpypzf_040_plane
+ << pxpypzf_040;
+
+ QPlane3D pxpypzb_040_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QList<Arc> pxpypzb_040_patch0_arcs;
+ pxpypzb_040_patch0_arcs << Arc(pzp, radius,
+ QVector3D(radius, 0, 0),
+ QVector3D(f1, f2, 0));
+ pxpypzb_040_patch0_arcs << Arc(pxpypzb_040_plane, radius,
+ QVector3D(f1, f2, 0),
+ QVector3D(f1, 0, f2));
+ pxpypzb_040_patch0_arcs << Arc(pyp, radius,
+ QVector3D(f1, 0, f2),
+ QVector3D(radius, 0, 0));
+
+ QList<Arc> pxpypzb_040_patch1_arcs;
+ pxpypzb_040_patch1_arcs << Arc(pxp, radius,
+ QVector3D(0, radius, 0),
+ QVector3D(0, f1, f2));
+ pxpypzb_040_patch1_arcs << Arc(pxpypzb_040_plane, radius,
+ QVector3D(0, f1, f2),
+ QVector3D(f2, f1, 0));
+ pxpypzb_040_patch1_arcs << Arc(pzp, radius,
+ QVector3D(f2, f1, 0),
+ QVector3D(0, radius, 0));
+
+ QList<Arc> pxpypzb_040_patch2_arcs;
+ pxpypzb_040_patch2_arcs << Arc(pyp, radius,
+ QVector3D(0, 0, radius),
+ QVector3D(f2, 0, f1));
+ pxpypzb_040_patch2_arcs << Arc(pxpypzb_040_plane, radius,
+ QVector3D(f2, 0, f1),
+ QVector3D(0, f2, f1));
+ pxpypzb_040_patch2_arcs << Arc(pxp, radius,
+ QVector3D(0, f2, f1),
+ QVector3D(0, 0, radius));
+
+ QList<SpherePatch> pxpypzb_040_patches;
+
+ pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch0_arcs);
+ pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch1_arcs);
+ pxpypzb_040_patches << SpherePatch(radius, pxpypzb_040_patch2_arcs);
+
+ Sphere pxpypzb_040(radius, pxpypzb_040_patches);
+
+ QTest::newRow("positive x positive y positive z backward 0.4")
+ << pxpypzb_040_plane
+ << pxpypzb_040;
+
+ factor1 = radius * 0.5;
+ factor2 = radius * 0.5;
+ factor3 = radius * 0.5;
+
+ f1 = 18165.0;
+ f2 = 5917.52;
+
+ QPlane3D pxpypzf_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QList<Arc> pxpypzf_050_patch0_arcs;
+ pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius,
+ QVector3D(f1, f2, f2),
+ QVector3D(f2, f1, f2));
+ pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius,
+ QVector3D(f2, f1, f2),
+ QVector3D(f2, f2, f1));
+ pxpypzf_050_patch0_arcs << Arc(pxpypzf_050_plane, radius,
+ QVector3D(f2, f2, f1),
+ QVector3D(f1, f2, f2));
+
+ QList<SpherePatch> pxpypzf_050_patches;
+ pxpypzf_050_patches << SpherePatch(radius, pxpypzf_050_patch0_arcs);
+
+ Sphere pxpypzf_050(radius, pxpypzf_050_patches);
+
+ QTest::newRow("positive x positive y positive z forward 0.5")
+ << pxpypzf_050_plane
+ << pxpypzf_050;
+
+ QPlane3D pxpypzb_050_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+// QList<Arc> pxpypzb_050_patch0_arcs;
+// pxpypzb_050_patch0_arcs << Arc(pzp, radius,
+// QVector3D(radius, 0, 0),
+// QVector3D(f1, f2, 0));
+// pxpypzb_050_patch0_arcs << Arc(pxpypzb_050_plane, radius,
+// QVector3D(f1, f2, 0),
+// QVector3D(f1, 0, f2));
+// pxpypzb_050_patch0_arcs << Arc(pyp, radius,
+// QVector3D(f1, 0, f2),
+// QVector3D(radius, 0, 0));
+
+// QList<Arc> pxpypzb_050_patch1_arcs;
+// pxpypzb_050_patch1_arcs << Arc(pxp, radius,
+// QVector3D(0, radius, 0),
+// QVector3D(0, f1, f2));
+// pxpypzb_050_patch1_arcs << Arc(pxpypzb_050_plane, radius,
+// QVector3D(0, f1, f2),
+// QVector3D(f2, f1, 0));
+// pxpypzb_050_patch1_arcs << Arc(pzp, radius,
+// QVector3D(f2, f1, 0),
+// QVector3D(0, radius, 0));
+
+// QList<Arc> pxpypzb_050_patch2_arcs;
+// pxpypzb_050_patch2_arcs << Arc(pyp, radius,
+// QVector3D(0, 0, radius),
+// QVector3D(f2, 0, f1));
+// pxpypzb_050_patch2_arcs << Arc(pxpypzb_050_plane, radius,
+// QVector3D(f2, 0, 1),
+// QVector3D(0, f2, f1));
+// pxpypzb_050_patch2_arcs << Arc(pxp, radius,
+// QVector3D(0, f2, f1),
+// QVector3D(0, 0, radius));
+
+ QList<SpherePatch> pxpypzb_050_patches;
+
+// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch0_arcs);
+// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch1_arcs);
+// pxpypzb_050_patches << SpherePatch(radius, pxpypzb_050_patch2_arcs);
+
+ Sphere pxpypzb_050(radius, pxpypzb_050_patches);
+
+ QTest::newRow("positive x positive y positive z backward 0.5")
+ << pxpypzb_050_plane
+ << pxpypzb_050;
+
+
+ factor1 = radius / sqrt(3.0);
+ factor2 = radius / sqrt(3.0);
+ factor3 = radius / sqrt(3.0);
+
+ QPlane3D pxpypzf_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z forward 0.57")
+ << pxpypzf_057_plane
+ << empty;
+
+ QPlane3D pxpypzb_057_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z backward 0.57")
+ << pxpypzb_057_plane
+ << basic;
+
+ factor1 = radius * 0.6;
+ factor2 = radius * 0.6;
+ factor3 = radius * 0.6;
+
+ QPlane3D pxpypzf_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(1.0, 1.0, 1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z forward 0.6")
+ << pxpypzf_060_plane
+ << empty;
+
+ QPlane3D pxpypzb_060_plane = QPlane3D(QVector3D(factor1, factor2, factor3),
+ QVector3D(-1.0, -1.0, -1.0).normalized());
+
+ QTest::newRow("positive x positive y positive z backward 0.6")
+ << pxpypzb_060_plane
+ << basic;
+}
+
+QList<QPlane3D> tst_Sphere::planes() const
+{
+ CameraData cameraData;
+
+ ViewportCamera cam;
+ cam.setProjection(new Projection3D(20000.0));
+ cam.setCameraData(cameraData);
+ Frustum f = cam.toFrustum();
+
+ QList<QPlane3D> planes;
+ planes << f.plane(Frustum::Near);
+ planes << f.plane(Frustum::Far);
+ planes << f.plane(Frustum::Top);
+ planes << f.plane(Frustum::Bottom);
+ planes << f.plane(Frustum::Left);
+ planes << f.plane(Frustum::Right);
+
+ return planes;
+}
+
+Sphere tst_Sphere::planeTest(const QList<QPlane3D> &planes, const QList<int> &planeIndices) const
+{
+ Sphere sphere;
+
+ for (int i = 0; i < planeIndices.size(); ++i) {
+ sphere.intersect(planes.at(planeIndices.at(i)));
+ }
+
+ return sphere;
+}
+
+void tst_Sphere::camera()
+{
+ QList<QPlane3D> p = planes();
+ // 2-tuples
+// for (int i = 0; i < 5; ++i) {
+// for (int j = i + 1; j < 6; ++j) {
+// QList<int> i1;
+// i1 << i << j;
+
+// Sphere s1 = planeTest(p, i1);
+
+// QList<int> i2;
+// i2 << j << i;
+
+// Sphere s2 = planeTest(p, i2);
+
+// if (!s1.isomorphic(s2)) {
+// QList<SpherePatch> p1 = s1.patches();
+// QList<SpherePatch> p2 = s2.patches();
+// if (p1.size() != p2.size()) {
+// qWarning() << i << j << "sizes different";
+// } else {
+// int s = p1.size();
+// for (int k = 0; k < s; ++k) {
+// if (!p1[k].isomorphic(p2[k])) {
+// qWarning() << i << j << k;
+//// QList<SpherePatch> l1a;
+//// l1a << p1[k];
+//// Sphere sphere1a(20000.0, l1a);
+//// qWarning() << sphere1a;
+
+//// QList<SpherePatch> l2a;
+//// l2a << p2[k];
+//// Sphere sphere2a(20000.0, l2a);
+//// qWarning() << sphere2a;
+// }
+// //qWarning() << k << (p1[k].isomorphic(p2[k]));
+// }
+// }
+// }
+// }
+// }
+
+ /*
+ intersect(...)
+ 1 2 0
+ 1 3 0
+ 1 4 0
+ 1 5 0
+ 3 4 7
+
+ intersect2(...)
+ 1 2 0
+ 1 3 0
+ 1 4 0
+ 1 5 0
+ +2 4 7
+ 3 4 7
+ +3 4 8
+ */
+
+ int plane1 = 1;
+ int plane2 = 2;
+ int patch = 0;
+
+ qWarning() << " ****** ";
+
+ Sphere sphere1;
+ sphere1.intersect(p.at(plane1));
+ SpherePatch patch1 = sphere1.patches().at(patch);
+
+ qWarning() << " ****** ";
+ QList<SpherePatch> l1a;
+ l1a << patch1;
+ Sphere sphere1a(20000.0, l1a);
+ qWarning() << sphere1a;
+ qWarning() << " ****** ";
+
+ l1a = patch1.intersect(p.at(plane2));
+
+ qWarning() << " ****** ";
+ Sphere sphere1b(20000.0, l1a);
+ qWarning() << sphere1b;
+ qWarning() << " ****** ";
+
+ Sphere sphere2;
+ sphere2.intersect(p.at(plane2));
+ SpherePatch patch2 = sphere2.patches().at(patch);
+
+ qWarning() << " ****** ";
+ QList<SpherePatch> l2a;
+ l2a << patch2;
+ Sphere sphere2a(20000.0, l2a);
+ qWarning() << sphere2a;
+ qWarning() << " ****** ";
+
+ l2a = patch2.intersect(p.at(plane1));
+
+ qWarning() << " ****** ";
+ Sphere sphere2b(20000.0, l2a);
+ qWarning() << sphere2b;
+ qWarning() << " ****** ";
+}
+
+QTEST_MAIN(tst_Sphere)
+#include "tst_sphere.moc"
+
diff --git a/tests/declarativetestplugin/location.pro b/tests/declarativetestplugin/declarativetestplugin.pro
index e6c22071..78afd0aa 100644
--- a/tests/declarativetestplugin/location.pro
+++ b/tests/declarativetestplugin/declarativetestplugin.pro
@@ -1,7 +1,7 @@
TARGET = declarative_location_test
TARGETPATH = Qt/location/test
-include(../../src/imports/qimportbase.pri)
+include(../../src/imports/location/qlocationimport.pri)
QT += declarative location
diff --git a/tests/declarativetestplugin/locationtest.cpp b/tests/declarativetestplugin/locationtest.cpp
index 4dac0664..76cb3570 100644
--- a/tests/declarativetestplugin/locationtest.cpp
+++ b/tests/declarativetestplugin/locationtest.cpp
@@ -7,29 +7,29 @@
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
+** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
**
**
**
@@ -65,7 +65,8 @@ public:
}
};
-QT_END_NAMESPACE
#include "locationtest.moc"
-Q_EXPORT_PLUGIN2(declarative_location_test, QT_PREPEND_NAMESPACE(QLocationDeclarativeTestModule));
+QT_END_NAMESPACE
+
+Q_EXPORT_PLUGIN2(declarative_location_test, QT_PREPEND_NAMESPACE(QLocationDeclarativeTestModule))
diff --git a/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp b/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp
index 89050516..712a838a 100644
--- a/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp
+++ b/tests/declarativetestplugin/qdeclarativelocationtestmodel.cpp
@@ -1,15 +1,21 @@
#include "qdeclarativelocationtestmodel_p.h"
#include <qgeocoordinate.h>
#include <QtGui/QApplication>
+#include <QtCore/QTime>
+#include <QtCore>
QDeclarativeLocationTestModel::QDeclarativeLocationTestModel(QObject *parent):
QAbstractListModel(parent),
delay_(0),
datacount_(0),
- componentCompleted_(false)
+ componentCompleted_(false),
+ crazyLevel_(0),
+ crazyMode_(false)
{
+ // seed crazy random generator
+ qsrand(QTime(0,0,0).secsTo(QTime::currentTime()) + QCoreApplication::applicationPid());
timer_.setSingleShot(true);
- connect(&timer_, SIGNAL(timeout()), this, SLOT(repopulate()));
+ connect(&timer_, SIGNAL(timeout()), this, SLOT(timerFired()));
// Establish role names so that they can be queried from this model
QHash<int, QByteArray> roleNames;
roleNames = QAbstractItemModel::roleNames();
@@ -27,6 +33,19 @@ QDeclarativeLocationTestModel::~QDeclarativeLocationTestModel()
}
}
+void QDeclarativeLocationTestModel::timerFired()
+{
+ //qDebug() << "timer fired" ;
+ repopulate();
+ if (crazyMode_) {
+ //qDebug() << "raw randomw value: " << qrand();
+ int delay = (qAbs(qrand()) % crazyLevel_); // writing software is exact science
+ delay = qMax(1000, delay); // 3 ms at minimum
+ qDebug() << "starting timer with : " << delay;
+ timer_.start(delay);
+ }
+}
+
void QDeclarativeLocationTestModel::componentComplete()
{
componentCompleted_ = true;
@@ -75,30 +94,71 @@ void QDeclarativeLocationTestModel::setDatatype(QString datatype)
scheduleRepopulation();
}
+int QDeclarativeLocationTestModel::crazyLevel() const
+{
+ return crazyLevel_;
+}
+
+void QDeclarativeLocationTestModel::setCrazyLevel(int level)
+{
+ if (level == crazyLevel_)
+ return;
+ crazyLevel_ = level;
+ reset();
+ scheduleRepopulation();
+ emit crazyLevelChanged();
+}
+
+bool QDeclarativeLocationTestModel::crazyMode() const
+{
+ return crazyMode_;
+}
+
+void QDeclarativeLocationTestModel::setCrazyMode(bool mode)
+{
+ if (mode == crazyMode_)
+ return;
+ crazyMode_ = mode;
+ //if (!crazyMode_)
+ //reset();
+ //else
+ if (crazyMode_)
+ scheduleRepopulation();
+ emit crazyModeChanged();
+}
+
// only coordinate datatype for now to get started with,
// refactor if more usecases for the model emerge.
void QDeclarativeLocationTestModel::repopulate()
{
- double latitude = 0.0;
- double longitude = 1.0;
+ double latitude = -30;
+ double longitude = 153;
beginResetModel();
if (!dataobjects_.isEmpty()) {
qDeleteAll(dataobjects_);
dataobjects_.clear();
}
- for (int i = 0; i < datacount_; ++i) {
+ int datacount = datacount_;
+ if (crazyMode_)
+ datacount = (qAbs(qrand()) % datacount_);
+
+ qDebug() << "generating random content: " << datacount;
+
+ for (int i = 0; i < datacount; ++i) {
DataObject* dataobject = new DataObject;
QDeclarativeCoordinate* coordinate = new QDeclarativeCoordinate(QGeoCoordinate(latitude,longitude));
dataobject->coordinate_ = coordinate;
dataobjects_.append(dataobject);
- longitude += 1.0;
- latitude += 1.0;
+ longitude -= 0.2;
+ latitude += 0.2;
}
endResetModel();
}
void QDeclarativeLocationTestModel::reset()
{
+ if (timer_.isActive())
+ timer_.stop();
beginResetModel();
if (!dataobjects_.isEmpty()) {
qDeleteAll(dataobjects_);
@@ -111,12 +171,27 @@ void QDeclarativeLocationTestModel::scheduleRepopulation()
{
if (!componentCompleted_)
return;
+ if (datacount_ <= 0) {
+ qDebug() << __FUNCTION__ << "won't schedule model, invalid datacount: " << datacount_;
+ return;
+ }
+
if (timer_.isActive())
timer_.stop();
- if (delay_ > 0)
- timer_.start(delay_);
- else
- repopulate();
+
+ if (crazyMode_) {
+ // start generating arbitrary amount of data at arbitrary intervals
+ int delay = (qAbs(qrand()) % crazyLevel_); // writing software is exact science
+ delay = qMax(3, delay); // 3 ms at minimum
+ qDebug() << "starting timer with : " << delay;
+ timer_.start(delay);
+ } else {
+ // just update
+ if (delay_ > 0)
+ timer_.start(delay_);
+ else
+ repopulate();
+ }
}
int QDeclarativeLocationTestModel::rowCount(const QModelIndex& parent) const
diff --git a/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h b/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h
index ad0f1170..41388e6e 100644
--- a/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h
+++ b/tests/declarativetestplugin/qdeclarativelocationtestmodel_p.h
@@ -26,6 +26,8 @@ class QDeclarativeLocationTestModel : public QAbstractListModel, public QDeclara
Q_OBJECT
Q_PROPERTY(int datacount READ datacount WRITE setDatacount NOTIFY datacountChanged)
Q_PROPERTY(int delay READ delay WRITE setDelay NOTIFY delayChanged)
+ Q_PROPERTY(bool crazyMode READ crazyMode WRITE setCrazyMode NOTIFY crazyModeChanged)
+ Q_PROPERTY(int crazyLevel READ crazyLevel WRITE setCrazyLevel NOTIFY crazyLevelChanged)
Q_PROPERTY(QString datatype READ datatype WRITE setDatatype NOTIFY datatypeChanged)
Q_INTERFACES(QDeclarativeParserStatus)
@@ -51,6 +53,12 @@ public:
int delay() const;
void setDelay(int delay);
+ int crazyLevel() const;
+ void setCrazyLevel(int level);
+
+ bool crazyMode() const;
+ void setCrazyMode(bool mode);
+
QString datatype() const;
void setDatatype(QString datatype);
@@ -64,9 +72,12 @@ signals:
void datatypeChanged();
void delayChanged();
void modelChanged();
+ void crazyLevelChanged();
+ void crazyModeChanged();
private slots:
void repopulate();
+ void timerFired();
private:
void scheduleRepopulation();
@@ -78,6 +89,8 @@ private:
QString datatype_;
QTimer timer_;
QList<DataObject*> dataobjects_;
+ int crazyLevel_;
+ bool crazyMode_;
};
#endif
diff --git a/tests/systemtests/map3d/camerawidget.cpp b/tests/systemtests/map3d/camerawidget.cpp
new file mode 100644
index 00000000..6b1e0dd2
--- /dev/null
+++ b/tests/systemtests/map3d/camerawidget.cpp
@@ -0,0 +1,114 @@
+#include "camerawidget.h"
+
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QGridLayout>
+
+CameraWidget::CameraWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi();
+}
+
+void CameraWidget::setupUi()
+{
+ QLabel *latLabel = new QLabel("Latitude");
+ lat_ = new QLineEdit();
+
+ QLabel *lonLabel = new QLabel("Longitude");
+ lon_ = new QLineEdit();
+
+ QLabel *distanceLabel = new QLabel("Distance");
+ distance_ = new QLineEdit();
+
+ QLabel *zoomLevelLabel = new QLabel("Zoom Level");
+ zoomLevel_ = new QLineEdit();
+
+ QLabel *zoomFactorLabel = new QLabel("Zoom Factor");
+ zoomFactor_ = new QLineEdit();
+
+ QLabel *bearingLabel = new QLabel("Bearing");
+ bearing_ = new QLineEdit();
+
+ QLabel *tiltLabel = new QLabel("Tilt");
+ tilt_ = new QLineEdit();
+
+ QLabel *rollLabel = new QLabel("Roll");
+ roll_ = new QLineEdit();
+
+ QGridLayout *grid = new QGridLayout();
+ grid->addWidget(latLabel, 0, 0);
+ grid->addWidget(lat_, 0, 1);
+ grid->addWidget(lonLabel, 1, 0);
+ grid->addWidget(lon_, 1, 1);
+ grid->addWidget(distanceLabel, 2, 0);
+ grid->addWidget(distance_, 2, 1);
+ grid->addWidget(zoomLevelLabel, 3, 0);
+ grid->addWidget(zoomLevel_, 3, 1);
+ grid->addWidget(zoomFactorLabel, 4, 0);
+ grid->addWidget(zoomFactor_, 4, 1);
+ grid->addWidget(bearingLabel, 5, 0);
+ grid->addWidget(bearing_, 5, 1);
+ grid->addWidget(tiltLabel, 6, 0);
+ grid->addWidget(tilt_, 6, 1);
+ grid->addWidget(rollLabel, 7, 0);
+ grid->addWidget(roll_, 7, 1);
+
+ update_ = new QPushButton("Update");
+ connect(update_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(updateCamera()));
+
+ capture_ = new QPushButton("Capture");
+ connect(capture_,
+ SIGNAL(clicked()),
+ this,
+ SIGNAL(capture()));
+
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->addLayout(grid);
+ layout->addWidget(update_);
+ layout->addWidget(capture_);
+
+ setLayout(layout);
+}
+
+CameraData CameraWidget::camera() const
+{
+ return cam_;
+}
+
+void CameraWidget::setCamera(const CameraData& camera)
+{
+ cam_ = camera;
+
+ lat_->setText(QString::number(cam_.center().latitude(), 'g', 10));
+ lon_->setText(QString::number(cam_.center().longitude(), 'g', 10));
+ distance_->setText(QString::number(cam_.distance(), 'g', 4));
+ zoomLevel_->setText(QString::number(cam_.zoomLevel()));
+ zoomFactor_->setText(QString::number(cam_.zoomFactor()));
+ bearing_->setText(QString::number(cam_.bearing(), 'g', 10));
+ tilt_->setText(QString::number(cam_.tilt(), 'g', 10));
+ roll_->setText(QString::number(cam_.roll(), 'g', 10));
+}
+
+void CameraWidget::updateCamera()
+{
+ double lat = lat_->text().toDouble();
+ double lon = lon_->text().toDouble();
+ cam_.setCenter(QGeoCoordinate(lat, lon));
+ if (!zoomFactor_->text().isEmpty()) {
+ cam_.setZoomFactor(zoomFactor_->text().toDouble());
+ } else {
+ cam_.setZoomLevel(zoomLevel_->text().toInt());
+ cam_.setDistance(distance_->text().toDouble());
+ }
+ cam_.setBearing(bearing_->text().toDouble());
+ cam_.setTilt(tilt_->text().toDouble());
+ cam_.setRoll(roll_->text().toDouble());
+
+ emit updated();
+}
diff --git a/tests/systemtests/map3d/camerawidget.h b/tests/systemtests/map3d/camerawidget.h
new file mode 100644
index 00000000..d3e8faa4
--- /dev/null
+++ b/tests/systemtests/map3d/camerawidget.h
@@ -0,0 +1,46 @@
+#ifndef CAMERAWIDGET_H
+#define CAMERAWIDGET_H
+
+#include <QWidget>
+
+#include "cameradata.h"
+
+class QLineEdit;
+class QPushButton;
+
+class CameraWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ CameraWidget(QWidget *parent = 0);
+
+ CameraData camera() const;
+
+public slots:
+ void setCamera(const CameraData& camera);
+
+private slots:
+ void updateCamera();
+
+signals:
+ void updated();
+ void capture();
+
+private:
+ void setupUi();
+
+ CameraData cam_;
+
+ QLineEdit *lat_;
+ QLineEdit *lon_;
+ QLineEdit *distance_;
+ QLineEdit *zoomLevel_;
+ QLineEdit *zoomFactor_;
+ QLineEdit *bearing_;
+ QLineEdit *tilt_;
+ QLineEdit *roll_;
+ QPushButton *update_;
+ QPushButton *capture_;
+};
+
+#endif // CAMERAWIDGET_H
diff --git a/tests/systemtests/map3d/main.cpp b/tests/systemtests/map3d/main.cpp
new file mode 100644
index 00000000..4c9d0b85
--- /dev/null
+++ b/tests/systemtests/map3d/main.cpp
@@ -0,0 +1,45 @@
+#include <QApplication>
+
+#include <QUrl>
+#include <QSettings>
+#include <QProcessEnvironment>
+#include <QNetworkProxyFactory>
+
+#include "mainwidget.h"
+
+int main(int argc, char** argv)
+{
+ QApplication app(argc, argv);
+
+ // not in the tutorial text: set up a proxy server from
+ // a QSettings file if necessary (useful on Linux)
+
+ QApplication::setOrganizationName("Nokia");
+ QApplication::setApplicationName("Maps3D");
+
+ QSettings settings;
+
+ QVariant value = settings.value("http.proxy");
+ if (value.isValid()) {
+ QUrl url(value.toString(), QUrl::TolerantMode);
+ QNetworkProxy proxy;
+ proxy.setType(QNetworkProxy::HttpProxy);
+ proxy.setHostName(url.host());
+ proxy.setPort(url.port(8080));
+ QNetworkProxy::setApplicationProxy(proxy);
+ }
+
+ int bm = 0;
+
+ if (argc == 2) {
+ bool ok = false;
+ bm = QString(QLatin1String(argv[1])).toInt(&ok);
+ if (!ok)
+ bm = 0;
+ }
+
+ MainWidget *w = new MainWidget(0, bm);
+ w->show();
+
+ return app.exec();
+}
diff --git a/tests/systemtests/map3d/mainwidget.cpp b/tests/systemtests/map3d/mainwidget.cpp
new file mode 100644
index 00000000..1ad6a6dd
--- /dev/null
+++ b/tests/systemtests/map3d/mainwidget.cpp
@@ -0,0 +1,300 @@
+#include "mainwidget.h"
+
+#include "tilecache.h"
+#include "tileview.h"
+#include "camerawidget.h"
+
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QTextEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QLineEdit>
+#include <QTimer>
+#include <QComboBox>
+
+#include <QApplication>
+
+#include <QPropertyAnimation>
+#include <QSequentialAnimationGroup>
+
+MainWidget::MainWidget(QWidget *parent, int bm)
+ : QWidget(parent),
+ exitWhenDone_(false)
+{
+ TileCache *cache = new TileCache();
+
+ tileView_ = new TileView(cache);
+ tileView_->setMinimumSize(450, 450);
+
+ camera1_ = new CameraWidget();
+
+ connect(camera1_,
+ SIGNAL(updated()),
+ this,
+ SLOT(camera1Update()));
+ connect(camera1_,
+ SIGNAL(capture()),
+ this,
+ SLOT(camera1Capture()));
+
+ camera2_ = new CameraWidget();
+
+ animate1_ = new QPushButton("Go");
+ connect(animate1_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(animate1Clicked()));
+
+ animate2_ = new QPushButton("Go");
+ connect(animate2_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(animate2Clicked()));
+
+ QLabel *durationLabel = new QLabel("Duration");
+ duration_ = new QLineEdit();
+ duration_->setText("2000");
+
+ QLabel *easingLabel = new QLabel("Easing Curve");
+ easing_ = new QComboBox();
+ easing_->setEditable(false);
+
+ easing_->addItem("Linear", 0);
+
+ easing_->addItem("InQuad", 1);
+ easing_->addItem("OutQuad", 2);
+ easing_->addItem("InOutQuad", 3);
+ easing_->addItem("OutInQuad", 4);
+
+ easing_->addItem("InCubic", 5);
+ easing_->addItem("OutCubic", 6);
+ easing_->addItem("InOutCubic", 7);
+ easing_->addItem("OutInCubic", 8);
+
+ easing_->addItem("InQuart", 9);
+ easing_->addItem("OutQuart", 10);
+ easing_->addItem("InOutQuart", 11);
+ easing_->addItem("OutInQuart", 12);
+
+ easing_->addItem("InQunit", 13);
+ easing_->addItem("OutQunit", 14);
+ easing_->addItem("InOutQunit", 15);
+ easing_->addItem("OutInQunit", 16);
+
+ easing_->addItem("InSine", 17);
+ easing_->addItem("OutSine", 18);
+ easing_->addItem("InOutSine", 19);
+ easing_->addItem("OutInSine", 20);
+
+ easing_->addItem("InExpo", 21);
+ easing_->addItem("OutExpo", 22);
+ easing_->addItem("InOutExpo", 23);
+ easing_->addItem("OutInExpo", 24);
+
+ easing_->addItem("InCirc", 25);
+ easing_->addItem("OutCirc", 26);
+ easing_->addItem("InOutCirc", 27);
+ easing_->addItem("OutInCirc", 28);
+
+ easing_->addItem("InElastic", 29);
+ easing_->addItem("OutElastic", 30);
+ easing_->addItem("InOutElastic", 31);
+ easing_->addItem("OutInElastic", 32);
+
+ easing_->addItem("InBounce", 33);
+ easing_->addItem("OutBounce", 34);
+ easing_->addItem("InOutBounce", 35);
+ easing_->addItem("OutInBounce", 36);
+
+ easing_->addItem("InBack", 37);
+ easing_->addItem("OutBack", 38);
+ easing_->addItem("InOutBack", 39);
+ easing_->addItem("OutInBack", 40);
+
+ connect(camera2_,
+ SIGNAL(updated()),
+ this,
+ SLOT(camera2Update()));
+ connect(camera2_,
+ SIGNAL(capture()),
+ this,
+ SLOT(camera2Capture()));
+
+ bm1Button_ = new QPushButton("Benchmark 1");
+ connect(bm1Button_,
+ SIGNAL(clicked()),
+ this,
+ SLOT(runBenchmark1()));
+
+ QGridLayout *animateLayout = new QGridLayout;
+ animateLayout->addWidget(durationLabel, 0, 0);
+ animateLayout->addWidget(duration_, 0, 1);
+ animateLayout->addWidget(easingLabel, 1, 0);
+ animateLayout->addWidget(easing_, 1, 1);
+
+ QGridLayout *cameraLayout = new QGridLayout;
+ cameraLayout->addWidget(camera1_, 0, 0);
+ cameraLayout->addWidget(camera2_, 0, 1);
+ cameraLayout->addLayout(animateLayout, 1, 0, 1, 2);
+ cameraLayout->addWidget(animate1_, 2, 0);
+ cameraLayout->addWidget(animate2_, 2, 1);
+ cameraLayout->addWidget(bm1Button_, 3, 0);
+ cameraLayout->setRowStretch(4, 1);
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addLayout(cameraLayout, 0);
+ layout->addWidget(tileView_, 1);
+
+ CameraData c1;
+ camera1_->setCamera(c1);
+ CameraData c2;
+ c2.setCenter(QGeoCoordinate(-19.2, 146.75));
+ c2.setZoomFactor(8.0);
+ camera2_->setCamera(c2);
+
+ setLayout(layout);
+
+ if (bm == 1) {
+ exitWhenDone_ = true;
+ QTimer::singleShot(0, this, SLOT(runBenchmark1()));
+ }
+}
+
+void MainWidget::runBenchmark1()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+
+ CameraData newCameraData;
+ newCameraData.setCenter(QGeoCoordinate(-19.2, 146.75));
+ newCameraData.setZoomFactor(8.0);
+ // hack to get the internal projection set in the cameradata object
+ tileView_->map()->setCameraData(newCameraData);
+ CameraData newCamera = tileView_->map()->cameraData();
+
+ CameraData oldCameraData;
+ oldCameraData.setCenter(QGeoCoordinate(-27.5, 153));
+ oldCameraData.setZoomFactor(4.0);
+ // hack to get the internal projection set in the cameradata object
+ tileView_->map()->setCameraData(oldCameraData);
+ CameraData oldCamera = tileView_->map()->cameraData();
+
+ QPropertyAnimation *a20f = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a20f->setStartValue(QVariant::fromValue(oldCamera));
+ a20f->setEndValue(QVariant::fromValue(newCamera));
+ a20f->setDuration(20000);
+
+ QPropertyAnimation *a20b = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a20b->setStartValue(QVariant::fromValue(newCamera));
+ a20b->setEndValue(QVariant::fromValue(oldCamera));
+ a20b->setDuration(20000);
+
+ QPropertyAnimation *a2f = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a2f->setStartValue(QVariant::fromValue(oldCamera));
+ a2f->setEndValue(QVariant::fromValue(newCamera));
+ a2f->setDuration(2000);
+
+ QPropertyAnimation *a2b = new QPropertyAnimation(tileView_->map(), "camera", this);
+ a2b->setStartValue(QVariant::fromValue(newCamera));
+ a2b->setEndValue(QVariant::fromValue(oldCamera));
+ a2b->setDuration(2000);
+
+ QSequentialAnimationGroup *s2 = new QSequentialAnimationGroup(this);
+ s2->addAnimation(a2f);
+ s2->addAnimation(a2b);
+ s2->setLoopCount(10);
+
+ QSequentialAnimationGroup *s = new QSequentialAnimationGroup(this);
+ s->addAnimation(a20f);
+ s->addAnimation(a20b);
+ s->addAnimation(s2);
+
+ if (exitWhenDone_) {
+ connect(s,
+ SIGNAL(finished()),
+ qApp,
+ SLOT(quit()));
+ }
+
+ QTimer::singleShot(0, s, SLOT(start()));
+
+}
+
+void MainWidget::camera1Update()
+{
+ tileView_->map()->setCameraData(camera1_->camera());
+ if (!tileView_->map()->autoUpdate())
+ tileView_->map()->update();
+}
+
+void MainWidget::camera2Update()
+{
+ tileView_->map()->setCameraData(camera2_->camera());
+ if (!tileView_->map()->autoUpdate())
+ tileView_->map()->update();
+}
+
+void MainWidget::camera1Capture()
+{
+ camera1_->setCamera(tileView_->map()->cameraData());
+}
+
+void MainWidget::camera2Capture()
+{
+ camera2_->setCamera(tileView_->map()->cameraData());
+}
+
+void MainWidget::animate1Clicked()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+ CameraData oldCamera = tileView_->map()->cameraData();
+ CameraData newCamera = camera1_->camera();
+
+ QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this);
+
+ connect(a,
+ SIGNAL(finished()),
+ this,
+ SLOT(animationFinished()));
+
+ a->setStartValue(QVariant::fromValue(oldCamera));
+ a->setEndValue(QVariant::fromValue(newCamera));
+ a->setDuration(duration_->text().toInt());
+ a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt()));
+
+ QTimer::singleShot(0, a, SLOT(start()));
+}
+
+void MainWidget::animate2Clicked()
+{
+ oldAutoUpdate_ = tileView_->map()->autoUpdate();
+ tileView_->map()->setAutoUpdate(true);
+ CameraData oldCamera = tileView_->map()->cameraData();
+ CameraData newCamera = camera2_->camera();
+
+ QPropertyAnimation *a = new QPropertyAnimation(tileView_->map(), "camera", this);
+
+ connect(a,
+ SIGNAL(finished()),
+ this,
+ SLOT(animationFinished()));
+
+ a->setStartValue(QVariant::fromValue(oldCamera));
+ a->setEndValue(QVariant::fromValue(newCamera));
+ a->setDuration(duration_->text().toInt());
+ a->setEasingCurve(QEasingCurve::Type(easing_->itemData(easing_->currentIndex()).toInt()));
+
+// TilePlan *tp = new TilePlan(a);
+// tileView_->map()->mapCamera()->prepareAnimation(tp);
+// delete tp;
+
+ QTimer::singleShot(0, a, SLOT(start()));
+}
+
+void MainWidget::animationFinished()
+{
+ tileView_->map()->setAutoUpdate(oldAutoUpdate_);
+}
diff --git a/tests/systemtests/map3d/mainwidget.h b/tests/systemtests/map3d/mainwidget.h
new file mode 100644
index 00000000..3a7f072d
--- /dev/null
+++ b/tests/systemtests/map3d/mainwidget.h
@@ -0,0 +1,48 @@
+#ifndef MAINWIDGET_H
+#define MAINWIDGET_H
+
+#include <QWidget>
+
+class TileView;
+class CameraWidget;
+
+class QTextEdit;
+class QPushButton;
+class QLineEdit;
+class QComboBox;
+
+class MainWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ MainWidget(QWidget *parent = 0, int bm = 0);
+
+public slots:
+ void camera1Update();
+ void camera1Capture();
+ void camera2Update();
+ void camera2Capture();
+ void animate1Clicked();
+ void animate2Clicked();
+ void animationFinished();
+
+ void runBenchmark1();
+
+private:
+ TileView *tileView_;
+
+ CameraWidget *camera1_;
+ CameraWidget *camera2_;
+ QLineEdit *duration_;
+ QComboBox *easing_;
+ QPushButton *animate1_;
+ QPushButton *animate2_;
+
+ QPushButton *bm1Button_;
+
+ bool exitWhenDone_;
+
+ bool oldAutoUpdate_;
+};
+
+#endif // MAINWIDGET_H
diff --git a/tests/systemtests/map3d/map3d.pro b/tests/systemtests/map3d/map3d.pro
new file mode 100644
index 00000000..1430fb92
--- /dev/null
+++ b/tests/systemtests/map3d/map3d.pro
@@ -0,0 +1,26 @@
+
+TEMPLATE = app
+TARGET = map3d
+
+CONFIG += qt warn_on qt3d
+
+QT += network location
+
+INCLUDEPATH += ../../../src/location/mapsgl/map3d
+
+HEADERS += \
+ camerawidget.h \
+ mainwidget.h \
+ tileview.h
+
+SOURCES += \
+ main.cpp \
+ camerawidget.cpp \
+ mainwidget.cpp \
+ tileview.cpp
+
+#install
+target.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d
+sources.files = $$SOURCES $HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/map3d
+INSTALLS += target sources
diff --git a/tests/systemtests/map3d/tileview.cpp b/tests/systemtests/map3d/tileview.cpp
new file mode 100644
index 00000000..6b67cb33
--- /dev/null
+++ b/tests/systemtests/map3d/tileview.cpp
@@ -0,0 +1,252 @@
+#include "tileview.h"
+
+#include "tilecache.h"
+#include "tile.h"
+#include "cameradata.h"
+#include "mapitem.h"
+
+#include "qgeocoordinate.h"
+
+#include "qgeoserviceprovider.h"
+#include "qgeomappingmanager.h"
+
+#include <qglscenenode.h>
+#include <qglbuilder.h>
+#include <qgeometrydata.h>
+
+#include <QApplication>
+#include <QKeyEvent>
+#include <QTimer>
+
+#include <QColor>
+
+#include <QPropertyAnimation>
+
+#include <cmath>
+
+#include <QDebug>
+
+TileView::TileView(TileCache *tileCache, QWidget *parent) :
+ QGLView(parent),
+ tileCache_(tileCache)
+{
+ serviceProvider_ = new QGeoServiceProvider("nokia");
+ map_ = new Map(tileCache, this);
+ map_->setMappingManager(serviceProvider_->mappingManager());
+ map_->setAutoUpdate(false);
+
+ connect(map_,
+ SIGNAL(updateRequired()),
+ this,
+ SLOT(update()));
+
+ setCamera(map_->glCamera());
+
+
+ MapItem *item1 = new MapItem;
+ item1->setCoordinate(QGeoCoordinate(-27, 153));
+ item1->setSize(QSizeF(128, 128));
+ item1->setZoom(5);
+ map_->addMapItem(item1);
+
+ MapItem *item2 = new MapItem;
+ item2->setCoordinate(QGeoCoordinate(-27, 153));
+ item2->setSize(QSizeF(128, 128));
+ item2->setAnchor(QPointF(128, 128));
+ item2->setZoom(5);
+ map_->addMapItem(item2);
+
+ MapItem *item3 = new MapItem;
+ item3->setCoordinate(QGeoCoordinate(-27, 153));
+ item3->setSize(QSizeF(256.0, 256.0));
+ item3->setAnchor(QPointF(-256.0, -256.0));
+ item3->setZoom(6);
+ map_->addMapItem(item3);
+}
+
+TileView::~TileView()
+{
+ delete serviceProvider_;
+}
+
+Map* TileView::map()
+{
+ return map_;
+}
+
+void TileView::closeEvent(QCloseEvent *)
+{
+ qApp->quit();
+}
+
+void TileView::paintGL(QGLPainter *painter)
+{
+ map_->paintGL(painter);
+// QGLSceneNode *node = map_->sceneNodeForRendering();
+// if (node) {
+// node->draw(painter);
+// map_->sceneNodeRenderingDone();
+// }
+}
+
+void TileView::showEvent(QShowEvent *)
+{
+ updateAspectRatio();
+}
+
+void TileView::resizeEvent(QResizeEvent *event)
+{
+ QGLView::resizeEvent(event);
+ updateAspectRatio();
+}
+
+void TileView::updateAspectRatio()
+{
+ map_->resize(width(), height());
+}
+
+void TileView::enterEvent(QEvent *)
+{
+ setFocus();
+ grabKeyboard();
+}
+
+void TileView::leaveEvent(QEvent *)
+{
+ releaseKeyboard();
+}
+
+void TileView::keyPressEvent(QKeyEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+ if (e->key() == Qt::Key_Left) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Right) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Up) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Down) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Plus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ cameraData.setDistance(cameraData.distance() / 2.0);
+ cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() / 1.1);
+ }
+ } else if (e->key() == Qt::Key_Minus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ if (cameraData.zoomLevel() != 1)
+ cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+ cameraData.setDistance(cameraData.distance() * 2.0);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() * 1.1);
+ }
+ } else if (e->key() == Qt::Key_U) {
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ }
+ map_->setCameraData(cameraData);
+ update();
+}
+
+//void TileView::wheelEvent(QWheelEvent *e)
+//{
+// CameraData cameraData = map_->cameraData();
+// if (e->delta() > 0) {
+// if (e->modifiers() & Qt::ShiftModifier) {
+// cameraData.setDistance(cameraData.distance() / 2.0);
+// cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+// map_->setCameraData(cameraData);
+// if (!map_->autoUpdate())
+// map_->update();
+// } else {
+// cameraData.setDistance(cameraData.distance() / 1.1);
+// }
+// } else {
+// if (e->modifiers() & Qt::ShiftModifier) {
+// if (cameraData.zoomLevel() != 1)
+// cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+// cameraData.setDistance(cameraData.distance() * 2.0);
+// map_->setCameraData(cameraData);
+// if (!map_->autoUpdate())
+// map_->update();
+// } else {
+// cameraData.setDistance(cameraData.distance() * 1.1);
+// }
+// }
+// map_->setCameraData(cameraData);
+// update();
+
+// e->accept();
+//}
+//
+//void TileView::mousePressEvent(QMouseEvent *e)
+//{
+// switch (e->button()) {
+// case Qt::LeftButton:
+// mousePos_ = e->pos();
+//// QGeoCoordinate coord = map_->screenPositionToCoordinate(mousePos_);
+//// qDebug() << __FUNCTION__
+//// << "mousePos " << mousePos_
+//// << " -> coord " << coord
+//// << " -> screen " << map_->coordinateToScreenPosition(coord);
+// break;
+// }
+// e->accept();
+//}
+
+//void TileView::mouseReleaseEvent(QMouseEvent *e)
+//{
+//}
+
+//void TileView::mouseMoveEvent(QMouseEvent *e)
+//{
+// CameraData cameraData = map_->cameraData();
+
+// if ((e->buttons() & Qt::LeftButton) == Qt::LeftButton)
+// {
+// // Pixel pan support?!
+// QPoint delta = (mousePos_ - e->pos()) / 50;
+
+// QGeoCoordinate coord = cameraData.center();
+// coord.setLatitude(coord.latitude() + delta.y());
+// coord.setLongitude(coord.longitude() - delta.x());
+// cameraData.setCenter(coord);
+
+// map_->setCameraData(cameraData);
+// update();
+// }
+// e->accept();
+//}
diff --git a/tests/systemtests/map3d/tileview.h b/tests/systemtests/map3d/tileview.h
new file mode 100644
index 00000000..3545848f
--- /dev/null
+++ b/tests/systemtests/map3d/tileview.h
@@ -0,0 +1,51 @@
+#ifndef TILEVIEW_H
+#define TILEVIEW_H
+
+#include <qglview.h>
+
+#include "cameradata.h"
+#include "map.h"
+
+class QGLPainter;
+class QGLSceneNode;
+class TileCache;
+class Tile;
+class TileSpec;
+class MapSphere;
+class QGeoServiceProvider;
+class ScriptEngine;
+
+class TileView : public QGLView
+{
+ Q_OBJECT
+public:
+ explicit TileView(TileCache *tileCache, QWidget *parent = 0);
+ ~TileView();
+
+ Map *map();
+
+ void paintGL(QGLPainter *painter);
+
+protected:
+ void showEvent(QShowEvent *);
+ void resizeEvent(QResizeEvent *);
+ void enterEvent(QEvent *);
+ void leaveEvent(QEvent *e);
+ void keyPressEvent(QKeyEvent *e);
+ void closeEvent(QCloseEvent *);
+
+// void wheelEvent(QWheelEvent *e);
+// void mousePressEvent(QMouseEvent *e);
+// void mouseReleaseEvent(QMouseEvent *e);
+// void mouseMoveEvent(QMouseEvent *e);
+
+private:
+ void updateAspectRatio();
+
+ QGeoServiceProvider *serviceProvider_;
+ TileCache *tileCache_;
+ Map *map_;
+ QPoint mousePos_;
+};
+
+#endif // TILEVIEW_H
diff --git a/tests/tests.pro b/tests/tests.pro
index 157ef345..622bb344 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -1,2 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS += auto
+SUBDIRS = auto declarativetestplugin