OpenStreetMap

Erste Gehversuche I

Posted by mawi2002 on 16 March 2019 in German (Deutsch)

Motivation

Was ich tun will: eine Webseite bauen, auf der man

  • eine Landkarte
  • einen Schiebebalken
  • und einen Bereich mit weiteren Details

sieht. Die Landkarte (natürlich OSM) stellt ein ausgewähltes Gebiet dar mit Layern, die farblich Grenzen verschiedener -nennen wir es Einheiten- darstellt. Dies können sein:

  • Herzogtümer
  • Königreiche
  • oder ähnliche geschichtsträchtige Flächen

Der Schiebebalken bestimmt das Jahr, aus welchem die gefüllten Flächen angezeigt werden. Es soll dabei nicht die gesamt OSM “alt” sein, d.h. wenn sich in den Jahren Flussläufe geändert haben, wenn Wälder nicht mehr existieren etc. ist das irrelevant. Es wird immer die aktuelle Situation, die OSM darstellt, durch die Layer durchscheinen.

Und schließlich sollen im Detailbereich weitere Informationen dargestellt werden, die sich auf die gewählte Zeit und den gewählten Kartenausschnitt beziehen. Geboren war die Idee aus meiner Liebe zu historischen Romanen, die ich (Ort und Zeit) auf diesem Weg gern visualisieren wollte - daher würde ich den Detailbereich gern vorsehen, um dort Bücher zu nennen. Prinzipiell geht aber auch jede andere Sorte von Themen.

Das Ganze ist in erster Linie ein Projekt, bei dem ich mich mit dieser OSM-Materie befassen möchte. Es geht nicht darum, in Konkurrenz zu anderen Projekten wie bspw. https://chronas.org http://geacron.com/ oder http://openhistoricalmap.org/ zu treten.

Grundlegendes zur Datenspeicherung

Meine erste Frage also war, wie werden die Daten bei OSM gespeichert, um im nächsten Schritt damit arbeiten zu können.

Es kristallisiert sich schnell diese Hierarchie heraus: Relation » Linie » Knoten

Achtung: eine Relation kann wiederum aus mehreren Relationen bestehen

Prüfen wir die Hierarchie und fragen uns beispielhaft: Von welchen x-y-Koordinatenpaaren wird Sachsen begrenzt? (beachte: hier wird von longitude [lon] und latitude [lat] gesprochen)

Der URL-Aufbau ist also generisch:

Auf jeder dieser Seiten wird ein XML-Download angeboten, der zur Punktgewinnung genutzt werden kann. Auch diese URLs sind generisch:

Mein abgewandeltes Datenbankschema

Hier findet sich ein Datenbankschema, das ich für meine Zwecke angepasst und mit folgenden Aufrufen in meine lokale Datenbank (mysql) eingefügt habe:

CREATE TABLE nodes
(
  id               bigint NOT NULL, 
  description      varchar(100),
  lon              double NOT NULL, 
  lat              double NOT NULL, 
  CONSTRAINT nodes_pkey PRIMARY KEY (id)
);
CREATE TABLE ways
(
  id               bigint NOT NULL, 
  description      varchar(100),
  CONSTRAINT ways_pkey PRIMARY KEY (id)
);
CREATE TABLE relations
(
  id               bigint NOT NULL, 
  description      varchar(100),
  valid_from       integer, -- Jahr
  valid_to         integer, -- Jahr
  CONSTRAINT relations_pkey PRIMARY KEY (id, valid_from)
);
CREATE TABLE way_nodes
(
  way_id           bigint NOT NULL, 
  nodes_order      integer NOT NULL, 
  node_id          bigint NOT NULL, 
  CONSTRAINT way_nodes_pkey PRIMARY KEY (way_id, nodes_order)
);
CREATE TABLE relation_members
(
  relation_id      bigint NOT NULL, 
  members_order    integer NOT NULL, 
  member_type      varchar(10) NOT NULL,
  member_id        bigint NOT NULL,
  role             varchar(20) NOT NULL, 
  CONSTRAINT relation_members_pkey PRIMARY KEY (relation_id, members_order)
);

Als nächstes werde ich daran gehen, für mich wichtige Daten einiger Relationen in diese Datenbanktabellen zu packen, nachdem ich sie aus OSM ausgelesen haben werde.

Login to leave a comment