<?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; OSM-Projekt</title>
	<atom:link href="http://goblor.de/wp/tag/osm-projekt/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>
	</channel>
</rss>
