summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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