LCOV - code coverage report
Current view: directory - ogr/ogrsf_frmts/xplane - ogr_xplane_apt_reader.h (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 30 30 100.0 %
Date: 2011-12-18 Functions: 38 19 50.0 %

       1                 : /******************************************************************************
       2                 :  * $Id: ogr_xplane_apt_reader.h
       3                 :  *
       4                 :  * Project:  X-Plane apt.dat file reader headers
       5                 :  * Purpose:  Definition of classes for X-Plane apt.dat file reader
       6                 :  * Author:   Even Rouault, even dot rouault at mines dash paris dot org
       7                 :  *
       8                 :  ******************************************************************************
       9                 :  * Copyright (c) 2008, Even Rouault
      10                 :  *
      11                 :  * Permission is hereby granted, free of charge, to any person obtaining a
      12                 :  * copy of this software and associated documentation files (the "Software"),
      13                 :  * to deal in the Software without restriction, including without limitation
      14                 :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      15                 :  * and/or sell copies of the Software, and to permit persons to whom the
      16                 :  * Software is furnished to do so, subject to the following conditions:
      17                 :  *
      18                 :  * The above copyright notice and this permission notice shall be included
      19                 :  * in all copies or substantial portions of the Software.
      20                 :  *
      21                 :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      22                 :  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      23                 :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
      24                 :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      25                 :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      26                 :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      27                 :  * DEALINGS IN THE SOFTWARE.
      28                 :  ****************************************************************************/
      29                 : 
      30                 : #ifndef _OGR_XPLANE_APT_READER_H_INCLUDED
      31                 : #define _OGR_XPLANE_APT_READER_H_INCLUDED
      32                 : 
      33                 : #include "ogr_xplane.h"
      34                 : #include "ogr_xplane_reader.h"
      35                 : 
      36                 : /************************************************************************/
      37                 : /*                           OGRXPlaneAPTLayer                          */
      38                 : /************************************************************************/
      39                 : 
      40                 : 
      41                 : class OGRXPlaneAPTLayer : public OGRXPlaneLayer
      42               2 : {
      43                 :   public:
      44                 :                         OGRXPlaneAPTLayer();
      45                 : 
      46                 :     /* If the airport has a tower, its coordinates are the tower coordinates */
      47                 :     /* If it has no tower, then we pick up the coordinates of the threshold of its first found runway */
      48                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
      49                 :                                    const char* pszAptName,
      50                 :                                    int nAPTType,
      51                 :                                    double dfElevation,
      52                 :                                    int bHasCoordinates = FALSE,
      53                 :                                    double dfLat = 0,
      54                 :                                    double dfLon = 0,
      55                 :                                    int bHasTower = FALSE,
      56                 :                                    double dfHeightTower = 0,
      57                 :                                    const char* pszTowerName = NULL);
      58                 : };
      59                 : 
      60                 : 
      61                 : /************************************************************************/
      62                 : /*                   OGRXPlaneRunwayThresholdLayer                      */
      63                 : /************************************************************************/
      64                 : 
      65                 : static const sEnumerationElement runwaySurfaceType[] =
      66                 : {
      67                 :     { 1, "Asphalt" },
      68                 :     { 2, "Concrete" },
      69                 :     { 3, "Turf/grass" },
      70                 :     { 4, "Dirt" },
      71                 :     { 5, "Gravel" },
      72                 :     { 6, "Asphalt" /* helipad V810 */},
      73                 :     { 7, "Concrete" /* helipad  V810 */},
      74                 :     { 8, "Turf/grass" /* helipad V810 */},
      75                 :     { 9, "Dirt" /* helipad V810 */},
      76                 :     { 10, "Asphalt" /* taxiway  V810 */ },
      77                 :     { 11, "Concrete" /* taxiway V810  */ },
      78                 :     { 12, "Dry lakebed" },
      79                 :     { 13, "Water" },
      80                 :     { 14, "Snow/ice" /* V850 */ },
      81                 :     { 15, "Transparent" /* V850 */ }
      82                 : };
      83                 : 
      84                 : static const sEnumerationElement runwayShoulderType[] =
      85                 : {
      86                 :     { 0, "None" },
      87                 :     { 1, "Asphalt" },
      88                 :     { 2, "Concrete" }
      89                 : };
      90                 : 
      91                 : static const sEnumerationElement runwayMarkingType[] =
      92                 : {
      93                 :     { 0, "None" },
      94                 :     { 1, "Visual" },
      95                 :     { 2, "Non-precision approach" },
      96                 :     { 3, "Precision approach" },
      97                 :     { 4, "UK-style non-precision" },
      98                 :     { 5, "UK-style precision" }
      99                 : };
     100                 : 
     101                 : static const sEnumerationElement approachLightingType[] =
     102                 : {
     103                 :     { 0, "None" },
     104                 :     { 1, "ALSF-I" },
     105                 :     { 2, "ALSF-II" },
     106                 :     { 3, "Calvert" },
     107                 :     { 4, "Calvert ISL Cat II and III" },
     108                 :     { 5, "SSALR" },
     109                 :     { 6, "SSALF" },
     110                 :     { 7, "SALS" },
     111                 :     { 8, "MALSR" },
     112                 :     { 9, "MALSF" },
     113                 :     { 10, "MALS" },
     114                 :     { 11, "ODALS" },
     115                 :     { 12, "RAIL" }
     116                 : };
     117                 : 
     118                 : static const sEnumerationElement approachLightingTypeV810[] =
     119                 : {
     120                 :     { 1, "None" },
     121                 :     { 2, "SSALS" },
     122                 :     { 3, "SALSF" },
     123                 :     { 4, "ALSF-I" },
     124                 :     { 5, "ALSF-II" },
     125                 :     { 6, "ODALS" },
     126                 :     { 7, "Calvert" },
     127                 :     { 8, "Calvert ISL Cat II and III" },
     128                 : };
     129                 : 
     130                 : static const sEnumerationElement runwayEdgeLigthingType[] =
     131                 : {
     132                 :     { 0, "None" },
     133                 :     { 1, "LIRL" }, /* proposed for V90x */
     134                 :     { 2, "MIRL" },
     135                 :     { 3, "HIRL" } /* proposed for V90x */
     136                 : };
     137                 : 
     138                 : static const sEnumerationElement runwayREILType[] =
     139                 : {
     140                 :     { 0, "None" },
     141                 :     { 1, "Omni-directional" },
     142                 :     { 2, "Unidirectional" }
     143                 : };
     144                 : 
     145                 : static const sEnumerationElement runwayVisualApproachPathIndicatorTypeV810[] = 
     146                 : {
     147                 :     { 1, "None" },
     148                 :     { 2, "VASI" },
     149                 :     { 3, "PAPI Right" },
     150                 :     { 4, "Space Shuttle PAPI" }
     151                 : };
     152                 : 
     153             649 : DEFINE_XPLANE_ENUMERATION(RunwaySurfaceEnumeration, runwaySurfaceType);
     154             649 : DEFINE_XPLANE_ENUMERATION(RunwayShoulderEnumeration, runwayShoulderType);
     155             649 : DEFINE_XPLANE_ENUMERATION(RunwayMarkingEnumeration, runwayMarkingType);
     156             649 : DEFINE_XPLANE_ENUMERATION(RunwayApproachLightingEnumeration, approachLightingType);
     157             649 : DEFINE_XPLANE_ENUMERATION(RunwayApproachLightingEnumerationV810, approachLightingTypeV810);
     158             649 : DEFINE_XPLANE_ENUMERATION(RunwayEdgeLightingEnumeration, runwayEdgeLigthingType);
     159             649 : DEFINE_XPLANE_ENUMERATION(RunwayREILEnumeration, runwayREILType);
     160             649 : DEFINE_XPLANE_ENUMERATION(RunwayVisualApproachPathIndicatorEnumerationV810, runwayVisualApproachPathIndicatorTypeV810);
     161                 : 
     162                 : class OGRXPlaneRunwayThresholdLayer : public OGRXPlaneLayer
     163               2 : {
     164                 :   public:
     165                 :                         OGRXPlaneRunwayThresholdLayer();
     166                 : 
     167                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     168                 :                                    const char* pszRwyNum,
     169                 :                                    double dfLat,
     170                 :                                    double dfLon,
     171                 :                                    double dfWidth,
     172                 :                                    const char* pszSurfaceType,
     173                 :                                    const char* pszShoulderType,
     174                 :                                    double dfSmoothness,
     175                 :                                    int bHasCenterLineLights,
     176                 :                                    const char* pszEdgeLighting,
     177                 :                                    int bHasDistanceRemainingSigns,
     178                 :                                    double dfDisplacedThresholdLength,
     179                 :                                    double dfStopwayLength,
     180                 :                                    const char* pszMarkings,
     181                 :                                    const char* pszApproachLightingCode,
     182                 :                                    int bHasTouchdownLights,
     183                 :                                    const char* pszREIL);
     184                 : 
     185                 :     /* Set a few computed values */
     186                 :     void                 SetRunwayLengthAndHeading(OGRFeature* poFeature,
     187                 :                                                    double dfLength,
     188                 :                                                    double dfHeading);
     189                 : 
     190                 :     OGRFeature*          AddFeatureFromNonDisplacedThreshold(OGRFeature* poNonDisplacedThresholdFeature);
     191                 : };
     192                 : 
     193                 : /************************************************************************/
     194                 : /*                          OGRXPlaneRunwayLayer                        */
     195                 : /************************************************************************/
     196                 : 
     197                 : 
     198                 : class OGRXPlaneRunwayLayer : public OGRXPlaneLayer
     199               2 : {
     200                 :   public:
     201                 :                         OGRXPlaneRunwayLayer();
     202                 : 
     203                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     204                 :                                    const char* pszRwyNum1,
     205                 :                                    const char* pszRwyNum2,
     206                 :                                    double dfLat1,
     207                 :                                    double dfLon1,
     208                 :                                    double dfLat2,
     209                 :                                    double dfLon2,
     210                 :                                    double dfWidth,
     211                 :                                    const char* pszSurfaceType,
     212                 :                                    const char* pszShoulderType,
     213                 :                                    double dfSmoothness,
     214                 :                                    int bHasCenterLineLights,
     215                 :                                    const char* pszEdgeLighting,
     216                 :                                    int bHasDistanceRemainingSigns);
     217                 : };
     218                 : 
     219                 : 
     220                 : /************************************************************************/
     221                 : /*                        OGRXPlaneStopwayLayer                         */
     222                 : /************************************************************************/
     223                 : 
     224                 : 
     225                 : class OGRXPlaneStopwayLayer : public OGRXPlaneLayer
     226               2 : {
     227                 :   public:
     228                 :                         OGRXPlaneStopwayLayer();
     229                 : 
     230                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     231                 :                                    const char* pszRwyNum,
     232                 :                                    double dfLatThreshold,
     233                 :                                    double dfLonThreshold,
     234                 :                                    double dfRunwayHeading,
     235                 :                                    double dfWidth,
     236                 :                                    double dfStopwayLength);
     237                 : };
     238                 : 
     239                 : /************************************************************************/
     240                 : /*                   OGRXPlaneWaterRunwayThresholdLayer                 */
     241                 : /************************************************************************/
     242                 : 
     243                 : 
     244                 : class OGRXPlaneWaterRunwayThresholdLayer : public OGRXPlaneLayer
     245               2 : {
     246                 :   public:
     247                 :                         OGRXPlaneWaterRunwayThresholdLayer();
     248                 : 
     249                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     250                 :                                    const char* pszRwyNum,
     251                 :                                    double dfLat,
     252                 :                                    double dfLon,
     253                 :                                    double dfWidth,
     254                 :                                    int bBuoys);
     255                 : 
     256                 :     /* Set a few computed values */
     257                 :     void                 SetRunwayLengthAndHeading(OGRFeature* poFeature,
     258                 :                                                    double dfLength,
     259                 :                                                    double dfHeading);
     260                 : };
     261                 : 
     262                 : 
     263                 : /************************************************************************/
     264                 : /*                         OGRXPlaneWaterRunwayLayer                    */
     265                 : /************************************************************************/
     266                 : 
     267                 : /* Polygonal object */
     268                 : 
     269                 : class OGRXPlaneWaterRunwayLayer : public OGRXPlaneLayer
     270               2 : {
     271                 :   public:
     272                 :                         OGRXPlaneWaterRunwayLayer();
     273                 : 
     274                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     275                 :                                    const char* pszRwyNum1,
     276                 :                                    const char* pszRwyNum2,
     277                 :                                    double dfLat1,
     278                 :                                    double dfLon1,
     279                 :                                    double dfLat2,
     280                 :                                    double dfLon2,
     281                 :                                    double dfWidth,
     282                 :                                    int bBuoys);
     283                 : };
     284                 : 
     285                 : 
     286                 : /************************************************************************/
     287                 : /*                        OGRXPlaneHelipadLayer                         */
     288                 : /************************************************************************/
     289                 : 
     290                 : static const sEnumerationElement helipadEdgeLigthingType[] =
     291                 : {
     292                 :     { 0, "None" },
     293                 :     { 1, "Yellow" }, 
     294                 :     { 2, "White" }, /* proposed for V90x */
     295                 :     { 3, "Red" } /* proposed for V90x */
     296                 : };
     297                 : 
     298             649 : DEFINE_XPLANE_ENUMERATION(HelipadEdgeLightingEnumeration, helipadEdgeLigthingType);
     299                 : 
     300                 : class OGRXPlaneHelipadLayer : public OGRXPlaneLayer
     301               2 : {
     302                 :   public:
     303                 :                         OGRXPlaneHelipadLayer();
     304                 : 
     305                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     306                 :                                    const char* pszHelipadNum,
     307                 :                                    double dfLat,
     308                 :                                    double dfLon,
     309                 :                                    double dfTrueHeading,
     310                 :                                    double dfLength,
     311                 :                                    double dfWidth,
     312                 :                                    const char* pszSurfaceType,
     313                 :                                    const char* pszMarkings,
     314                 :                                    const char* pszShoulderType,
     315                 :                                    double dfSmoothness,
     316                 :                                    const char* pszEdgeLighing);
     317                 : };
     318                 : 
     319                 : /************************************************************************/
     320                 : /*                     OGRXPlaneHelipadPolygonLayer                     */
     321                 : /************************************************************************/
     322                 : 
     323                 : 
     324                 : class OGRXPlaneHelipadPolygonLayer : public OGRXPlaneLayer
     325               2 : {
     326                 :   public:
     327                 :                         OGRXPlaneHelipadPolygonLayer();
     328                 : 
     329                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     330                 :                                    const char* pszHelipadNum,
     331                 :                                    double dfLat,
     332                 :                                    double dfLon,
     333                 :                                    double dfTrueHeading,
     334                 :                                    double dfLength,
     335                 :                                    double dfWidth,
     336                 :                                    const char* pszSurfaceType,
     337                 :                                    const char* pszMarkings,
     338                 :                                    const char* pszShoulderType,
     339                 :                                    double dfSmoothness,
     340                 :                                    const char* pszEdgeLighing);
     341                 : };
     342                 : 
     343                 : 
     344                 : /************************************************************************/
     345                 : /*                    OGRXPlaneTaxiwayRectangleLayer                    */
     346                 : /************************************************************************/
     347                 : 
     348                 : 
     349                 : class OGRXPlaneTaxiwayRectangleLayer : public OGRXPlaneLayer
     350               2 : {
     351                 :   public:
     352                 :                         OGRXPlaneTaxiwayRectangleLayer();
     353                 : 
     354                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     355                 :                                    double dfLat,
     356                 :                                    double dfLon,
     357                 :                                    double dfTrueHeading,
     358                 :                                    double dfLength,
     359                 :                                    double dfWidth,
     360                 :                                    const char* pszSurfaceType,
     361                 :                                    double dfSmoothness,
     362                 :                                    int bBlueEdgeLights);
     363                 : };
     364                 : 
     365                 : 
     366                 : /************************************************************************/
     367                 : /*                          OGRXPlanePavementLayer                      */
     368                 : /************************************************************************/
     369                 : 
     370                 : 
     371                 : class OGRXPlanePavementLayer : public OGRXPlaneLayer
     372               2 : {
     373                 :   public:
     374                 :                         OGRXPlanePavementLayer();
     375                 : 
     376                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     377                 :                                    const char* pszPavementName,
     378                 :                                    const char* pszSurfaceType,
     379                 :                                    double dfSmoothness,
     380                 :                                    double dfTextureHeading,
     381                 :                                    OGRPolygon* poPolygon);
     382                 : };
     383                 : 
     384                 : /************************************************************************/
     385                 : /*                       OGRXPlaneAPTBoundaryLayer                      */
     386                 : /************************************************************************/
     387                 : 
     388                 : 
     389                 : class OGRXPlaneAPTBoundaryLayer : public OGRXPlaneLayer
     390               2 : {
     391                 :   public:
     392                 :                         OGRXPlaneAPTBoundaryLayer();
     393                 : 
     394                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     395                 :                                    const char* pszBoundaryName,
     396                 :                                    OGRPolygon* poPolygon);
     397                 : };
     398                 : 
     399                 : 
     400                 : /************************************************************************/
     401                 : /*                 OGRXPlaneAPTLinearFeatureLayer                       */
     402                 : /************************************************************************/
     403                 : 
     404                 : 
     405                 : class OGRXPlaneAPTLinearFeatureLayer : public OGRXPlaneLayer
     406               2 : {
     407                 :   public:
     408                 :                         OGRXPlaneAPTLinearFeatureLayer();
     409                 : 
     410                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     411                 :                                    const char* pszLinearFeatureName,
     412                 :                                    OGRMultiLineString* poMultilineString);
     413                 : };
     414                 : 
     415                 : 
     416                 : /************************************************************************/
     417                 : /*                         OGRXPlaneATCFreqLayer                         */
     418                 : /************************************************************************/
     419                 : 
     420                 : class OGRXPlaneATCFreqLayer : public OGRXPlaneLayer
     421               2 : {
     422                 :   public:
     423                 :                         OGRXPlaneATCFreqLayer();
     424                 : 
     425                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     426                 :                                    const char* pszATCType,
     427                 :                                    const char* pszATCFreqName,
     428                 :                                    double dfFrequency);
     429                 : };
     430                 : 
     431                 : 
     432                 : /************************************************************************/
     433                 : /*                     OGRXPlaneStartupLocationLayer                    */
     434                 : /************************************************************************/
     435                 : 
     436                 : class OGRXPlaneStartupLocationLayer : public OGRXPlaneLayer
     437               2 : {
     438                 :   public:
     439                 :                         OGRXPlaneStartupLocationLayer();
     440                 : 
     441                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     442                 :                                    const char* pszName,
     443                 :                                    double dfLat,
     444                 :                                    double dfLon,
     445                 :                                    double dfTrueHeading);
     446                 : };
     447                 : 
     448                 : /************************************************************************/
     449                 : /*                     OGRXPlaneAPTLightBeaconLayer                     */
     450                 : /************************************************************************/
     451                 : 
     452                 : 
     453                 : static const sEnumerationElement APTLightBeaconColorType[] =
     454                 : {
     455                 :     { 0, "None" },
     456                 :     { 1, "White-green" },           /* land airport */
     457                 :     { 2, "White-yellow" },          /* seaplane base */
     458                 :     { 3, "Green-yellow-white" },    /* heliports */
     459                 :     { 4, "White-white-green" }     /* military field */
     460                 : };
     461                 : 
     462             649 : DEFINE_XPLANE_ENUMERATION(APTLightBeaconColorEnumeration, APTLightBeaconColorType);
     463                 : 
     464                 : class OGRXPlaneAPTLightBeaconLayer : public OGRXPlaneLayer
     465               2 : {
     466                 :   public:
     467                 :                         OGRXPlaneAPTLightBeaconLayer();
     468                 : 
     469                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     470                 :                                    const char* pszName,
     471                 :                                    double dfLat,
     472                 :                                    double dfLon,
     473                 :                                    const char* pszColor);
     474                 : };
     475                 : 
     476                 : /************************************************************************/
     477                 : /*                       OGRXPlaneAPTWindsockLayer                      */
     478                 : /************************************************************************/
     479                 : 
     480                 : class OGRXPlaneAPTWindsockLayer : public OGRXPlaneLayer
     481               2 : {
     482                 :   public:
     483                 :                         OGRXPlaneAPTWindsockLayer();
     484                 : 
     485                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     486                 :                                    const char* pszName,
     487                 :                                    double dfLat,
     488                 :                                    double dfLon,
     489                 :                                    int bIsIllumnited);
     490                 : };
     491                 : 
     492                 : 
     493                 : /************************************************************************/
     494                 : /*                       OGRXPlaneTaxiwaySignLayer                      */
     495                 : /************************************************************************/
     496                 : 
     497                 : class OGRXPlaneTaxiwaySignLayer : public OGRXPlaneLayer
     498               2 : {
     499                 :   public:
     500                 :                         OGRXPlaneTaxiwaySignLayer();
     501                 : 
     502                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     503                 :                                    const char* pszText,
     504                 :                                    double dfLat,
     505                 :                                    double dfLon,
     506                 :                                    double dfHeading,
     507                 :                                    int nSize);
     508                 : };
     509                 : 
     510                 : /************************************************************************/
     511                 : /*                   OGRXPlane_VASI_PAPI_WIGWAG_Layer                   */
     512                 : /************************************************************************/
     513                 : 
     514                 : static const sEnumerationElement VASI_PAPI_WIGWAG_Type[] =
     515                 : {
     516                 :     { 1, "VASI" },
     517                 :     { 2, "PAPI Left" },
     518                 :     { 3, "PAPI Right" },
     519                 :     { 4, "Space Shuttle PAPI" },
     520                 :     { 5, "Tri-colour VASI" },
     521                 :     { 6, "Wig-Wag lights" }
     522                 : };
     523                 : 
     524             649 : DEFINE_XPLANE_ENUMERATION(VASI_PAPI_WIGWAG_Enumeration, VASI_PAPI_WIGWAG_Type);
     525                 : 
     526                 : class OGRXPlane_VASI_PAPI_WIGWAG_Layer : public OGRXPlaneLayer
     527               2 : {
     528                 :   public:
     529                 :                         OGRXPlane_VASI_PAPI_WIGWAG_Layer();
     530                 : 
     531                 :     OGRFeature*         AddFeature(const char* pszAptICAO,
     532                 :                                    const char* pszRwyNum,
     533                 :                                    const char* pszObjectType,
     534                 :                                    double dfLat,
     535                 :                                    double dfLon,
     536                 :                                    double dfHeading,
     537                 :                                    double dfVisualGlidePathAngle);
     538                 : };
     539                 : 
     540                 : 
     541                 : 
     542                 : enum
     543                 : {
     544                 :     APT_AIRPORT_HEADER         = 1,
     545                 :     APT_RUNWAY_TAXIWAY_V_810   = 10,
     546                 :     APT_TOWER                  = 14,
     547                 :     APT_STARTUP_LOCATION       = 15,
     548                 :     APT_SEAPLANE_HEADER        = 16,
     549                 :     APT_HELIPORT_HEADER        = 17,
     550                 :     APT_LIGHT_BEACONS          = 18,
     551                 :     APT_WINDSOCKS              = 19,
     552                 :     APT_TAXIWAY_SIGNS          = 20,
     553                 :     APT_VASI_PAPI_WIGWAG       = 21,
     554                 :     APT_ATC_AWOS_ASOS_ATIS     = 50,
     555                 :     APT_ATC_CTAF               = 51,
     556                 :     APT_ATC_CLD                = 52,
     557                 :     APT_ATC_GND                = 53,
     558                 :     APT_ATC_TWR                = 54,
     559                 :     APT_ATC_APP                = 55,
     560                 :     APT_ATC_DEP                = 56,
     561                 :     APT_RUNWAY                 = 100,
     562                 :     APT_WATER_RUNWAY           = 101,
     563                 :     APT_HELIPAD                = 102,
     564                 :     APT_PAVEMENT_HEADER        = 110,
     565                 :     APT_NODE                   = 111,
     566                 :     APT_NODE_WITH_BEZIER       = 112,
     567                 :     APT_NODE_CLOSE             = 113,
     568                 :     APT_NODE_CLOSE_WITH_BEZIER = 114,
     569                 :     APT_NODE_END               = 115,
     570                 :     APT_NODE_END_WITH_BEZIER   = 116,
     571                 :     APT_LINEAR_HEADER          = 120,
     572                 :     APT_BOUNDARY_HEADER        = 130,
     573                 : };
     574                 : 
     575                 : 
     576                 : 
     577                 : /************************************************************************/
     578                 : /*                           OGRXPlaneAptReader                         */
     579                 : /************************************************************************/
     580                 : 
     581                 : class OGRXPlaneAptReader : public OGRXPlaneReader
     582               2 : {
     583                 :     private:
     584                 :         OGRXPlaneAPTLayer*                  poAPTLayer;
     585                 :         OGRXPlaneRunwayLayer*               poRunwayLayer;
     586                 :         OGRXPlaneStopwayLayer*              poStopwayLayer;
     587                 :         OGRXPlaneRunwayThresholdLayer*      poRunwayThresholdLayer;
     588                 :         OGRXPlaneWaterRunwayLayer*          poWaterRunwayLayer;
     589                 :         OGRXPlaneWaterRunwayThresholdLayer* poWaterRunwayThresholdLayer;
     590                 :         OGRXPlaneHelipadLayer*              poHelipadLayer;
     591                 :         OGRXPlaneHelipadPolygonLayer*       poHelipadPolygonLayer;
     592                 :         OGRXPlaneTaxiwayRectangleLayer*     poTaxiwayRectangleLayer;
     593                 :         OGRXPlanePavementLayer*             poPavementLayer;
     594                 :         OGRXPlaneAPTBoundaryLayer*          poAPTBoundaryLayer;
     595                 :         OGRXPlaneAPTLinearFeatureLayer*     poAPTLinearFeatureLayer;
     596                 :         OGRXPlaneATCFreqLayer*              poATCFreqLayer;
     597                 :         OGRXPlaneStartupLocationLayer*      poStartupLocationLayer;
     598                 :         OGRXPlaneAPTLightBeaconLayer*       poAPTLightBeaconLayer;
     599                 :         OGRXPlaneAPTWindsockLayer*          poAPTWindsockLayer;
     600                 :         OGRXPlaneTaxiwaySignLayer*          poTaxiwaySignLayer;
     601                 :         OGRXPlane_VASI_PAPI_WIGWAG_Layer*   poVASI_PAPI_WIGWAG_Layer;
     602                 : 
     603                 :         int       bAptHeaderFound;
     604                 :         double    dfElevation;
     605                 :         int       bControlTower;
     606                 :         CPLString osAptICAO;
     607                 :         CPLString osAptName;
     608                 :         int       nAPTType;
     609                 : 
     610                 :         int       bTowerFound;
     611                 :         double    dfLatTower, dfLonTower;
     612                 :         double    dfHeightTower;
     613                 :         CPLString osTowerName;
     614                 : 
     615                 :         int     bRunwayFound;
     616                 :         double  dfLatFirstRwy , dfLonFirstRwy;
     617                 : 
     618                 :         int     bResumeLine;
     619                 : 
     620                 :     private:
     621                 :                 OGRXPlaneAptReader();
     622                 : 
     623                 :         void    ParseAptHeaderRecord();
     624                 :         void    ParsePavement();
     625                 :         void    ParseAPTBoundary();
     626                 :         void    ParseAPTLinearFeature();
     627                 :         void    ParseRunwayTaxiwayV810Record();
     628                 :         void    ParseRunwayRecord();
     629                 :         void    ParseWaterRunwayRecord();
     630                 :         void    ParseHelipadRecord();
     631                 :         void    ParseTowerRecord();
     632                 :         void    ParseATCRecord(int nType);
     633                 :         void    ParseStartupLocationRecord();
     634                 :         void    ParseLightBeaconRecord();
     635                 :         void    ParseWindsockRecord();
     636                 :         void    ParseTaxiwaySignRecord();
     637                 :         void    ParseVasiPapiWigWagRecord();
     638                 : 
     639                 :         OGRGeometry* FixPolygonTopology(OGRPolygon& polygon);
     640                 :         int     ParsePolygonalGeometry(OGRGeometry** ppoGeom);
     641                 :         int     ParseLinearGeometry(OGRMultiLineString& multilinestring, int* pbIsValid);
     642                 : 
     643                 :         static void    AddBezierCurve (OGRLineString& lineString,
     644                 :                                 double dfLatA, double dfLonA,
     645                 :                                 double dfCtrPtLatA, double dfCtrPtLonA,
     646                 :                                 double dfSymCtrlPtLatB, double dfSymCtrlPtLonB,
     647                 :                                 double dfLatB, double dfLonB);
     648                 :         static void    AddBezierCurve (OGRLineString& lineString,
     649                 :                                 double dfLatA, double dfLonA,
     650                 :                                 double dfCtrPtLat, double dfCtrPtLon,
     651                 :                                 double dfLatB, double dfLonB);
     652                 : 
     653                 :     protected:
     654                 :         virtual void             Read();
     655                 : 
     656                 :     public:
     657                 :                                  OGRXPlaneAptReader( OGRXPlaneDataSource* poDataSource );
     658                 :         virtual OGRXPlaneReader* CloneForLayer(OGRXPlaneLayer* poLayer);
     659                 :         virtual int              IsRecognizedVersion( const char* pszVersionString);
     660                 :         virtual void             Rewind();
     661                 : };
     662                 : 
     663                 : #endif

Generated by: LCOV version 1.7