Sem PostGIS Roger: Unterschied zwischen den Versionen
(→Als KML speichern) |
(→Als KML speichern) |
||
Zeile 158: | Zeile 158: | ||
===Als KML speichern=== | ===Als KML speichern=== | ||
Die in PostGIS 1.3.1 implementierten AsKML-Funktionen geben keinen KML-Header aus. Daher wurde eine neue Funktion AsKLM(text, text, geometry) kreiert, die von Mark Neufeld zur Verfügung gestellt wird[http://www.mail-archive.com/postgis-users@postgis.refractions.net/msg01243.html]. Mit dieser Funktion wird die Ausgabe KML-konform formatiert<ref>Manchmal wurde im ausgegebenen KML am Zeilenanfang ein Leerzeichen geschrieben. In so einem Fall muss das erste Leerzeichen, vor dem Tag <?xml>, entfernt werden, damit es in Google Earth geladen werden kann.</ref>. | Die in PostGIS 1.3.1 implementierten AsKML-Funktionen geben keinen KML-Header aus. Daher wurde eine neue Funktion AsKLM(text, text, geometry) kreiert, die von Mark Neufeld zur Verfügung gestellt wird[http://www.mail-archive.com/postgis-users@postgis.refractions.net/msg01243.html]. Mit dieser Funktion wird die Ausgabe KML-konform formatiert<ref>Manchmal wurde im ausgegebenen KML am Zeilenanfang ein Leerzeichen geschrieben. In so einem Fall muss das erste Leerzeichen, vor dem Tag <?xml>, entfernt werden, damit es in Google Earth geladen werden kann.</ref>. | ||
+ | |||
+ | <references /> | ||
Version vom 31. Oktober 2007, 01:32 Uhr
Wiki-Seite zum Selbststudium im GISpunkt-Seminar PostGIS.
Inhaltsverzeichnis
Daten: Amtliche Vermessung Kanton Basel-Stadt
Verwendete Daten
Als Übungsdaten werden zwei Datensätze der amtlichen Vermessung des Kantons Basel-Stadt verwendet. Der eine Datensatz enthält die Rohrleitungen (Topic), der zweite die Bodenbedeckung (Topic), aus der im Laufe der Übung die Tankanlagen (Bodenbedeckungsart 17) extrahiert werden.
Die Datensätze liegen als Shapefiles Bodenbedeckung_merged.shp und Rohrleitungen.shp vor.
Metadaten-Record
Die Angabe beim DC-Element modified bezieht sich auf das Datum des Datenbezugs.
Rohrleitung
dc:title = Rohrleitung dct:abstract = Bestandteil des Datenmodells des Bundes. Beschreibt die geometrische Form und Lage der Rohrleitungen, die von übergeordneter Bedeutung für die Eigentumsverhältnisse sind. dc:format = INTERLIS, Shapefile dct:spatial = name=Kanton Basel-Stadt; northlimit=47.60200; southlimit==47.51858; eastlimit=7.69527; westlimit=7.55281 dct:modified = 2007-10-19 dc:publisher = Grundbuch- und Vermessungsamt Basel-Stadt dc:language = de dc:rights = Abgabebedingungen: Berechtigter Interessennachweis. Die Daten können aufgrund einer Benützungsbewilligung bezogen werden. Entsprechende Bezugsformulare sind auf www.gva.bs.ch erhältlich. Für die Verwendung der Daten gelten die allgemeinen Bedingungen für die Benützung von Geodaten des Grundbuch- und Vermessungsamtes Basel-Stadt.
Tankanlagen (Art der Bodenbedeckung)
dc:title = Bodenbedeckung dct:abstract = Bestandteil des Datenmodells des Bundes. Beschreibt die geometrische Form und Lage der Flächenarten mit einer Mindestfläche von in der Regel 100 m2 (Gebäude, befestigt, humusiert, bestockt, Gewässer, vegetationslos, etc.). dc:format = INTERLIS, Shapefile dct:spatial = name=Kanton Basel-Stadt; northlimit=47.60200; southlimit==47.51858; eastlimit=7.69527; westlimit=7.55281 dct:modified = 2007-10-19 dc:publisher = Grundbuch- und Vermessungsamt Basel-Stadt dc:language = de dc:rights = Abgabebedingungen: Die Daten können aufgrund einer Benützungsbewilligung bezogen werden. Entsprechende Bezugsformulare sind auf www.gva.bs.ch erhältlich. Für die Verwendung der Daten gelten die allgemeinen Bedingungen für die Benützung von Geodaten des Grundbuch- und Vermessungsamtes Basel-Stadt.
Laden des Datensatzes
Die vorliegenden Shapefiles Bodenbedeckung_merged.shp und Rohrleitungen.shp wurden mit shp2pgsql.exe in .sql-Files konvertiert, diese wiederum mit psql.exe in die PostGIS-Datenbank geladen.
Die Shapefiles wurden mit zwei Batchfiles in die Datenbank importiert: Das erste Batchfile übergibt die zu importierenden Files als Parameter an das zweite Batchfile:
echo ============================== echo Shapefile in PostGIS-DB laden echo ============================== echo. echo Übergibt Shapefilenamen (ohne echo Endung) an Hauptbatchfile. echo. set shp2pg_main="_shp2pg_main.bat" call %shp2pg_main% Bodenbedeckung_merged call %shp2pg_main% Rohrleitungen pause
Das zweite Batchfile lädt das so übergebene Shapefile in die Datenbank:
echo ============================== echo Shapefile in PostGIS-DB laden echo ============================== echo. echo Erwartet Shapefilename (ohne echo Endung) als Parameter (%1). echo. set shp2pgsql_exe="C:\Programme\PostgreSQL\8.2\bin\shp2pgsql.exe" set psql_exe="C:\Programme\PostgreSQL\8.2\bin\psql.exe" set srid="21781" set schema="public" set server="localhost" set dbname="postgis-seminar" set dbuser="postgres" echo -------------------- echo SQL-File erstellen echo -------------------- %shp2pgsql_exe% -s %srid% -I %1 %schema%.%1 > %1.sql echo ------------------- echo Daten in DB laden echo ------------------- %psql_exe% -h %server% -d %dbname% -U %dbuser% -f %1.sql
Unter Verwendung der UNIX-Pipes können Konvertierung und Laden in die Datenbank auch in einem Schritt durchgeführt werden (s. S. 62 in [1]).
Queries
Aufbereiten des Übungsdatensatzes Tankanlagen
Tankanlagen sind als Teil der Bodenbedeckung in der Tabelle bodenbedeckung_merged vorhanden. Für eine einfachere Handhabung werden Sie in eine separate Tabelle tankanla-gen ausgelagert. (Die Rohrleitungen sind bereits in Tabelle rohrleitungen aus dem Usprungs-datensatz rohrleitungen.shp vorhanden.)
-- SQL-Script: Tabelle_tankanlagen_erstellen_und_fuellen.sql -- Neue Tabelle tankanlagen mit Primary Key erstellen CREATE TABLE tankanlagen ( gid integer PRIMARY KEY, art_txt text, art text ); -- Geometriespalte the_geom hinzufügen SELECT AddGeometryColumn('public', 'tankanlagen', 'the_geom', 21781, 'MULTIPOLYGON', 2); -- Daten von Tabelle bodenbedeckung_merged in Tabelle tankanlagen importieren (Tankanlagen sind art = 17) INSERT INTO tankanlagen ( SELECT gid, art_txt, art, the_geom FROM bodenbedeckung_merged WHERE art = '17' ); -- Räumlichen Index für Tabelle tankanlagen erstellen CREATE INDEX tankanlagen_the_geom_gist ON tankanlagen USING gist (the_geom GIST_GEOMETRY_OPS); -- Statistiken für optimierte Abfragen anlegen VACUUM ANALYZE tankanlagen;
Umprojizieren (CH03->WGS84)
Die Daten sind ursprünglich im Koordinatensystem CH03/LV03 (EPSG-Code oder SRID 21781) vorhanden. Für den anschliessenden KML-Export müssen sie jedoch in geografische Koordinaten (WGS84, EPSG-Code 4326) transformiert werden. Zu Übungszwecken wird auf zwei Arten projiziert, einmal anhand einer zweiten Geometriespalte (Rohrleitungen), und einmal on-the-fly (Tankanlagen; s. Abschn. "Als KML speichern").
Rohrleitungen
Neben der schon vorhandenen Geometriespalte the_geom mit SRID 21781, wird für den an-schliessenden KLM-Export eine zweite Geometriespalte mit dem SRID 4326 hinzugefügt. Doppeltes Ablegen von Geometrien kann bei häufigen Abfragen Sinn machen.
-- Zweite Geometriespalte mit EPSG-Code 4326 (WGS84) hinzufügen SELECT AddGeometryColumn('public', 'rohrleitungen', 'the_geom_4326', 4326, 'MULTILINESTRING', 2) -- Neue Geometriespalte the_geom_4326 füllen UPDATE rohrleitungen SET the_geom 4326 = transform(the_geom, 4326); -- Räumlichen Index für Tabelle rohrleitungen (the_geom_4326) -- erstellen CREATE INDEX rohrleitungen_the_geom_4326_gist ON rohrleitungen USING gist (the_geom_4326 GIST_GEOMETRY_OPS); -- Statistiken für optimierte Abfragen anlegen VACUUM ANALYZE rohrleitungen;
Tankanlagen
Die Daten in der Tabelle tankanlagen werden bei der KML-Generierung on-the-fly in WGS84 umprojiziert (s. Abschn. "Als KML speichern").
Als KML speichern
Die in PostGIS 1.3.1 implementierten AsKML-Funktionen geben keinen KML-Header aus. Daher wurde eine neue Funktion AsKLM(text, text, geometry) kreiert, die von Mark Neufeld zur Verfügung gestellt wird[2]. Mit dieser Funktion wird die Ausgabe KML-konform formatiert<ref>Manchmal wurde im ausgegebenen KML am Zeilenanfang ein Leerzeichen geschrieben. In so einem Fall muss das erste Leerzeichen, vor dem Tag <?xml>, entfernt werden, damit es in Google Earth geladen werden kann.</ref>.
<references />