The SDL Component Suite is an industry leading collection of components supporting scientific and engineering computing. Please visit the SDL Web site for more information....



Interface of SDL_GeoMap



const
  MAXCALPOINTS = 10;    // max. number of calibration points per graticule line
  MAXCALLINES = 25;     // max. number of calibration lines per map
  MAXCALQUADS = 200;    // max. number of calibration quadruples
  MAXGMZOOMSTACK = 16;  // depth of zoom stack
  MapLRMargin = 30;     // left and right margin on blank maps
  MapTBMargin = 30;     // top and bottom margin on blank maps

{$IFDEF PAIDVERS}
  SDLVersionInfo = 'geomap_r951_full';
  IsLightEd = false;
  MINMAGNIFY = 0.1;     // minimum magnification factor
  MAXMAGNIFY = 10.0;    // maximum magnification factor
  MAXMAPSIZE = 38000000; // max. map size in pixels (width x height of image)
{$ELSE}
  SDLVersionInfo = 'geomap_r951_lighted';
  IsLightEd = true;
  MINMAGNIFY = 0.5;     // minimum magnification factor
  MAXMAGNIFY = 2.0;     // maximum magnification factor
  MAXMAPSIZE = 3000000; // max. map size in pixels (width x height of image)
{$ENDIF}
  Release = 951;

type
  ESDLGeoMapError = class(ESDLError);     { exception type to indicate errors }
  TCoords = record
              Latit  : double;
              Longit : double;
            end;
  TgmZoomStackEntry = record
                        Left: integer;
                        Top : integer;
                        MagF: double;
                      end;
  TCorners = (gcoTopLeft, gcoBottomLeft, gcoBottomRight, gcoTopRight);
  TCornerArray = array[TCorners] of TCoords;
  TGratLineKind = (gtlMeridian, gtlParallel);
  TShowGrat = (sgNone, sgPoints, sgLines, sgPointsAndLines);
  TLandMarkAction = (lmaAdd, lmaRemove);
  TLandMarkElement = (lmCross, lmSquare, lmTriangle, lmCircle, lmArrowFrom,
                      lmArrowTo, lmCrossBox, lmSpade, lmUserDef);
  TLMIdentifier = string[15];
  TOnDrawMapDataEvent = procedure (Sender: TObject; MapCanvas: TCanvas;
          LatLow, LongLow, LatHigh, LongHigh: double; Wid, Hgt: integer);

const
  LMTypeNames : array[TLandMarkElement] of string =
                        ('Cross', 'Square', 'Triangle', 'Circle', 'ArrowFrom',
                         'ArrowTo', 'CrossBox', 'Spade', 'User-Defined');

{$IFDEF DEVELOPVERS}
   {$I intf_geomap_futurevers.pas}
{$ENDIF}

type
  TCountryData = record
                   Name        : string[40];
                   Fips10      : string[2];
                   ISO3166_2   : string[2];
                   ISO3166_3   : string[3];
                   CLat        : double;
                   CLong       : double;
                   Capital     : string[25];
                   CapLat      : double;
                   CapLong     : double;
                   CapAlt      : integer;
                 end;

const
  NUMCOUNTRYDT = 231;
  CountryData : array [1..NUMCOUNTRYDT] of TCountryData =
     ((Name:'Afghanistan';                       Fips10:'af'; ISO3166_2:'af'; ISO3166_3:'afg'; CLat: 33.00; CLong:  65.00; Capital:'Kabul';              CapLat: 34.5309; CapLong:  69.1368; CapAlt:1807),
      (Name:'Albania';                           Fips10:'al'; ISO3166_2:'al'; ISO3166_3:'alb'; CLat: 41.00; CLong:  20.00; Capital:'Tirana';             CapLat: 41.3317; CapLong:  19.8318; CapAlt:104),
      (Name:'Algeria';                           Fips10:'ag'; ISO3166_2:'dz'; ISO3166_3:'dza'; CLat: 28.00; CLong:   3.00; Capital:'Algiers';            CapLat: 36.7658; CapLong:   3.0319; CapAlt:0),
      (Name:'American Samoa';                    Fips10:'aq'; ISO3166_2:'as'; ISO3166_3:'asm'; CLat:-14.33; CLong:-170.00; Capital:'Pago Pago';          CapLat:-14.2793; CapLong:-170.7010; CapAlt:49),
      (Name:'Andorra';                           Fips10:'an'; ISO3166_2:'ad'; ISO3166_3:'and'; CLat: 42.50; CLong:   1.50; Capital:'Andorra la Vella';   CapLat: 42.5079; CapLong:   1.5156; CapAlt:1409),
      (Name:'Angola';                            Fips10:'ao'; ISO3166_2:'ao'; ISO3166_3:'ago'; CLat:-12.50; CLong:  18.50; Capital:'Luanda';             CapLat: -8.8124; CapLong:  13.2350; CapAlt:6),
      (Name:'Anguilla';                          Fips10:'av'; ISO3166_2:'ai'; ISO3166_3:'aia'; CLat: 18.25; CLong: -63.17; Capital:'The Valley';         CapLat: 18.2249; CapLong: -63.0669; CapAlt:0),
      (Name:'Antarctica';                        Fips10:'ay'; ISO3166_2:'aq'; ISO3166_3:'ata'; CLat:-90.00; CLong:   0.00; Capital:'';                   CapLat:-90.0000; CapLong:   0.0000; CapAlt:0),
      (Name:'Antigua and Barbuda';               Fips10:'ac'; ISO3166_2:'ag'; ISO3166_3:'atg'; CLat: 17.05; CLong: -61.80; Capital:'Saint John''s';      CapLat: 17.1169; CapLong: -61.8476; CapAlt:0),
      (Name:'Argentina';                         Fips10:'ar'; ISO3166_2:'ar'; ISO3166_3:'arg'; CLat:-34.00; CLong: -64.00; Capital:'Buenos Aires';       CapLat:-34.6654; CapLong: -58.4096; CapAlt:10),
      (Name:'Armenia';                           Fips10:'am'; ISO3166_2:'am'; ISO3166_3:'arm'; CLat: 40.00; CLong:  45.00; Capital:'Yerevan';            CapLat: 40.2080; CapLong:  44.5327; CapAlt:1032),
      (Name:'Aruba';                             Fips10:'aa'; ISO3166_2:'aw'; ISO3166_3:'abw'; CLat: 12.50; CLong: -69.97; Capital:'Oranjestad';         CapLat: 12.5246; CapLong: -70.0265; CapAlt:13),
      (Name:'Australia';                         Fips10:'as'; ISO3166_2:'au'; ISO3166_3:'aus'; CLat:-27.00; CLong: 133.00; Capital:'Canberra';           CapLat:-35.3499; CapLong: 149.0420; CapAlt:605),
      (Name:'Austria';                           Fips10:'au'; ISO3166_2:'at'; ISO3166_3:'aut'; CLat: 47.33; CLong:  13.33; Capital:'Vienna';             CapLat: 48.2021; CapLong:  16.3210; CapAlt:170),
      (Name:'Azerbaijan';                        Fips10:'aj'; ISO3166_2:'az'; ISO3166_3:'aze'; CLat: 40.50; CLong:  47.50; Capital:'Baku';               CapLat: 40.3243; CapLong:  49.8162; CapAlt:1),
      (Name:'Bahamas';                           Fips10:'bf'; ISO3166_2:'bs'; ISO3166_3:'bhs'; CLat: 24.25; CLong: -76.00; Capital:'Nassau';             CapLat: 25.0672; CapLong: -77.3402; CapAlt:2),
      (Name:'Bahrain';                           Fips10:'ba'; ISO3166_2:'bh'; ISO3166_3:'bhr'; CLat: 26.00; CLong:  50.55; Capital:'Manama';             CapLat: 26.2149; CapLong:  50.5879; CapAlt:6),
      (Name:'Bangladesh';                        Fips10:'bg'; ISO3166_2:'bd'; ISO3166_3:'bgd'; CLat: 24.00; CLong:  90.00; Capital:'Dhaka';              CapLat: 23.7099; CapLong:  90.4071; CapAlt:3),
      (Name:'Barbados';                          Fips10:'bb'; ISO3166_2:'bb'; ISO3166_3:'brb'; CLat: 13.17; CLong: -59.53; Capital:'Bridgetown';         CapLat: 13.0935; CapLong: -59.6105; CapAlt:6),
      (Name:'Belarus';                           Fips10:'bo'; ISO3166_2:'by'; ISO3166_3:'blr'; CLat: 53.00; CLong:  28.00; Capital:'Minsk';              CapLat: 53.8999; CapLong:  27.5756; CapAlt:198),
      (Name:'Belgium';                           Fips10:'be'; ISO3166_2:'be'; ISO3166_3:'bel'; CLat: 50.83; CLong:   4.00; Capital:'Brussels';           CapLat: 50.8371; CapLong:   4.3676; CapAlt:76),
      (Name:'Belize';                            Fips10:'bh'; ISO3166_2:'bz'; ISO3166_3:'blz'; CLat: 17.25; CLong: -88.75; Capital:'Belmopan';           CapLat: 17.2617; CapLong: -88.7785; CapAlt:59),
      (Name:'Benin';                             Fips10:'bn'; ISO3166_2:'bj'; ISO3166_3:'ben'; CLat:  9.50; CLong:   2.25; Capital:'Porto-Novo';         CapLat:  6.4783; CapLong:   2.6325; CapAlt:38),
      (Name:'Bermuda';                           Fips10:'bd'; ISO3166_2:'bm'; ISO3166_3:'bmu'; CLat: 32.33; CLong: -64.75; Capital:'Hamilton';           CapLat: 32.3011; CapLong: -64.7993; CapAlt:0),
      (Name:'Bhutan';                            Fips10:'bt'; ISO3166_2:'bt'; ISO3166_3:'btn'; CLat: 27.50; CLong:  90.50; Capital:'Thimphu';            CapLat: 27.4426; CapLong:  89.6673; CapAlt:2736),
      (Name:'Bolivia';                           Fips10:'bl'; ISO3166_2:'bo'; ISO3166_3:'bol'; CLat:-17.00; CLong: -65.00; Capital:'Sucre';              CapLat:-19.0421; CapLong: -65.2559; CapAlt:2783),
      (Name:'Bosnia and Herzegovina';            Fips10:'bk'; ISO3166_2:'ba'; ISO3166_3:'bih'; CLat: 44.00; CLong:  18.00; Capital:'Sarajevo';           CapLat: 43.8564; CapLong:  18.4134; CapAlt:577),
      (Name:'Botswana';                          Fips10:'bc'; ISO3166_2:'bw'; ISO3166_3:'bwa'; CLat:-22.00; CLong:  24.00; Capital:'Gaborone';           CapLat:-24.6541; CapLong:  25.9087; CapAlt:1014),
      (Name:'Brazil';                            Fips10:'br'; ISO3166_2:'br'; ISO3166_3:'bra'; CLat:-10.00; CLong: -55.00; Capital:'Brasilia';           CapLat:-15.7921; CapLong: -47.8978; CapAlt:1079),
      (Name:'British Virgin Islands';            Fips10:'vi'; ISO3166_2:'vg'; ISO3166_3:'vgb'; CLat: 18.50; CLong: -64.50; Capital:'Road Town';          CapLat: 18.4328; CapLong: -64.6235; CapAlt:0),
      (Name:'Brunei';                            Fips10:'bx'; ISO3166_2:'bn'; ISO3166_3:'brn'; CLat:  4.50; CLong: 114.67; Capital:'Bandar Seri Begawan';CapLat:  4.9409; CapLong: 114.9490; CapAlt:0),
      (Name:'Bulgaria';                          Fips10:'bu'; ISO3166_2:'bg'; ISO3166_3:'bgr'; CLat: 43.00; CLong:  25.00; Capital:'Sofia';              CapLat: 42.7073; CapLong:  23.3319; CapAlt:591),
      (Name:'Burkina Faso';                      Fips10:'uv'; ISO3166_2:'bf'; ISO3166_3:'bfa'; CLat: 13.00; CLong:  -2.00; Capital:'Ouagadougou';        CapLat: 12.3640; CapLong:  -1.5283; CapAlt:305),
      (Name:'Burma;Myanmar';                     Fips10:'bm'; ISO3166_2:'mm'; ISO3166_3:'mmr'; CLat: 22.00; CLong:  98.00; Capital:'Rangoon';            CapLat: 19.7361; CapLong:  96.2089; CapAlt:77),
      (Name:'Burundi';                           Fips10:'by'; ISO3166_2:'bi'; ISO3166_3:'bdi'; CLat: -3.50; CLong:  30.00; Capital:'Bujumbura';          CapLat: -3.3725; CapLong:  29.3561; CapAlt:794),
      (Name:'Cambodia';                          Fips10:'cb'; ISO3166_2:'kh'; ISO3166_3:'khm'; CLat: 13.00; CLong: 105.00; Capital:'Phnom Penh';         CapLat: 11.5647; CapLong: 104.9130; CapAlt:15),
      (Name:'Cameroon';                          Fips10:'cm'; ISO3166_2:'cm'; ISO3166_3:'cmr'; CLat:  6.00; CLong:  12.00; Capital:'Yaounde';            CapLat:  3.8651; CapLong:  11.5136; CapAlt:726),
      (Name:'Canada';                            Fips10:'ca'; ISO3166_2:'ca'; ISO3166_3:'can'; CLat: 60.00; CLong: -95.00; Capital:'Ottawa';             CapLat: 45.4175; CapLong: -75.6929; CapAlt:74),
      (Name:'Cape Verde';                        Fips10:'cv'; ISO3166_2:'cv'; ISO3166_3:'cpv'; CLat: 16.00; CLong: -24.00; Capital:'Praia';              CapLat: 14.9233; CapLong: -23.5212; CapAlt:0),
      (Name:'Cayman Islands';                    Fips10:'cj'; ISO3166_2:'ky'; ISO3166_3:'cym'; CLat: 19.50; CLong: -80.50; Capital:'George Town';        CapLat: 19.3022; CapLong: -81.3857; CapAlt:3),
      (Name:'Central African Republic';          Fips10:'ct'; ISO3166_2:'cf'; ISO3166_3:'caf'; CLat:  7.00; CLong:  21.00; Capital:'Bangui';             CapLat:  4.3659; CapLong:  18.5623; CapAlt:369),
      (Name:'Chad';                              Fips10:'cd'; ISO3166_2:'td'; ISO3166_3:'tcd'; CLat: 15.00; CLong:  19.00; Capital:'N''Djamena';         CapLat: 12.1041; CapLong:  15.0505; CapAlt:298),
      (Name:'Chile';                             Fips10:'ci'; ISO3166_2:'cl'; ISO3166_3:'chl'; CLat:-30.00; CLong: -71.00; Capital:'Santiago';           CapLat:-33.4750; CapLong: -70.6475; CapAlt:521),
      (Name:'China';                             Fips10:'ch'; ISO3166_2:'cn'; ISO3166_3:'chn'; CLat: 35.00; CLong: 105.00; Capital:'Beijing';            CapLat: 39.9062; CapLong: 116.3880; CapAlt:63),
      (Name:'Christmas Island';                  Fips10:'kt'; ISO3166_2:'cx'; ISO3166_3:'cxr'; CLat:-10.50; CLong: 105.67; Capital:'The Settlement';     CapLat:-10.4286; CapLong: 105.6810; CapAlt:0),
      (Name:'Cocos Islands';                     Fips10:'ck'; ISO3166_2:'cc'; ISO3166_3:'cck'; CLat:-12.50; CLong:  96.83; Capital:'West Island';        CapLat:-12.1401; CapLong:  96.8347; CapAlt:0),
      (Name:'Colombia';                          Fips10:'co'; ISO3166_2:'co'; ISO3166_3:'col'; CLat:  4.00; CLong: -72.00; Capital:'Bogota';             CapLat:  4.6302; CapLong: -74.0805; CapAlt:2619),
      (Name:'Comoros';                           Fips10:'cn'; ISO3166_2:'km'; ISO3166_3:'com'; CLat:-12.17; CLong:  44.25; Capital:'Moroni';             CapLat:-11.7005; CapLong:  43.2434; CapAlt:110),
      (Name:'Congo, Democratic Republic of the'; Fips10:'cg'; ISO3166_2:'cd'; ISO3166_3:'cod'; CLat:  0.00; CLong:  25.00; Capital:'Kinshasa';           CapLat: -4.2808; CapLong:  15.2837; CapAlt:155),
      (Name:'Congo, Republic of the';            Fips10:'cf'; ISO3166_2:'cg'; ISO3166_3:'cog'; CLat: -1.00; CLong:  15.00; Capital:'Brazzaville';        CapLat: -4.3208; CapLong:  15.2987; CapAlt:240),
      (Name:'Cook Islands';                      Fips10:'cw'; ISO3166_2:'ck'; ISO3166_3:'cok'; CLat:-21.23; CLong:-159.77; Capital:'Avarua';             CapLat:-21.2039; CapLong:-159.7660; CapAlt:208),
      (Name:'Costa Rica';                        Fips10:'cs'; ISO3166_2:'cr'; ISO3166_3:'cri'; CLat: 10.00; CLong: -84.00; Capital:'San Jose';           CapLat:  9.9305; CapLong: -84.0786; CapAlt:1146),
      (Name:'Cote d''Ivoire';                    Fips10:'iv'; ISO3166_2:'ci'; ISO3166_3:'civ'; CLat:  8.00; CLong:  -5.00; Capital:'Yamoussoukro';       CapLat:  6.8184; CapLong:  -5.2826; CapAlt:217),
      (Name:'Croatia';                           Fips10:'hr'; ISO3166_2:'hr'; ISO3166_3:'hrv'; CLat: 45.17; CLong:  15.50; Capital:'Zagreb';             CapLat: 45.8071; CapLong:  15.9644; CapAlt:130),
      (Name:'Cuba';                              Fips10:'cu'; ISO3166_2:'cu'; ISO3166_3:'cub'; CLat: 21.50; CLong: -80.00; Capital:'Havana';             CapLat: 23.1168; CapLong: -82.3886; CapAlt:4),
      (Name:'Cyprus';                            Fips10:'cy'; ISO3166_2:'cy'; ISO3166_3:'cyp'; CLat: 35.00; CLong:  33.00; Capital:'Nicosia';            CapLat: 35.1710; CapLong:  33.3690; CapAlt:134),
      (Name:'Czech Republic';                    Fips10:'ez'; ISO3166_2:'cz'; ISO3166_3:'cze'; CLat: 49.75; CLong:  15.50; Capital:'Prague';             CapLat: 50.0785; CapLong:  14.4423; CapAlt:244),
      (Name:'Denmark';                           Fips10:'da'; ISO3166_2:'dk'; ISO3166_3:'dnk'; CLat: 56.00; CLong:  10.00; Capital:'Copenhagen';         CapLat: 55.7040; CapLong:  12.5234; CapAlt:0),
      (Name:'Djibouti';                          Fips10:'dj'; ISO3166_2:'dj'; ISO3166_3:'dji'; CLat: 11.50; CLong:  43.00; Capital:'Djibouti';           CapLat: 11.5941; CapLong:  43.1452; CapAlt:0),
      (Name:'Dominica';                          Fips10:'do'; ISO3166_2:'dm'; ISO3166_3:'dma'; CLat: 15.42; CLong: -61.33; Capital:'Roseau';             CapLat: 15.2987; CapLong: -61.3943; CapAlt:0),
      (Name:'Dominican Republic';                Fips10:'dr'; ISO3166_2:'do'; ISO3166_3:'dom'; CLat: 19.00; CLong: -70.67; Capital:'Santo Domingo';      CapLat: 18.4893; CapLong: -69.8993; CapAlt:0),
      (Name:'East Timor;Timor Lestre';           Fips10:'tt'; ISO3166_2:'tl'; ISO3166_3:'tls'; CLat: -8.83; CLong: 125.92; Capital:'Dili';               CapLat: -8.5707; CapLong: 125.5810; CapAlt:11),
      (Name:'Ecuador';                           Fips10:'ec'; ISO3166_2:'ec'; ISO3166_3:'ecu'; CLat: -2.00; CLong: -77.50; Capital:'Quito';              CapLat: -0.2295; CapLong: -78.5243; CapAlt:2763),
      (Name:'Egypt';                             Fips10:'eg'; ISO3166_2:'eg'; ISO3166_3:'egy'; CLat: 27.00; CLong:  30.00; Capital:'Cairo';              CapLat: 30.0779; CapLong:  31.2508; CapAlt:22),
      (Name:'El Salvador';                       Fips10:'es'; ISO3166_2:'sv'; ISO3166_3:'slv'; CLat: 13.83; CLong: -88.92; Capital:'San Salvador';       CapLat: 13.7014; CapLong: -89.2002; CapAlt:658),
      (Name:'Equatorial Guinea';                 Fips10:'ek'; ISO3166_2:'gq'; ISO3166_3:'gnq'; CLat:  2.00; CLong:  10.00; Capital:'Malabo';             CapLat:  3.7536; CapLong:   8.7846; CapAlt:107),
      (Name:'Eritrea';                           Fips10:'er'; ISO3166_2:'er'; ISO3166_3:'eri'; CLat: 15.00; CLong:  39.00; Capital:'Asmara';             CapLat: 15.3324; CapLong:  38.9262; CapAlt:2363),
      (Name:'Estonia';                           Fips10:'en'; ISO3166_2:'ee'; ISO3166_3:'est'; CLat: 59.00; CLong:  26.00; Capital:'Tallinn';            CapLat: 59.4465; CapLong:  24.7603; CapAlt:37),
      (Name:'Ethiopia';                          Fips10:'et'; ISO3166_2:'et'; ISO3166_3:'eth'; CLat:  8.00; CLong:  38.00; Capital:'Addis Ababa';        CapLat:  9.0227; CapLong:  38.7468; CapAlt:2362),
      (Name:'Falkland Islands; Malvinas';        Fips10:'fk'; ISO3166_2:'fk'; ISO3166_3:'flk'; CLat:-51.75; CLong: -59.00; Capital:'Stanley';            CapLat:-51.7010; CapLong: -57.8492; CapAlt:0),
      (Name:'Faroe Islands';                     Fips10:'fo'; ISO3166_2:'fo'; ISO3166_3:'fro'; CLat: 62.00; CLong:  -7.00; Capital:'Torshavn';           CapLat: 62.0177; CapLong:  -6.7719; CapAlt:0),
      (Name:'Fiji';                              Fips10:'fj'; ISO3166_2:'fj'; ISO3166_3:'fji'; CLat:-18.00; CLong: 175.00; Capital:'Suva';               CapLat:-18.1426; CapLong: 178.4310; CapAlt:0),
      (Name:'Finland';                           Fips10:'fi'; ISO3166_2:'fi'; ISO3166_3:'fin'; CLat: 64.00; CLong:  26.00; Capital:'Helsinki';           CapLat: 60.1733; CapLong:  24.9486; CapAlt:25),
      (Name:'France';                            Fips10:'fr'; ISO3166_2:'fr'; ISO3166_3:'fra'; CLat: 46.00; CLong:   2.00; Capital:'Paris';              CapLat: 48.8521; CapLong:   2.3490; CapAlt:34),
      (Name:'French Guiana';                     Fips10:'fg'; ISO3166_2:'gf'; ISO3166_3:'guf'; CLat:  4.00; CLong: -53.00; Capital:'Cayenne';            CapLat:  4.9346; CapLong: -52.3303; CapAlt:32),
      (Name:'French Polynesia';                  Fips10:'fp'; ISO3166_2:'pf'; ISO3166_3:'pyf'; CLat:-15.00; CLong:-140.00; Capital:'Papeete';            CapLat:-17.5350; CapLong:-149.5700; CapAlt:59),
      (Name:'Gabon';                             Fips10:'gb'; ISO3166_2:'ga'; ISO3166_3:'gab'; CLat: -1.00; CLong:  11.75; Capital:'Libreville';         CapLat:  0.3908; CapLong:   9.4536; CapAlt:0),
      (Name:'Gambia';                            Fips10:'ga'; ISO3166_2:'gm'; ISO3166_3:'gmb'; CLat: 13.47; CLong: -16.57; Capital:'Banjul';             CapLat: 13.4550; CapLong: -16.5887; CapAlt:0),
      (Name:'Georgia';                           Fips10:'gg'; ISO3166_2:'ge'; ISO3166_3:'geo'; CLat: 42.00; CLong:  43.50; Capital:'T''bilisi';          CapLat: 41.7218; CapLong:  44.7831; CapAlt:451),
      (Name:'Germany';                           Fips10:'gm'; ISO3166_2:'de'; ISO3166_3:'deu'; CLat: 51.00; CLong:   9.00; Capital:'Berlin';             CapLat: 52.5163; CapLong:  13.3276; CapAlt:34),
      (Name:'Ghana';                             Fips10:'gh'; ISO3166_2:'gh'; ISO3166_3:'gha'; CLat:  8.00; CLong:  -2.00; Capital:'Accra';              CapLat:  5.5586; CapLong:  -0.2009; CapAlt:98),
      (Name:'Gibraltar';                         Fips10:'gi'; ISO3166_2:'gi'; ISO3166_3:'gib'; CLat: 36.13; CLong:  -5.35; Capital:'Gibraltar';          CapLat: 36.1293; CapLong:  -5.3520; CapAlt:447),
      (Name:'Greece';                            Fips10:'gr'; ISO3166_2:'gr'; ISO3166_3:'grc'; CLat: 39.00; CLong:  22.00; Capital:'Athens';             CapLat: 37.9440; CapLong:  23.6529; CapAlt:153),
      (Name:'Greenland';                         Fips10:'gl'; ISO3166_2:'gl'; ISO3166_3:'grl'; CLat: 72.00; CLong: -40.00; Capital:'Nuuk';               CapLat: 64.1812; CapLong: -51.7300; CapAlt:0),
      (Name:'Grenada';                           Fips10:'gj'; ISO3166_2:'gd'; ISO3166_3:'grd'; CLat: 12.12; CLong: -61.67; Capital:'Saint George''s';    CapLat: 12.0653; CapLong: -61.7449; CapAlt:25),
      (Name:'Guadeloupe';                        Fips10:'gp'; ISO3166_2:'gp'; ISO3166_3:'glp'; CLat: 16.25; CLong: -61.58; Capital:'Basse-Terre';        CapLat: 16.0027; CapLong: -61.7259; CapAlt:0),
      (Name:'Guam';                              Fips10:'gq'; ISO3166_2:'gu'; ISO3166_3:'gum'; CLat: 13.47; CLong: 144.78; Capital:'Hagatna';            CapLat: 13.4667; CapLong: 144.7470; CapAlt:9),
      (Name:'Guatemala';                         Fips10:'gt'; ISO3166_2:'gt'; ISO3166_3:'gtm'; CLat: 15.50; CLong: -90.25; Capital:'Guatemala';          CapLat: 14.6180; CapLong: -90.5249; CapAlt:1529),
      (Name:'Guernsey';                          Fips10:'gk'; ISO3166_2:'gg'; ISO3166_3:'ggy'; CLat: 49.47; CLong:  -2.58; Capital:'Saint Peter Port';   CapLat: 49.4660; CapLong:  -2.5522; CapAlt:0),
      (Name:'Guinea';                            Fips10:'gv'; ISO3166_2:'gn'; ISO3166_3:'gin'; CLat: 11.00; CLong: -10.00; Capital:'Conakry';            CapLat:  9.5504; CapLong: -13.6716; CapAlt:0),
      (Name:'Guinea-Bissau';                     Fips10:'pu'; ISO3166_2:'gw'; ISO3166_3:'gnb'; CLat: 12.00; CLong: -15.00; Capital:'Bissau';             CapLat: 11.8640; CapLong: -15.5982; CapAlt:0),
      (Name:'Guyana';                            Fips10:'gy'; ISO3166_2:'gy'; ISO3166_3:'guy'; CLat:  5.00; CLong: -59.00; Capital:'Georgetown';         CapLat:  6.8046; CapLong: -58.1548; CapAlt:0),
      (Name:'Haiti';                             Fips10:'ha'; ISO3166_2:'ht'; ISO3166_3:'hti'; CLat: 19.00; CLong: -72.42; Capital:'Port-au-Prince';     CapLat: 18.5430; CapLong: -72.3431; CapAlt:98),
      (Name:'Honduras';                          Fips10:'ho'; ISO3166_2:'hn'; ISO3166_3:'hnd'; CLat: 15.00; CLong: -86.50; Capital:'Tegucigalpa';        CapLat: 14.0991; CapLong: -87.2031; CapAlt:980),
      (Name:'Hungary';                           Fips10:'hu'; ISO3166_2:'hu'; ISO3166_3:'hun'; CLat: 47.00; CLong:  20.00; Capital:'Budapest';           CapLat: 47.4976; CapLong:  19.0936; CapAlt:102),
      (Name:'Iceland';                           Fips10:'ic'; ISO3166_2:'is'; ISO3166_3:'isl'; CLat: 65.00; CLong: -18.00; Capital:'Reykjavik';          CapLat: 64.1353; CapLong: -21.8952; CapAlt:15),
      (Name:'India';                             Fips10:'in'; ISO3166_2:'in'; ISO3166_3:'ind'; CLat: 20.00; CLong:  77.00; Capital:'New Delhi';          CapLat: 28.5687; CapLong:  77.2168; CapAlt:210),
      (Name:'Indonesia';                         Fips10:'id'; ISO3166_2:'id'; ISO3166_3:'idn'; CLat: -5.00; CLong: 120.00; Capital:'Jakarta';            CapLat: -6.1829; CapLong: 106.8290; CapAlt:3),
      (Name:'Iran';                              Fips10:'ir'; ISO3166_2:'ir'; ISO3166_3:'irn'; CLat: 32.00; CLong:  53.00; Capital:'Tehran';             CapLat: 35.6962; CapLong:  51.4229; CapAlt:1138),
      (Name:'Iraq';                              Fips10:'iz'; ISO3166_2:'iq'; ISO3166_3:'irq'; CLat: 33.00; CLong:  44.00; Capital:'Baghdad';            CapLat: 33.3340; CapLong:  44.3978; CapAlt:40),
      (Name:'Ireland';                           Fips10:'ei'; ISO3166_2:'ie'; ISO3166_3:'irl'; CLat: 53.00; CLong:  -8.00; Capital:'Dublin';             CapLat: 53.3416; CapLong:  -6.2573; CapAlt:8),
      (Name:'Israel';                            Fips10:'is'; ISO3166_2:'il'; ISO3166_3:'isr'; CLat: 31.50; CLong:  34.75; Capital:'Jerusalem';          CapLat: 31.7738; CapLong:  35.2252; CapAlt:580),
      (Name:'Italy';                             Fips10:'it'; ISO3166_2:'it'; ISO3166_3:'ita'; CLat: 42.83; CLong:  12.83; Capital:'Rome';               CapLat: 41.8955; CapLong:  12.4906; CapAlt:14),
      (Name:'Jamaica';                           Fips10:'jm'; ISO3166_2:'jm'; ISO3166_3:'jam'; CLat: 18.25; CLong: -77.50; Capital:'Kingston';           CapLat: 18.0157; CapLong: -76.7973; CapAlt:53),
      (Name:'Japan';                             Fips10:'ja'; ISO3166_2:'jp'; ISO3166_3:'jpn'; CLat: 36.00; CLong: 138.00; Capital:'Tokyo';              CapLat: 35.6831; CapLong: 139.8090; CapAlt:17),
      (Name:'Jersey';                            Fips10:'je'; ISO3166_2:'je'; ISO3166_3:'jey'; CLat: 49.25; CLong:  -2.17; Capital:'Saint Helier';       CapLat: 49.1919; CapLong:  -2.1071; CapAlt:0),
      (Name:'Jordan';                            Fips10:'jo'; ISO3166_2:'jo'; ISO3166_3:'jor'; CLat: 31.00; CLong:  36.00; Capital:'Amman';              CapLat: 31.9494; CapLong:  35.9329; CapAlt:759),
      (Name:'Kazakhstan';                        Fips10:'kz'; ISO3166_2:'kz'; ISO3166_3:'kaz'; CLat: 48.00; CLong:  68.00; Capital:'Astana';             CapLat: 51.1894; CapLong:  71.4321; CapAlt:338),
      (Name:'Kenya';                             Fips10:'ke'; ISO3166_2:'ke'; ISO3166_3:'ken'; CLat:  1.00; CLong:  38.00; Capital:'Nairobi';            CapLat: -1.2702; CapLong:  36.8041; CapAlt:1728),
      (Name:'Kiribati';                          Fips10:'kr'; ISO3166_2:'ki'; ISO3166_3:'kir'; CLat:  1.42; CLong: 173.00; Capital:'Tarawa';             CapLat:  1.3260; CapLong: 172.9850; CapAlt:0),
      (Name:'Korea, North';                      Fips10:'kn'; ISO3166_2:'kp'; ISO3166_3:'prk'; CLat: 40.00; CLong: 127.00; Capital:'Pyongyang';          CapLat: 39.0285; CapLong: 125.7570; CapAlt:6),
      (Name:'Korea, South';                      Fips10:'ks'; ISO3166_2:'kr'; ISO3166_3:'kor'; CLat: 37.00; CLong: 127.50; Capital:'Seoul';              CapLat: 37.5424; CapLong: 126.9350; CapAlt:33),
      (Name:'Kuwait';                            Fips10:'ku'; ISO3166_2:'kw'; ISO3166_3:'kwt'; CLat: 29.50; CLong:  45.75; Capital:'Kuwait';             CapLat: 29.3294; CapLong:  48.0039; CapAlt:5),
      (Name:'Kyrgyzstan';                        Fips10:'kg'; ISO3166_2:'kg'; ISO3166_3:'kgz'; CLat: 41.00; CLong:  75.00; Capital:'Bishkek';            CapLat: 42.8700; CapLong:  74.5879; CapAlt:771),
      (Name:'Laos';                              Fips10:'la'; ISO3166_2:'la'; ISO3166_3:'lao'; CLat: 18.00; CLong: 105.00; Capital:'Vientiane';          CapLat: 17.9628; CapLong: 102.6140; CapAlt:148),
      (Name:'Latvia';                            Fips10:'lg'; ISO3166_2:'lv'; ISO3166_3:'lva'; CLat: 57.00; CLong:  25.00; Capital:'Riga';               CapLat: 56.9483; CapLong:  24.0860; CapAlt:8),
      (Name:'Lebanon';                           Fips10:'le'; ISO3166_2:'lb'; ISO3166_3:'lbn'; CLat: 33.83; CLong:  35.83; Capital:'Beirut';             CapLat: 33.8872; CapLong:  35.5134; CapAlt:55),
      (Name:'Lesotho';                           Fips10:'lt'; ISO3166_2:'ls'; ISO3166_3:'lso'; CLat:-29.50; CLong:  28.50; Capital:'Maseru';             CapLat:-29.3083; CapLong:  27.4916; CapAlt:1673),
      (Name:'Liberia';                           Fips10:'li'; ISO3166_2:'lr'; ISO3166_3:'lbr'; CLat:  6.50; CLong:  -9.50; Capital:'Monrovia';           CapLat:  6.3008; CapLong: -10.7972; CapAlt:0),
      (Name:'Libya';                             Fips10:'ly'; ISO3166_2:'ly'; ISO3166_3:'lby'; CLat: 25.00; CLong:  17.00; Capital:'Tripoli';            CapLat: 32.8711; CapLong:  13.1800; CapAlt:6),
      (Name:'Liechtenstein';                     Fips10:'ls'; ISO3166_2:'li'; ISO3166_3:'lie'; CLat: 47.27; CLong:   9.53; Capital:'Vaduz';              CapLat: 47.1431; CapLong:   9.5215; CapAlt:601),
      (Name:'Lithuania';                         Fips10:'lh'; ISO3166_2:'lt'; ISO3166_3:'ltu'; CLat: 56.00; CLong:  24.00; Capital:'Vilnius';            CapLat: 54.6886; CapLong:  25.2760; CapAlt:124),
      (Name:'Luxembourg';                        Fips10:'lu'; ISO3166_2:'lu'; ISO3166_3:'lux'; CLat: 49.75; CLong:   6.17; Capital:'Luxembourg';         CapLat: 49.6084; CapLong:   6.1203; CapAlt:273),
      (Name:'Macedonia';                         Fips10:'mk'; ISO3166_2:'mk'; ISO3166_3:'mkd'; CLat: 41.83; CLong:  22.00; Capital:'Skopje';             CapLat: 42.0069; CapLong:  21.4467; CapAlt:243),
      (Name:'Madagascar';                        Fips10:'ma'; ISO3166_2:'mg'; ISO3166_3:'mdg'; CLat:-20.00; CLong:  47.00; Capital:'Antananarivo';       CapLat:-18.9077; CapLong:  47.5277; CapAlt:1288),
      (Name:'Malawi';                            Fips10:'mi'; ISO3166_2:'mw'; ISO3166_3:'mwi'; CLat:-13.50; CLong:  34.00; Capital:'Lilongwe';           CapLat:-13.9826; CapLong:  33.7738; CapAlt:1024),
      (Name:'Malaysia';                          Fips10:'my'; ISO3166_2:'my'; ISO3166_3:'mys'; CLat:  2.50; CLong: 112.50; Capital:'Kuala Lumpur';       CapLat:  3.1502; CapLong: 101.7080; CapAlt:60),
      (Name:'Maldives';                          Fips10:'mv'; ISO3166_2:'mv'; ISO3166_3:'mdv'; CLat:  3.25; CLong:  73.00; Capital:'Male';               CapLat:  4.1667; CapLong:  73.5000; CapAlt:0),
      (Name:'Mali';                              Fips10:'ml'; ISO3166_2:'ml'; ISO3166_3:'mli'; CLat: 17.00; CLong:  -4.00; Capital:'Bamako';             CapLat: 12.6530; CapLong:  -7.9865; CapAlt:349),
      (Name:'Malta';                             Fips10:'mt'; ISO3166_2:'mt'; ISO3166_3:'mlt'; CLat: 35.83; CLong:  14.58; Capital:'Valletta';           CapLat: 35.9042; CapLong:  14.5189; CapAlt:0),
      (Name:'Marshall Islands';                  Fips10:'rm'; ISO3166_2:'mh'; ISO3166_3:'mhl'; CLat:  9.00; CLong: 168.00; Capital:'Majuro';             CapLat:  7.1000; CapLong: 171.3833; CapAlt:0),
      (Name:'Martinique';                        Fips10:'mb'; ISO3166_2:'mq'; ISO3166_3:'mtq'; CLat: 14.67; CLong: -61.00; Capital:'Fort-de-France';     CapLat: 14.5997; CapLong: -61.0760; CapAlt:0),
      (Name:'Mauritania';                        Fips10:'mr'; ISO3166_2:'mr'; ISO3166_3:'mrt'; CLat: 20.00; CLong: -12.00; Capital:'Nouakchott';         CapLat: 18.0841; CapLong: -15.9784; CapAlt:6),
      (Name:'Mauritius';                         Fips10:'mp'; ISO3166_2:'mu'; ISO3166_3:'mus'; CLat:-20.28; CLong:  57.55; Capital:'Port Louis';         CapLat:-20.1653; CapLong:  57.4964; CapAlt:134),
      (Name:'Mayotte';                           Fips10:'mf'; ISO3166_2:'yt'; ISO3166_3:'myt'; CLat:-12.83; CLong:  45.17; Capital:'Mamoutzou';          CapLat:-12.7794; CapLong:  45.2126; CapAlt:0),
      (Name:'Mexico';                            Fips10:'mx'; ISO3166_2:'mx'; ISO3166_3:'mex'; CLat: 23.00; CLong:-102.00; Capital:'Mexico';             CapLat: 19.4271; CapLong: -99.1276; CapAlt:2216),
      (Name:'Micronesia';                        Fips10:'fm'; ISO3166_2:'fm'; ISO3166_3:'fsm'; CLat:  6.92; CLong: 158.25; Capital:'Palikir';            CapLat:  6.9177; CapLong: 158.1850; CapAlt:207),
      (Name:'Moldova';                           Fips10:'md'; ISO3166_2:'md'; ISO3166_3:'mda'; CLat: 47.00; CLong:  29.00; Capital:'Chisinau';           CapLat: 47.0269; CapLong:  28.8416; CapAlt:80),
      (Name:'Monaco';                            Fips10:'mn'; ISO3166_2:'mc'; ISO3166_3:'mco'; CLat: 43.73; CLong:   7.40; Capital:'Monaco';             CapLat: 43.7453; CapLong:   7.4242; CapAlt:0),
      (Name:'Mongolia';                          Fips10:'mg'; ISO3166_2:'mn'; ISO3166_3:'mng'; CLat: 46.00; CLong: 105.00; Capital:'Ulaanbaatar';        CapLat: 47.9286; CapLong: 106.9120; CapAlt:1284),
      (Name:'Montenegro';                        Fips10:'mj'; ISO3166_2:'me'; ISO3166_3:'mne'; CLat: 42.50; CLong:  19.30; Capital:'Podgorica';          CapLat: 42.4459; CapLong:  19.2641; CapAlt:61),
      (Name:'Montserrat';                        Fips10:'mh'; ISO3166_2:'ms'; ISO3166_3:'msr'; CLat: 16.75; CLong: -62.20; Capital:'Plymouth';           CapLat: 16.6802; CapLong: -62.2014; CapAlt:114),
      (Name:'Morocco';                           Fips10:'mo'; ISO3166_2:'ma'; ISO3166_3:'mar'; CLat: 32.00; CLong:  -5.00; Capital:'Rabat';              CapLat: 34.0150; CapLong:  -6.8327; CapAlt:53),
      (Name:'Mozambique';                        Fips10:'mz'; ISO3166_2:'mz'; ISO3166_3:'moz'; CLat:-18.25; CLong:  35.00; Capital:'Maputo';             CapLat:-25.9622; CapLong:  32.5737; CapAlt:63),
      (Name:'Namibia';                           Fips10:'wa'; ISO3166_2:'na'; ISO3166_3:'nam'; CLat:-22.00; CLong:  17.00; Capital:'Windhoek';           CapLat:-22.5596; CapLong:  17.0770; CapAlt:1721),
      (Name:'Nauru';                             Fips10:'nr'; ISO3166_2:'nr'; ISO3166_3:'nru'; CLat: -0.53; CLong: 166.92; Capital:'Yaren';              CapLat: -0.5500; CapLong: 166.9167; CapAlt:9),
      (Name:'Nepal';                             Fips10:'np'; ISO3166_2:'np'; ISO3166_3:'npl'; CLat: 28.00; CLong:  84.00; Capital:'Kathmandu';          CapLat: 27.7120; CapLong:  85.3130; CapAlt:1298),
      (Name:'Netherlands';                       Fips10:'nl'; ISO3166_2:'nl'; ISO3166_3:'nld'; CLat: 52.50; CLong:   5.75; Capital:'Amsterdam';          CapLat: 52.3730; CapLong:   4.8948; CapAlt:-1),
      (Name:'Netherlands Antilles';              Fips10:'nt'; ISO3166_2:'an'; ISO3166_3:'ant'; CLat: 12.25; CLong: -68.75; Capital:'Willemstad';         CapLat: 12.0997; CapLong: -68.9359; CapAlt:0),
      (Name:'New Caledonia';                     Fips10:'nc'; ISO3166_2:'nc'; ISO3166_3:'ncl'; CLat:-21.50; CLong: 165.50; Capital:'Noumea';             CapLat:-22.2999; CapLong: 166.4380; CapAlt:0),
      (Name:'New Zealand';                       Fips10:'nz'; ISO3166_2:'nz'; ISO3166_3:'nzl'; CLat:-41.00; CLong: 174.00; Capital:'Wellington';         CapLat:-41.3348; CapLong: 174.8070; CapAlt:20),
      (Name:'Nicaragua';                         Fips10:'nu'; ISO3166_2:'ni'; ISO3166_3:'nic'; CLat: 13.00; CLong: -85.00; Capital:'Managua';            CapLat: 12.1515; CapLong: -86.2730; CapAlt:75),
      (Name:'Niger';                             Fips10:'ng'; ISO3166_2:'ne'; ISO3166_3:'ner'; CLat: 16.00; CLong:   8.00; Capital:'Niamey';             CapLat: 13.5142; CapLong:   2.1204; CapAlt:207),
      (Name:'Nigeria';                           Fips10:'ni'; ISO3166_2:'ng'; ISO3166_3:'nga'; CLat: 10.00; CLong:   8.00; Capital:'Abuja';              CapLat:  9.0833; CapLong:   7.5333; CapAlt:777),
      (Name:'Niue';                              Fips10:'ne'; ISO3166_2:'nu'; ISO3166_3:'niu'; CLat:-19.03; CLong:-169.87; Capital:'Alofi';              CapLat:-19.0565; CapLong:-169.9240; CapAlt:6),
      (Name:'Norfolk Island';                    Fips10:'nf'; ISO3166_2:'nf'; ISO3166_3:'nfk'; CLat:-29.03; CLong: 167.95; Capital:'Kingston';           CapLat:-29.0427; CapLong: 168.0650; CapAlt:0),
      (Name:'Northern Mariana Islands';          Fips10:'cq'; ISO3166_2:'mp'; ISO3166_3:'mnp'; CLat: 15.20; CLong: 145.75; Capital:'Saipan';             CapLat: 15.2069; CapLong: 145.7200; CapAlt:132),
      (Name:'Norway';                            Fips10:'no'; ISO3166_2:'no'; ISO3166_3:'nor'; CLat: 62.00; CLong:  10.00; Capital:'Oslo';               CapLat: 59.9379; CapLong:  10.7123; CapAlt:12),
      (Name:'Oman';                              Fips10:'mu'; ISO3166_2:'om'; ISO3166_3:'omn'; CLat: 21.00; CLong:  57.00; Capital:'Muscat';             CapLat: 23.6065; CapLong:  58.5881; CapAlt:68),
      (Name:'Pakistan';                          Fips10:'pk'; ISO3166_2:'pk'; ISO3166_3:'pak'; CLat: 30.00; CLong:  70.00; Capital:'Islamabad';          CapLat: 33.7182; CapLong:  73.0605; CapAlt:507),
      (Name:'Palau';                             Fips10:'ps'; ISO3166_2:'pw'; ISO3166_3:'plw'; CLat:  7.50; CLong: 134.50; Capital:'Melekeok';           CapLat:  7.4933; CapLong: 134.6342; CapAlt:0),
      (Name:'Panama';                            Fips10:'pm'; ISO3166_2:'pa'; ISO3166_3:'pan'; CLat:  9.00; CLong: -80.00; Capital:'Panama';             CapLat:  9.0029; CapLong: -79.5172; CapAlt:0),
      (Name:'Papua New Guinea';                  Fips10:'pp'; ISO3166_2:'pg'; ISO3166_3:'png'; CLat: -6.00; CLong: 147.00; Capital:'Port Moresby';       CapLat: -9.4818; CapLong: 147.1840; CapAlt:39),
      (Name:'Paraguay';                          Fips10:'pa'; ISO3166_2:'py'; ISO3166_3:'pry'; CLat:-23.00; CLong: -58.00; Capital:'Adamstown';          CapLat:-25.3051; CapLong: -57.6219; CapAlt:54),
      (Name:'Peru';                              Fips10:'pe'; ISO3166_2:'pe'; ISO3166_3:'per'; CLat:-10.00; CLong: -76.00; Capital:'Lima';               CapLat:-12.0824; CapLong: -77.0454; CapAlt:107),
      (Name:'Philippines';                       Fips10:'rp'; ISO3166_2:'ph'; ISO3166_3:'phl'; CLat: 13.00; CLong: 122.00; Capital:'Manila';             CapLat: 14.6096; CapLong: 121.0060; CapAlt:7),
      (Name:'Poland';                            Fips10:'pl'; ISO3166_2:'pl'; ISO3166_3:'pol'; CLat: 52.00; CLong:  20.00; Capital:'Warsaw';             CapLat: 52.2449; CapLong:  21.0119; CapAlt:93),
      (Name:'Portugal';                          Fips10:'po'; ISO3166_2:'pt'; ISO3166_3:'prt'; CLat: 39.50; CLong:  -8.00; Capital:'Lisbon';             CapLat: 38.7559; CapLong:  -9.1228; CapAlt:15),
      (Name:'Puerto Rico';                       Fips10:'rq'; ISO3166_2:'pr'; ISO3166_3:'pri'; CLat: 18.25; CLong: -66.50; Capital:'San Juan';           CapLat: 18.3988; CapLong: -66.0685; CapAlt:3),
      (Name:'Qatar';                             Fips10:'qa'; ISO3166_2:'qa'; ISO3166_3:'qat'; CLat: 25.50; CLong:  51.25; Capital:'Doha';               CapLat: 25.2951; CapLong:  51.5074; CapAlt:13),
      (Name:'Reunion';                           Fips10:'re'; ISO3166_2:'re'; ISO3166_3:'reu'; CLat:-21.10; CLong:  55.60; Capital:'Saint-Denis';        CapLat:-20.8672; CapLong:  55.4568; CapAlt:112),
      (Name:'Romania';                           Fips10:'ro'; ISO3166_2:'ro'; ISO3166_3:'rou'; CLat: 46.00; CLong:  25.00; Capital:'Bucharest';          CapLat: 44.4305; CapLong:  26.1230; CapAlt:70),
      (Name:'Russia';                            Fips10:'rs'; ISO3166_2:'ru'; ISO3166_3:'rus'; CLat: 60.00; CLong: 100.00; Capital:'Moscow';             CapLat: 55.7388; CapLong:  37.6665; CapAlt:124),
      (Name:'Rwanda';                            Fips10:'rw'; ISO3166_2:'rw'; ISO3166_3:'rwa'; CLat: -2.00; CLong:  30.00; Capital:'Kigali';             CapLat: -1.9501; CapLong:  30.0588; CapAlt:1567),
      (Name:'Saint Helena';                      Fips10:'sh'; ISO3166_2:'sh'; ISO3166_3:'shn'; CLat:-15.93; CLong:  -5.70; Capital:'Jamestown';          CapLat:-15.9221; CapLong:  -5.7047; CapAlt:292),
      (Name:'Saint Kitts and Nevis';             Fips10:'sc'; ISO3166_2:'kn'; ISO3166_3:'kna'; CLat: 17.33; CLong: -62.75; Capital:'Basseterre';         CapLat: 17.3000; CapLong: -62.7309; CapAlt:0),
      (Name:'Saint Lucia';                       Fips10:'st'; ISO3166_2:'lc'; ISO3166_3:'lca'; CLat: 13.88; CLong: -60.98; Capital:'Castries';           CapLat: 14.0001; CapLong: -60.9832; CapAlt:204),
      (Name:'Saint Pierre and Miquelon';         Fips10:'sb'; ISO3166_2:'pm'; ISO3166_3:'spm'; CLat: 46.83; CLong: -56.33; Capital:'Saint-Pierre';       CapLat: 46.7862; CapLong: -56.1939; CapAlt:0),
      (Name:'Saint Vincent and the Grenadines';  Fips10:'vc'; ISO3166_2:'vc'; ISO3166_3:'vct'; CLat: 13.25; CLong: -61.20; Capital:'Kingstown';          CapLat: 13.2035; CapLong: -61.2653; CapAlt:0),
      (Name:'Samoa';                             Fips10:'ws'; ISO3166_2:'ws'; ISO3166_3:'wsm'; CLat:-13.58; CLong:-172.33; Capital:'Apia';               CapLat:-13.8314; CapLong:-171.7520; CapAlt:0),
      (Name:'San Marino';                        Fips10:'sm'; ISO3166_2:'sm'; ISO3166_3:'smr'; CLat: 43.77; CLong:  12.42; Capital:'San Marino';         CapLat: 43.9424; CapLong:  12.4454; CapAlt:328),
      (Name:'Sao Tome and Principe';             Fips10:'tp'; ISO3166_2:'st'; ISO3166_3:'stp'; CLat:  1.00; CLong:   7.00; Capital:'Sao Tome';           CapLat:  0.3368; CapLong:   6.7278; CapAlt:141),
      (Name:'Saudi Arabia';                      Fips10:'sa'; ISO3166_2:'sa'; ISO3166_3:'sau'; CLat: 25.00; CLong:  45.00; Capital:'Riyadh';             CapLat: 24.6347; CapLong:  46.7179; CapAlt:624),
      (Name:'Senegal';                           Fips10:'sg'; ISO3166_2:'sn'; ISO3166_3:'sen'; CLat: 14.00; CLong: -14.00; Capital:'Dakar';              CapLat: 14.6867; CapLong: -17.4519; CapAlt:37),
      (Name:'Serbia and Montenegro';             Fips10:'yi'; ISO3166_2:'rs'; ISO3166_3:'srb'; CLat: 44.00; CLong:  21.00; Capital:'Belgrade';           CapLat: 44.8024; CapLong:  20.4656; CapAlt:116),
      (Name:'Seychelles';                        Fips10:'se'; ISO3166_2:'sc'; ISO3166_3:'syc'; CLat: -4.58; CLong:  55.67; Capital:'Victoria';           CapLat: -4.6174; CapLong:  55.4450; CapAlt:0),
      (Name:'Sierra Leone';                      Fips10:'sl'; ISO3166_2:'sl'; ISO3166_3:'sle'; CLat:  8.50; CLong: -11.50; Capital:'Freetown';           CapLat:  8.4861; CapLong: -13.2391; CapAlt:76),
      (Name:'Singapore';                         Fips10:'sn'; ISO3166_2:'sg'; ISO3166_3:'sgp'; CLat:  1.37; CLong: 103.80; Capital:'Singapore';          CapLat:  1.2988; CapLong: 103.8250; CapAlt:0),
      (Name:'Slovakia';                          Fips10:'lo'; ISO3166_2:'sk'; ISO3166_3:'svk'; CLat: 48.66; CLong:  19.50; Capital:'Bratislava';         CapLat: 48.1531; CapLong:  17.1297; CapAlt:131),
      (Name:'Slovenia';                          Fips10:'si'; ISO3166_2:'si'; ISO3166_3:'svn'; CLat: 46.12; CLong:  14.83; Capital:'Ljubljana';          CapLat: 46.0574; CapLong:  14.5148; CapAlt:281),
      (Name:'Solomon Islands';                   Fips10:'bp'; ISO3166_2:'sb'; ISO3166_3:'slb'; CLat: -8.00; CLong: 159.00; Capital:'Honiara';            CapLat: -9.4268; CapLong: 159.9490; CapAlt:29),
      (Name:'Somalia';                           Fips10:'so'; ISO3166_2:'so'; ISO3166_3:'som'; CLat: 10.00; CLong:  49.00; Capital:'Mogadishu';          CapLat:  2.0412; CapLong:  45.3441; CapAlt:28),
      (Name:'South Africa';                      Fips10:'sf'; ISO3166_2:'za'; ISO3166_3:'zaf'; CLat:-29.00; CLong:  24.00; Capital:'Pretoria';           CapLat:-25.7313; CapLong:  28.2184; CapAlt:1271),
      (Name:'Spain';                             Fips10:'sp'; ISO3166_2:'es'; ISO3166_3:'esp'; CLat: 40.00; CLong:  -4.00; Capital:'Madrid';             CapLat: 40.4422; CapLong:  -3.6910; CapAlt:588),
      (Name:'Sri Lanka';                         Fips10:'ce'; ISO3166_2:'lk'; ISO3166_3:'lka'; CLat:  7.00; CLong:  81.00; Capital:'Colombo';            CapLat:  6.9275; CapLong:  79.8484; CapAlt:4),
      (Name:'Sudan';                             Fips10:'su'; ISO3166_2:'sd'; ISO3166_3:'sdn'; CLat: 15.00; CLong:  30.00; Capital:'Khartoum';           CapLat: 15.5501; CapLong:  32.5322; CapAlt:377),
      (Name:'Suriname';                          Fips10:'ns'; ISO3166_2:'sr'; ISO3166_3:'sur'; CLat:  4.00; CLong: -56.00; Capital:'Paramaribo';         CapLat:  5.8261; CapLong: -55.1703; CapAlt:1),
      (Name:'Svalbard';                          Fips10:'sv'; ISO3166_2:'sj'; ISO3166_3:'sjm'; CLat: 78.00; CLong:  20.00; Capital:'Longyearbyen';       CapLat: 78.2186; CapLong:  15.6488; CapAlt:199),
      (Name:'Swaziland';                         Fips10:'wz'; ISO3166_2:'sz'; ISO3166_3:'swz'; CLat:-26.50; CLong:  31.50; Capital:'Mbabane';            CapLat:-26.3187; CapLong:  31.1437; CapAlt:1243),
      (Name:'Sweden';                            Fips10:'sw'; ISO3166_2:'se'; ISO3166_3:'swe'; CLat: 62.00; CLong:  15.00; Capital:'Stockholm';          CapLat: 59.3323; CapLong:  18.0651; CapAlt:15),
      (Name:'Switzerland';                       Fips10:'sz'; ISO3166_2:'ch'; ISO3166_3:'che'; CLat: 47.00; CLong:   8.00; Capital:'Bern';               CapLat: 46.9482; CapLong:   7.4457; CapAlt:513),
      (Name:'Syria';                             Fips10:'sy'; ISO3166_2:'sy'; ISO3166_3:'syr'; CLat: 35.00; CLong:  38.00; Capital:'Damascus';           CapLat: 33.5193; CapLong:  36.3135; CapAlt:691),
      (Name:'Taiwan';                            Fips10:'tw'; ISO3166_2:'tw'; ISO3166_3:'twn'; CLat: 23.50; CLong: 121.00; Capital:'Taipei';             CapLat: 25.0351; CapLong: 121.5070; CapAlt:5),
      (Name:'Tajikistan';                        Fips10:'ti'; ISO3166_2:'tj'; ISO3166_3:'tjk'; CLat: 39.00; CLong:  71.00; Capital:'Dushanbe';           CapLat: 38.5593; CapLong:  68.7750; CapAlt:789),
      (Name:'Tanzania';                          Fips10:'tz'; ISO3166_2:'tz'; ISO3166_3:'tza'; CLat: -6.00; CLong:  35.00; Capital:'Dodoma';             CapLat: -6.1749; CapLong:  35.7382; CapAlt:1148),
      (Name:'Thailand';                          Fips10:'th'; ISO3166_2:'th'; ISO3166_3:'tha'; CLat: 15.00; CLong: 100.00; Capital:'Bangkok';            CapLat: 13.7308; CapLong: 100.5210; CapAlt:1),
      (Name:'Togo';                              Fips10:'to'; ISO3166_2:'tg'; ISO3166_3:'tgo'; CLat:  8.00; CLong:   1.17; Capital:'Lome';               CapLat:  6.1266; CapLong:   1.2278; CapAlt:63),
      (Name:'Tonga';                             Fips10:'tn'; ISO3166_2:'to'; ISO3166_3:'ton'; CLat:-20.00; CLong:-175.00; Capital:'Nuku''alofa';        CapLat:-21.1360; CapLong:-175.2160; CapAlt:0),
      (Name:'Trinidad and Tobago';               Fips10:'td'; ISO3166_2:'tt'; ISO3166_3:'tto'; CLat: 11.00; CLong: -61.00; Capital:'Port-of-Spain';      CapLat: 10.6572; CapLong: -61.4836; CapAlt:0),
      (Name:'Tunisia';                           Fips10:'ts'; ISO3166_2:'tn'; ISO3166_3:'tun'; CLat: 34.00; CLong:   9.00; Capital:'Tunis';              CapLat: 36.8188; CapLong:  10.1660; CapAlt:0),
      (Name:'Turkey';                            Fips10:'tu'; ISO3166_2:'tr'; ISO3166_3:'tur'; CLat: 39.00; CLong:  35.00; Capital:'Ankara';             CapLat: 39.9293; CapLong:  32.8533; CapAlt:938),
      (Name:'Turkmenistan';                      Fips10:'tx'; ISO3166_2:'tm'; ISO3166_3:'tkm'; CLat: 40.00; CLong:  60.00; Capital:'Ashgabat';           CapLat: 37.9504; CapLong:  58.3901; CapAlt:215),
      (Name:'Turks and Caicos Islands';          Fips10:'tk'; ISO3166_2:'tc'; ISO3166_3:'tca'; CLat: 21.75; CLong: -71.58; Capital:'Cockburn Town';      CapLat: 21.4608; CapLong: -71.1363; CapAlt:0),
      (Name:'Tuvalu';                            Fips10:'tv'; ISO3166_2:'tv'; ISO3166_3:'tuv'; CLat: -8.00; CLong: 178.00; Capital:'Vaiaku';             CapLat: -8.5167; CapLong: 179.2167; CapAlt:0),
      (Name:'Uganda';                            Fips10:'ug'; ISO3166_2:'ug'; ISO3166_3:'uga'; CLat:  1.00; CLong:  32.00; Capital:'Kampala';            CapLat:  0.3228; CapLong:  32.5748; CapAlt:1202),
      (Name:'Ukraine';                           Fips10:'up'; ISO3166_2:'ua'; ISO3166_3:'ukr'; CLat: 49.00; CLong:  32.00; Capital:'Kiev';               CapLat: 50.4482; CapLong:  30.5021; CapAlt:168),
      (Name:'United Arab Emirates';              Fips10:'ae'; ISO3166_2:'ae'; ISO3166_3:'are'; CLat: 24.00; CLong:  54.00; Capital:'Abu Dhabi';          CapLat: 24.4764; CapLong:  54.3705; CapAlt:13),
      (Name:'United Kingdom';                    Fips10:'uk'; ISO3166_2:'gb'; ISO3166_3:'gbr'; CLat: 54.00; CLong:  -2.00; Capital:'London';             CapLat: 51.5275; CapLong:  -0.1190; CapAlt:14),
      (Name:'United States';                     Fips10:'us'; ISO3166_2:'us'; ISO3166_3:'usa'; CLat: 38.00; CLong: -97.00; Capital:'Washington, DC';     CapLat: 38.9051; CapLong: -77.0162; CapAlt:2),
      (Name:'Uruguay';                           Fips10:'uy'; ISO3166_2:'uy'; ISO3166_3:'ury'; CLat:-33.00; CLong: -56.00; Capital:'Montevideo';         CapLat:-34.8941; CapLong: -56.0675; CapAlt:43),
      (Name:'Uzbekistan';                        Fips10:'uz'; ISO3166_2:'uz'; ISO3166_3:'uzb'; CLat: 41.00; CLong:  64.00; Capital:'Tashkent';           CapLat: 41.3052; CapLong:  69.2690; CapAlt:459),
      (Name:'Vanuatu';                           Fips10:'nh'; ISO3166_2:'vu'; ISO3166_3:'vut'; CLat:-16.00; CLong: 167.00; Capital:'Port-Vila';          CapLat:-17.7404; CapLong: 168.3210; CapAlt:0),
      (Name:'Vatican';                           Fips10:'vt'; ISO3166_2:'va'; ISO3166_3:'vat'; CLat: 41.90; CLong:  12.45; Capital:'Vatican City';       CapLat: 41.9017; CapLong:  12.4577; CapAlt:14),
      (Name:'Venezuela';                         Fips10:'ve'; ISO3166_2:'ve'; ISO3166_3:'ven'; CLat:  8.00; CLong: -66.00; Capital:'Caracas';            CapLat: 10.4961; CapLong: -66.8983; CapAlt:909),
      (Name:'Vietnam';                           Fips10:'vm'; ISO3166_2:'vn'; ISO3166_3:'vnm'; CLat: 16.00; CLong: 106.00; Capital:'Hanoi';              CapLat: 21.0319; CapLong: 105.8200; CapAlt:25),
      (Name:'Virgin Islands';                    Fips10:'vq'; ISO3166_2:'vi'; ISO3166_3:'vir'; CLat: 18.33; CLong: -64.83; Capital:'Charlotte Amalie';   CapLat: 18.3496; CapLong: -64.9342; CapAlt:0),
      (Name:'Wallis and Futuna';                 Fips10:'wf'; ISO3166_2:'wf'; ISO3166_3:'wlf'; CLat:-13.30; CLong:-176.20; Capital:'Mata-Utu';           CapLat:-13.2784; CapLong:-176.1430; CapAlt:0),
      (Name:'Western Sahara';                    Fips10:'wi'; ISO3166_2:'eh'; ISO3166_3:'esh'; CLat: 24.50; CLong: -13.00; Capital:'Laayoune';           CapLat: 27.1623; CapLong: -13.2016; CapAlt:72),
      (Name:'Yemen';                             Fips10:'ym'; ISO3166_2:'ye'; ISO3166_3:'yem'; CLat: 15.00; CLong:  48.00; Capital:'Sanaa';              CapLat: 15.3614; CapLong:  44.2095; CapAlt:2253),
      (Name:'Zambia';                            Fips10:'za'; ISO3166_2:'zm'; ISO3166_3:'zmb'; CLat:-15.00; CLong:  30.00; Capital:'Lusaka';             CapLat:-15.4088; CapLong:  28.2824; CapAlt:1270),
      (Name:'Zimbabwe';                          Fips10:'zi'; ISO3166_2:'zw'; ISO3166_3:'zwe'; CLat:-20.00; CLong:  30.00; Capital:'Harare';             CapLat:-17.8292; CapLong:  31.0540; CapAlt:1480));

type
  TSymbolProperties = record
                        Kind        : TLandMarkElement;  // type of symbol
                        Size        : integer;           // size of symbol
                        FGColor     : TColor;            // foreground color
                        BGColor     : TColor;            // background color
                        Transparent : boolean;           // transparency
                        Direction   : integer;           // direction of symbol
                                                         // (arrows and triangles)
                        Length      : integer;           // length of symbol
                                                         //   (arrows only)
                      end;

  TLandMark = record
                Latitude   : double;
                Longitude  : double;
                Height     : double;
                ClassFlag  : byte;
                Tag        : longint;
                SymbolProps: TSymbolProperties;
                Identifier : TLMIdentifier;
                Time       : TDateTime;
              end;

  TSymbol = record
              Properties : TSymbolProperties;
              Name       : string[40];        // name of symbol
              Category   : integer;           // category of symbol
            end;

  TCalibModel = (cmParabolicIp, cmBiquadraticPn, cmConicConformal,
                 cmMillerCylindrical);
  TCalQuad = record
               Latitude  : double;
               Longitude : double;
               MapX      : integer;
               MapY      : integer;
             end;
  TCalibLine = record
                 LineType  : TGratLineKind;
                 LineValue : double;
                 NumPoints : integer;
                 CalPoints : array[1..MAXCALPOINTS] of TPoint;
               end;
  TCalibData = record
                 MapFName    : string;
                 Caption     : string;
                 Corners     : TCornerArray;
                 Resolution  : double; { meter/pixel }
                 NumCalLines : integer;
                 CalLines    : array[1..MAXCALLINES] of TCalibLine;
                 NumCalQuads : integer;
                 CalQuads    : array[1..MAXCALQUADS] of TCalQuad;
               end;
  TZoomPanEvent = procedure (Sender: TObject) of object;
  TRenderEvent = procedure (Sender: TObject; const Canvas: TCanvas) of object;
  TOnRubberBandActionEvent = procedure (Sender: TObject; APoint: TPoint) of object;
  TDrawLandMarkEvent = procedure (Sender: TObject; var Handled: boolean;
                                  const Canvas: TCanvas; APoint: TPoint;
                                  const LandMarkData: TLandMark) of object;
  TLandMarkActionEvent = procedure (Sender: TObject; var Allowed: boolean;
                                    const Action: TLandMarkAction;
                                    const LandMarkData: TLandMark) of object;
  TMapImgRequestEvent = procedure (Sender: TObject; var FileName: string) of object;

  TSymbolRepository = class (TComponent)
            private
              FSymbols      : array of TSymbol;
              FSymbolsBak   : array of TSymbol;
              FNEntries     : integer;
              FNEntriesBak  : integer;
              function GetValues (ix: integer): TSymbol;
              procedure SetValues (ix: integer; v: TSymbol);
              procedure SetNEntries (value: integer);
            protected
              procedure AssignTo (Dest: TPersistent); override;
            public
              constructor Create(AOwner: TComponent); override;
              destructor Destroy; override;
              procedure Assign(Source: TPersistent); override;
              procedure Backup;
              procedure Clear;
              function LoadFromFile (FName, DataID: string): boolean;
              function ReadFromOpenXMLFile (var InFile: TextFile;
                           DataID: string): boolean;
              procedure Restore;
              procedure StoreOnFile (FName, DataID: string);
              property Symbols[ix: integer]: TSymbol
                           read GetValues write SetValues; default;
            published
              property NumEntries: integer read FNEntries write SetNEntries;
            end;


  TGeoMap = class(TCustomControl) // TGraphicControl
            private
              AuxBmp             : TBitmap;             { double buffer bitmap }
              FImgCache          : TBitMap;{ image cache for magnifications < 0.5 }
              FCacheMag          : double;
              FCacheAA           : boolean;
              FCacheMagLimit     : double;{ limit where caching is switched on }
              FNumLandMarks      : integer;              { number of landmarks }
              FLandMarks         : array of TLandmark;{ collection of landmarks }
              FDefaultLM         : TLandMark;               { default landmark }
              FColorBakGnd       : TColor;
              FFrameStyle        : TFrameStyle;               { style of frame }
              FFrameColor        : TColor;
              FColorGratLine     : TColor;  // color of graticule lines
              FColorGratPoints   : TColor;  // color of calibration points
              FColBlackLine      : TColor;          { colors to draw the frame }
              FColGrayLine       : TColor;                       { -"- }
              FColWhiteLine      : TColor;                       { -"- }
              FEmptyMsg          : string; { message if no map image available }
              FLButtonWasDown    : boolean;{ global identifier to track panning
                                                          by left mouse button }
              FLMClassVisible    : array[0..255] of boolean;// visib. of landmarks
              FLMRandSampleLimit : longint;
              FMapImgName        : string;      // name of map image loaded
              FMapImgWidth       : integer;
              FMapImgHeight      : integer;
              FMagnify           : double;      // visual scale of map
              FZoomState         : TZoomState;
              FMouseBoxState     : TMouseBoxState;
              FMouseBoxX1        : integer;
              FMouseBoxX2        : integer;
              FMouseBoxY1        : integer;
              FMouseBoxY2        : integer;
              FWindOldCornerX    : integer;
              FWindOldCornerY    : integer;
              FWindAnchorX       : integer;
              FWindAnchorY       : integer;
              FShowGrat          : TShowGrat;
              FTopLeft           : TPoint;
              FCalibModel        : TCalibModel;
              FBiQuadOops        : TCalQuad;    // container for last deleted
                                                // calibration point
                                                // (biquadratic polynomial)
              FParaIpOops        : TCalibLine;  // container for last deleted
                                                // calibration point
                                                // (parabolic interpolation)
              FRestoreBiQuadOK   : boolean;
              FRestoreParaIpOK   : boolean;
              FSuppressPaint     : boolean;
              FConfinePan        : boolean;
              FMouseAction       : TMouseActMode;{type of allowed mouse action }
              FRubberBandOn      : boolean;
              FRubberBAnchorX    : integer;
              FRubberBAnchorY    : integer;
              FRubberBandOldX    : integer;
              FRubberBandOldY    : integer;
              FAntiAlias         : boolean;
              FGratLineDist      : double;
              FCalibData         : TCalibData; // original calibration data for
                                               // interpolated polynomials
              FGratMat           : TMatrix;  // equations of parallels and meridians

                                             // biquadratic calibration
              FCalParsSPPL       : array[1..2,1..6] of double;
                            { calibration from sphere coords to map plane
                                   first index: 1 .... calibration for x
                                                2 .... calibration for y
                                  second index: a1..a6 of follow. calib. equation
                              pixel(x or y) := a1 + a2*Lat + a3*Long + a4*Lat*Lat +
                                                a5*Lat*Long + a6*Long*Long }
              FCalParsPLSP       : array[1..2,1..6] of double;
                            { calibration from map plane to sphere coords
                                   first index: 1 .... calibration for latitude
                                                2 .... calibration for longitude
                                  second index: a1..a6 of follow. calib. equation
                              Angle (latitude or longitude) := a1 + a2*x + a3*y +
                                                 a4*x*x + a5*x*y + a6*y*y }

                                      // Miller cylindrical calibration
              FMillercylPar      : array[1..2, 1..2] of double;
                           { first index: 1... calibration of latitude (Ry, dy)
                                          2... calibration of longitude (Rx, dx)
                                  x = Par[2,1]*Long + Par[2,2]
                                  y = Par[1,1]*ln(tan(Pi/4+0.4*Lat)) + Par[1,2] }

                                      // conic conformal calibration
              FConicPars         : array[1..6] of double;
                           { index 1: circle center x
                                   2: circle center y
                                   3: k - Latitude
                                   4: d - Latitude
                                   5: k - Longitude
                                   6: d - Longitude
                                   Lat = FConicPars[3]*sqrt(sqr(x-FConicPars[1]) +
                                         sqr(y-FConicPars[2])) + FConicPars[4]
                                   Long = FConicPars[5]*atan((x-FConicPars[1])/
                                          (y-FConicPars[2])) + FConicPars[6]
                                   }

              FHighLM            : integer;
              FHighLMColFG       : TColor;
              FHighLMColBG       : TColor;
              FHighLMTrans       : boolean;
              FTopLeftXAnchor    : integer;
              FTopLeftYAnchor    : integer;
              FOnDataLoading     : TProgressEvent;
              FOnDataRendered    : TRenderEvent;
              FOnDrawLandmark    : TDrawLandmarkEvent;
              FOnMapImgRequest   : TMapImgRequestEvent;
              FOnLMAction        : TLandMarkActionEvent;
              FOnZoomPan         : TZoomPanEvent;
              FOnBeginRubberBand : TOnRubberBandActionEvent;
              FOnContRubberBand  : TOnRubberBandActionEvent;
              FOnEndRubberBand   : TOnRubberBandActionEvent;
              FZoomStack         : array[1..MAXGMZOOMSTACK] of TgmZoomStackEntry;
              FZStackPoi         : integer;
              FCalDatName        : string;
              MouseAnchorX       : integer;   { anchor for relative mouse move }
              MouseAnchorY       : integer;
              FLastMClickPosX    : integer;     { position of last mouse click }
              FLastMClickPosY    : integer;
              GrafBmp            : TBitmap;       { off-screen graphics bitmap }
              procedure ConstructInternalMapImg;

              function  GetLastMClickLatitude: double;
              function  GetLastMClickLongitude: double;
              function  GetClassVisibility (i: byte): boolean;
              function  GetLandMarkData (i: integer): TLandMark;
              procedure SetLandMarkData (i: integer; LandMark: TLandMark);
              function  GetZoomStackEntry (StackIx: integer): TgmZoomStackEntry;
              function  GetAllowPan: boolean;
              procedure SetAllowPan (value: boolean);
              procedure SetAntiAlias (value: boolean);
              procedure SetClassVisibility (i: byte; value: boolean);
              procedure SetFrameStyle (value: TFrameStyle);
              procedure SetMapImgName (fname: string);
              procedure SetEmptyMsg (Msg: string);
              procedure SetColorBakGnd (color: TColor);
              procedure SetColorFrame (color: TColor);
              procedure SetColorGratLine (color: TColor);
              procedure SetColorGratPoints (color: TColor);
              procedure SetCalDatName (fname: string);
              procedure SetGratLineDist (value: double);
              procedure SetShowGrat (mode: TShowGrat);
              procedure SetSuppressPaint (value: boolean);
              procedure SetRandSampleLimit (value: longint);
              procedure SetTopLeft (TL: TPoint);
              procedure SetMagnification (Scl: double);
              procedure SetMapBitMap (value: TBitMap);
              procedure SetHighLM (value: integer);
              procedure SetCalibModel (value: TCalibModel);
              procedure SetConfinePan (value: boolean);
              procedure SetCacheMagLimit (value: double);
              procedure ZoomStateOnStack;
              function  ReadCalDataIntern (SrcIsFile: boolean;
                          const InFile: TextFile; InStream: TStream;
                          DataID: string): boolean;
            protected
              procedure MouseMove (Shift: TShiftState; X,Y: integer); override;
              procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
                          X, Y: Integer); override;
              procedure MouseUp (Button: TMouseButton; Shift: TShiftState;
                          X, Y: Integer); override;
              procedure DoZoomPanEvent;
              procedure Paint; override;
              function  RecalcGratMat: boolean;
              procedure CalcBiquadraticCalibration;
              procedure CalcMillerCylCalibration;
              procedure CalcConicCalibration;
            public
              constructor Create(AOwner: TComponent); override;
              destructor Destroy; override;
              function  AddCalibPoint (GratLineKind: TGratLineKind;
                           LineValue: double; PixPosX,
                           PixPosY: integer): boolean; overload;
              function  AddCalibPoint (Latit, Longit: double; PixPosX,
                           PixPosY: integer): boolean; overload;
{$IFDEF GE_LEV4}
              procedure AddLandMark (Lat, Long, Height: double;
                           Element: TLandMarkElement; ClassFlag: byte;
                           Identifier: TLMIdentifier; Time: TDateTime; Tag: longint;
                           ColorFG, ColorBG: TColor; Size: integer;
                           Transparent: boolean; Direction,
                           Length: integer); overload;
              procedure AddLandMark (Lat, Long, Height: double;
                           Identifier: TLMIdentifier;
                           Time: TDateTime); {$IFDEF GE_LEV4} overload; {$ENDIF}
{$ENDIF}
              procedure AddLandMark (Lat, Long, Height: double);
                           {$IFDEF GE_LEV4} overload; {$ENDIF}
              procedure ZoomFitPage;
              procedure BringLocationToCenter (Latitude, Longitude: double);
              procedure BringMapPixelToCenter (APoint: TPoint);
              procedure CalcExtentsAndResolution;
              procedure CalcExtentsOfPrint (MapWindow: TRect; Scale: integer;
                           var Width, Height: integer);
              function  CalcLatitude (x, y: integer;
                           var valid: boolean): double; overload;
              function  CalcLatitude (APoint: TPoint;
                           var valid: boolean): double; overload;
              function  CalcLongitude (x, y: integer;
                           var valid: boolean): double; overload;
              function  CalcLongitude (APoint: TPoint;
                           var valid: boolean): double; overload;
              function  CalcPixelCoords (Lat, Long: double;
                           var x,y: integer): boolean;
              property  CalibData: TCalibData read FCalibData write FCalibData;
              property  CalibDataFile: string read FCalDatName write SetCalDatName;
              procedure CalibQuality (var QualX, QualY: double);
              procedure Clear;
              procedure ClearCalibData;
              procedure ClearZoomHistory;
              procedure CopyEntireMapToClipboard;
              procedure CopyToBMP (DestBmp: TBitMap; TopLeft: TPoint; MagFact: double;
                           PosHoriz, PosVert, Width, Height: integer);
              procedure CopyToClipboard;
              procedure CreateAndLoadEmptyMap (FName: string; LatLow, LongLow,
                           LatHigh, LongHigh, dLat, dLong: double; Wid, Hgt: integer;
                           OnDrawMapData: TOnDrawMapDataEvent);
              function  ControlToMapImage (const APoint: TPoint): TPoint;
              property  HighLightLandMark: integer read FHighLM write SetHighLM;
              procedure CopyToOpenPrinter (var x,y: integer;
                           ScaleF: double); overload;
              procedure CopyToOpenPrinter (MapWindow: TRect; Scale: integer;
                           PosHoriz, PosVert: integer); overload;
              procedure CopyToOpenPrinter (TopLeft: TPoint; Scale: integer;
                           PosHoriz, PosVert, Width, Height: integer); overload;
              function  FindLandMark (Lat, Long: double; ClassFlag: integer): integer;
              function  IsPositionWithinMap (Latit, Longit: double): boolean;
              property  LandMarkData[i: integer]: TLandMark
                           read GetLandmarkdata write SetLandmarkData;
              property  LandMarkDefault: TLandMark read FDefaultLM write FDefaultLM;
              property  LastClickLatitude: double read GetLastMClickLatitude;
              property  LastClickLongitude: double read GetLastMClickLongitude;
              property  LastClickPosX: integer read FLastMClickPosX;
              property  LastClickPosY: integer read FLastMClickPosY;
              property  LMClassVisible[i:byte]: boolean
                           read getClassVisibility write SetClassVisibility;
              property  LMRandomDisplayThreshold: longint
                           read FLMRandSampleLimit write SetRandSampleLimit;
              function  LoadCalDataFromXML (FName: string;
                           DataID: string): boolean; overload;
              function  LoadCalDataFromXML (InStream: TMemoryStream;
                           DataID: string): boolean; overload;
              function  LoadLandMarks (FName: string; DataID: string): boolean;
              property  Magnification: double read FMagnify write SetMagnification;
              function  MapImageToControl (const APoint: TPoint): TPoint;
              property  MapImgFile: string read FMapImgName write SetMapImgName;
              property  MapImgHeight: integer read FMapImgHeight;
              property  MapImgWidth: integer read FMapImgWidth;
              property  MapBitmap: TBitMap read GrafBmp write SetMapBitMap;
              function  MouseBox (var xLo, yLo, xHi, yHi: integer): boolean;
              procedure MouseBoxAbort;
              property  NumLandMarks: integer read FNumLandMarks;
              procedure PanMapToFillWindow;
              procedure PrintIt (ScaleF: double);
              function  ReadCalDataFromOpenXMLFile (var InFile: TextFile;
                           DataID: string): boolean;
              function  ReadLandMarksFromOpenXMLFile (var InFile: TextFile;
                           DataID: string): boolean;
              procedure RecalcCalibration;
              procedure RemoveAllLandMarks; overload;
              procedure RemoveAllLandMarks (ClassFlag: byte); overload;
              function  RemoveCalibPoint (PixPosX, PixPosY: integer): boolean;
                           {$IFDEF GE_LEV4} overload; {$ENDIF}
{$IFDEF GE_LEV4}
              function  RemoveCalibPoint (GratLineKind: TGratLineKind;
                           LineValue: double; PixPosX,
                           PixPosY: integer): boolean; overload;
              function  RemoveLandMark (Lat, Long: double; ClassFlag: integer;
                           Radius: double): integer; overload;
              function  RemoveLandMark (Rect: TRectDouble;
                           ClassFlag: integer): integer; overload;
{$ENDIF}
              function  RemoveLandMark (Lat, Long: double;
                           ClassFlag: integer): integer;
                           {$IFDEF GE_LEV4} overload; {$ENDIF}
              procedure RemoveLastLandMark;
              function  RenameMapImg (Name: string): boolean;
              procedure SaveCalDataAsXML (FileName, DataID: string); overload;
              procedure SaveCalDataAsXML (OutStream: TStream;
                           DataID: string); overload;
              procedure SaveLandmarks (FileName, DataID: string);
              procedure SetHighLightProperties (ColorFG, ColorBG: TColor;
                           Transparent: boolean);
              property  SuppressPaint: boolean
                           read FSuppressPaint write SetSuppressPaint;
              property  TopLeft: TPoint read FTopLeft write SetTopLeft;
              procedure WriteCalDataToOpenXMLFile (var OutFile : TextFile;
                           CreateHeader: boolean; DataID: string);
              procedure WriteLandMarksToOpenXMLFile (var OutFile : TextFile;
                           CreateHeader: boolean; DataID: string);
              procedure RestoreLastDeletedCalPoint;
              property  ZoomState: TZoomState read FZoomState;
              procedure ZoomHistory (Index: integer);
              property  ZoomStack [StackIx: integer]: TgmZoomStackEntry
                           read GetZoomStackEntry;

{$IFDEF DEVELOPVERS}
   {$I intf_geomap_futurevers2.pas}
{$ENDIF}
            published
              property Align;
              property AllowPan: boolean read GetAllowPan write SetAllowPan;
              property AntiAlias: boolean read FAntiAlias write SetAntiAlias;
              property CalibModel : TCalibModel
                          read FCalibModel write SetCalibModel;
              property CacheMagLimit: double
                          read FCacheMagLimit write SetCacheMagLimit;
              property ColorBackGnd: TColor
                          read FColorBakGnd write SetColorBakGnd;
              property ColorGraticule: TColor
                          read FColorGratLine write SetColorGratLine;
              property ColorCalibPoints: TColor
                          read FColorGratPoints write SetColorGratPoints;
              property ColorFrame: TColor
                          read FFrameColor write SetColorFrame;
              property ConfinePanToMapImage: boolean
                          read FConfinePan write SetConfinePan;
              property DragCursor;
              property DragMode;
              property EmptyMsg: string read FEmptyMsg write SetEmptyMsg;
              property FrameStyle: TFrameStyle read FFrameStyle write SetFrameStyle;
              property GratLineDist: double read FGratLineDist write SetGratLineDist;
              property MouseAction: TMouseActMode
                          read FMouseAction write FMouseAction;
              property ParentShowHint;
              property PopupMenu;
              property ShowGraticule: TShowGrat read FShowGrat write SetShowGrat;
              property ShowHint;
              property Visible;
              property OnClick;
              property OnBeginRubberBand: TOnRubberBandActionEvent
                          read FOnBeginRubberBand write FOnBeginRubberBand;
              property OnContinueRubberBand: TOnRubberBandActionEvent
                          read FOnContRubberBand write FOnContRubberBand;
              property OnEndRubberBand: TOnRubberBandActionEvent
                          read FOnEndRubberBand write FOnEndRubberBand;
              property OnDataLoading: TProgressEvent
                          read FOnDataLoading write FOnDataLoading;
              property OnDataRendered: TRenderEvent
                          read FOnDataRendered write FOnDataRendered;
              property OnDrawLandmark: TDrawLandmarkEvent
                          read FOnDrawLandmark write FOnDrawLandmark;
              property OnDblClick;
              property OnMapImageRequest: TMapImgRequestEvent
                          read FOnMapImgRequest write FOnMapImgRequest;
              property OnLandMarkAction: TLandMarkActionEvent
                          read FOnLMAction write FOnLMAction;
              property OnMouseDown;
              property OnMouseMove;
              property OnMouseWheel;
              property OnMouseWheelUp;
              property OnMouseWheelDown;
              property OnMouseUp;
              property OnStartDrag;
              property OnDragDrop;
              property OnEndDrag;
              property OnDragOver;
    {$IFNDEF ISCLX}  // Kylix does not know about OnCanResize
              property OnCanResize;
              property OnResize;
    {$ENDIF}
              property OnZoomPan: TZoomPanEvent read FOnZoomPan write FOnZoomPan;
            end;


function  DefaultSymbolRecord: TSymbol;
procedure DrawLandMarkSymbolOnCanvas (cv: TCanvas; x, y: integer;
             LMType: TLandMarkElement; colorFG, colorBG: TColor;
             size, dir, leng: integer; transp: boolean);
function  ParseCalibData (FName: string; DataID: string; var CalibData: TCalibData;
             var CalibModel: TCalibModel): boolean; overload;
function  ParseCalibData (InStream: TMemoryStream; DataID: string;
             var CalibData: TCalibData; var CalibModel: TCalibModel): boolean;overload;
function  PositionInMap (Latit, Longit: double; Corners: TCornerArray): boolean;
procedure WriteRawCalDataToOpenXMLFile (var OutFile : TextFile;
             CreateHeader: boolean; DataID: string; CalData: TCalibData;
             CalibModel: TCalibModel);





Last Update: 2008-Okt-29