diff --git a/src/Airports/GenAirports/build.cxx b/src/Airports/GenAirports/build.cxx index d705ccda..904e0352 100644 --- a/src/Airports/GenAirports/build.cxx +++ b/src/Airports/GenAirports/build.cxx @@ -1366,8 +1366,8 @@ void build_airport( string airport_id, float alt_m, string holepath = root + "/AirportArea"; // long int poly_index = poly_index_next(); // write_boundary( holepath, b, hull, poly_index ); - tgChopNormalPolygon( holepath, HoleArea, divided_base, true ); - tgChopNormalPolygon( holepath, AirportArea, apt_clearing, false ); + tgChopNormalPolygon( holepath, "Hole", divided_base, true ); + tgChopNormalPolygon( holepath, "Airport", apt_clearing, false ); } diff --git a/src/BuildTiles/Clipper/Makefile.am b/src/BuildTiles/Clipper/Makefile.am index 48dff585..29352cfa 100644 --- a/src/BuildTiles/Clipper/Makefile.am +++ b/src/BuildTiles/Clipper/Makefile.am @@ -1,6 +1,6 @@ noinst_LIBRARIES = libClipper.a -libClipper_a_SOURCES = clipper.cxx clipper.hxx +libClipper_a_SOURCES = clipper.cxx clipper.hxx priorities.cxx priorities.hxx noinst_PROGRAMS = testclipper diff --git a/src/BuildTiles/Clipper/clipper.cxx b/src/BuildTiles/Clipper/clipper.cxx index 3df677f9..ce27d792 100644 --- a/src/BuildTiles/Clipper/clipper.cxx +++ b/src/BuildTiles/Clipper/clipper.cxx @@ -32,7 +32,7 @@ #include #include -#include +#include #include #include "clipper.hxx" diff --git a/src/BuildTiles/Clipper/priorities.cxx b/src/BuildTiles/Clipper/priorities.cxx new file mode 100644 index 00000000..270e0bda --- /dev/null +++ b/src/BuildTiles/Clipper/priorities.cxx @@ -0,0 +1,151 @@ +// priorities.cxx -- manage area type priorities +// +// Written by Curtis Olson, started February 1999. +// +// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +// $Id: names.cxx,v 1.13 2004-11-19 22:25:50 curt Exp $ + +#include +#include + +#include +#include STL_STRING + +#include "priorities.hxx" + +SG_USING_STD(string); +SG_USING_STD(map); + +typedef map area_type_map; +typedef map area_name_map; + +static area_type_map area_types; +static area_name_map area_names; + + +inline static void set_area (const string &name, AreaType type) +{ + area_types[type] = name; + area_names[name] = type; +} + + +static bool _initialized = false; + + +inline static void init () +{ + if (_initialized) + return; + + set_area("SomeSort", SomeSortOfArea); + set_area("Hole", HoleArea); + set_area("Airport", AirportArea); + set_area("Island", IslandArea); + set_area("Pond", PondArea); + set_area("Swamp or Marsh", MarshArea); + set_area("Marsh", MarshArea); + set_area("Littoral", LittoralArea); + set_area("Bog", BogArea); + set_area("Sand", SandArea); + set_area("Lava", LavaArea); + set_area("FloodLand", FloodLandArea); + set_area("Lake", LakeArea); + set_area("Lake Dry", DryLakeArea); + set_area("DryLake", DryLakeArea); + set_area("Lake Intermittent", IntLakeArea); + set_area("IntermittentLake", IntLakeArea); + set_area("Reservoir", ReservoirArea); + set_area("Reservoir Intermittent", IntReservoirArea); + set_area("IntermittentReservoir", IntReservoirArea); + set_area("Freeway", FreewayArea); + set_area("Road", RoadArea); + set_area("Railroad", RailroadArea); + set_area("Stream", StreamArea); + set_area("IntermittentStream", IntStreamArea); + set_area("Canal", CanalArea); + set_area("Glacier", GlacierArea); + set_area("PackIce", PackIceArea); + set_area("PolarIce", PolarIceArea); + set_area("Urban", UrbanArea); + set_area("Town", TownArea); + set_area("BuiltUpCover", BuiltUpCover); + set_area("DryCropPastureCover", DryCropPastureCover); + set_area("IrrCropPastureCover", IrrCropPastureCover); + set_area("MixedCropPastureCover", MixedCropPastureCover); + set_area("CropGrassCover", CropGrassCover); + set_area("CropWoodCover", CropWoodCover); + set_area("GrassCover", GrassCover); + set_area("ShrubCover", ShrubCover); + set_area("ShrubGrassCover", ShrubGrassCover); + set_area("SavannaCover", SavannaCover); + set_area("DeciduousBroadCover", DeciduousBroadCover); + set_area("DeciduousNeedleCover", DeciduousNeedleCover); + set_area("EvergreenBroadCover", EvergreenBroadCover); + set_area("EvergreenNeedleCover", EvergreenNeedleCover); + set_area("MixedForestCover", MixedForestCover); + set_area("WaterBodyCover", WaterBodyCover); + set_area("HerbWetlandCover", HerbWetlandCover); + set_area("WoodedWetlandCover", WoodedWetlandCover); + set_area("BarrenCover", BarrenCover); + set_area("HerbTundraCover", HerbTundraCover); + set_area("WoodedTundraCover", WoodedTundraCover); + set_area("MixedTundraCover", MixedTundraCover); + set_area("BareTundraCover", BareTundraCover); + set_area("SnowCover", SnowCover); + set_area("Default", DefaultArea); + set_area("Bay Estuary or Ocean", OceanArea); + set_area("Ocean", OceanArea); + set_area("Void Area", VoidArea); + set_area("Null", NullArea); + + _initialized = true; +} + + +// return area type from text name +AreaType +get_area_type (const string &area) { + init(); + area_name_map::const_iterator it = area_names.find(area); + if (it != area_names.end()) { + return it->second; + } else { + SG_LOG(SG_GENERAL, SG_WARN, "unknown area = '" << area << "'"); + // SG_LOG(SG_GENERAL, SG_DEBUG, "area = " << area); + // for ( int i = 0; i < area.length(); i++ ) { + // SG_LOG(SG_GENERAL, SG_DEBUG, i << ") " << (int)area[i]); + // } + return UnknownArea; + } +} + + +// return text from of area name +string get_area_name( AreaType area ) { + init(); + area_type_map::const_iterator it = area_types.find(area); + if (it != area_types.end()) { + return it->second; + } else { + SG_LOG(SG_GENERAL, SG_WARN, "unknown area code = " << (int)area); + return "Unknown"; + } +} + + diff --git a/src/BuildTiles/Clipper/priorities.hxx b/src/BuildTiles/Clipper/priorities.hxx new file mode 100644 index 00000000..e6beb6b7 --- /dev/null +++ b/src/BuildTiles/Clipper/priorities.hxx @@ -0,0 +1,111 @@ +// priorities.hxx -- manage material priorities +// +// Written by Curtis Olson, started February 1999. +// +// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +// $Id: names.hxx,v 1.14 2005-09-28 16:43:18 curt Exp $ + + +#ifndef _PRIORITIES_HXX +#define _PRIORITIES_HXX + + +#include + +#include STL_STRING + +SG_USING_STD(string); + + +// Posible shape file types. Note the order of these is important and +// defines the priority of these shapes if they should intersect. The +// smaller the number, the higher the priority. +enum AreaType { + SomeSortOfArea = 0, + HoleArea, // Leave area completely empty + AirportArea, + FreewayArea, + RoadArea, + RailroadArea, + PondArea, + LakeArea, + DryLakeArea, + IntLakeArea, + ReservoirArea, + IntReservoirArea, + StreamArea, + IntStreamArea, + CanalArea, + GlacierArea, // Solid ice/snow + PackIceArea, // Water with ice packs + PolarIceArea, + OceanArea, + UrbanArea, // Densely-populated city or large town + TownArea, // Small town or village + FloodLandArea, // Land subject to flooding + BogArea, // Bog + MarshArea, // Marshland or swamp + SandArea, // Sand-covered area + LittoralArea, // Tidal, Sand-covered area + LavaArea, // Lava-covered area + + // USGS Land Covers + // These are low-priority, since known polygons should always win. + + BuiltUpCover, // Urban and Built-Up Land + DryCropPastureCover, // Dryland Cropland and Pasture + IrrCropPastureCover, // Irrigated Cropland and Pasture + MixedCropPastureCover, // Mixed Dryland/Irrigated Cropland and Pasture + CropGrassCover, // Cropland/Grassland Mosaic + CropWoodCover, // Cropland/Woodland Mosaic + GrassCover, // Grassland + ShrubCover, // Shrubland + ShrubGrassCover, // Mixed Shrubland/Grassland + SavannaCover, // Savanna + DeciduousBroadCover, // Deciduous Broadleaf Forest + DeciduousNeedleCover, // Deciduous Needleleaf Forest + EvergreenBroadCover, // Evergreen Broadleaf Forest + EvergreenNeedleCover, // Evergreen Needleleaf Forest + MixedForestCover, // Mixed Forest + WaterBodyCover, // Water Bodies + HerbWetlandCover, // Herbaceous Wetland + WoodedWetlandCover, // Wooded Wetland + BarrenCover, // Barren or Sparsely Vegetated + HerbTundraCover, // Herbaceous Tundra + WoodedTundraCover, // Wooded Tundra + MixedTundraCover, // Mixed Tundra + BareTundraCover, // Bare Ground Tundra + SnowCover, // Snow or Ice + + IslandArea, // any island area not covered otherwise + DefaultArea, // any land area not covered otherwise + + VoidArea, + NullArea, + UnknownArea +}; + + +// return area type from text name +AreaType get_area_type( const string &area ); + +// return text form of area name +string get_area_name( AreaType area ); + +#endif // _PRIORITIES_HXX + diff --git a/src/BuildTiles/GenOutput/genobj.cxx b/src/BuildTiles/GenOutput/genobj.cxx index 53f2b909..0131b38c 100644 --- a/src/BuildTiles/GenOutput/genobj.cxx +++ b/src/BuildTiles/GenOutput/genobj.cxx @@ -33,7 +33,7 @@ #include #include -#include +#include #include #include diff --git a/src/BuildTiles/Main/construct.hxx b/src/BuildTiles/Main/construct.hxx index 794c0ec1..71713cdc 100644 --- a/src/BuildTiles/Main/construct.hxx +++ b/src/BuildTiles/Main/construct.hxx @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include diff --git a/src/BuildTiles/Triangulate/triangle.hxx b/src/BuildTiles/Triangulate/triangle.hxx index 627d30d5..5ccf8c19 100644 --- a/src/BuildTiles/Triangulate/triangle.hxx +++ b/src/BuildTiles/Triangulate/triangle.hxx @@ -38,7 +38,7 @@ #include #include -#include +#include #include #define REAL double diff --git a/src/Lib/Polygon/Makefile.am b/src/Lib/Polygon/Makefile.am index 4f9a8511..4985dc48 100644 --- a/src/Lib/Polygon/Makefile.am +++ b/src/Lib/Polygon/Makefile.am @@ -3,7 +3,7 @@ noinst_LIBRARIES = libPolygon.a libPolygon_a_SOURCES = \ chop-bin.cxx chop.hxx \ index.cxx index.hxx \ - names.cxx names.hxx \ + names.hxx \ polygon.cxx polygon.hxx \ simple_clip.cxx simple_clip.hxx \ superpoly.cxx superpoly.hxx diff --git a/src/Lib/Polygon/chop-bin.cxx b/src/Lib/Polygon/chop-bin.cxx index 80d7aea5..ea6faf28 100644 --- a/src/Lib/Polygon/chop-bin.cxx +++ b/src/Lib/Polygon/chop-bin.cxx @@ -42,12 +42,12 @@ #include #include "index.hxx" -#include "names.hxx" #include "simple_clip.hxx" #include "chop.hxx" -static void clip_and_write_poly( string root, long int p_index, AreaType area, +static void clip_and_write_poly( string root, long int p_index, + const string &poly_type, SGBucket b, const TGPolygon& shape, bool preserve3d ) { Point3D c, min, max, p; @@ -137,9 +137,6 @@ static void clip_and_write_poly( string root, long int p_index, AreaType area, polyfile += "."; polyfile += poly_index; - string poly_type = get_area_name( area ); - if ( poly_type == "Unknown" ) - throw sg_exception("unknown area type in clip_and_write_poly()!"); FILE *rfp= fopen( polyfile.c_str(), "w" ); if ( preserve3d ) { @@ -166,10 +163,9 @@ static void clip_and_write_poly( string root, long int p_index, AreaType area, } } - // process polygon shape (chop up along tile boundaries and write each // polygon piece to a file) -void tgChopNormalPolygon( const string& path, AreaType area, +void tgChopNormalPolygon( const string& path, const string& poly_type, const TGPolygon& shape, bool preserve3d ) { Point3D min, max, p; @@ -212,7 +208,7 @@ void tgChopNormalPolygon( const string& path, AreaType area, if ( b_min == b_max ) { // shape entirely contained in a single bucket, write and bail - clip_and_write_poly( path, index, area, b_min, shape, preserve3d ); + clip_and_write_poly( path, index, poly_type, b_min, shape, preserve3d ); return; } @@ -233,7 +229,7 @@ void tgChopNormalPolygon( const string& path, AreaType area, for ( j = 0; j <= dy; ++j ) { for ( i = 0; i <= dx; ++i ) { b_cur = sgBucketOffset(min.x(), min.y(), i, j); - clip_and_write_poly( path, index, area, b_cur, shape, + clip_and_write_poly( path, index, poly_type, b_cur, shape, preserve3d ); } } @@ -286,7 +282,7 @@ void tgChopNormalPolygon( const string& path, AreaType area, bottom_clip = tgPolygonInt( bottom, shape ); - tgChopNormalPolygon( path, area, bottom_clip, preserve3d ); + tgChopNormalPolygon( path, poly_type, bottom_clip, preserve3d ); } { @@ -312,16 +308,15 @@ void tgChopNormalPolygon( const string& path, AreaType area, top_clip = tgPolygonInt( top, shape ); - tgChopNormalPolygon( path, area, top_clip, preserve3d ); + tgChopNormalPolygon( path, poly_type, top_clip, preserve3d ); } } - // process polygon shape (chop up along tile boundaries and write each // polygon piece to a file) This has a front end to a crude clipper // that doesn't handle holes so beware. This routine is appropriate // for breaking down really huge structures if needed. -void tgChopBigSimplePolygon( const string& path, AreaType area, +void tgChopBigSimplePolygon( const string& path, const string& poly_type, const TGPolygon& shape, bool preserve3d ) { Point3D min, max, p; @@ -364,7 +359,7 @@ void tgChopBigSimplePolygon( const string& path, AreaType area, if ( b_min == b_max ) { // shape entirely contained in a single bucket, write and bail - clip_and_write_poly( path, index, area, b_min, shape, preserve3d ); + clip_and_write_poly( path, index, poly_type, b_min, shape, preserve3d ); return; } @@ -386,7 +381,7 @@ void tgChopBigSimplePolygon( const string& path, AreaType area, for ( j = 0; j <= 1; ++j ) { for ( i = 0; i <= dx; ++i ) { b_cur = sgBucketOffset(min.x(), min.y(), i, j); - clip_and_write_poly( path, index, area, b_cur, shape, + clip_and_write_poly( path, index, poly_type, b_cur, shape, preserve3d ); } } @@ -440,7 +435,7 @@ void tgChopBigSimplePolygon( const string& path, AreaType area, bottom_clip = horizontal_clip( shape, clip_line, Below ); } - tgChopBigSimplePolygon( path, area, bottom_clip, preserve3d ); + tgChopBigSimplePolygon( path, poly_type, bottom_clip, preserve3d ); } { @@ -469,6 +464,6 @@ void tgChopBigSimplePolygon( const string& path, AreaType area, top_clip = horizontal_clip( shape, clip_line, Above ); } - tgChopBigSimplePolygon( path, area, top_clip, preserve3d ); + tgChopBigSimplePolygon( path, poly_type, top_clip, preserve3d ); } } diff --git a/src/Lib/Polygon/chop.hxx b/src/Lib/Polygon/chop.hxx index 88d83cd0..4530684e 100644 --- a/src/Lib/Polygon/chop.hxx +++ b/src/Lib/Polygon/chop.hxx @@ -27,13 +27,12 @@ #define _TG_CHOP_HXX -#include "names.hxx" #include "polygon.hxx" // process polygon shape (chop up along tile boundaries and write each // polygon piece to a file) -void tgChopNormalPolygon( const string& path, AreaType area, +void tgChopNormalPolygon( const string& path, const string& poly_type, const TGPolygon& shape, bool preserve3d ); @@ -41,10 +40,9 @@ void tgChopNormalPolygon( const string& path, AreaType area, // polygon piece to a file) This has a front end to a crude clipper // that doesn't handle holes so beware. This routine is appropriate // for breaking down really huge structures if needed. -void tgChopBigSimplePolygon( const string& path, AreaType area, +void tgChopBigSimplePolygon( const string& path, const string& poly_type, const TGPolygon& shape, bool preserve3d ); - #endif // _TG_CHOP_HXX diff --git a/src/Lib/Polygon/names.cxx b/src/Lib/Polygon/names.cxx index a33a242f..8b137891 100644 --- a/src/Lib/Polygon/names.cxx +++ b/src/Lib/Polygon/names.cxx @@ -1,153 +1 @@ -// names.cxx -- process shapefiles names -// -// Written by Curtis Olson, started February 1999. -// -// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// -// $Id: names.cxx,v 1.15 2007-10-31 15:05:13 curt Exp $ - -#include -#include - -#include -#include STL_STRING - -#include "names.hxx" - -SG_USING_STD(string); -SG_USING_STD(map); - -typedef map area_type_map; -typedef map area_name_map; - -static area_type_map area_types; -static area_name_map area_names; - - -inline static void set_area (const string &name, AreaType type) -{ - area_types[type] = name; - area_names[name] = type; -} - - -static bool _initialized = false; - - -inline static void init () -{ - if (_initialized) - return; - - set_area("SomeSort", SomeSortOfArea); - set_area("Hole", HoleArea); - set_area("Airport", AirportArea); - set_area("Island", IslandArea); - set_area("Pond", PondArea); - set_area("Swamp or Marsh", MarshArea); - set_area("Marsh", MarshArea); - set_area("Littoral", LittoralArea); - set_area("Bog", BogArea); - set_area("Sand", SandArea); - set_area("Lava", LavaArea); - set_area("FloodLand", FloodLandArea); - set_area("Lake", LakeArea); - set_area("Lake Dry", DryLakeArea); - set_area("DryLake", DryLakeArea); - set_area("Lake Intermittent", IntLakeArea); - set_area("IntermittentLake", IntLakeArea); - set_area("Reservoir", ReservoirArea); - set_area("Reservoir Intermittent", IntReservoirArea); - set_area("IntermittentReservoir", IntReservoirArea); - set_area("YellowLine", YellowLineArea); - set_area("WhiteLine", WhiteLineArea); - set_area("Freeway", FreewayArea); - set_area("Road", RoadArea); - set_area("Railroad", RailroadArea); - set_area("Stream", StreamArea); - set_area("IntermittentStream", IntStreamArea); - set_area("Canal", CanalArea); - set_area("Glacier", GlacierArea); - set_area("PackIce", PackIceArea); - set_area("PolarIce", PolarIceArea); - set_area("Urban", UrbanArea); - set_area("Town", TownArea); - set_area("BuiltUpCover", BuiltUpCover); - set_area("DryCropPastureCover", DryCropPastureCover); - set_area("IrrCropPastureCover", IrrCropPastureCover); - set_area("MixedCropPastureCover", MixedCropPastureCover); - set_area("CropGrassCover", CropGrassCover); - set_area("CropWoodCover", CropWoodCover); - set_area("GrassCover", GrassCover); - set_area("ShrubCover", ShrubCover); - set_area("ShrubGrassCover", ShrubGrassCover); - set_area("SavannaCover", SavannaCover); - set_area("DeciduousBroadCover", DeciduousBroadCover); - set_area("DeciduousNeedleCover", DeciduousNeedleCover); - set_area("EvergreenBroadCover", EvergreenBroadCover); - set_area("EvergreenNeedleCover", EvergreenNeedleCover); - set_area("MixedForestCover", MixedForestCover); - set_area("WaterBodyCover", WaterBodyCover); - set_area("HerbWetlandCover", HerbWetlandCover); - set_area("WoodedWetlandCover", WoodedWetlandCover); - set_area("BarrenCover", BarrenCover); - set_area("HerbTundraCover", HerbTundraCover); - set_area("WoodedTundraCover", WoodedTundraCover); - set_area("MixedTundraCover", MixedTundraCover); - set_area("BareTundraCover", BareTundraCover); - set_area("SnowCover", SnowCover); - set_area("Default", DefaultArea); - set_area("Bay Estuary or Ocean", OceanArea); - set_area("Ocean", OceanArea); - set_area("Void Area", VoidArea); - set_area("Null", NullArea); - - _initialized = true; -} - - -// return area type from text name -AreaType -get_area_type (const string &area) { - init(); - area_name_map::const_iterator it = area_names.find(area); - if (it != area_names.end()) { - return it->second; - } else { - SG_LOG(SG_GENERAL, SG_WARN, "unknown area = '" << area << "'"); - // SG_LOG(SG_GENERAL, SG_DEBUG, "area = " << area); - // for ( int i = 0; i < area.length(); i++ ) { - // SG_LOG(SG_GENERAL, SG_DEBUG, i << ") " << (int)area[i]); - // } - return UnknownArea; - } -} - - -// return text from of area name -string get_area_name( AreaType area ) { - init(); - area_type_map::const_iterator it = area_types.find(area); - if (it != area_types.end()) { - return it->second; - } else { - SG_LOG(SG_GENERAL, SG_WARN, "unknown area code = " << (int)area); - return "Unknown"; - } -} - diff --git a/src/Lib/Polygon/names.hxx b/src/Lib/Polygon/names.hxx index 3b9cc154..ed0b4e61 100644 --- a/src/Lib/Polygon/names.hxx +++ b/src/Lib/Polygon/names.hxx @@ -31,84 +31,20 @@ SG_USING_STD(string); +inline static bool is_ocean_area( const string &area ) +{ + return area=="Ocean" || area=="Bay Estuary or Ocean"; +} -// Posible shape file types. Note the order of these is important and -// defines the priority of these shapes if they should intersect. The -// smaller the number, the higher the priority. -enum AreaType { - SomeSortOfArea = 0, - HoleArea, // Leave area completely empty - AirportArea, - YellowLineArea, - WhiteLineArea, - FreewayArea, - RoadArea, - RailroadArea, - PondArea, - LakeArea, - DryLakeArea, - IntLakeArea, - ReservoirArea, - IntReservoirArea, - StreamArea, - IntStreamArea, - CanalArea, - GlacierArea, // Solid ice/snow - PackIceArea, // Water with ice packs - PolarIceArea, - OceanArea, - UrbanArea, // Densely-populated city or large town - TownArea, // Small town or village - FloodLandArea, // Land subject to flooding - BogArea, // Bog - MarshArea, // Marshland or swamp - SandArea, // Sand-covered area - LittoralArea, // Tidal, Sand-covered area - LavaArea, // Lava-covered area - - // USGS Land Covers - // These are low-priority, since known polygons should always win. - - BuiltUpCover, // Urban and Built-Up Land - DryCropPastureCover, // Dryland Cropland and Pasture - IrrCropPastureCover, // Irrigated Cropland and Pasture - MixedCropPastureCover, // Mixed Dryland/Irrigated Cropland and Pasture - CropGrassCover, // Cropland/Grassland Mosaic - CropWoodCover, // Cropland/Woodland Mosaic - GrassCover, // Grassland - ShrubCover, // Shrubland - ShrubGrassCover, // Mixed Shrubland/Grassland - SavannaCover, // Savanna - DeciduousBroadCover, // Deciduous Broadleaf Forest - DeciduousNeedleCover, // Deciduous Needleleaf Forest - EvergreenBroadCover, // Evergreen Broadleaf Forest - EvergreenNeedleCover, // Evergreen Needleleaf Forest - MixedForestCover, // Mixed Forest - WaterBodyCover, // Water Bodies - HerbWetlandCover, // Herbaceous Wetland - WoodedWetlandCover, // Wooded Wetland - BarrenCover, // Barren or Sparsely Vegetated - HerbTundraCover, // Herbaceous Tundra - WoodedTundraCover, // Wooded Tundra - MixedTundraCover, // Mixed Tundra - BareTundraCover, // Bare Ground Tundra - SnowCover, // Snow or Ice - - IslandArea, // any island area not covered otherwise - DefaultArea, // any land area not covered otherwise - - VoidArea, - NullArea, - UnknownArea -}; - - -// return area type from text name -AreaType get_area_type( const string &area ); - -// return text form of area name -string get_area_name( AreaType area ); +inline static bool is_void_area( const string &area ) +{ + return area=="Void Area"; +} +inline static bool is_null_area( const string& area ) +{ + return area=="Null"; +} #endif // _NAMES_HXX diff --git a/src/Prep/E00Lines/main.cxx b/src/Prep/E00Lines/main.cxx index a80a947d..0dfb59db 100644 --- a/src/Prep/E00Lines/main.cxx +++ b/src/Prep/E00Lines/main.cxx @@ -46,7 +46,6 @@ SG_USING_STD(vector); #include #include #include -#include #include #include @@ -162,7 +161,7 @@ checkAttribute (const E00 &data, int index, const Attribute &att) */ static void processPoints (const E00 &data, const tg::Rectangle &bounds, - AreaType areaType, const string &workDir, int width) + const string& poly_type, const string &workDir, int width) { // double x, y, az; @@ -179,7 +178,7 @@ processPoints (const E00 &data, const tg::Rectangle &bounds, } tg::makePolygon(p, width, shape); - tgChopNormalPolygon(workDir, areaType, shape, false); + tgChopNormalPolygon(workDir, poly_type, shape, false); } } @@ -195,7 +194,7 @@ processPoints (const E00 &data, const tg::Rectangle &bounds, */ static void processLines (const E00 &data, const tg::Rectangle &bounds, - AreaType areaType, const string &workDir, int width, + const string& poly_type, const string &workDir, int width, const vector &aat_list) { int nLines = data.nLines(); @@ -242,7 +241,7 @@ processLines (const E00 &data, const tg::Rectangle &bounds, cout << " Minimum angle: " << (shape.minangle_contour(0) * SGD_RADIANS_TO_DEGREES) << endl; - tgChopNormalPolygon(workDir, areaType, shape, false); + tgChopNormalPolygon(workDir, poly_type, shape, false); } cout << "Done lines" << endl; } @@ -253,7 +252,7 @@ processLines (const E00 &data, const tg::Rectangle &bounds, */ static void processPolygons (const E00 &data, const tg::Rectangle &bounds, - AreaType areaType, const string &workDir, + const string& poly_type, const string &workDir, const vector pat_list) { int nPolygons = data.nPolygons(); @@ -309,7 +308,7 @@ processPolygons (const E00 &data, const tg::Rectangle &bounds, 0.0)); } } - tgChopNormalPolygon(workDir, areaType, shape, false); + tgChopNormalPolygon(workDir, poly_type, shape, false); } } @@ -381,7 +380,7 @@ main (int argc, const char **argv) // Default values tg::Rectangle bounds(Point3D(-180.0, -90.0, 0), Point3D(180.0, 90.0, 0)); - AreaType areaType = DefaultArea; + string poly_type = "Default"; int pointWidth = 500; int lineWidth = 50; string workDir = "."; @@ -453,7 +452,7 @@ main (int argc, const char **argv) } else if (arg.find("--area=") == 0) { - areaType = get_area_type(arg.substr(7).c_str()); + poly_type = arg.substr(7); argPos++; } @@ -514,7 +513,7 @@ main (int argc, const char **argv) cout << "Bounds are " << bounds.getMin().x() << ',' << bounds.getMin().y() << " and " << bounds.getMax().x() << ',' << bounds.getMax().y() << endl; - cout << "Area type is " << get_area_name(areaType) << endl;; + cout << "Area type is " << poly_type << endl;; cout << "Working directory is " << workDir << endl; if (usePoints) cout << "Using points with width " << pointWidth << " meters" << endl; @@ -581,13 +580,13 @@ main (int argc, const char **argv) poly_index_init( counter_file ); if (usePoints) - processPoints(data, bounds, areaType, workDir, pointWidth); + processPoints(data, bounds, poly_type, workDir, pointWidth); if (useLines) - processLines(data, bounds, areaType, workDir, lineWidth, aat_list); + processLines(data, bounds, poly_type, workDir, lineWidth, aat_list); if (usePolygons) - processPolygons(data, bounds, areaType, workDir, pat_list); + processPolygons(data, bounds, poly_type, workDir, pat_list); cout << "Done processing " << argv[argPos] << endl; argPos++; diff --git a/src/Prep/GSHHS/debug.cxx b/src/Prep/GSHHS/debug.cxx index 50a6e366..ca047e33 100644 --- a/src/Prep/GSHHS/debug.cxx +++ b/src/Prep/GSHHS/debug.cxx @@ -36,7 +36,6 @@ #include #include -#include #include #include "gshhs.h" @@ -50,14 +49,6 @@ SG_USING_STD(cout); SG_USING_STD(cin); -// return the type of the shapefile record -AreaType get_shapefile_type(int rec) { - string area; - - return get_area_type( area ); -} - - // write result to unique file name void write_result( const TGPolygon& result ) { static int count = 0; diff --git a/src/Prep/GSHHS/gshhs_split.cxx b/src/Prep/GSHHS/gshhs_split.cxx index 42e54e1d..4f588b6b 100644 --- a/src/Prep/GSHHS/gshhs_split.cxx +++ b/src/Prep/GSHHS/gshhs_split.cxx @@ -33,7 +33,6 @@ #include #include -#include #include #include @@ -46,7 +45,7 @@ SG_USING_STD(string); // process shape front end ... split shape into lon = -180 ... 180, // -360 ... -180, and 180 ... 360 ... shift the offset sections and // process each separately -void split_and_shift_chunk( const string& path, AreaType area, +void split_and_shift_chunk( const string& path, const string& poly_type, const TGPolygon& shape ) { TGPolygon lower_mask, center_mask, upper_mask; @@ -86,19 +85,19 @@ void split_and_shift_chunk( const string& path, AreaType area, upper_shape.shift( -360, 0 ); SG_LOG ( SG_GENERAL, SG_INFO, "Processing lower shape" ); - tgChopBigSimplePolygon(path, area, lower_shape, false); + tgChopBigSimplePolygon(path, poly_type, lower_shape, false); SG_LOG ( SG_GENERAL, SG_INFO, "Processing center shape" ); - tgChopBigSimplePolygon(path, area, center_shape, false); + tgChopBigSimplePolygon(path, poly_type, center_shape, false); SG_LOG ( SG_GENERAL, SG_INFO, "Processing upper shape" ); - tgChopBigSimplePolygon(path, area, upper_shape, false); + tgChopBigSimplePolygon(path, poly_type, upper_shape, false); } // process a large shape through my crude polygon splitter to reduce // the polygon sizes before handing off to gpc -void gshhs_split_polygon( const string& path, AreaType area, TGPolygon& shape, +void gshhs_split_polygon( const string& path, const string& poly_type, TGPolygon& shape, const double min, const double max ) { double base_line = (int)(min - 1.0); @@ -142,7 +141,7 @@ void gshhs_split_polygon( const string& path, AreaType area, TGPolygon& shape, // cout << "exiting early" << endl; // exit(0); - split_and_shift_chunk(path, area, below); + split_and_shift_chunk(path, poly_type, below); shape = above; diff --git a/src/Prep/GSHHS/gshhs_split.hxx b/src/Prep/GSHHS/gshhs_split.hxx index 78df2f02..2e82bac8 100644 --- a/src/Prep/GSHHS/gshhs_split.hxx +++ b/src/Prep/GSHHS/gshhs_split.hxx @@ -25,20 +25,19 @@ #define _GSHHS_SPLIT_HXX -#include #include // process shape front end ... split shape into lon = -180 ... 180, // -360 ... -180, and 180 ... 360 ... shift the offset sections and // process each separately -void split_and_shift_chunk( const string& path, AreaType area, +void split_and_shift_chunk( const string& path, const string& poly_type, const TGPolygon& shape ); // process a large shape through my crude polygon splitter to reduce // the polygon sizes before handing off to gpc -void gshhs_split_polygon( const string& path, AreaType area, TGPolygon& shape, +void gshhs_split_polygon( const string& path, const string& poly_type, TGPolygon& shape, const double min, const double max ); diff --git a/src/Prep/GSHHS/main.cxx b/src/Prep/GSHHS/main.cxx index 2862ec16..6b7397d6 100644 --- a/src/Prep/GSHHS/main.cxx +++ b/src/Prep/GSHHS/main.cxx @@ -36,7 +36,6 @@ #include #include -#include #include #ifdef _MSC_VER @@ -209,18 +208,16 @@ int main( int argc, char **argv ) { // huge polygons into something more managable if ( force_area_type.length() > 0 ) { - AreaType area = get_area_type( force_area_type ); - gshhs_split_polygon(path, area, shape, s, n); + gshhs_split_polygon(path, force_area_type, shape, s, n); } else { - gshhs_split_polygon(path, DefaultArea, shape, s, n); + gshhs_split_polygon(path, "Default", shape, s, n); } } else { // small enough to feed to gpc directly if ( force_area_type.length() > 0 ) { - AreaType area = get_area_type( force_area_type ); - split_and_shift_chunk(path, area, shape); + split_and_shift_chunk(path, force_area_type, shape); } else { - split_and_shift_chunk(path, DefaultArea, shape); + split_and_shift_chunk(path, "Default", shape); } } diff --git a/src/Prep/Makefile.am b/src/Prep/Makefile.am index 8d799cc3..2079a491 100644 --- a/src/Prep/Makefile.am +++ b/src/Prep/Makefile.am @@ -6,7 +6,6 @@ SUBDIRS = \ DemRaw2ascii \ E00Lines \ GSHHS \ - MergerClipper \ Photo \ ShapeFile \ TGVPF \ diff --git a/src/Prep/Photo/photo.cxx b/src/Prep/Photo/photo.cxx index f4078446..96391792 100644 --- a/src/Prep/Photo/photo.cxx +++ b/src/Prep/Photo/photo.cxx @@ -329,7 +329,7 @@ int main( int argc, char **argv ) { poly_index_init( counter_file ); string holepath = root + "/PhotoArea"; - tgChopNormalPolygon( holepath, HoleArea, hole, false ); + tgChopNormalPolygon( holepath, "Hole", hole, false ); return 0; } diff --git a/src/Prep/ShapeFile/noaa-decode.cxx b/src/Prep/ShapeFile/noaa-decode.cxx index 8e991ec1..1f56c8f4 100644 --- a/src/Prep/ShapeFile/noaa-decode.cxx +++ b/src/Prep/ShapeFile/noaa-decode.cxx @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -43,7 +42,7 @@ SG_USING_STD( cout ); SG_USING_STD( string ); // return the type of the shapefile record -AreaType get_shapefile_type(DBFHandle& hDBF, int rec) { +std::string get_shapefile_type(DBFHandle& hDBF, int rec) { #if 0 int *panWidth, i, iRecord; @@ -249,7 +248,7 @@ AreaType get_shapefile_type(DBFHandle& hDBF, int rec) { area = "Null"; } - return get_area_type( area ); + return area; } @@ -335,13 +334,12 @@ int main( int argc, char **argv ) { << " rings = " << psShape->nParts << " total vertices = " << psShape->nVertices ); - AreaType area = DefaultArea; + string area = "Default"; if ( force_area_type.length() == 0 ) { area = get_shapefile_type(hDBF, i); - SG_LOG( SG_GENERAL, SG_DEBUG, " area type = " - << get_area_name(area) << " (" << (int)area << ")" ); + SG_LOG( SG_GENERAL, SG_DEBUG, " area type = " << area); } else { - area = get_area_type( force_area_type ); + area = force_area_type; } SG_LOG( SG_GENERAL, SG_INFO, " record type = " @@ -416,9 +414,9 @@ int main( int argc, char **argv ) { // interior of polygon is assigned to force_area_type, // holes are preserved - area = get_area_type( force_area_type ); + area = force_area_type; tgChopNormalPolygon(work_dir, area, shape, false); - } else if ( area == OceanArea ) { + } else if ( is_ocean_area(area) ) { // interior of polygon is ocean, holes are islands SG_LOG( SG_GENERAL, SG_ALERT, "Ocean area ... SKIPPING!" ); @@ -426,7 +424,7 @@ int main( int argc, char **argv ) { // Ocean data now comes from GSHHS so we want to ignore // all other ocean data // tgChopPolygon(work_dir, area, shape, false); - } else if ( area == VoidArea ) { + } else if ( is_void_area(area) ) { // interior is ???? // skip for now @@ -438,7 +436,7 @@ int main( int argc, char **argv ) { } // tgChopPolygon(work_dir, area, shape, false); - } else if ( area == NullArea ) { + } else if ( is_null_area(area) ) { // interior is ???? // skip for now diff --git a/src/Prep/ShapeFile/shape-decode.cxx b/src/Prep/ShapeFile/shape-decode.cxx index 6538e3f1..6f9beb15 100644 --- a/src/Prep/ShapeFile/shape-decode.cxx +++ b/src/Prep/ShapeFile/shape-decode.cxx @@ -40,8 +40,8 @@ #include #include #include -#include #include +#include #include #ifdef _MSC_VER @@ -118,7 +118,7 @@ void load_noaa_area_codes() { } // return the type of the shapefile record -AreaType get_shapefile_type(DBFHandle& hDBF, int rec) { +string get_shapefile_type(DBFHandle& hDBF, int rec) { #if 0 int *panWidth, i, iRecord; char szFormat[32]; @@ -238,7 +238,7 @@ AreaType get_shapefile_type(DBFHandle& hDBF, int rec) { } } - return get_area_type( area ); + return area; } // get attribute value of 'width' from shapefile @@ -272,7 +272,7 @@ string get_attribute(DBFHandle& hDBF, int rec, int column) { void processPolygon(SHPObject* psShape, const string& work_dir, - AreaType area, + const string& poly_type, bool preserve3D) { int iPart,j; TGPolygon shape; @@ -330,7 +330,7 @@ void processPolygon(SHPObject* psShape, if ( max_segment > 1.0 ) { shape = tgPolygonSplitLongEdges( shape, max_segment ); } - tgChopNormalPolygon(work_dir, area, shape, preserve3D); + tgChopNormalPolygon(work_dir, poly_type, shape, preserve3D); } @@ -484,7 +484,7 @@ tg::Line fixDegenerateLine3( tg::Line line ) { void processLine(SHPObject* psShape, const string& work_dir, - AreaType area, + const string& poly_type, float linewidth) { int iPart,j=0,partEnd=psShape->nVertices; double minx = 200, miny = 200, maxx = -200, maxy = -200; @@ -538,13 +538,13 @@ void processLine(SHPObject* psShape, shape = tgPolygonSplitLongEdges( shape, max_segment ); } cout << "hole flag = " << shape.get_hole_flag(0) << endl; - tgChopNormalPolygon(work_dir, area, shape, false); + tgChopNormalPolygon(work_dir, poly_type, shape, false); } } void processPoints(SHPObject* psShape, const string& work_dir, - AreaType area, + const string& poly_type, int pointwidth) { TGPolygon shape; int j; @@ -564,7 +564,7 @@ void processPoints(SHPObject* psShape, if ( max_segment > 1.0 ) { shape = tgPolygonSplitLongEdges( shape, max_segment ); } - tgChopNormalPolygon(work_dir, area, shape, false); + tgChopNormalPolygon(work_dir, poly_type, shape, false); } } @@ -815,13 +815,12 @@ int main( int argc, char **argv ) { exit(-1); } - AreaType area = DefaultArea; + string area = "Default"; if ( force_area_type.length() == 0 ) { area = get_shapefile_type(hDBF, i); - SG_LOG( SG_GENERAL, SG_DEBUG, " area type = " - << get_area_name(area) << " (" << (int)area << ")" ); + SG_LOG( SG_GENERAL, SG_DEBUG, " area type = " << area); } else { - area = get_area_type( force_area_type ); + area = force_area_type; } if ( force_linewidth < 0 ) { @@ -857,7 +856,7 @@ int main( int argc, char **argv ) { psShape->dfZMax, psShape->dfMMax ); #endif - if ( area == OceanArea ) { + if ( is_ocean_area(area) ) { // interior of polygon is ocean, holes are islands SG_LOG( SG_GENERAL, SG_ALERT, "Ocean area ... SKIPPING!" ); @@ -866,7 +865,7 @@ int main( int argc, char **argv ) { // all other ocean data SHPDestroyObject( psShape ); continue; - } else if ( area == VoidArea ) { + } else if ( is_void_area(area) ) { // interior is ???? // skip for now @@ -878,7 +877,7 @@ int main( int argc, char **argv ) { } SHPDestroyObject( psShape ); continue; - } else if ( area == NullArea ) { + } else if ( is_null_area(area) ) { // interior is ???? // skip for now @@ -896,7 +895,7 @@ int main( int argc, char **argv ) { // interior of polygon is assigned to force_area_type, // holes are preserved - area = get_area_type( force_area_type ); + area = force_area_type; } switch (psShape->nSHPType) { diff --git a/src/Prep/TGVPF/tgvpf.cxx b/src/Prep/TGVPF/tgvpf.cxx index 9bd1b40e..5e3cfd3f 100644 --- a/src/Prep/TGVPF/tgvpf.cxx +++ b/src/Prep/TGVPF/tgvpf.cxx @@ -47,7 +47,6 @@ SG_USING_STD(vector); #include #include #include -#include #include #include @@ -285,7 +284,7 @@ main (int argc, const char **argv) // Default values tg::Rectangle bounds(Point3D(-180, -90, 0), Point3D(180, 90, 0)); bool invert = false; - AreaType material_type = DefaultArea; + string material_type = "Default"; int width = -1; // use default double max_segment = 0.0; // zero = no segement splitting string work_dir = "."; @@ -342,7 +341,7 @@ main (int argc, const char **argv) } else if (arg.find("--material=") == 0) { - material_type = get_area_type(arg.substr(11).c_str()); + material_type = arg.substr(11); argPos++; } @@ -437,7 +436,7 @@ main (int argc, const char **argv) cout << "Minimum area: " << min_area << endl; if (max_area > -1) cout << "Maximum area: " << max_area << endl; - cout << "Material type: " << get_area_name(material_type) << endl; + cout << "Material type: " << material_type << endl; if (width > -1) cout << "Point and line width: " << width << endl; for (unsigned int x = 0; x < attributes.size(); x++) { diff --git a/src/Prep/UserDef/tguserdef.cxx b/src/Prep/UserDef/tguserdef.cxx index 66f9fece..e3367fcd 100644 --- a/src/Prep/UserDef/tguserdef.cxx +++ b/src/Prep/UserDef/tguserdef.cxx @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -50,8 +49,7 @@ parse_point (const char * s, Point3D &p) static void add_point (SGPropertyNode_ptr node) { - AreaType material = - get_area_type(node->getStringValue("material", "Default")); + const string& poly_type=node->getStringValue("material", "Default"); Point3D p, dummy; const char * s = node->getStringValue("v"); s = parse_point(s, p); @@ -65,14 +63,13 @@ add_point (SGPropertyNode_ptr node) TGPolygon poly; tg::makePolygon(p, node->getIntValue("width", 500), poly); poly = tgPolygonInt(poly, bounds_poly); - tgChopNormalPolygon(".", material, poly, false); + tgChopNormalPolygon(".", poly_type, poly, false); } static void add_line (SGPropertyNode_ptr node) { - AreaType material = - get_area_type(node->getStringValue("material", "Default")); + const string& poly_type=node->getStringValue("material", "Default"); const char * s = node->getStringValue("v"); Point3D p; @@ -86,15 +83,14 @@ add_line (SGPropertyNode_ptr node) TGPolygon poly; tg::makePolygon(line, node->getIntValue("width", 10), poly); poly = tgPolygonInt(poly, bounds_poly); - tgChopNormalPolygon(".", material, poly, false); + tgChopNormalPolygon(".", poly_type, poly, false); } static void add_polygon (SGPropertyNode_ptr node) { TGPolygon poly; - AreaType material = - get_area_type(node->getStringValue("material", "Default")); + const string& poly_type=node->getStringValue("material", "Default"); vector contour_nodes = node->getChildren("contour"); for (unsigned int i = 0; i < contour_nodes.size(); i++) { SGPropertyNode_ptr contour_node = contour_nodes[i]; @@ -108,7 +104,7 @@ add_polygon (SGPropertyNode_ptr node) poly.set_hole_flag(i, contour_node->getBoolValue("hole", false)); } poly = tgPolygonInt(poly, bounds_poly); - tgChopNormalPolygon(".", material, poly, false); + tgChopNormalPolygon(".", poly_type, poly, false); } void