Permalink
Browse files

eerste versie Top10NL extract tools en styles

  • Loading branch information...
1 parent 3f25207 commit c25c91ec8165c1e70a8efef42443dc74dc455a6f @justb4 justb4 committed Jan 9, 2012
View
674 LICENSE

Large diffs are not rendered by default.

Oops, something went wrong.
View
@@ -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
+
+
+
@@ -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
+
@@ -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;
+
@@ -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`"
View
@@ -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`"
@@ -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"
+
+
View
@@ -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`"
Oops, something went wrong.

0 comments on commit c25c91e

Please sign in to comment.