Skip to content

Commit

Permalink
eerste versie Top10NL extract tools en styles
Browse files Browse the repository at this point in the history
  • Loading branch information
justb4 committed Jan 9, 2012
1 parent 3f25207 commit c25c91e
Show file tree
Hide file tree
Showing 20 changed files with 5,129 additions and 0 deletions.
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

57 changes: 57 additions & 0 deletions top10nl/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Hier staan de tools om Top10NL leveringen van Kadaster (GML) om te zetten naar o.a. PostGIS
en te visualiseren.

Uitleg
------

Top10NL wordt geleverd door Het Kadaster als een .zip file van plm 2GB. Daarin zit weer een zipfile
en een PDF (zie doc/TOP10NL_GML_Bestandswijzer_2011.pdf).

In de resulterende zipfile, genaamd iets als TOP10NL_GML_blokken_landsdekkend_01-11-2011.zip
zitten plm 110 GML bestanden. Ieder GML bestand komt overeen met een "kaartblad"
(zie doc/TOP10NL_GML_Bestandswijzer_2011.pdf ) met daarin alle Top10NL objecten voor dat gebied.
Er zijn 14 typen Top10NL objecten. Zie ook de beschrijving in doc/structuur-top10nl-0.2.pdf.

In eerste instantie converteren/laden we de GML naar PostGIS. Dit gebeurt met de GDAL/OGR tool
ogr2ogr. Echter er zijn 2 belangrijke zaken die dit lastig maken:

- meerdere geometrieen per object, bijv een Waterdeel GML element kan een lijn en een vlak bevatten
- meerdere voorkomens van een attribuut (attribute multiplicity), bijv. een Wegdeel GML element
kan meerdere element-attributen genaamd "nwegNummer" bevatten

Om het eerste probleem op te lossen worden middels een XSLT script (bin/top10-split-geom.xsl) de GML
elementen uitgesplitst naar geometrie, zodat ieder element een enkele geometrie bevat. Bijvoorbeeld
Wegdeel kent maar liefst 5 geometrie attributen. Dit wordt opgesplitst naar Wegdeel_Lijn, Wegdeel_Vlak etc.
Een nieuw GML bestand wordt hiermee opgebouwd. Vervolgens wordt via ogr2ogr dit uitgesplitste GML bestand
in PostGIS geladen.

Installatie
-----------
GDAL 1.8 minimaal is vereist. Voor XSLT dient "xsltproc" te worden geinstalleerd. Op Ubuntu
kan dit met apt-get install xsltproc. Op MacOSX kan xsltproc bijv. via MacPorts of andere Unix tools
worden geinstalleerd.

Testen
------
Het beste is eerst te testen als volgt:

- pas bin/top10-settings.sh aan voor je lokale situatie
- maak een lege database aan met PostGIS template bijv. "top10nl" (createdb -T postgis)
- in test/ directory executeer ./top10-test.sh

Hoe te gebruiken ?
------------------
Onder bin/ staan shell-scripts om de conversies (ook wel ETL, Extract Transform Load geheten) te doen.

top10-extract.sh - converteert 1 enkele GML file naar PostGIS, deze roept 2 scripts aan
top10-split.sh - geometrieen uitsplitsen en
top10-ogr2ogr.sh - via ogr2ogr GML in PostGIS laden

TODO
----

Scripts voor Windows. Onder Windows is er een standaard MSDOS tool msxsl.exe beschikbaar.
Zie http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21714



11 changes: 11 additions & 0 deletions top10nl/bin/top10-drop-tables.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh
#
# clean existing tables
# Author: Just van den Broecke

BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`

. $BASEDIR/bin/top10-settings.sh
psql -d $PG_DB -f $BASEDIR/bin/top10-drop-tables.sql

28 changes: 28 additions & 0 deletions top10nl/bin/top10-drop-tables.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
DROP TABLE IF EXISTS wegdeel_vlak;
DROP TABLE IF EXISTS wegdeel_lijn;
DROP TABLE IF EXISTS wegdeel_punt;
DROP TABLE IF EXISTS wegdeel_hartlijn;
DROP TABLE IF EXISTS wegdeel_hartpunt;
DROP TABLE IF EXISTS functioneelgebied_punt;
DROP TABLE IF EXISTS gebouw_vlak;
DROP TABLE IF EXISTS terrein_vlak;
DROP TABLE IF EXISTS waterdeel_lijn;
DROP TABLE IF EXISTS waterdeel_vlak;

DROP TABLE IF EXISTS geografischgebied_punt;
DROP TABLE IF EXISTS hoogteofdiepte_punt;
DROP TABLE IF EXISTS hoogteverschilhz_lijn;
DROP TABLE IF EXISTS hoogteverschillz_lijn;
DROP TABLE IF EXISTS isohoogte_lijn;
DROP TABLE IF EXISTS kadeofwal_lijn;
DROP TABLE IF EXISTS registratiefgebied_vlak;
DROP TABLE IF EXISTS spoorbaandeel_lijn;
DROP TABLE IF EXISTS spoorbaandeel_punt;

DROP TABLE IF EXISTS waterdeel;
DROP TABLE IF EXISTS wegdeel;
DROP TABLE IF EXISTS functioneelgebied;
DROP TABLE IF EXISTS gebouw;
DROP TABLE IF EXISTS terrein;
DELETE FROM geometry_columns;

21 changes: 21 additions & 0 deletions top10nl/bin/top10-extract.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/sh
#
# Auteur: Just van den Broecke
# Volledig Top10NL GML bestand naar PostGIS brengen.
# pas top10-settings.sh aan voor specifieke opties

echo "BEGIN top10-extract.sh: `date`"

BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`

GML_FILE=$1
GML_FILE_SPLIT=${GML_FILE}.split.gml

# GML geometrie uitsplitsen met XSLT
$BASEDIR/bin/top10-split.sh $GML_FILE $GML_FILE_SPLIT

# GML naar bijv. PostGIS met ogr2ogr
$BASEDIR/bin/top10-ogr.sh $GML_FILE_SPLIT

echo "EIND top10-extract.sh: `date`"
23 changes: 23 additions & 0 deletions top10nl/bin/top10-ogr.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/sh
# Auteur: Just van den Broecke
# ogr2ogr commando executie
# pas top10-settings.sh aan voor specifieke opties

echo "BEGIN top10-ogr: `date`"

BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`

. $BASEDIR/bin/top10-settings.sh

# Transformeren ?
if [ -n "$OGR_TSRS" ]
then
OGR_TSRS="-t_srs $OGR_TSRS"
fi

echo "ogr2ogr $OGR_OVERWRITE_OR_APPEND -f $OGR_OUT_FORMAT "$OGR_OUT_OPTIONS" $OGR_GT $OGR_OPT_MULTIATTR $OGR_LCO -a_srs $OGR_ASRS $OGR_TSRS -s_srs $OGR_SSRS $1"
ogr2ogr $OGR_OVERWRITE_OR_APPEND -f $OGR_OUT_FORMAT "$OGR_OUT_OPTIONS" $OGR_GT $OGR_OPT_MULTIATTR $OGR_LCO -a_srs $OGR_ASRS $OGR_TSRS -s_srs $OGR_SSRS $1


echo "EIND top10-ogr: `date`"
51 changes: 51 additions & 0 deletions top10nl/bin/top10-settings.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/sh
#
# Auteur: Just van den Broecke
#
# Instellingen voor top10 tools zoals GDAL ogr2ogr
# Verander voor je eigen omgeving.

# PostgreSQL/PostGIS database
PG_HOST=localhost
PG_DB=top10nl
PG_PORT=5432
PG_USER=postgres
PG_PASSWORD=postgres

# Wat te doen met meervoudig-voorkomende elementen als "nwegnummer"
# 3 mogelijkheden:
# 1) niets doen: wordt char[] array in postgres (OGR_OPT_MULTIATTR leeg) (hier kan bijv GeoServer niet mee omgaan!)
# 2) lijst in 1 enkele string (-fieldTypeToString StringList)
# 3) meerdere kolommen met ieder 1 waarde bijv. typeweg1, typeweg2 etc. (-splitlistfields) (kost aanzienlijk meer processing tijd)
OGR_OPT_MULTIATTR="-fieldTypeToString StringList"
# OGR_OPT_MULTIATTR=-splitlistfields
# OGR_OPT_MULTIATTR=

# Bron SRS, altijd NL RD epsg:28992
OGR_SSRS=epsg:28992

# Ken deze SRS toe aan resultaat
OGR_ASRS=epsg:28992

# Evt transformeren naar bijv Google (epsg:900913) of WGS84 (epsg:4326)
OGR_TSRS=

# In theorie kunnen we ook naar andere formaten converteren, bijv. ESRI Shape
OGR_OUT_FORMAT=PostgreSQL
OGR_OUT_OPTIONS="PG:dbname=$PG_DB host=$PG_HOST port=$PG_PORT user=$PG_USER password=$PG_PASSWORD"

# PostgreSQL Layer Creation (-lco) opties
OGR_LCO="-lco PG_USE_COPY=YES -lco PRECISION=NO"
# -lco PGSQL_OGR_FID=fid (werkt niet)

# Overwrite of append
OGR_OVERWRITE_OR_APPEND="-append"

# Aantal records per transactie
OGR_GT="-gt 65536"

# In onderzoek...dit zou de mogelijkheid moeten geven geometrie uit te splitsen zodat we
# de XSLT niet nodig zouden hebben. Werkt in ieder geval niet in GDAL 1.8.1
# OGR_SQL="-sql "select * from waterdeel where OGR_GEOMETRY = 'LINESTRING'" -dialect OGRSQL"


17 changes: 17 additions & 0 deletions top10nl/bin/top10-split.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/sh
#
# Auteur: Just van den Broecke
# xsltproc commando executie
# pas top10-settings.sh aan voor specifieke opties

echo "BEGIN top10-split: `date`"


BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`

. $BASEDIR/bin/top10-settings.sh

nice xsltproc --maxdepth 50000 $BASEDIR/bin/top10-split.xsl $1 > $2

echo "EIND top10-split: `date`"
Loading

0 comments on commit c25c91e

Please sign in to comment.