<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>goblor grübelt &#187; OpenStreetMap</title>
	<atom:link href="http://goblor.de/wp/tag/openstreetmap/feed/" rel="self" type="application/rss+xml" />
	<link>http://goblor.de/wp</link>
	<description>Ein unabhängiges Denker-Blog aus Karlsruhe</description>
	<lastBuildDate>Tue, 13 Apr 2010 10:19:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen</title>
		<link>http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/</link>
		<comments>http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 12:04:41 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Digital]]></category>
		<category><![CDATA[Forschung und Technik]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM-Projekt]]></category>
		<category><![CDATA[Stored Procdures]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=974</guid>
		<description><![CDATA[Im 2. Teil des Projektes soll es darum gehen, einen gerichteten Graphen aus den in Teil 1 in die Datenbank eingelesenen OpenStreetMap-Daten zu erstellen, mit dem später z.B. eine Wegsuche realisiert werden kann.
In Bild1 ist  Beispielhaft ein Ausschnitt aus einer möglichen Karte aus den Rohdaten zu sehen, die allerdings für eine Wegsuche viele unnötige Knoten [...]]]></description>
			<content:encoded><![CDATA[<p>Im 2. Teil des Projektes soll es darum gehen, einen <a title="de.wikipedia.org: Gerichteter Graph" href="http://de.wikipedia.org/wiki/Graph_%28Graphentheorie%29#Gerichtete_Graphen">gerichteten Graphen</a> aus den in <a title="OpenStreetMap-Projekt: Teil1 – Openstreetmap-Daten in MySQL-Datenbank einlesen" href="http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/">Teil 1</a> in die Datenbank eingelesenen OpenStreetMap-Daten zu erstellen, mit dem später z.B. eine Wegsuche realisiert werden kann.</p>
<div class="imagebox"><div class="image"><a href="http://goblor.de/wp/wp-content/uploads/2009/10/Wegbeispiel.png"><img class="size-full wp-image-976" title="Wegbeispiel" src="http://goblor.de/wp/wp-content/uploads/2009/10/Wegbeispiel.png" alt="Bild1: Beispiel-Darstellung von einigen Wegen nach OSM-Schema" width="640" height="400" /></a></div><div class="imgcaption">Bild1: Beispiel-Darstellung von einigen Wegen nach OSM-Schema</div></div>
<p>In Bild1 ist  Beispielhaft ein Ausschnitt aus einer möglichen Karte aus den Rohdaten zu sehen, die allerdings für eine Wegsuche viele unnötige Knoten enthält und deren Datenstruktur für unsere Zwecke nicht sonderlich praktisch ist. Wir brauchen für die Wegsuche nur die Weglänge zwischen zwei verbundenen End- oder Kreuzungs-Knoten.<span id="more-974"></span></p>
<p>Die Knoten 3, 4, 6, 9 und 10 brauchen wir nicht.<br />
Prinzipiell ist auch Knoten 1 nicht notwendig, wenn der rote Weg eine Einbahnstraße ist und der braune jedoch nicht oder auf einer der beiden Straßen eine Geschwindigkeitsbeschränkung gilt, wird er doch wieder gebraucht. In den Open-Streetmap-Daten sind auch Brücken durch einen eigenen Weg eingezeichnet. Damit kosten uns Brücken und Tempobeschränkungen zusätzliche Verbindungen, ich nehme das in diesem Fall aber in Kauf, um später Tempobeschränkungen und Einbahnstraßen berücksichtigen zu können.</p>
<div class="imagebox"><div class="image"><a href="http://goblor.de/wp/wp-content/uploads/2009/10/Wegbeispiel2.png"><img class="size-full wp-image-978" title="Wegbeispiel2" src="http://goblor.de/wp/wp-content/uploads/2009/10/Wegbeispiel2.png" alt="Bild2: Optimierte Wegdarstellung durch die Verbindungs-Tabelle" width="640" height="400" /></a></div><div class="imgcaption">Bild2: Optimierte Wegdarstellung durch die Verbindungs-Tabelle</div></div>
<p>Die Verbindungs-Tabelle enthält also eine Zeile für jeden Startknoten, Endknoten und der Wegstrecke dazwischen, wie in Bild2 (die natürlich notwendige Entfernung zwischen den Knoten fehlt hier). Weil wir Einbahnstraßen berücksichtigen wollen, werden Verbindungen, die keine Einbahnstraßen sind, werden in beide Richtungen einmal abgelegt. Das ist zwar nicht effizient, vereinfacht aber unserer Arbeit. Optimieren können wir auch noch, wenn erst mal alles läuft, wie wir uns das vorstellen.</p>
<p>Zunächst muss die eine Tabelle <a title="Datenbankschema für einen gerichteten und gewichteten Graphen" href="http://goblor.de/wp/wp-content/uploads/2009/10/verbindungen.sql.txt">verbindungen mit diesem SQL-Skript</a> angelegt werden. Zum <a title="Stored Procedure zum Erstellen einer Verbindungstabelle aus OpenStreetMap-Daten" href="http://goblor.de/wp/wp-content/uploads/2009/10/erstelleVerbindungen.sql.txt">Erstellen der Verbindungstabelle nutze ich dann eine Stored Procedure</a>. Die arbeitet direkt in der Datenbank und ist deshalb recht schnell. Ihr Ablaufdiagramm ist im Bild3 zu sehen. Zu Beginn wird eine sehr aufwändige Abfrage ausgeführt, die einen Großteil der Informationen ausliest, die später benötigt werden und mit einem Cursor zeilenweise abgearbeitet wird. In ihr wird festgelegt, welche Wege überhaupt berücksichtigt werden. Wenn wir einen Routenplaner für Autos wollen, ist es wohl eher nicht so hilfreich Fußwege und Treppen in der Karte zu haben.</p>
<div class="imagebox"><div class="image"><a href="http://goblor.de/wp/wp-content/uploads/2009/10/AblaufVerbindungen.png"><img class="size-full wp-image-979" title="AblaufVerbindungen" src="http://goblor.de/wp/wp-content/uploads/2009/10/AblaufVerbindungen.png" alt="Bild3: Ablaufdiagramm zum Erstellen der Verbindungen" width="821" height="493" /></a></div><div class="imgcaption">Bild3: Ablaufdiagramm zum Erstellen der Verbindungen</div></div>
<p>Das hier bereitgestellte Skript berücksichtigt bereits Einbahnstraßen, das macht die Abfrage zu Beginn zwar noch aufwändiger, allerdings ist es für Autofahrer einfach nicht interessant Einbahnstraßen in Gegenrichtung zu befahren.</p>
<p>Mit dem Befehl</p>
<p>CALL erstelleVerbindungen();</p>
<p>kann die Datenbank gefüllt werden. Das dauert wieder ziemlich lange. Alleine das Erstellen der ersten Abfrage nimmt bei mir für Baden-Württemberg bereits über 3 Minuten in Anspruch, aber erst danach werden auch Daten geschrieben. Diese Procedure kann sicherlich noch optimiert werden, ich habe mich damit nicht mehr genauer beschäftigt, als sie in brauchbarer Zeit das gewünschte Ergebnis geliefert hatte.</p>
<p><strong>[Update 24.10.]</strong> Ich habe noch einen Fehler im Skript entdeckt, der lustige Fehler produziert hat. Einige Straßen, wie die Europabrücke über den Rhein bei Karlsruhe hatten in Baden-Württemberg nur einen Wegpunkt. Das hatte den Effekt, dass große Strecken mit Entfernung 0 in die Verbindungsliste eingetragen wurden, die eigentlich nicht mal verbunden waren. So lässt sich natürlich keine ordentliche Wegsuche realisieren. Der Fehler ist aber nun behoben.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2009/08/26/das-ist-also-eine-schlechte-soundkarte/' rel='bookmark' title='Permanent Link: Das ist also eine schlechte Soundkarte'>Das ist also eine schlechte Soundkarte</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</title>
		<link>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/</link>
		<comments>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:40:24 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Digital]]></category>
		<category><![CDATA[Forschung und Technik]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM-Projekt]]></category>
		<category><![CDATA[osm2sql]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=959</guid>
		<description><![CDATA[Schon vor über einem Jahr habe ich mich etwas ausführlicher mit dem Projekt OpenStreetMap beschäftigt. Damals ging es um das Einlesen der Daten in eine eigene Datenbank und es gab schonmal ein HowTo, dessen Datenbankschema sich aber recht schnell als unnötig groß herausgestellt hat. Wirklich ordentlich beschrieben habe ich die dann folgende Lösung bis dato [...]]]></description>
			<content:encoded><![CDATA[<p>Schon vor über einem Jahr habe ich mich etwas ausführlicher mit dem Projekt OpenStreetMap beschäftigt. Damals ging es um das Einlesen der Daten in eine eigene Datenbank und es gab schonmal ein <a title="HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren" href="http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/">HowTo</a>, dessen Datenbankschema sich aber recht schnell als unnötig groß herausgestellt hat. Wirklich ordentlich beschrieben habe ich die <a title="Der Durchbruch" href="http://goblor.de/wp/2008/09/29/der-durchbruch/">dann folgende Lösung</a> bis dato allerdings nicht, deshalb startet heute eine kleine Artikel-Serie zum Thema.</p>
<div class="imagebox"><div class="image"><a href="http://goblor.de/wp/wp-content/uploads/2009/10/schema1.png"><img class="size-full wp-image-962" title="schema1" src="http://goblor.de/wp/wp-content/uploads/2009/10/schema1.png" alt="Datenbankschema für OpenStreetMap-Daten" width="774" height="656" /></a></div><div class="imgcaption">Datenbankschema für OpenStreetMap-Daten</div></div>
<p>Im ersten Teil soll es darum gehen die Openstreetmap-Daten in eine MySQL-Datenbank einzulesen.<span id="more-959"></span> Später wird eine Möglichkeit gezeigt, aus den Daten einen gerichteten Graphen z.B. für eine Wegsuche zu erstellen, danach wird eine Wegsuche realisiert.</p>
<p>Aber zunächst müssen die Daten eingelesen werden. Benötigt wird:</p>
<ul>
<li>Eine funktionierende Installation eines MySQL-Servers (&gt; Version 5.0) mit ordentlich Speicherplatz (Ich rede hier mindestens von Gigabyte-Zahlen für Baden-Württemberg, ganz Deutschland dürfte im Bereich um die 10GB liegen) und Administrations-Umgebung</li>
<li>Eine funktionierende Java-Installation. Das von mir für den Import geschriebene Skript gibt eine SQL-Befehlskette auf der Standardausgabe aus, mit der Bash (Linux-Kommandozeile) lässt sich das direkt in eine MySQL-Verbindung schicken.</li>
</ul>
<p>Als erstes wollen wir einen Blick auf die Openstreetmap-Daten werfen. Sie liegen im XML-Format vor und können auch auszugsweise z.B. <a title="OpenStreetMap-Daten bei Geofabrik herunterladen" href="http://download.geofabrik.de/osm/">bei Geofabrik heruntergeladen</a> werden. Ich habe mir für das Projekt die Daten von Baden-Württemberg (baden-wuerttemberg.osm) heruntergeladen.</p>
<p>Wenn man die knapp 80MB große bz2-Datei entpackt hat, liegen ca.1 GB Daten auf der Festplatte. In die kann man mal reinschauen (aber bitte mit einem Tool, das Zeilenweise liest, z.B. &#8220;less&#8221;). Eine Analyse dieser Datei und ein Blick auf diese <a title="wiki.openstreetmap.org: Data Primitives" href="http://wiki.openstreetmap.org/wiki/XML_Schema">zwar veraltete, aber für diesen Zweck ausreichende Wikiseite</a> führte mich zum Datenbankschema, wie in der Grafik.</p>
<p><a title="SQL-Skript zur Erzeugung des Datenbankschemas aus der Grafik" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm-schema.sql.txt">Hier</a> ist die zugehörige <a title="SQL-Skript zur Erzeugung des Datenbankschemas aus der Grafik" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm-schema.sql.txt">MySQL-Import-Datei</a>.</p>
<p>Nachdem man eine Datenbank angelegt hat kann das oben gezeigte Schema erzeugt werden. Jetzt fehlt natürlich noch der Datenimport. Dafür entstand nach <a title="OpenStreetMap-Daten nach MySQL (Die Zweite)" href="http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/">mehreren</a> <a title="Rechner an der Grenze" href="http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/">Versuchen</a> ein Java-Programm, das aus einer *.osm-Datei einen entsprechenden Import herstellt.</p>
<p>Der <a title="osm2sql: Java-Programm um aus *.osm einen MySQL-Import zu erzeugen" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm2sql.java">Quellcode des Java-Programms</a> lässt sich <a title="osm2sql: Java-Programm um aus *.osm einen MySQL-Import zu erzeugen" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm2sql.java">hier herunterladen</a>. Seine Benutzung ist einfach. Das Programm erwartet einen Parameter mit dem Pfad/Dateinamen einer *.osm-Datei und erzeugt daraus einen MySQL-Input auf dem Std-Out. Nach dem Kompilieren von osm2sql sollte sich (zumindest auf der Linux-Bash) mit einem entsprechend angepassten Befehl der Art</p>
<p><code>java osm2sql baden-wuerttemberg.osm | mysql --host=localhost --database=osm --user=osm --password=abc</code></p>
<p>die Datenbank füllen lassen. Jetzt kann man normalerweise erst mal einen Tee kochen gehen. Ein wenig Zeit sollte man dem Datenbankserver schon gönnen.</p>
<p>Kommentare und Hinweise zum Thema sind hier nicht nur erlaubt, sondern ausdrücklich erwünscht.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen'>OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ein gutes Gefühl</title>
		<link>http://goblor.de/wp/2008/09/29/ein-gutes-gefuhl/</link>
		<comments>http://goblor.de/wp/2008/09/29/ein-gutes-gefuhl/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 21:53:11 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Im Brennpunkt]]></category>
		<category><![CDATA[Hechingen]]></category>
		<category><![CDATA[Karlsruhe]]></category>
		<category><![CDATA[OpenStreetMap]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=123</guid>
		<description><![CDATA[Heute habe ich meine ersten Einträge in OpenStreetMap gemacht. Von Hechingen und Hechingen-Stetten, wo viele Straße noch gar nicht gemapped sind und einiges auch falsch oder unsauber ist. Es ist schon ein gutes Gefühl, wenn man wenige Stunden später sieht, dass die Änderungen in der richtigen Karte drin sind.
Manchmal frag ich mich, was für Nerds [...]]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich meine ersten Einträge in OpenStreetMap gemacht. Von Hechingen und Hechingen-Stetten, wo viele Straße noch gar nicht gemapped sind und einiges auch falsch oder unsauber ist. Es ist schon ein gutes Gefühl, wenn man wenige Stunden später sieht, dass die Änderungen in der richtigen Karte drin sind.</p>
<p>Manchmal frag ich mich, was für Nerds es auf der Welt noch so gibt. Irgendjemand hat in halb Karlsruhe die Hausnummern aufgenommen. Die Karlsruher Karte ist ohnehin schon beeindruckend genau, die hängt jede Karte ab, die ich bis jetzt von Karlsruhe gesehen habe.<span id="more-123"></span></p>
<p>Dafür sind viele Orte auf dem Land noch fast gar nicht gemapped. Von Grosselfingen im Zollernalbkreis gibt es lediglich einen Node, der den Ort benennt. Aber so schlimm ist das auch wieder nicht, sagt man nicht in den Nachbarorten &#8220;Liaber gar koin Finger, wie en Grosselfinger&#8221;.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/05/09/funk-internet-hammer-sowas/' rel='bookmark' title='Permanent Link: &#8220;Funk-Internet, hämmer sowas?&#8221;'>&#8220;Funk-Internet, hämmer sowas?&#8221;</a></li>
<li><a href='http://goblor.de/wp/2009/08/12/so-mussen-ferienspiele-sein/' rel='bookmark' title='Permanent Link: So müssen Ferienspiele sein'>So müssen Ferienspiele sein</a></li>
<li><a href='http://goblor.de/wp/2010/03/08/wg-zimmer-zu-vermieten/' rel='bookmark' title='Permanent Link: WG-Zimmer zu vermieten'>WG-Zimmer zu vermieten</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/29/ein-gutes-gefuhl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Es scheint zu funktionieren</title>
		<link>http://goblor.de/wp/2008/09/28/es-scheint-zu-funktionieren/</link>
		<comments>http://goblor.de/wp/2008/09/28/es-scheint-zu-funktionieren/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 20:40:06 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenStreetMap]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=111</guid>
		<description><![CDATA[Heute war der MySQL-Server durchgehend am Schreiben von OpenStreetMap-Daten. Ein weiterer Bug wurde behoben &#8211; int statt float &#8211; und der Import neu gestartet. Das Schreiben dauert definitiv zu lange, jetzt kommt es darauf an, wie die Datenbank optimiert wird. 400 MB zu schreiben darf einfach nicht 6 Stunden dauern. Sonst dauern die 40 GB [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war der MySQL-Server durchgehend am Schreiben von OpenStreetMap-Daten. Ein weiterer Bug wurde behoben &#8211; int statt float &#8211; und der Import neu gestartet. Das Schreiben dauert definitiv zu lange, jetzt kommt es darauf an, wie die Datenbank optimiert wird. 400 MB zu schreiben darf einfach nicht 6 Stunden dauern. Sonst dauern die 40 GB die da irgendwann mal in der Datenbank stehen sollen ja Wochen.</p>
<p>Das hätte ich mir allerdings mal früher überlegen sollen. MySQL hat da so ne nette Funktion, die heißt <code>LOAD DATA INFILE</code> und die sorgt jetzt dafür, dass ich mein bisheriges Parsing komplett überarbeiten muss.<span id="more-111"></span></p>
<p>Eine Alternative wäre noch <code>LOCK TABLES</code> und <code>UNLOCK TABLES</code>. Das wäre erheblich einfacher, bringt aber wahrscheinlich nicht so viel Geschwindigkeitsvorteil. Ich werde es wohl ausprobieren.</p>
<p>Immerhin habe ich schonmal 2 Views zum Testen erzeugt. Ausgabe aller Städte und die <a title="Orthodrome - Wikipedia" href="http://de.wikipedia.org/wiki/Orthodrome">Entfernung</a> in Luftlinie zwischen allen Städten.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/' rel='bookmark' title='Permanent Link: Datenimport nach 10 Stunden'>Datenimport nach 10 Stunden</a></li>
<li><a href='http://goblor.de/wp/2008/10/02/abstandsmessung-optimieren/' rel='bookmark' title='Permanent Link: Abstandsmessung optimieren'>Abstandsmessung optimieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/28/es-scheint-zu-funktionieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datenimport nach 10 Stunden</title>
		<link>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/</link>
		<comments>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 10:04:47 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[osm2sql]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=103</guid>
		<description><![CDATA[
goblor@gemajehova:/media/data/tosort/OSM$ mysql -u root -p geostuff &#60; importstuff.sql
Enter password:
ERROR 1054 (42S22) at line 7055199: Unknown column 'nodeid' in 'field list'
goblor@gemajehova:/media/data/tosort/OSM$ wc -l importstuff.sql
7078488 importstuff.sql

Was sagt uns obige Ausgabe?
Richtig, der Datenimport hat nicht geklappt und der tödliche Fehler trat kurz vor Schluss auf. Nachdem ich jetzt ein wenig danach geschaut habe, ärgert er mich echt&#8230; Der [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
goblor@gemajehova:/media/data/tosort/OSM$ mysql -u root -p geostuff &lt; importstuff.sql<br />
Enter password:<br />
ERROR 1054 (42S22) at line 7055199: Unknown column 'nodeid' in 'field list'<br />
goblor@gemajehova:/media/data/tosort/OSM$ wc -l importstuff.sql<br />
7078488 importstuff.sql<br />
</code></p>
<p>Was sagt uns obige Ausgabe?<span id="more-103"></span></p>
<p>Richtig, der Datenimport hat nicht geklappt und der tödliche Fehler trat kurz vor Schluss auf. Nachdem ich jetzt ein wenig danach geschaut habe, ärgert er mich echt&#8230; Der Fehler besteht aus einem falschen Spaltennamen &#8211; Tippfehler.</p>
<p>Ein anderer Fehler ist auch noch passiert, da wurde ein falscher Tabellenname genutzt. Die ganzen Fehler sind korrigiert und das Spiel kann von neuem starten. &#8211; Wird wohl bis heute Abend dauern.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2008/09/29/der-durchbruch/' rel='bookmark' title='Permanent Link: Der Durchbruch'>Der Durchbruch</a></li>
<li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenStreetMap-Daten nach MySQL (Die Zweite)</title>
		<link>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/</link>
		<comments>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 23:44:38 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[osm2sql]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=96</guid>
		<description><![CDATA[
Im letzten Artikel haben wir festgestellt, dass das Datenbankschema, das von &#8220;osmosis&#8221; erzeugt wird, nicht so der Bringer ist, deshalb habe ich mir erlaubt mit großer Hilfe und Sachverstand meines Freundes fritsch ein eigenes Datenbankschema zu entwerfen und natürlich auch gleich noch den dazu fälligen Parser zu schreiben.
Ich habe heute viel dabei gelernt (nur kein [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://goblor.de/wp/wp-content/uploads/2008/09/sqltransverse.png"><img class="alignright size-full wp-image-109" title="sql-output-thumb" src="http://goblor.de/wp/wp-content/uploads/2008/09/sql-output-thumb.png" alt="" width="288" height="180" /></a></p>
<p>Im <a title="HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren" href="http://goblor.de/wp/?p=88">letzten Artikel</a> haben wir festgestellt, dass das Datenbankschema, das von &#8220;osmosis&#8221; erzeugt wird, nicht so der Bringer ist, deshalb habe ich mir erlaubt mit großer Hilfe und Sachverstand meines Freundes fritsch ein eigenes Datenbankschema zu entwerfen und natürlich auch gleich noch den dazu fälligen Parser zu schreiben.<span id="more-96"></span></p>
<p>Ich habe heute viel dabei gelernt (nur kein <a title="Fakultät für Mathematik - Elementare Zahlentheorie (Sommersemester 2008)" href="http://www.mathematik.uni-karlsruhe.de/iag3/lehre/elemzahl2008s/">EZT</a> &#8211; Gruß an tacco):</p>
<ol>
<li>Versuche <strong>niemals</strong> selbst XML zu parsen. Es sieht ganz einfach aus und endet im Desaster.</li>
<li>Versuchs wirklich nicht!</li>
<li>Benutze lieber einen fertigen Parser, dem du mitgibst, was er mit den Tags anfangen soll.</li>
</ol>
<p>Vor ein paar Tagen haben wir festgestellt, dass 400MB XML mit Xalan etwa 3 GB RAM brauchen, wenn sie zu einem DOM-Baum aufgebaut werden. Ein kleiner Test mit einer Perl-XML-Klasse, die eben dieses macht, hat heute fritschs neuerdings 8GB RAM in Sekundenschnelle komplett gefüllt. Deshalb bleibt nur sequentielles Lesen der Daten übrig. Java bietet dafür einen Sax-Parser, mit dem das ganz gut ging.</p>
<p>Mit etwas Quellcode war dann auch recht zügig eine SQL-Ausgabe erzeugt. Das Debugging dauerte aber Stunden, denn wenn in Zeile 1.500.745 des SQL-Imports ein Fehler auftaucht, merkt das MySQL erst nach etwa 1 Stunde. Eigentlich brauch ichs gar nicht zu erwähnen, es ist mehrfach passiert. Man braucht dann auch echt lustige Konstrukte:<br />
<code><br />
elementstring.replaceAll("\\\\","\\\\\\\\").replaceAll("'","\\\\'")<br />
</code><br />
Das kommt vom doppelt escapen. Einmal für den Java-String, und einmal für den RegExp. So bedeuten 4 Backslashes genau einen Backslash im zu durchsuchenden String.</p>
<p>Jetzt ist unser Server im dritten Durchgang beschäftigt und irritiert uns mit äußerst ungenauen Größenangaben der Tabellen. Mal sehen an welcher Stelle der 7.078.487 Zeilen er heute Nacht rausfliegt. Aktuell sind wir etwa bei Zeile 1.000.000.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/' rel='bookmark' title='Permanent Link: Rechner an der Grenze'>Rechner an der Grenze</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</title>
		<link>http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/</link>
		<comments>http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 17:28:18 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[Osmosis]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=88</guid>
		<description><![CDATA[Nachdem der letzte Versuch mit OpenStreetMap-Daten an ihrer schieren Menge gescheitert ist, kommen wir jetzt auf eine Alternativ-Idee zurück:
Alle Daten in eine Datenbank importieren und mit geschickten Joins nur die interessanten Daten ausgeben. Um den Import der Daten in die MySQL-Datenbank soll es jetzt gehen.
1. Schritt: Anlegen eines Datenbankbenutzers und einer Datenbank, die ihm gehört.
Ich [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem der letzte Versuch mit OpenStreetMap-Daten an ihrer schieren Menge gescheitert ist, kommen wir jetzt auf eine Alternativ-Idee zurück:</p>
<p>Alle Daten in eine Datenbank importieren und mit geschickten Joins nur die interessanten Daten ausgeben. Um den Import der Daten in die MySQL-Datenbank soll es jetzt gehen.</p>
<p><strong>1. Schritt:</strong> Anlegen eines Datenbankbenutzers und einer Datenbank, die ihm gehört.<span id="more-88"></span></p>
<p>Ich erstelle der Einfachkeit halber einen Benutzer &#8220;osm&#8221; und seine Datenbank &#8220;osm&#8221; mit PhpMyAdmin. Passwort bleibt leer, host ist &#8220;localhost&#8221;.</p>
<p><strong>2. Schritt:</strong> Anlegen der Tabellen-Struktur für den Import der Daten.</p>
<p>Eine einfache SQL-Import-Datei gibt es hier:  <a title="SQL-Schema zum Anlegen der Datenbankstruktur" href="http://gweb.bretth.com/osm_schema_latest.sql">http://gweb.bretth.com/osm_schema_latest.sql</a><br />
Dieses Schema kann z.B. mit PhpMyAdmin nach Wahl der Datenbank mit dem Reiter Import erstellt werden werden.</p>
<p><strong>3. Schritt:</strong> Download und Installation des Tools <a title="Osmosis - OpenStreetMap" href="http://wiki.openstreetmap.org/index.php/Osmosis">Osmosis</a>.</p>
<p>Ich nutze in diesem Fall die vorkompilierte Version:<br />
<code><br />
wget http://gweb.bretth.com/osmosis-latest.tar.gz<br />
tar xvfz osmosis-latest.tar.gz<br />
cd osmosis-0.29<br />
bin/osmosis</code></p>
<p><strong>4. Schritt:</strong> Importieren der planet.osm-Datei oder eines Auszuges von ihr</p>
<p>Ich wähle in diesem Fall wieder die baden-wuerttemberg.osm aus dem <a title="Rechner an der Grenze" href="http://goblor.de/wp/?p=84">letzten Artikel</a>:<br />
<code><br />
bin/osmosis --read-xml ../baden-wuerttemberg.osm --write-mysql host="localhost" database="osm" user="osm"</code></p>
<p>Jetzt laaaange warten. Nach einiger Zeit liegen dann 1,1 GiB Daten in der Datenbank. &#8211; Aus ursprünglich 386MB im XML-file. Dafür ist der Zugriff jetzt im Vergleich rasend schnell.</p>
<p>Nur doof, dass die Daten kein ordentliches Schema haben, dass es keinen Fremdschlüssel gibt. fritsch hat sichs angeguckt und nur geschimpft. <img src='http://goblor.de/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2008/09/29/der-durchbruch/' rel='bookmark' title='Permanent Link: Der Durchbruch'>Der Durchbruch</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rechner an der Grenze</title>
		<link>http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/</link>
		<comments>http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 15:26:15 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=84</guid>
		<description><![CDATA[Ich bin ja seit einiger Zeit sehr begeistert vom OpenStreetMap-Projekt.
Deshalb habe ich mir gestern die Zeit genommen mich mal mit der Datenstruktur des Projekts zu befassen. Alle Kartendaten werden nämlich als XML-Datei zur Verfügung gestellt. Zum Test hatte ich eigentlich vor, eine kleine Umkreissuche zu implementieren, mit der man alle Orte die kleiner einer wählbaren [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin ja seit einiger Zeit sehr begeistert vom <a title="OpenStreetMap" href="http://www.openstreetmap.org/">OpenStreetMap-Projekt</a>.</p>
<p>Deshalb habe ich mir gestern die Zeit genommen mich mal mit der Datenstruktur des Projekts zu befassen. Alle Kartendaten werden nämlich als <a title="OpenStreetMap-Planet-Files" href="http://planet.openstreetmap.org/">XML-Datei</a> zur Verfügung gestellt. Zum Test hatte ich eigentlich vor, eine kleine Umkreissuche zu implementieren, mit der man alle Orte die kleiner einer wählbaren Entfernung von einem Punkt entfernt sind, erhält.<span id="more-84"></span></p>
<p>Die Idee war: Schreibe ein XSLT-Stylesheet, das für alle Orte die Information vom Ortstyp (village, town, city), den Namen und den zugehörigen Längen- und Breiteninformation, aus dem planet.osm extrahiert. Auf diesem erheblich kleineren XML könnte dann entweder ein weiteres XSLT arbeiten oder es könnte einfach in eine Datenbank eingelesen werden.</p>
<p>Zum Testen habe ich mir die <a title="Auswahl von OpenStreetMap-Daten der deutschen Bundesländer" href="http://download.geofabrik.de/osm/europe/germany/">Daten von Baden-Württemberg</a> geladen, die sind entpackt 386MB groß. Dazu habe ich mir ein kleines <a href="http://goblor.de/wp/wp-content/uploads/2008/09/simplify.xsl">Template</a> geschrieben, das die Daten extrahiert. Heute Nacht habe ich die Transformation aber leider nicht mehr durchgeführt bekommen. Mein Rechner mit seinem einen Gigabyte RAM ging sowohl mit Xalan, als auch mit procxslt in die Knie. Selbst der Server im Flur mit 2GB RAM hat es nicht gepackt. Heute hat mein Kumpel <a title="Fritsch Place" href="http://fritsch.fruehberger.net/">fritsch</a> seine Kiste dafür zur Verfügung gestellt. Seine 4GB RAM wurden auch <a title="Fritsch Place - Wir bauen einen DOM Baum" href="http://fritsch.fruehberger.net/index.php?option=com_content&amp;task=view&amp;id=114&amp;Itemid=37">fast komplett genutzt</a>.</p>
<p>Xalan baut einen DOM-Baum, das kostet einfach zu viel Speicher. Eigentlich hätte ich gerne noch Saxon getestet, weil der sequentiell arbeitet, aber leider hat die aktuelle Version wohl einen <a title="Bug ID: 6536111 SAX parser throws OutOfMemoryError" href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6536111">Bug</a>, der das unmöglich macht. Auf alle Fälle muss eine andere Technik her. Die Ideen gehen vom selbstgebauten Parser, über einen Komplett-Import in eine Datenbank. Das planet.osm mit Daten für den ganzen Planeten ist momentan gepackt etwa 4,4GB groß. Es gibt also noch jede Menge Optimierungsbedarf.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/es-scheint-zu-funktionieren/' rel='bookmark' title='Permanent Link: Es scheint zu funktionieren'>Es scheint zu funktionieren</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
