Changes between Version 2 and Version 3 of ATKIS


Ignore:
Timestamp:
08/03/11 17:32:22 (13 years ago)
Author:
armin.retterath
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ATKIS

    v2 v3  
    1 = Aufbau der ATKIS Tabellenstruktur =  
    2 Im SVN-Repository von PostNAS finden Sie die Datei '''atkis_rp_PostNAS_0.6_schema.sql''', mit der die komplette PostNAS-Tabellenstruktur aufgebaut werden kann: 
     1= Aufbau einer ATKIS Datenbank =  
     2 
     3== Erzeugen einer Postgres Datenbank == 
     4=== Erstellen eines Templates ===  
     5Beispiel für Debian Squeeze - Postgres 8.4/Postgis 1.5 - Cluster auf Port 5433 
     6Als user postgres 
     7{{{ 
     8createdb -E UTF8 -T template0 -p 5433 postgisutf8 
     9createlang plpgsql -p 5433 postgisutf8 
     10psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql -p 5433 postgisutf8 
     11psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql -p 5433 postgisutf8 
     12}}} 
     13=== Erzeugen der Datenbank aus Template === 
     14Als user postgres 
     15{{{ 
     16createdb -E UTF8 -T postgisutf8 -p 5433 atkis 
     17}}} 
     18 
     19=== Import der initialen Tabellenstruktur === 
     20Im SVN-Repository von PostNAS finden Sie die Datei '''atkis_rp_PostNAS_0.6_schema.sql''', mit der die komplette ATKIS PostNAS-Tabellenstruktur aufgebaut werden kann: 
    321http://trac.wheregroup.com/PostNAS/browser/trunk/data/konvert/postnas_0.6/atkis_rp_PostNAS_0.6_schema.sql?format=raw 
     22Laden Sie die Datei auf Ihren Rechner und spielen Sie dieses Schema in Ihre neue Datenbank ein: 
     23{{{ 
     24psql -U postgres -d atkis -f atkis_rp_PostNAS_0.6_schema.sql 
     25}}} 
     26=== Import der Erstausstattung in die DB === 
     27Die NAS Daten liegen meist als gezippte Einzelkacheln vor. In RP sind es ca 250 einzelne Dateien. Um diese zu importieren, bietet sich ein kleines Shellscript wie das folgende an (die Daten müssen vorher entpackt werden - das danach für RP 12GB an XML-Files): 
     28{{{ 
     29#!/bin/sh 
     30#Do this as user 
     31#This script imports all xml files into the postgresdatabase 
     32# 
     33dbname="atkis" 
     34dbport="5433" 
     35dbuser="atkis_user" 
     36dbpassword="atkis_user" 
     37logfile="postnas_import.log" 
     38folder="/data/atkis/unzipped" 
     39cd $folder 
     40for nasfile in 1Spatial_rlp_nba_20110627T000000_*.xml 
     41do 
     42{ 
     43time /data/gdal-trunk/gdal/apps/ogr2ogr -f "PostgreSQL" -append  PG:"dbname=$dbname user=$dbuser host=localhost port=$dbport password=$dbpassword"  $folder/$nasfile 2>> postnas_error.log 
     44} 
     45done 
     46}}} 
     47=== Update der Daten über NBA === 
     48Die Updates werden ebenfalls kachelweise geliefert. Wie auch schon bei den ALKIS Daten beschrieben, geschieht der Update Prozess in mehreren Schritten: 
    449 
    5 Laden Sie die Datei auf Ihren Rechner und spielen Sie dieses Schema in Ihre neue Datenbank: 
     50==== Anlegen einer Löschtabelle ==== 
     51 
    652{{{ 
    7 psql -U postgres -d postnas_test -f atkis_rp_PostNAS_0.6_schema.sql 
     53-- Table: "delete" 
     54 
     55-- DROP TABLE "delete"; 
     56 
     57CREATE TABLE "delete" 
     58( 
     59  ogc_fid serial NOT NULL, 
     60  typename character(255), 
     61  featureid character(255), 
     62  CONSTRAINT delete_pk PRIMARY KEY (ogc_fid) 
     63) 
     64WITH ( 
     65  OIDS=FALSE 
     66); 
     67ALTER TABLE "delete" OWNER TO atkis_user; 
     68 
     69INSERT INTO geometry_columns (f_table_catalog,f_table_schema,f_table_name,f_geometry_column,coord_dimension,srid,type) VALUES ('','public','delete','dummy',2,25832,'POINT'); 
    870}}} 
     71 
     72==== Erzeugen von Indizes auf der Tabelle alkis_beziehungen ==== 
     73 
     74{{{ 
     75CREATE INDEX alkis_beziehungen_von_idx ON alkis_beziehungen (beziehung_von); 
     76 
     77CREATE INDEX alkis_beziehungen_zu_idx ON alkis_beziehungen (beziehung_zu); 
     78 
     79vacuum analyze; 
     80}}} 
     81 
     82==== Import der Löschdatensätze (Delete) in die Löschtabelle per Shellscript ==== 
     83 
     84{{{ 
     85#!/bin/sh 
     86#Do this as user postgres 
     87#This script imports all xml files into the postgresdatabase 
     88# 
     89dbname="atkis" 
     90dbport="5433" 
     91dbuser="atkis_user" 
     92dbpassword="atkis_user" 
     93logfile="postnas_nba_import.log" 
     94folder="/data/atkis/nba/0000064U/unzipped" 
     95cd $folder 
     96for nasfile in 1Spatial_rlp_nba_20110727T000000_*.xml 
     97 do 
     98{ 
     99time /data/gdal-trunk/gdal/apps/ogr2ogr -f "PostgreSQL"  -append PG:"dbname=$dbname user=$dbuser host=localhost port=$dbport password=$dbpassword" $folder/$nasfile Delete 2>> $logfile 
     100} 
     101done 
     102}}} 
     103 
     104==== Löschen der Elemente aus der Löschtabelle ==== 
     105Die Objekte und die relationen lassen sich mit der Funktion, die auch für die ALKIS Daten verwendet wird per SQL aus der Datenbank entfernen: 
     106{{{ 
     107-- Function: deletefeature(text, text) 
     108 
     109-- DROP FUNCTION deletefeature(text, text); 
     110 
     111CREATE OR REPLACE FUNCTION deletefeature(typename text, featureid text) 
     112  RETURNS text AS 
     113$BODY$  
     114 DECLARE  
     115  query text; 
     116  res text;  
     117 BEGIN  
     118     query := 'DELETE FROM ' || $1 || ' WHERE gml_id = ''' || $2 || ''''; 
     119     EXECUTE query; 
     120     query := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || $2 || ''' OR beziehung_zu = ''' || $2 || ''''; 
     121     EXECUTE query; 
     122 
     123     IF FOUND THEN  
     124        RAISE NOTICE 'query successfull % ', query;  
     125        res := 1; 
     126     ELSE  
     127        RAISE NOTICE 'query no object found % ', query;  
     128        res := 0; 
     129     END IF;  
     130  RETURN res;  
     131 END;  
     132$BODY$ 
     133  LANGUAGE plpgsql VOLATILE 
     134  COST 100; 
     135}}} 
     136SQL: 
     137{{{ 
     138SELECT deleteFeature(typename, featureid) AS deletefeature FROM delete; 
     139}}}