Another patch ...
This commit is contained in:
parent
a417092df1
commit
0367a7ed38
2 changed files with 128 additions and 10 deletions
63
src/Prep/ShapeFile/process.sh
Normal file
63
src/Prep/ShapeFile/process.sh
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Put the directory with your extracted shapefiles here
|
||||||
|
SHAPEBASE=/stage/fgfs05/curt/RawData/Collections/VPF-ShapeFile-User
|
||||||
|
|
||||||
|
WORKBASE=/stage/fgfs05/curt/Work
|
||||||
|
|
||||||
|
SHAPEDECODE="./shape-decode --continue-on-errors --max-segment 400"
|
||||||
|
|
||||||
|
# World land mass
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landmass_default ${WORKBASE}/Shape-LandMass Default
|
||||||
|
|
||||||
|
# Inland moving water: rivers/streams, intermittent streams, and canals
|
||||||
|
${SHAPEDECODE} --line-width 40 ${SHAPEBASE}/rivers_stream ${WORKBASE}/Shape-Rivers Stream
|
||||||
|
${SHAPEDECODE} --line-width 30 ${SHAPEBASE}/rivers_intermittentstream ${WORKBASE}/Shape-Rivers IntermittentStream
|
||||||
|
${SHAPEDECODE} --line-width 50 ${SHAPEBASE}/canals_stream ${WORKBASE}/Shape-Canals Stream
|
||||||
|
|
||||||
|
# Inland still water: lakes, intermittent lakes, and flood land
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/lakes_lake ${WORKBASE}/Shape-Lakes Lake
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/lakes_intermittentlake ${WORKBASE}/Shape-Lakes IntermittentLake
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/lakes_floodland ${WORKBASE}/Shape-Floodland FloodLand
|
||||||
|
|
||||||
|
# Population areas: cities and towns
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/cities_urban ${WORKBASE}/Shape-Cities Urban
|
||||||
|
${SHAPEDECODE} --point-width 400 ${SHAPEBASE}/cities_town ${WORKBASE}/Shape-Towns Town
|
||||||
|
|
||||||
|
# Forest: deciduous broad, evergreen broad, mixed
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_deciduousbroadcover ${WORKBASE}/Shape-LandCover DeciduousBroadCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_evergreenbroadcover ${WORKBASE}/Shape-LandCover EvergreenBroadCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_mixedforestcover ${WORKBASE}/Shape-LandCover MixedForestCover
|
||||||
|
|
||||||
|
# Ground cover: sand, tidal, lava, barren, grass, shrub, herb-tundra
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_sand ${WORKBASE}/Shape-LandCover Sand
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_marsh ${WORKBASE}/Shape-LandCover Marsh
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_lava ${WORKBASE}/Shape-LandCover Lava
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_barrencover ${WORKBASE}/Shape-LandCover BarrenCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_grasscover ${WORKBASE}/Shape-LandCover GrassCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_shrubcover ${WORKBASE}/Shape-LandCover ShrubCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_herbtundracover ${WORKBASE}/Shape-LandCover HerbTundraCover
|
||||||
|
|
||||||
|
# Ice cover: glaciers, pack ice, and sea ice
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_glacier ${WORKBASE}/Shape-LandCover Glacier
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_packice ${WORKBASE}/Shape-LandCover PackIce
|
||||||
|
# FiXME: Two glacier themes; have same name in database
|
||||||
|
# ${SHAPEDECODE} ${SHAPEBASE}/landcover_glacier ${WORKBASE}/Shape-LandCover Glacier
|
||||||
|
|
||||||
|
# Marshes: marsh and bog
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_marsh ${WORKBASE}/Shape-LandCover Marsh
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_bog ${WORKBASE}/Shape-LandCover Bog
|
||||||
|
|
||||||
|
# Crops: mixed pasture, dry crop, irrigated crop
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_mixedcroppasturecover ${WORKBASE}/Shape-LandCover MixedCropPastureCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_drycroppasturecover ${WORKBASE}/Shape-LandCover DryCropPastureCover
|
||||||
|
${SHAPEDECODE} ${SHAPEBASE}/landcover_irrcroppasturecover ${WORKBASE}/Shape-LandCover IrrCropPastureCover
|
||||||
|
|
||||||
|
# Roads: highway, freeway, trail
|
||||||
|
${SHAPEDECODE} --line-width 20m ${SHAPEBASE}/roads_road ${WORKBASE}/Shape-Roads Road
|
||||||
|
${SHAPEDECODE} --line-width 50m ${SHAPEBASE}/roads_freeway ${WORKBASE}/Shape-Roads Freeway
|
||||||
|
|
||||||
|
# Railroads: single and multiple tracks
|
||||||
|
${SHAPEDECODE} --line-width 10m ${SHAPEBASE}/railroads_railroad10 ${WORKBASE}/Shape-Roads Railroad
|
||||||
|
${SHAPEDECODE} --line-width 20m ${SHAPEBASE}/railroads_railroad20 ${WORKBASE}/Shape-Roads Railroad
|
||||||
|
|
|
@ -55,7 +55,8 @@ map<string,string> area_code_map;
|
||||||
int use_area_code_map=0;
|
int use_area_code_map=0;
|
||||||
int continue_on_errors=0;
|
int continue_on_errors=0;
|
||||||
int area_column=4,code_column=3;
|
int area_column=4,code_column=3;
|
||||||
int width_column=-1;
|
double max_segment = 0.0; // zero = no splitting
|
||||||
|
int width_column = -1;
|
||||||
|
|
||||||
void load_noaa_area_codes() {
|
void load_noaa_area_codes() {
|
||||||
area_code_map["Urban (1990 Enhanced)"]="Urban";
|
area_code_map["Urban (1990 Enhanced)"]="Urban";
|
||||||
|
@ -291,6 +292,9 @@ void processPolygon(SHPObject* psShape,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( max_segment > 1.0 ) {
|
||||||
|
shape = tgPolygonSplitLongEdges( shape, max_segment );
|
||||||
|
}
|
||||||
tgChopNormalPolygon(work_dir, area, shape, preserve3D);
|
tgChopNormalPolygon(work_dir, area, shape, preserve3D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,6 +333,10 @@ void processLine(SHPObject* psShape,
|
||||||
}
|
}
|
||||||
partEnd=psShape->panPartStart[iPart];
|
partEnd=psShape->panPartStart[iPart];
|
||||||
tg::makePolygon(line,linewidth,shape);
|
tg::makePolygon(line,linewidth,shape);
|
||||||
|
|
||||||
|
if ( max_segment > 1.0 ) {
|
||||||
|
shape = tgPolygonSplitLongEdges( shape, max_segment );
|
||||||
|
}
|
||||||
tgChopNormalPolygon(work_dir, area, shape, false);
|
tgChopNormalPolygon(work_dir, area, shape, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -351,6 +359,10 @@ void processPoints(SHPObject* psShape,
|
||||||
tg::makePolygon(Point3D(psShape->padfX[j],psShape->padfY[j],0),
|
tg::makePolygon(Point3D(psShape->padfX[j],psShape->padfY[j],0),
|
||||||
pointwidth,
|
pointwidth,
|
||||||
shape);
|
shape);
|
||||||
|
|
||||||
|
if ( max_segment > 1.0 ) {
|
||||||
|
shape = tgPolygonSplitLongEdges( shape, max_segment );
|
||||||
|
}
|
||||||
tgChopNormalPolygon(work_dir, area, shape, false);
|
tgChopNormalPolygon(work_dir, area, shape, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -359,15 +371,44 @@ void usage(char* progname) {
|
||||||
SG_LOG( SG_GENERAL, SG_ALERT, "Usage: " << progname
|
SG_LOG( SG_GENERAL, SG_ALERT, "Usage: " << progname
|
||||||
<< " [--line-width width] [--point-width width]"
|
<< " [--line-width width] [--point-width width]"
|
||||||
" [--area-column col] [--code-col col]"
|
" [--area-column col] [--code-col col]"
|
||||||
" [--line-width-column col ] "
|
" [--line-width-column col ] "
|
||||||
" [--continue-on-errors]"
|
" [--continue-on-errors] [--max-segment max_segment_length]"
|
||||||
|
" [--start-record num]"
|
||||||
" <shape_file> <work_dir> [ area_string ]" );
|
" <shape_file> <work_dir> [ area_string ]" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "Options:" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--line-width width" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Width in meters for the lines" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--point-width width" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Size in meters of the squares generated from points" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--max-segment max_segment_length" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Maximum segment length in meters" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--area-column col" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Get areatype for objects from column number col" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " in associated dbf-file (only if <area_string> is not given)" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--code-column col" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Get codetype for objects from column number col" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " in associated dbf-file" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " (currently code is only used in debug printouts)" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--continue-on-errors" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Continue even if the file seems fishy" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "--start-record" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Start processing at the specified record number (first record num=0)" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "<shape_file>" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Name of the shape-file to process, without .shp extension" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "<work_dir>" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Directory to put the polygon files in" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, "<area_string>" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " (Optional) Area type for all objects in file" );
|
||||||
|
SG_LOG( SG_GENERAL, SG_ALERT, " Overrides --area-column option if present" );
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main( int argc, char **argv ) {
|
int main( int argc, char **argv ) {
|
||||||
int i, j;
|
int i, j;
|
||||||
int pointwidth=500, linewidth=50, force_linewidth=-1;
|
int pointwidth = 500, linewidth = 50, force_linewidth = -1;
|
||||||
|
int start_record = 0;
|
||||||
char* progname=argv[0];
|
char* progname=argv[0];
|
||||||
SGPath programPath(progname);
|
SGPath programPath(progname);
|
||||||
string force_area_type = "";
|
string force_area_type = "";
|
||||||
|
@ -394,6 +435,12 @@ int main( int argc, char **argv ) {
|
||||||
pointwidth=atoi(argv[2]);
|
pointwidth=atoi(argv[2]);
|
||||||
argv+=2;
|
argv+=2;
|
||||||
argc-=2;
|
argc-=2;
|
||||||
|
} else if (!strcmp(argv[1],"--max-segment")) {
|
||||||
|
if (argc<3)
|
||||||
|
usage(progname);
|
||||||
|
max_segment=atoi(argv[2]);
|
||||||
|
argv+=2;
|
||||||
|
argc-=2;
|
||||||
} else if (!strcmp(argv[1],"--area-column")) {
|
} else if (!strcmp(argv[1],"--area-column")) {
|
||||||
if (argc<3)
|
if (argc<3)
|
||||||
usage(progname);
|
usage(progname);
|
||||||
|
@ -406,14 +453,22 @@ int main( int argc, char **argv ) {
|
||||||
code_column=atoi(argv[2]);
|
code_column=atoi(argv[2]);
|
||||||
argv+=2;
|
argv+=2;
|
||||||
argc-=2;
|
argc-=2;
|
||||||
|
} else if (!strcmp(argv[1],"--continue-on-errors")) {
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
continue_on_errors=1;
|
||||||
} else if (!strcmp(argv[1],"--line-width-column")) {
|
} else if (!strcmp(argv[1],"--line-width-column")) {
|
||||||
if (argc<3)
|
if (argc<3)
|
||||||
usage(progname);
|
usage(progname);
|
||||||
width_column=atoi(argv[2]);
|
width_column=atoi(argv[2]);
|
||||||
argv+=2;
|
argv+=2;
|
||||||
argc-=2;
|
argc-=2;
|
||||||
} else if (!strcmp(argv[1],"--continue-on-errors")) {
|
} else if (!strcmp(argv[1],"--start-record")) {
|
||||||
continue_on_errors=1;
|
if (argc<3)
|
||||||
|
usage(progname);
|
||||||
|
start_record=atoi(argv[2]);
|
||||||
|
argv+=2;
|
||||||
|
argc-=2;
|
||||||
} else if (!strcmp(argv[1],"--help")) {
|
} else if (!strcmp(argv[1],"--help")) {
|
||||||
usage(progname);
|
usage(progname);
|
||||||
} else
|
} else
|
||||||
|
@ -485,7 +540,7 @@ int main( int argc, char **argv ) {
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < nEntities; i++ ) {
|
for ( i = start_record; i < nEntities; i++ ) {
|
||||||
// fetch i-th record (shape)
|
// fetch i-th record (shape)
|
||||||
SHPObject *psShape;
|
SHPObject *psShape;
|
||||||
|
|
||||||
|
@ -496,7 +551,7 @@ int main( int argc, char **argv ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
SG_LOG( SG_GENERAL, SG_DEBUG, "Processing record = " << i
|
SG_LOG( SG_GENERAL, SG_INFO, "Processing record = " << i
|
||||||
<< " rings = " << psShape->nParts
|
<< " rings = " << psShape->nParts
|
||||||
<< " total vertices = " << psShape->nVertices );
|
<< " total vertices = " << psShape->nVertices );
|
||||||
|
|
||||||
|
@ -539,9 +594,9 @@ int main( int argc, char **argv ) {
|
||||||
} else
|
} else
|
||||||
linewidth = force_linewidth;
|
linewidth = force_linewidth;
|
||||||
|
|
||||||
SG_LOG( SG_GENERAL, SG_INFO, " record type = "
|
SG_LOG( SG_GENERAL, SG_DEBUG, " record type = "
|
||||||
<< SHPTypeName(psShape->nSHPType) );
|
<< SHPTypeName(psShape->nSHPType) );
|
||||||
SG_LOG( SG_GENERAL, SG_INFO, " bounds = ("
|
SG_LOG( SG_GENERAL, SG_DEBUG, " bounds = ("
|
||||||
<< psShape->dfXMin << "," << psShape->dfYMin << ") "
|
<< psShape->dfXMin << "," << psShape->dfYMin << ") "
|
||||||
<< psShape->dfZMin << "," << psShape->dfMMin
|
<< psShape->dfZMin << "," << psShape->dfMMin
|
||||||
<< " to (" << psShape->dfXMax << "," << psShape->dfYMax << ") "
|
<< " to (" << psShape->dfXMax << "," << psShape->dfYMax << ") "
|
||||||
|
|
Loading…
Reference in a new issue