0.1. Georeferenzierung mit Google Maps und Überführung in relationales Datenformat für Import in MySQL-Datenbank
0.1.1. 1. Karte in Google Maps erstellen:
Erforderlich ist ein Google-Account. Der Aufruf erfolgt über https://www.google.com/maps/d/?hl=de&authuser=0&action=open.
0.1.1.1. Schritt 1: Angabe eines Kartentitels, eines Kommentars zur Karte als ganzer, Setzen von Markierungen (Punkte, Linien oder Polygone):
0.1.1.2. Schritt 2: Bezeichnung einer gesetzten Markierung und Beigabe eines Kommentars in strukturierter Form
0.1.1.3. Schritt 3: Export der Googlekarte in eine KML-Datei
Struktur der exportierten KML-Datei:
0.1.2. 2. Umwandlung der KML-Datei in CSV-Datei mittels XQuery durch Ausführung des XQuery-Codes mit Programm XQuery.exe (download) und Import in die Datenbank VA_xxx
ACHTUNG: Die Tags "<kml xmlns='http://www.opengis.net/kml/2.2'>" und "</kml>" müssen in der KML-Datei gelöscht werden! Die Umwandlung mit XQuery.exe funktioniert sonst nicht. Die vollständige Prozedur ist in einem sog. Shell-Skript (\\allshares\...\VerbaAlpina\import_mapdata\bin\import_maps.sh) zusammengefasst und dadurch weitgehend automatisiert. Code der Datei kml2csv.xql (XQuery-Code):
declare function local:reduceDim ($str as xs:string) as xs:string { let $res := substring(replace($str, '(\d*(\.\d*)?),(\d*(\.\d*)?),(\d*(\.\d*)?) ?', ",$1 $3"), 2) return $res }; let $doc := doc("../in/mapdata.kml")/Document let $nameG := replace($doc/name, '"', '""') let $comment := replace($doc/description, '"', '""') for $mark in $doc//Placemark return concat ( $nameG, '###', $comment, '###', replace($mark//name, '"', '""'), '###', replace($mark//description, '"', '""'), '###', (if ($mark//Point) then concat ("POINT(", local:reduceDim($mark//coordinates), ')') else if ($mark//LineString) then concat ("LINESTRING(", local:reduceDim($mark//coordinates), ')') else concat ("POLYGON((", local:reduceDim($mark//coordinates), '))')), '
' )
Code der Datei import_maps.sh:
#!/bin/bash HDIR="/cygdrive/y/fakultaet13/Romanistik/VerbaAlpina/import_mapdata" export HDIR PDIR="$HDIR/bin" export PDIR IN="$HDIR/in" export IN OUT="$HDIR/out" export OUT cd $PDIR echo "Converting kml-file to csv-file ..." echo "" sed -i "s/<kml xmlns='http:\/\/www.opengis.net\/kml\/2.2'>//g" $IN/mapdata.kml sed -i "s/<\/kml>//g" $IN/mapdata.kml xquery -o mapdata.csv kml2csv.xql sed -i 's/<?xml version="1.0" encoding="UTF-8"?>//g' mapdata.csv sed -i 's/^[ \t]*//g' mapdata.csv sed -i 's/[ \t]*$//g' mapdata.csv mv mapdata.csv $OUT echo "" echo "Truncating table import_maps ..." echo "" mysql --defaults-file=~/.my.cnf -h gwi-sql2.gwi.uni-muenchen.de -P 3306 va_xxx -u slu --execute "truncate table import_maps;" echo "" echo "Importing data into table import_maps ..." echo "" cd $OUT mysql --defaults-file=~/.my.cnf -h gwi-sql2.gwi.uni-muenchen.de -P 3306 va_xxx -u slu --execute "load data local infile 'mapdata.csv' into table import_maps fields terminated by '###' (col1,col2,col3,col4,col5);" echo "" echo "Transfering data to tables kommentare_orte and orte3 ..." echo "" mysql --defaults-file=~/.my.cnf -s -h gwi-sql2.gwi.uni-muenchen.de -P 3306 va_xxx -u slu --execute "insert into kommentare_orte (kategorie,kommentar_d,autor,timestamp) SELECT substring_index(col1,' # Autor: ',1) as Kategorie, col2 as kommentar_D, substring_index(col1,' # Autor: ',-1) as Autor, timestamp FROM import_maps limit 1; insert into orte3 (kategorie,name,beschreibung,geodaten,id_kommentar) SELECT substring_index(col1,' # Autor: ',1) as Kategorie, col3 as Name, col4 as Beschreibung, geomfromtext(col5) as Geodaten, last_insert_id() FROM import_maps; CALL zorte();" echo "" echo "... finished." echo "" exit 0
In der Datenbank werden die Daten der Karten in zwei Tabellen gespeichert. Die Informationen zur Karte als Ganzes werden in die Tabelle kommentare_orte geschrieben:
Die Tabelle orte3 enthält sämtliche Markierungen der Gesamtkarte samt Kommentaren zu den Einzelpunkten (-linien, -polygonen). Der Zusammenhang zwischen den beiden Tabellen ist durch den gemeinsamen Wert im Feld id_kommentar hergestellt: