00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238 #ifndef INC_MI32_MAPPROJ_H
00239 #define INC_MI32_MAPPROJ_H
00240 #define INC_MI32_MAPPROJ_H
00241
00242 #ifndef INC_MI32_STDDEFNS_H
00243 #include <mi32/stddefns.h>
00244 #endif
00245
00246 #ifndef INC_MI32_ERRCODES_H
00247 #include <mi32/errcodes.h>
00248 #endif
00249
00250 #ifndef INC_MI32_SIMPLEAR_H
00251 #include <mi32/simplear.h>
00252 #endif
00253
00254 #ifndef INC_COORD_H
00255 #include <mi32/point.h>
00256 #endif
00257
00258 #ifndef INC_MI32_MISTRING_H
00259 #include <mi32/mistring.h>
00260 #endif
00261
00262 #ifndef INC_STRING_H
00263 #include <string.h>
00264 #define INC_STRING_H
00265 #endif
00266
00267 #ifndef INC_STDLIB_H
00268 #include <stdlib.h>
00269 #define INC_STDLIB_H
00270 #endif
00271
00272 #ifdef GEOMDLL
00273 #define GEOMLIBEXPORT MI_DLLEXPORT
00274 #else
00275 #define GEOMLIBEXPORT MI_DLLIMPORT
00276 #endif
00277
00278
00279
00280 struct CTRLPOINT3;
00281 struct MAPPROJPARM;
00282 class FILEPATH;
00283
00284 enum PROJECTION {
00285 PROJECTION_Undefined = -3,
00286 PROJECTION_None = -2,
00287 PROJECTION_Arbitrary = -1,
00288 PROJECTION_LatLon = 0,
00289 PROJECTION_Geographic = 0,
00290 PROJECTION_UTM = 1,
00291 PROJECTION_StatePlane = 2,
00292 PROJECTION_AlbersEqualAreaConic = 3,
00293 PROJECTION_AEAC = 3,
00294 PROJECTION_LambertConformalConic = 4,
00295 PROJECTION_LCC = 4,
00296 PROJECTION_Mercator = 5,
00297 PROJECTION_PolarStereographic = 6,
00298 PROJECTION_Polyconic = 7,
00299 PROJECTION_EquidistantConic = 8,
00300 PROJECTION_TransverseMercator = 9,
00301 PROJECTION_Stereographic = 10,
00302 PROJECTION_LambertAzimuthalEqualArea = 11,
00303 PROJECTION_LAEA = 11,
00304 PROJECTION_AzimuthalEquidistant = 12,
00305 PROJECTION_Gnomonic = 13,
00306 PROJECTION_Orthographic = 14,
00307 PROJECTION_GeneralVertNearSidePerspective = 15,
00308 PROJECTION_GVNSP = 15,
00309 PROJECTION_Sinusoidal = 16,
00310 PROJECTION_Equirectangular = 17,
00311 PROJECTION_MillerCylindrical = 18,
00312 PROJECTION_VanDerGrintenI = 19,
00313 PROJECTION_ObliqueMercator = 20,
00314 PROJECTION_Robinson = 21,
00315 PROJECTION_BipolarObliqueConformalConic = 22,
00316 PROJECTION_BOCC = 22,
00317 PROJECTION_LandsatSpaceObliqueMercator = 23,
00318 PROJECTION_LandsatSOM = 23,
00319 PROJECTION_Cassini = 24,
00320 PROJECTION_NewZealandMapGrid = 25,
00321 PROJECTION_NZMG = 25,
00322 PROJECTION_SwissConformalCylindrical = 26,
00323 PROJECTION_RoyalDutch = 27,
00324 PROJECTION_ObliqueStereographic = 28,
00325 PROJECTION_InterruptedGoodeHomolosine = 29,
00326 PROJECTION_Goode = 29,
00327 };
00328
00329
00330 #define MAXPROJ 29
00331
00332 #define PROJ_Undefined PROJECTION_Undefined
00333 #define PROJ_None PROJECTION_None
00334 #define PROJ_Arbitrary PROJECTION_Arbitrary
00335 #define PROJ_LatLon PROJECTION_LatLon
00336 #define PROJ_UTM PROJECTION_UTM
00337 #define PROJ_StatePlane PROJECTION_StatePlane
00338 #define PROJ_AlbersConic PROJECTION_AlbersEqualAreaConic
00339 #define PROJ_LambertConf PROJECTION_LambertConformalConic
00340 #define PROJ_Mercator PROJECTION_Mercator
00341 #define PROJ_PolarStereo PROJECTION_PolarStereographic
00342 #define PROJ_Polyconic PROJECTION_Polyconic
00343 #define PROJ_EquidistCon PROJECTION_EquidistantConic
00344 #define PROJ_TransMercat PROJECTION_TransverseMercator
00345 #define PROJ_StereoGraph PROJECTION_Stereographic
00346 #define PROJ_LambertAzim PROJECTION_LambertAzimuthalEqualArea
00347 #define PROJ_AzimEquidis PROJECTION_AzimuthalEquidistant
00348 #define PROJ_Gnomonic PROJECTION_Gnomonic
00349 #define PROJ_Orthograph PROJECTION_Orthographic
00350 #define PROJ_GenVertPers PROJECTION_GVNSP
00351 #define PROJ_Sinusoidal PROJECTION_Sinusoidal
00352 #define PROJ_Equirectang PROJECTION_Equirectangular
00353 #define PROJ_MillerCylin PROJECTION_MillerCylindrical
00354 #define PROJ_VanDerGrint PROJECTION_VanDerGrintenI
00355 #define PROJ_ObliqueMerc PROJECTION_ObliqueMercator
00356 #define PROJ_Robinson PROJECTION_Robinson
00357 #define PROJ_BipolarConic PROJECTION_BOCC
00358 #define PROJ_LandsatSOM PROJECTION_LandsatSOM
00359 #define PROJ_Cassini PROJECTION_Cassini
00360 #define PROJ_NZMG PROJECTION_NZMG
00361 #define PROJ_SwissConCyl PROJECTION_SwissConformalCylindrical
00362 #define PROJ_RoyalDutch PROJECTION_RoyalDutch
00363
00364 #define TPARM_SemiMajorAxis 0
00365 #define TPARM_SemiMinorAxis 1
00366 #define TPARM_FalseEasting 6
00367 #define TPARM_FalseNorthing 7
00368
00369 #define DATUM_TRANS_BuiltIn 0
00370 #define DATUM_TRANS_Molodensky 1
00371 #define DATUM_TRANS_Similarity 2
00372 #define DATUM_TRANS_BursaWolfe 3
00373 #define DATUM_TRANS_Grid 4
00374
00375
00376 enum DATUM {
00377
00378 DATUM_Unspecified = 0,
00379 DATUM_WGS84 = 1,
00380 DATUM_WGS72 = 2,
00381 DATUM_NAD27 = 1927,
00382 DATUM_NAD83 = 1983,
00383
00384 DATUM_Adindan = 101,
00385 DATUM_Adindan_Sudan = 107,
00386 DATUM_Afgooye = 108,
00387 DATUM_AGD66 = 128,
00388 DATUM_AGD84 = 289,
00389 DATUM_AinElAbd_Bahrain = 109,
00390 DATUM_Amersfoort = 290,
00391 DATUM_Anna1Astro = 111,
00392 DATUM_Arc1950 = 113,
00393 DATUM_Arc1960 = 122,
00394 DATUM_AscensionIsland1968 = 123,
00395 DATUM_AstroBeaconE = 124,
00396 DATUM_AstroDOS_71_4 = 125,
00397 DATUM_AstroTernIsland1961 = 126,
00398 DATUM_AstroStation1952 = 127,
00399 DATUM_Bahrain = 109,
00400 DATUM_Beijing = 324,
00401 DATUM_BellevueIGN = 131,
00402 DATUM_Bermuda1957 = 132,
00403 DATUM_Bogota = 134,
00404 DATUM_Camacupa = 291,
00405 DATUM_CampoInchauspe = 137,
00406 DATUM_CantonAstro1966 = 138,
00407 DATUM_Cape = 139,
00408 DATUM_CapeBursaWolfe = 329,
00409 DATUM_CapeBursaMod = 334,
00410 DATUM_CapeCanaveral = 140,
00411 DATUM_Carthage = 141,
00412 DATUM_CH1903 = 331,
00413 DATUM_ChathamIsland1971 = 142,
00414 DATUM_Chua = 143,
00415 DATUM_CorregoAlegre = 144,
00416 DATUM_DealulPiscului1970 = 417,
00417 DATUM_Djakarta = 146,
00418 DATUM_DOS1968 = 147,
00419 DATUM_EasterIsland1967 = 148,
00420 DATUM_ED50 = 149,
00421 DATUM_ED50_Egypt = 153,
00422 DATUM_ED79 = 162,
00423 DATUM_EgyptOld = 223,
00424 DATUM_Fahud = 229,
00425 DATUM_GandajikaBase1970 = 164,
00426 DATUM_GDA94 = 288,
00427 DATUM_GraciosaBaseSW1948 = 166,
00428 DATUM_Guam1963 = 167,
00429 DATUM_GUX1Astro = 169,
00430 DATUM_HitoXVIII1963 = 249,
00431 DATUM_Hjorsey1955 = 171,
00432 DATUM_HongKong1963 = 172,
00433 DATUM_HuTzuShan = 173,
00434 DATUM_Ind54 = 154,
00435 DATUM_Ind60 = 335,
00436 DATUM_Ind75 = 177,
00437 DATUM_Indian_Bangladesh = 174,
00438 DATUM_Indian_India_Nepal = 175,
00439 DATUM_Ireland1965 = 178,
00440 DATUM_ISTS073Astro1969 = 180,
00441 DATUM_JohnstonIsland1961 = 181,
00442 DATUM_Kalianpur_India = 306,
00443 DATUM_Kandawala = 182,
00444 DATUM_KerguelenIsland1949 = 183,
00445 DATUM_Kertau = 184,
00446 DATUM_KKJ = 326,
00447 DATUM_LC5Astro1961 = 186,
00448 DATUM_Leigon = 187,
00449 DATUM_Liberia1954 = 188,
00450 DATUM_Luzon = 189,
00451 DATUM_Luzon_Mindanao = 190,
00452 DATUM_Mahe = 191,
00453 DATUM_Manoca = 309,
00454 DATUM_Massawa = 192,
00455 DATUM_Merchich = 193,
00456 DATUM_MidwayAstro1961 = 194,
00457 DATUM_MGI = 339,
00458 DATUM_Minna_Cameroon = 195,
00459 DATUM_Minna_Nigeria = 196,
00460 DATUM_Mporo = 198,
00461 DATUM_NAD27_Alaska = 210,
00462 DATUM_NAD27_Bahamas = 211,
00463 DATUM_NAD27_Canada = 206,
00464 DATUM_NAD27_CanalZone = 218,
00465 DATUM_NAD27_Caribbean = 204,
00466 DATUM_NAD27_CentralAmerica = 205,
00467 DATUM_NAD27_Cuba = 219,
00468 DATUM_NAD27_Greenland = 220,
00469 DATUM_NAD27_Mexico = 221,
00470 DATUM_NAD27_SanSalvador = 212,
00471 DATUM_Nahrwan = 199,
00472 DATUM_Nahrwan_SaudiArabia = 201,
00473 DATUM_Nahrwan_UAE = 202,
00474 DATUM_NaparimaBWI = 203,
00475 DATUM_NewZealand1949 = 347,
00476 DATUM_NZGD2000 = 348,
00477 DATUM_NTF = 312,
00478 DATUM_NWL9D = 337,
00479 DATUM_ObservatorioMet1939 = 222,
00480 DATUM_OSGB36 = 294,
00481 DATUM_OldHawaii = 224,
00482 DATUM_PicoDeLasNieves = 235,
00483 DATUM_PitcairnAstro1967 = 236,
00484 DATUM_PointeNoire = 238,
00485 DATUM_PortoSanto1936 = 239,
00486 DATUM_Potsdam = 325,
00487 DATUM_PRS92 = 336,
00488 DATUM_PSAD56 = 240,
00489 DATUM_PuertoRico = 250,
00490 DATUM_Pulkovo_Romania = 319,
00491 DATUM_Pulkovo_Russia = 287,
00492 DATUM_Qatar = 251,
00493 DATUM_Qornoq = 252,
00494 DATUM_Reunion = 253,
00495 DATUM_Rome1940 = 389,
00496 DATUM_Rome1940_Sardinia = 387,
00497 DATUM_Rome1940_Sicily = 388,
00498 DATUM_SAD69 = 261,
00499 DATUM_SantoDOS1965 = 255,
00500 DATUM_SaoBraz = 256,
00501 DATUM_SapperHill1943 = 257,
00502 DATUM_SelvagemGrande = 159,
00503 DATUM_Schwarzeck = 258,
00504 DATUM_SJTSK95 = 343,
00505 DATUM_SouthAsia = 274,
00506 DATUM_Tananarive = 275,
00507 DATUM_Timbalai = 276,
00508 DATUM_Tokyo_Mean = 277,
00509 DATUM_Tokyo_Japan = 278,
00510 DATUM_Tokyo_Grid = 474,
00511 DATUM_TristanAstro1968 = 281,
00512 DATUM_VitiLevu1916 = 282,
00513 DATUM_WakeEniwetok1960 = 283,
00514 DATUM_Yacare = 285,
00515 DATUM_Zanderij = 286,
00516
00517
00518 DATUM_MRE_AGD66 = 1001,
00519 DATUM_MRE_AGD84 = 1002,
00520 DATUM_MRE_CAI = 1003,
00521 DATUM_MRE_COA = 1004,
00522 DATUM_MRE_ED50 = 1005,
00523 DATUM_MRE_NAD27_C = 1006,
00524 DATUM_MRE_NAD27_U = 1007,
00525 DATUM_MRE_SAD69 = 1008
00526
00527 };
00528
00529 #define DATUM_MRE_First 1001
00530 #define DATUM_MRE_Last 1008
00531
00532
00533 #define ELLIPSOID_GRS_1980 1
00534 #define ELLIPSOID_Clarke_1866 2
00535 #define ELLIPSOID_WGS_1972 7
00536 #define ELLIPSOID_WGS_1984 51
00537
00538
00539 enum PROJSYS {
00540 PROJSYS_UserDefined = 0,
00541 PROJSYS_LatLon = 1,
00542 PROJSYS_Geographic = 2,
00543 PROJSYS_StatePlane1927 = 3,
00544 PROJSYS_StatePlane1983 = 4,
00545 PROJSYS_UTM = 5,
00546 PROJSYS_UPS = 6,
00547 PROJSYS_GaussKruger = 7,
00548 PROJSYS_MGRS = 8,
00549 PROJSYS_NZMG = 9,
00550 PROJSYS_BritishNational = 10,
00551 PROJSYS_German = 11,
00552 PROJSYS_Finnish = 12,
00553 PROJSYS_Namibian = 13,
00554 PROJSYS_AMG = 14,
00555 PROJSYS_MGA = 15,
00556 PROJSYS_GhanaNational = 16,
00557 PROJSYS_GaussKruger3deg = 17,
00558 PROJSYS_Austria = 18,
00559 PROJSYS_Japan19 = 19,
00560 PROJSYS_Swiss = 20,
00561 PROJSYS_MichiganGeoRef = 21,
00562 PROJSYS_Dutch = 22,
00563 PROJSYS_NZTM = 23,
00564 PROJSYS_Romania = 24,
00565 PROJSYS_Italy = 25,
00566 PROJSYS_Colombia = 26,
00567 PROJSYS_WisconsinCounty = 101,
00568
00569 PROJSYS_COUNT
00570 };
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580 GEOMLIBEXPORT ERRVALUE MapInfoReadTabGeoreference (
00581 const FILEPATH& filepath,
00582 MAPPROJPARM& projparm,
00583 SIMPLE_ARRAY<CTRLPOINT3>& points
00584 );
00585
00586 GEOMLIBEXPORT ERRVALUE MapInfoExportGeoreference (
00587 const MAPPROJPARM& projparm,
00588 int xyunits,
00589 int& MapInfoProj,
00590 int& MapInfoDatum,
00591 double MapInfoProjParm[6],
00592 char ProjStr[256]
00593 );
00594
00595 extern "C" {
00596
00597 #if !defined(NO_DEPRECATED) || defined(GEOMDLL)
00598
00599
00600
00601
00602
00603 GEOMLIBEXPORT double ProjDistToMeters (
00604 const MAPPROJPARM* proj,
00605 double x1,
00606 double y1,
00607 double x2,
00608 double y2
00609 );
00610 #endif
00611
00612
00613 GEOMLIBEXPORT ERRVALUE ProjGetERMapper (
00614 const MAPPROJPARM& projparm,
00615 char *ProjectionName,
00616 char *DatumName
00617 );
00618
00619
00620 GEOMLIBEXPORT ERRVALUE ProjSetERMapper (
00621 MAPPROJPARM& projparm,
00622 const char *ProjectionName,
00623 const char *DatumName
00624 );
00625
00626 }
00627
00628 GEOMLIBEXPORT void ProjGetArcPrj (
00629 const MAPPROJPARM& ProjParm,
00630 MISTRINGLIST& PrjList
00631 );
00632
00633 GEOMLIBEXPORT bool ProjSetArcPrj (
00634 MAPPROJPARM& ProjParm,
00635 const MISTRINGLIST& PrjList,
00636 double& xshift,
00637 double& yshift,
00638 double& scale
00639 );
00640
00641
00642
00643
00644
00645
00646
00647 #define PROJZ_ZONE 0
00648 #define PROJZ_SYSTEM 1
00649 #define PROJZ_DATUM 2
00650 #define PROJZ_ALTPROJ 3
00651
00652
00653 struct MAPPROJPARM {
00654
00655
00656
00657 #ifndef GENERATING_DOXYGEN_OUTPUT
00658
00659 INT16 mapproj;
00660 UNICODE oldprojname[35];
00661 INT16 zone[4];
00662 double tparm[15];
00663
00664 #endif // GENERATING_DOXYGEN_OUTPUT
00665
00666
00667 MAPPROJPARM (
00668 ) { Clear(); }
00669
00670
00671 void Clear (
00672 ) { memset(static_cast<void*>(this),0,sizeof(*this)); mapproj = PROJECTION_Arbitrary; }
00673
00674
00675 DATUM GetDatum (
00676 ) const { return (static_cast<DATUM>(zone[PROJZ_DATUM])); }
00677
00678 #ifndef NO_DEPRECATED
00679
00680
00681
00682
00683
00684 DEPRECATED double GetDistanceInMeters (
00685 double x1,
00686 double y1,
00687 double x2,
00688 double y2
00689 ) const { return (ProjDistToMeters(this,x1,y1,x2,y2)); }
00690 #endif
00691
00692 #ifndef NO_DEPRECATED
00693
00694
00695
00696
00697
00698 DEPRECATED double GetDistanceInMeters (
00699 const DPOINT2D& point1,
00700 const DPOINT2D& point2
00701 ) const { return (ProjDistToMeters(this,point1.x,point1.y,point2.x,point2.y)); }
00702 #endif
00703
00704
00705 PROJECTION GetProjection (
00706 ) const { return (static_cast<PROJECTION>(mapproj)); }
00707
00708
00709 INT16 GetProjSub (
00710 ) const { return (zone[PROJZ_ALTPROJ]); }
00711
00712
00713 PROJSYS GetSystem (
00714 ) const { return (static_cast<PROJSYS>(zone[PROJZ_SYSTEM])); }
00715
00716
00717 INT16 GetZone (
00718 ) const { return (zone[PROJZ_ZONE]); }
00719
00720
00721 void SetDatum (
00722 DATUM datum
00723 ) { zone[PROJZ_DATUM] = static_cast<INT16>(datum); }
00724
00725
00726 ERRVALUE SetProjectionAEAC (
00727 double LatStdParallel1,
00728 double LatStdParallel2,
00729 double LonCentralMeridian,
00730 double LatOrigin = 0.0,
00731 double FalseEasting = 0.0,
00732 double FalseNorthing = 0.0
00733 ) {
00734 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00735 zone[PROJZ_ZONE] = 0;
00736 mapproj = PROJECTION_AEAC;
00737 tparm[2] = LatStdParallel1;
00738 tparm[3] = LatStdParallel2;
00739 tparm[4] = LonCentralMeridian;
00740 tparm[5] = LatOrigin;
00741 tparm[TPARM_FalseEasting] = FalseEasting;
00742 tparm[TPARM_FalseNorthing] = FalseNorthing;
00743 return (0);
00744 }
00745
00746
00747 void SetProjectionArbitrary (
00748 ) {
00749 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00750 mapproj = PROJECTION_Arbitrary;
00751 return;
00752 }
00753
00754
00755 ERRVALUE SetProjectionAzimuthalEquidistant (
00756 double LonCenter,
00757 double LatCenter,
00758 double FalseEasting = 0.0,
00759 double FalseNorthing = 0.0
00760 ) {
00761 return (SetProj4567(PROJECTION_AzimuthalEquidistant,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00762 }
00763
00764
00765 ERRVALUE SetProjectionBOCC (
00766 bool skewed = true
00767 ) {
00768 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00769 zone[PROJZ_ZONE] = 0;
00770 mapproj = PROJECTION_BOCC;
00771 tparm[2] = !skewed;
00772 return (0);
00773 }
00774
00775
00776 ERRVALUE SetProjectionCassini (
00777 double LonCenter,
00778 double LatCenter,
00779 double FalseEasting = 0.0,
00780 double FalseNorthing = 0.0
00781 ) {
00782 return (SetProj4567(PROJECTION_Cassini,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00783 }
00784
00785
00786 ERRVALUE SetProjectionEquidistantConic1SP (
00787 double LatStdParallel,
00788 double LonCentralMeridian,
00789 double LatOrigin = 0.0,
00790 double FalseEasting = 0.0,
00791 double FalseNorthing = 0.0
00792 ) {
00793 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00794 zone[PROJZ_ZONE] = 0;
00795 mapproj = PROJECTION_EquidistantConic;
00796 tparm[2] = tparm[3] = LatStdParallel;
00797 tparm[4] = LonCentralMeridian;
00798 tparm[5] = LatOrigin;
00799 tparm[TPARM_FalseEasting] = FalseEasting;
00800 tparm[TPARM_FalseNorthing] = FalseNorthing;
00801 tparm[8] = 0.0;
00802 return (0);
00803 }
00804
00805
00806 ERRVALUE SetProjectionEquidistantConic2SP (
00807 double LatStdParallel1,
00808 double LatStdParallel2,
00809 double LonCentralMeridian,
00810 double LatOrigin = 0.0,
00811 double FalseEasting = 0.0,
00812 double FalseNorthing = 0.0
00813 ) {
00814 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00815 zone[PROJZ_ZONE] = 0;
00816 mapproj = PROJECTION_EquidistantConic;
00817 tparm[2] = LatStdParallel1;
00818 tparm[3] = LatStdParallel2;
00819 tparm[4] = LonCentralMeridian;
00820 tparm[5] = LatOrigin;
00821 tparm[TPARM_FalseEasting] = FalseEasting;
00822 tparm[TPARM_FalseNorthing] = FalseNorthing;
00823 tparm[8] = 1.0;
00824 return (0);
00825 }
00826
00827
00828 ERRVALUE SetProjectionEquirectangular (
00829 double LonCentralMeridian,
00830 double LatTrueScale,
00831 double FalseEasting = 0.0,
00832 double FalseNorthing = 0.0
00833 ) {
00834 return (SetProj4567(PROJECTION_Equirectangular,LonCentralMeridian,LatTrueScale,FalseEasting,FalseNorthing));
00835 }
00836
00837
00838 ERRVALUE SetProjectionGnomonic (
00839 double LonCenter,
00840 double LatCenter,
00841 double FalseEasting = 0.0,
00842 double FalseNorthing = 0.0
00843 ) {
00844 return (SetProj4567(PROJECTION_Gnomonic,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00845 }
00846
00847
00848 ERRVALUE SetProjectionGVNSP (
00849 double Height,
00850 double LonCenter,
00851 double LatCenter,
00852 double FalseEasting = 0.0,
00853 double FalseNorthing = 0.0
00854 ) {
00855 return (SetProj24567(PROJECTION_GVNSP,Height,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00856 }
00857
00858
00859 ERRVALUE SetProjectionLAEA (
00860 double LonCenter,
00861 double LatCenter,
00862 double FalseEasting = 0.0,
00863 double FalseNorthing = 0.0
00864 ) {
00865 return (SetProj4567(PROJECTION_LAEA,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00866 }
00867
00868
00869 ERRVALUE SetProjectionLCC (
00870 double LatStdParallel1,
00871 double LatStdParallel2,
00872 double LonCentralMeridian,
00873 double LatOrigin = 0.0,
00874 double FalseEasting = 0.0,
00875 double FalseNorthing = 0.0,
00876 double ScaleFactor = 1.0
00877 ) {
00878 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00879 zone[PROJZ_ZONE] = 0;
00880 mapproj = PROJECTION_LCC;
00881 tparm[2] = LatStdParallel1;
00882 tparm[3] = LatStdParallel2;
00883 tparm[4] = LonCentralMeridian;
00884 tparm[5] = LatOrigin;
00885 tparm[TPARM_FalseEasting] = FalseEasting;
00886 tparm[TPARM_FalseNorthing] = FalseNorthing;
00887 tparm[8] = ScaleFactor;
00888 return (0);
00889 }
00890
00891
00892 ERRVALUE SetProjectionLandsatSOM (
00893 int satellite,
00894 int path
00895 ) {
00896 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00897 zone[PROJZ_ZONE] = 0;
00898 mapproj = PROJECTION_LandsatSOM;
00899 tparm[2] = satellite;
00900 tparm[3] = path;
00901 return (0);
00902 }
00903
00904
00905 ERRVALUE SetProjectionMercator (
00906 double ScaleFactor,
00907 double LonCentralMeridian,
00908 double LatTrueScale,
00909 double FalseEasting = 0.0,
00910 double FalseNorthing = 0.0
00911 ) {
00912 return (SetProj24567(PROJECTION_Mercator,ScaleFactor,LonCentralMeridian,LatTrueScale,FalseEasting,FalseNorthing));
00913 }
00914
00915
00916 ERRVALUE SetProjectionMillerCylindrical (
00917 double LonCentralMeridian,
00918 double FalseEasting = 0.0,
00919 double FalseNorthing = 0.0
00920 ) {
00921 return (SetProj467(PROJECTION_MillerCylindrical,LonCentralMeridian,FalseEasting,FalseNorthing));
00922 }
00923
00924
00925 ERRVALUE SetProjectionObliqueMercatorA (
00926 double ScaleFactor,
00927 double LatOrigin,
00928 double LonGeodeticPoint1,
00929 double LatGeodeticPoint1,
00930 double LonGeodeticPoint2,
00931 double LatGeodeticPoint2,
00932 double FalseEasting = 0.0,
00933 double FalseNorthing = 0.0
00934 ) {
00935 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00936 zone[PROJZ_ZONE] = 0;
00937 mapproj = PROJECTION_ObliqueMercator;
00938 tparm[2] = ScaleFactor;
00939 tparm[5] = LatOrigin;
00940 tparm[TPARM_FalseEasting] = FalseEasting;
00941 tparm[TPARM_FalseNorthing] = FalseNorthing;
00942 tparm[8] = LonGeodeticPoint1;
00943 tparm[9] = LatGeodeticPoint1;
00944 tparm[10] = LonGeodeticPoint2;
00945 tparm[11] = LatGeodeticPoint2;
00946 return (0);
00947 }
00948
00949
00950 ERRVALUE SetProjectionObliqueMercatorB (
00951 double ScaleFactor,
00952 double AzimuthAngle,
00953 double LonAzimuthPoint,
00954 double LatOrigin,
00955 double FalseEasting = 0.0,
00956 double FalseNorthing = 0.0
00957 ) {
00958 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
00959 zone[PROJZ_ZONE] = 0;
00960 mapproj = PROJECTION_ObliqueMercator;
00961 tparm[2] = ScaleFactor;
00962 tparm[3] = AzimuthAngle;
00963 tparm[4] = LonAzimuthPoint;
00964 tparm[5] = LatOrigin;
00965 tparm[TPARM_FalseEasting] = FalseEasting;
00966 tparm[TPARM_FalseNorthing] = FalseNorthing;
00967 return (0);
00968 }
00969
00970
00971 ERRVALUE SetProjectionOrthographic (
00972 double LonCenter,
00973 double LatCenter,
00974 double FalseEasting = 0.0,
00975 double FalseNorthing = 0.0
00976 ) {
00977 return (SetProj4567(PROJECTION_Orthographic,LonCenter,LatCenter,FalseEasting,FalseNorthing));
00978 }
00979
00980
00981 ERRVALUE SetProjectionPolarStereo (
00982 double ScaleFactor,
00983 double LonDownward,
00984 double LatTrueScale,
00985 double FalseEasting = 0.0,
00986 double FalseNorthing = 0.0
00987 ) {
00988 return (SetProj24567(PROJECTION_PolarStereographic,ScaleFactor,LonDownward,LatTrueScale,FalseEasting,FalseNorthing));
00989 }
00990
00991
00992 ERRVALUE SetProjectionPolyconic (
00993 double ScaleFactor,
00994 double LonCentralMeridian,
00995 double LatOrigin = 0.0,
00996 double FalseEasting = 0.0,
00997 double FalseNorthing = 0.0
00998 ) {
00999 return (SetProj24567(PROJECTION_Polyconic,ScaleFactor,LonCentralMeridian,LatOrigin,FalseEasting,FalseNorthing));
01000 }
01001
01002
01003 ERRVALUE SetProjectionRobinson (
01004 double LonCentralMeridian,
01005 double FalseEasting = 0.0,
01006 double FalseNorthing = 0.0
01007 ) {
01008 return (SetProj467(PROJECTION_Robinson,LonCentralMeridian,FalseEasting,FalseNorthing));
01009 }
01010
01011
01012 ERRVALUE SetProjectionSinusoidal (
01013 double LonCentralMeridian,
01014 double FalseEasting = 0.0,
01015 double FalseNorthing = 0.0
01016 ) {
01017 return (SetProj467(PROJECTION_Sinusoidal,LonCentralMeridian,FalseEasting,FalseNorthing));
01018 }
01019
01020
01021 ERRVALUE SetProjectionStereographic (
01022 double ScaleFactor,
01023 double LonCenter,
01024 double LatCenter,
01025 double FalseEasting = 0.0,
01026 double FalseNorthing = 0.0
01027 ) {
01028 return (SetProj24567(PROJECTION_Stereographic,ScaleFactor,LonCenter,LatCenter,FalseEasting,FalseNorthing));
01029 }
01030
01031
01032 void SetProjectionSwissConformal (
01033 double FalseEasting = 0.0,
01034 double FalseNorthing = 0.0
01035 ) {
01036 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
01037 zone[PROJZ_ZONE] = 0;
01038 mapproj = PROJECTION_SwissConformalCylindrical;
01039 tparm[6] = FalseEasting;
01040 tparm[7] = FalseNorthing;
01041 }
01042
01043
01044
01045 ERRVALUE SetProjectionTransverseMercator (
01046 double ScaleFactor,
01047 double LonCentralMeridian,
01048 double LatOrigin = 0.0,
01049 double FalseEasting = 0.0,
01050 double FalseNorthing = 0.0
01051 ) {
01052 return (SetProj24567(PROJECTION_TransverseMercator,ScaleFactor,LonCentralMeridian,LatOrigin,FalseEasting,FalseNorthing));
01053 }
01054
01055
01056 ERRVALUE SetProjectionVanDerGrintenI (
01057 double LonCentralMeridian,
01058 double FalseEasting = 0.0,
01059 double FalseNorthing = 0.0
01060 ) {
01061 return (SetProj467(PROJECTION_VanDerGrintenI,LonCentralMeridian,FalseEasting,FalseNorthing));
01062 }
01063
01064
01065 ERRVALUE SetSystemGaussKruger (
01066 INT16 gkzone,
01067 bool southzone = false
01068 ) {
01069 if (gkzone < -60 || gkzone == 0 || gkzone > 60) return (EBadFuncParm);
01070 zone[PROJZ_SYSTEM] = PROJSYS_GaussKruger;
01071 zone[PROJZ_ZONE] = static_cast<INT16>(abs(gkzone));
01072 zone[PROJZ_ALTPROJ] = 1;
01073 mapproj = PROJECTION_TransverseMercator;
01074 tparm[2] = 1.0;
01075 tparm[4] = (zone[PROJZ_ZONE] <= 30) ? 6 * zone[PROJZ_ZONE] - 3 : 6 * zone[PROJZ_ZONE] - 363;
01076 tparm[5] = 0.0;
01077 tparm[TPARM_FalseEasting] = 500000.0;
01078 if (gkzone < 0 || southzone) {
01079 tparm[TPARM_FalseNorthing] = 10000000.0;
01080 }
01081 else {
01082 tparm[TPARM_FalseNorthing] = 0.0;
01083 }
01084 return (0);
01085 }
01086
01087
01088 void SetSystemLatLon (
01089 ) {
01090 memset(tparm,0,sizeof(tparm));
01091 zone[PROJZ_SYSTEM] = PROJSYS_LatLon;
01092 zone[PROJZ_ZONE] = 0;
01093 zone[PROJZ_ALTPROJ] = 0;
01094 mapproj = PROJECTION_LatLon;
01095 }
01096
01097
01098 void SetSystemNZMG (
01099 ) {
01100 memset(static_cast<void*>(this),0,sizeof(*this));
01101 zone[PROJZ_SYSTEM] = PROJSYS_NZMG;
01102 zone[PROJZ_DATUM] = DATUM_NewZealand1949;
01103 mapproj = PROJECTION_NZMG;
01104 }
01105
01106
01107 void SetSystemUPS (
01108 bool southpole = false
01109 ) {
01110 zone[PROJZ_SYSTEM] = PROJSYS_UPS;
01111 SetProjectionPolarStereo(0.994,0.0,(southpole)?-90.0:90.0,2000000.0,2000000.0);
01112 return;
01113 }
01114
01115
01116 ERRVALUE SetSystemUTM (
01117 INT16 utmzone,
01118 bool southzone = false
01119 ) {
01120 if (utmzone < -60 || utmzone == 0 || utmzone > 60) return (EBadFuncParm);
01121 zone[PROJZ_SYSTEM] = PROJSYS_UTM;
01122 zone[PROJZ_ZONE] = static_cast<INT16>(abs(utmzone));
01123 mapproj = PROJECTION_TransverseMercator;
01124 tparm[2] = .9996;
01125 tparm[4] = 6 * zone[PROJZ_ZONE] - 183;
01126 tparm[5] = 0.0;
01127 tparm[TPARM_FalseEasting] = 500000.0;
01128 if (utmzone < 0 || southzone) {
01129 tparm[TPARM_FalseNorthing] = 10000000.0;
01130 }
01131 else {
01132 tparm[TPARM_FalseNorthing] = 0.0;
01133 }
01134 return (0);
01135 }
01136
01137 private:
01138 #ifndef GENERATING_DOXYGEN_OUTPUT
01139 ERRVALUE SetProj24567 (
01140 INT16 proj,
01141 double parm2,
01142 double parm4,
01143 double parm5,
01144 double parm6,
01145 double parm7
01146 ) {
01147 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
01148 zone[PROJZ_ZONE] = 0;
01149 mapproj = proj;
01150 tparm[2] = parm2;
01151 tparm[4] = parm4;
01152 tparm[5] = parm5;
01153 tparm[6] = parm6;
01154 tparm[7] = parm7;
01155 return (0);
01156 }
01157
01158 ERRVALUE SetProj4567 (
01159 INT16 proj,
01160 double parm4,
01161 double parm5,
01162 double parm6,
01163 double parm7
01164 ) {
01165 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
01166 zone[PROJZ_ZONE] = 0;
01167 mapproj = proj;
01168 tparm[4] = parm4;
01169 tparm[5] = parm5;
01170 tparm[6] = parm6;
01171 tparm[7] = parm7;
01172 return (0);
01173 }
01174
01175 ERRVALUE SetProj467 (
01176 INT16 proj,
01177 double parm4,
01178 double parm6,
01179 double parm7
01180 ) {
01181 zone[PROJZ_SYSTEM] = PROJSYS_UserDefined;
01182 zone[PROJZ_ZONE] = 0;
01183 mapproj = proj;
01184 tparm[4] = parm4;
01185 tparm[6] = parm6;
01186 tparm[7] = parm7;
01187 return (0);
01188 }
01189
01190 CHECKSIZE(80+15*8);
01191 #endif // GENERATING_DOXYGEN_OUTPUT
01192 };
01193
01194
01195 inline bool operator== (
01196 const MAPPROJPARM& lhs,
01197 const MAPPROJPARM& rhs
01198 ) {
01199 return (lhs.mapproj == rhs.mapproj && !memcmp(lhs.zone,rhs.zone,3*sizeof(lhs.zone[0])) && !memcmp(lhs.tparm,rhs.tparm,sizeof(lhs.tparm)));
01200 }
01201
01202
01203 inline bool operator!= (
01204 const MAPPROJPARM& lhs,
01205 const MAPPROJPARM& rhs
01206 ) {
01207 return (!operator==(lhs,rhs));
01208 }
01209
01210 #ifndef GENERATING_DOXYGEN_OUTPUT
01211
01212 #ifdef memcpy
01213
01214 extern void * (*amemcpy)(MAPPROJPARM*, MAPPROJPARM*, int);
01215 extern void * (*amemcpy)(MAPPROJPARM*, const MAPPROJPARM*, int);
01216 #else
01217 void memcpy(MAPPROJPARM*, MAPPROJPARM*, int);
01218 void memcpy(MAPPROJPARM*, const MAPPROJPARM*, int);
01219 #endif
01220 void memset(MAPPROJPARM*, int, int);
01221 #endif // GENERATING_DOXYGEN_OUTPUT
01222
01223
01224
01225
01226 #ifdef GEOMLIBEXPORT
01227 #undef GEOMLIBEXPORT
01228 #endif
01229
01230 #endif // INC_MI32_MAPPROJ_H
01231