107 lines
4.2 KiB
Bash
107 lines
4.2 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Due to some limitations of the SHP file format
|
|
# (filesize must be < 2 GB) only the SHP files
|
|
# for the german states are available at geofabrik.de.
|
|
#
|
|
# This script download, import and merge the 16 german
|
|
# states into the database $database
|
|
#
|
|
# Author: Jan Nidzwetzki
|
|
#####################################################
|
|
|
|
# The base url
|
|
baseurl="http://download.geofabrik.de/europe/germany/"
|
|
|
|
# The regions to download
|
|
regions="baden-wuerttemberg bayern berlin brandenburg bremen hamburg hessen mecklenburg-vorpommern niedersachsen nordrhein-westfalen rheinland-pfalz saarland sachsen sachsen-anhalt schleswig-holstein thueringen"
|
|
|
|
# The name of the database in SECONDO
|
|
database="germany"
|
|
|
|
# Datadir
|
|
datadir="osm-germany"
|
|
|
|
cd $SECONDO_BUILD_DIR/bin
|
|
|
|
if [ ! -x ./SecondoBDB ]; then
|
|
echo "You are not inside the SECONDO dir, exting..."
|
|
exit -1
|
|
fi
|
|
|
|
if [ ! -d $datadir ]; then
|
|
echo "Creating the download directory"
|
|
mkdir osm-germany
|
|
fi
|
|
|
|
cd $datadir
|
|
|
|
# Create the secondo script
|
|
tmpfile=$(mktemp)
|
|
echo "create database $database;" > $tmpfile
|
|
echo "open database $database;" >> $tmpfile
|
|
|
|
# Remove invaid chars for region names
|
|
secondo_regions=$(echo $regions | sed s/-//g)
|
|
|
|
# Import the regions
|
|
for region in $regions; do
|
|
# Download the region if needed
|
|
if [ ! -d $region ]; then
|
|
mkdir $region
|
|
cd $region
|
|
filename="$region-latest-free.shp.zip"
|
|
echo "Downloading region $region"
|
|
wget $baseurl/$filename
|
|
unzip $filename
|
|
cd ..
|
|
fi
|
|
|
|
# Remove invaid chars for region name
|
|
secondo_region=$(echo $region | sed s/-//g)
|
|
|
|
echo "delete Natural_$secondo_region;" >> $tmpfile
|
|
echo "delete Roads_$secondo_region;" >> $tmpfile
|
|
echo "delete Buildings_$secondo_region;" >> $tmpfile
|
|
|
|
echo "let Natural_$secondo_region = dbimport2('../bin/$datadir/$region/gis_osm_natural_free_1.dbf') addcounter [No , 1] shpimport2 ('../bin/$datadir/$region/gis_osm_natural_free_1.shp') namedtransformstream [GeoData ] addcounter [No2, 1] mergejoin [No, No2] remove [No, No2 ] filter [ isdefined ( bbox(.GeoData ))] validateAttr consume;" >> $tmpfile
|
|
echo "let Roads_$secondo_region = dbimport2('../bin/$datadir/$region/gis_osm_roads_free_1.dbf') addcounter [No , 1] shpimport2 ('../bin/$datadir/$region/gis_osm_roads_free_1.shp') namedtransformstream [GeoData ] addcounter [No2, 1] mergejoin [No, No2] remove [No, No2 ] filter [ isdefined ( bbox(.GeoData ))] validateAttr consume;" >> $tmpfile
|
|
echo "let Buildings_$secondo_region = dbimport2('../bin/$datadir/$region/gis_osm_buildings_a_free_1.dbf') addcounter [No , 1] shpimport2 ('../bin/$datadir/$region/gis_osm_buildings_a_free_1.shp') namedtransformstream [GeoData ] addcounter [No2, 1] mergejoin [No, No2] remove [No, No2 ] filter [ isdefined ( bbox(.GeoData ))] validateAttr consume;" >> $tmpfile
|
|
echo "let Landuse_$secondo_region = dbimport2('../bin/$datadir/$region/gis_osm_landuse_a_free_1.dbf') addcounter [No , 1] shpimport2 ('../bin/$datadir/$region/gis_osm_landuse_a_free_1.shp') namedtransformstream [GeoData ] addcounter [No2, 1] mergejoin [No, No2] remove [No, No2 ] filter [ isdefined ( bbox(.GeoData ))] validateAttr consume;" >> $tmpfile
|
|
done
|
|
|
|
# Merge regions
|
|
arr=($secondo_regions)
|
|
firstregion=${arr[0]};
|
|
echo "delete Natural;" >> $tmpfile
|
|
echo "delete Roads;" >> $tmpfile
|
|
echo "delete Buildings;" >> $tmpfile
|
|
echo "delete Landuse;" >> $tmpfile
|
|
|
|
natural="let Natural=Natural_$firstregion feed "
|
|
roads="let Roads=Roads_$firstregion feed "
|
|
buildings="let Buildings=Buildings_$firstregion feed "
|
|
landuse="let Landuse=Landuse_$firstregion feed "
|
|
|
|
for ((i=1; i<${#arr[*]}; i++)); do
|
|
natural="$natural Natural_${arr[i]} feed concat "
|
|
roads="$roads Roads_${arr[i]} feed concat "
|
|
buildings="$buildings Buildings_${arr[i]} feed concat "
|
|
landuse="$landuse Landuse_${arr[i]} feed concat "
|
|
done
|
|
echo "$natural trimAllUndef consume;" >> $tmpfile
|
|
echo "$roads trimAllUndef consume;" >> $tmpfile
|
|
echo "$buildings trimAllUndef consume;" >> $tmpfile
|
|
echo "$landuse trimAllUndef consume;" >> $tmpfile
|
|
|
|
# Create forest region
|
|
echo "delete Forest;" >> $tmpfile
|
|
echo "let Forest = Landuse feed filter[.Fclass contains 'forest'] consume;" >> $tmpfile
|
|
|
|
# Create database in SECONDO
|
|
cat $tmpfile
|
|
cd $SECONDO_BUILD_DIR/bin
|
|
./SecondoBDB -i $tmpfile
|
|
rm $tmpfile
|
|
|