Giter Site home page Giter Site logo

boundariesosmkoeln's Introduction

#OSM Outline Service für Köln

##Überblick

Dieser Service liefert die Umrisse für Köln für die Stadtteile, die Stadtbezirke und die Stadt selber im geoJson Format. Grundlage hierfür sind die OSM Daten. Der Service gibt für bereits erstellte Datensätze die abgespeicherten Ergebnisse zurück.

##Funktionsweise

Der Service ist in Java geschrieben. Er läßt sich mit maven bauen.

  • checkout git
  • mvn clean install

Der Service antwortet mit einer geoJson-Datenstruktur. Die beispielhafte Einbindung des Services in Leaflet ist in index.html umgesetzt.

Die Installation erfolgt als Webapplikation in einem Application-Server. Ich habe den Service auf Basis von Tomcat entwickelt.

Folgende REST-Endpoints stehen zur Verfügung:

  • /boundariesosmkoeln/service/<level>; Gibt die Umrisse der Stadt, des Stadtteils oder des Stadtbezirks von Köln zurück mit threshold 10
  • /boundariesosmkoeln/service/<level>/<threshold>; Gibt die Umrisse der Stadtteile, der Stadtbezirke oder von Köln mit angegebenem threshold zurück
  • /boundariesosmkoeln/service/generate; Erstellt die Umrisse

Der Service erlaubt es die Umrisse zu vereinfachen, mit dem Ergebnis, dass der Datenumfang der zu ladenden Daten sich verringert. Die Vereinfachung erfolgt auf Datenbankebene und wird durch anhängen des threshold angefordert. Dabei steht die Zahl für Auflösung; z.B.

  • /boundariesosmkoeln/service/stadteile/100 vereinfacht auf 100m Genauigkeit
  • /boundariesosmkoeln/service/stadteile/1000 vereinfacht auf 1000m Genauigkeit

Die Generalisierung wird mit dem Douglas-Peucker Algorithmus, auf Basis von PostGis umgesetzt. Dieser verwirft jeden Punkt, dessen Entferung vom Segment geringer ist, als der übergebene Schwellwert. Das Problem hierbei ist generell, dass benachbarte Polygone entweder nicht mehr direkt benachbart sind, oder sich an einigen Stellen überlappen.

Um dies zu verhindern, wird die Anfrage in Anlehnung an An example showing how to simplify a multipolygon layer, keeping topology between objects umgesetzt.

##Definition der DB-Verbindung

Der Service benötigt ggf. eine postgresql-Datenbank mit OSM-Daten und Postgis-Erweiterung. Die Verbindung wird über jndi im Tomcat definiert. Hierfür ist folgender Eintrag in der context.xml des Tomcat notwendig:

&lt;Resource 
	name="jdbc/postgresql" 
	auth="Container" 
	type="javax.sql.DataSource"
	username="username" 
	password="password" 
	driverClassName="org.postgresql.Driver"
	url="jdbc:postgresql://server:5432/dbname" 
	maxTotal="25" 
	maxIdle="10"
	validationQuery="select 1" /&gt;

DB-Abfragen

Die Abfragen selber werden per prepared Statement durchgeführt. Die Definition der Statements erfolgt als resource und wird von der jeweiligen AskFor-Klasse aus den resources geladen.

##admin_level

Dabei steht der admin_level für folgende Aufteilung in Deutschland:

  1. nicht verwendet
  2. deutsche Aussengrenze
  3. nicht verwendet
  4. Bundesland
  5. Regierungsbezirk
  6. Landkreis / Kreis / kreisfreie Stadt / Stadtkreis
  7. Amtsgemeinde, Verwaltungsgemeinschaft
  8. Stadt, Gemeinde
  9. Stadtbezirk / Gemeindeteil mit Selbstverwaltung
  10. Stadtteil / Gemeindeteil ohne Selbstverwaltung

mögliche Abfragen

Die Abfragen gegen die Datenbank sind recht zeitaufwändig. Z.B. benötigt bei mir die Abfrage auf die Stadtteile in Köln ca 15 Minuten. Um die Zeit abzukürzen, sind dieser Webanwendung bereits berechnete GeoJson Strings hinterlegt, die im Normalfall ausgeliefert werden. Durch den Endpunkt "generate" (Beispiel: /boundariesosmkoeln/service/generate) wird die Erstellung des Polygons gegen die Datenbank in jedem Fall ausgeführt. Mit Übergabeparametern können spezielle Polygon berechnet werden (Beispiel: /boundariesosmkoeln/service/generate?level=stadtteile&threshold=250). Das Ergebnis dieser Berechnung wird im Filesystem abgelegt. Der Ort dafür wird in der application.properties for Start des Servers eingetragen und als Ergebnis des Service zurückgegeben.

Bereits berechnete Daten sind in diesem Projekt auf github hinterlegt und können so direkt verwendet werden: https://github.com/weberius/boundariesosmkoeln/tree/master/src/main/resources

boundariesosmkoeln's People

Contributors

weberius avatar

Stargazers

Natalie Sablowski avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.