Tilemill als Tileserver installieren

Zur Abwechslung mal ein eher technischer Beitrag: Wir benutzen auf Bürger baut Stadt einen eigenen Tileserver, um die Karte im Hintergrund auszuliefern. Hier haben wir dokumentiert wie man unser Setup aufsetzen kann.

Wir starten mit einem frischen Debian 8 oder Ubuntu 14.04 (dann aber postgresql-9.3 statt postgresql-9.4 nehmen). Wir nehmen grade dieses System weil man mit älteren Distributionen die mapnik und vor allem die boost Bibliothek selber kompilieren muss. Kann man aber auch machen. Für diese Anleitung gehen wir davon aus das das System läuft und Netzwerk hat.

Postgres

Als erstes legen wir eine user an, den wir gis nennen. Für ein reines Developmentsystem kann man aber auch gerne alles mit seinem normalen User machen, dann werden ein paar Dinge einfacher. Für ein Produktivsystem, welches dann über einen Webserver Karten ins Internet publiziert sollte man aber in jedem Fall einen eigenenen User anlegen. Wir setzten den HOME des neuen Users auf /srv/gis.

useradd -m -d /srv/gis -s /bin/bash gis
su - gis

Jetzt holen wir uns einen OSM Dump von Geofabrik. Für diese Anleitung benutzen wir den Berlin Datensatz (der ist auch angenehm klein). Damit alles ordentlich ist legen wir auch gleich einen Ordner für OSM Dumps an.

mkdir /srv/gis/osm
cd /srv/gis/osm
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.bz2

Jetzt werden Postgres, Postgis und osm2pgsql aus den Paketquellen installiert.

apt-get install postgresql-9.4 postgresql-9.4-postgis-2.1 osm2pgsql

Nun muss der OSM Dump in die Datenbank übertragen werden. Dafür wechseln wir zunächst zum postgres user.

sudo su - postgres

Dann legen wir einen neuen Datenbank-User an

createuser gis

erstellen eine Datenbank und konfigurieren sie für Postgis

createdb -E UTF8 -O gis postgis_berlin
psql postgis_berlin -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis.sql
psql postgis_berlin -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql
psql postgis_berlin -c "ALTER TABLE geometry_columns OWNER TO gis"
psql postgis_berlin -c "ALTER TABLE spatial_ref_sys OWNER TO gis"

Anschließend kann der Ingest stattfinden (jetzt wieder als gis user). Das dauert für Berlin auf eine neueren Maschiene ca. 10 Minuten.

osm2pgsql -s -m -d postgis_berlin /srv/gis/osm/berlin-latest.osm.bz2

Mapnik

Jetzt installieren wir mapnik aus der Paketverwaltung

apt-get install libmapnik2-dev python-mapnik

Das wars, ging schnell. (Wenn man ein älteres System benutzt hat man an dieser Stelle die Freude Boost und Mapnik von Source zu kompilieren.)

Mapnik Styles und zusätzliche Layer runterladen

Die Mapnik XML files für unser Theme gibt es auf github:

mkdir /srv/gis/mapnik
git clone https://github.com/BuergerbautStadt/bbs-mapnik /srv/gis/mapnik/bbs

Es müssen aber auch noch 3 Shapefiles mit runtergeladen werden:

apt-get install unzip
mkdir -p /srv/gis/layers/world_boundaries
cd /srv/gis/layers/world_boundaries
wget http://tile.openstreetmap.org/processed_p.tar.bz2
tar xjvf processed_p.tar.bz2
wget http://tile.openstreetmap.org/shoreline_300.tar.bz2
tar xjvf shoreline_300.tar.bz2
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip
wget unzip ne_110m_admin_0_boundary_lines_land.zip

Eine Virtualenv erstellen

Es ist eigendlich immer eine Gute Idee für Python-Setups ein Virtualenv zu verwenden und so die Pythonumgebung vom Rest des Systems zu kapseln. Hierfür installieren wir pip und virtualenv.

apt-get install python-pip python-virtualenv

Dann nächstes wird die Pythonumgebung aktiviert:

cd /srv/gis
virtualenv --system-site-packages env
source env/bin/activate

Ein erster Test mit nik2img.py

Jetzt können wir nik2img installieren. Dies ist ein kleines Programm mit dem man aus der OSM Datenbank und einem Mapnik Style ein Bild rendern kann.

pip install nik2img

Mit dem folgenden Befehl machen wir ein Bild von Berlin. Die Bounding Box wird durch --bbox angegeben.

nik2img.py /srv/gis/mapnik/bbs/berlin.xml ~/berlin.png --bbox 13.3579 52.4906 13.4015 52.5061

tilestache

Jetzt kann es (endlich) mit tilestache losgehen. Erst wird installiert:

pip install modestmaps simplejson werkzeug TileStache

Dann noch zwei Verzeichnisse anlegen:

mkdir /srv/gis/tilestache /srv/gis/cache

Dann eine neue Datei /srv/gis/tilestache/tilestache.cfg anlegen und mit folgendem JSON füllen.

{
  "cache": {
  "name": "Disk",
  "path": "/srv/gis/cache"
},
  "layers": {
    "bbs": {
      "provider": {
        "name": "mapnik",
        "mapfile": "/srv/gis/mapnik/bbs/berlin.xml"
      },
      "preview": {
        "lat": 52.518611,
        "lon": 13.408333,
        "zoom": 15
      }
    }
  }
}

Man kann nun den tilestache Entwicklungsserver starten.

tilestache-server.py -c /srv/gis/tilestache/tilestache.cfg

Apache VirtualHost

In einem Produktiv-Setup will man den Tileserver entweder über eine Reverse Proxy nutzen, oder, so wie hier beschrieben, über Apache und mod_wsgi betreiben. Hierfür muss natürlich erstmal installiert werden (als root):

apt-get install apache2 libapache2-mod-wsgi

Für Apache wird in /etc/apache2/sites-available/000-default.conf ein VirtualHost eingerichtet:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    WSGIDaemonProcess tilestache user=gis group=gis processes=1 \
        python-path=/srv/gis/env/lib/python2.7/site-packages/:/usr/lib/python2.7/dist-packages/
    WSGIProcessGroup tilestache
    WSGIScriptAlias / /srv/gis/tilestache/wsgi.py

    <Directory /srv/gis/tilestache/>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

Jetzt muss noch ein kleines Script /srv/gis/tilestache/wsgi.py erzeugt werden:

import os
import TileStache
application = TileStache.WSGITileServer('/srv/gis/tilestache/tilestache.cfg')

Jetzt kann es losgehen, nur noch Apache (neu-)starten und der Tileserver sollte erreichbar sein:

systemctl enable apache2
systemctl restart apache2

Daten aus dem FIS-Broker nutzen

Für Bürger baut Stadt nutzen wir seit kurzem einen Datensatz aus dem FIS-Broker der Senatsverwaltung für Stadtentwicklung. Da das einiges an Rumprobieren benötigte, schreiben wir hier mal auf, wie das geht.

1. Daten finden

Im FIS-Broker finden sich zwei verschiedene Arten von Datensätzen:

Die WMS und WFS APIs stellen bestimmte Methoden bereit, so kann man Beispielweise über GetCapabilities unter anderem die Nutzungsbedingungen des Datensatzes erhalten.

Die für uns interessantesten Daten sind die Geltungsbereiche der Bebauungspläne unter http://fbinter.stadt-berlin.de/fb/berlin/service.jsp?id=re_bplan@senstadt&type=WFS&themeType=spatial.

2. Daten herunterladen

Auf der Seite des Datensatz gibt es einen Link zu den schon erwähnten Capabilities. Darunter findet man eine XML-Datei, die den Datensatz beschreibt. Unter wfs:FeatureType  findet man alle möglichen abrufbaren Ebenen – in unserem Datensatz gibt es nur eine Ebene und zwar die mit dem Namen fis:re_bplan. Wir haben dann ogr2ogr benutzt um das mit folgendem Befehl herunterzuladen:

ogr2ogr -s_srs EPSG:25833 -t_srs WGS84 -f geoJSON plan.geojson \
    WFS:"http://fbinter.stadt-berlin.de/fb/wfs/geometry/senstadt/re_bplan?typenames=GML2" re_bplan

Die verschiedenen Parameter sorgen dafür, dass wir die vom FIS-Broker benutzten Koordinaten im EPSG:25833 System in das gebräuchlichere WGS84 umrechnen und ein schönes GeoJSON erhalten. Als wir das jedoch mit Leaflet benutzen wollten, ist uns aufgefallen, dass die Koordinaten in dem Polygon verkehrt herum stehen. Statt [ 13.402496158449701, 52.51246159912268 ] muss da [ 52.51246159912268, 13.402496158449701] drinstehen. Das muss man dann also noch anpassen.

Bürger baut Stadt bei Code for Berlin

Seit knapp 2 Monaten läuft das Projekt Code for Germany und darin auch das Teilprojekt Code for Berlin. Code for Germany wir von der Open Knowledge Foundation organisiert und hat zum Ziel, in ganz Deutschland lokale Gruppen zu initiieren, die sich regelmäßig treffen und gemeinsam an nützlichen Anwendungen und Visualisierungen rund um offene Daten und digitale Werkzeuge für Bürgerinnen arbeiten.

Wir sind auch bei der Berliner Gruppe mit dabei. Wir treffen uns jeden Mittwoch um 19.00 Uhr bei Wikimedia (Tempelhofer Ufer 23/24, 10963 Berlin) und arbeiten an verschiedenen Anwendungen, darunter auch Bürger baut Stadt. Wer Lust hat mal vorbeizukommen, ist gerne gesehen. Wir freuen uns über neue Gesichter.

 

CFG_logo

 

Bürger baut Stadt jetzt auch mit mobiler Ansicht

Jochen war fleißig und hat Bürger baut Stadt auch eine mobile Ansicht verpasst! Vielen Dank! Zum Einsatz kam Twitter Bootstrap.

Infos über geplante Bauvorhaben abonnieren!

Schon seit einiger Zeit gibt es nun auch unsere Abo-Funktion. Das bedeutet, dass man auf dieser Seite einen oder mehrere Bezirke, die einen interessieren, abonnieren kann. Ist dies geschehen, sendet unser System Dir jedes Mal eine Email, sobald z.B. ein Bebauungsplan in einem Deiner ausgewählten Bezirke ausliegt. Die Informationen stammen – wie auch auf der Karte – alle aus dem Amtsblatt. Alternativ kann man uns auch auf Twitter folgen: @BueBauSta

Als nächstes wollen  wir eine Kommentarfunktion einbauen, über die Bürger Bauvorhaben kommentieren können oder Interessenverbände auf Stellungnahmen hinweisen können.

Nächste Schritte

Nachdem wir den Prototypen unserer App (zu finden unter bürgerbautstadt.de) auf der republica vorgestellt haben, geht es nun weiter mit der Entwicklung. Als nächstes wollen wir eine Art Abo-Service einbauen – Nutzer sollen sich für bestimmte Bezirke registrieren können und zum Beispiel eine Email erhalten, sobald sich etwas in den entsprechenden Bezirken tut. Darüber hinaus arbeiten wir an einem etwas einfacherem Backend, über das die Punkte auf der Karte eingetragen werden können. Zu guter letzt wäre es ja auch ganz schön, wenn unsere Seite auch auf mobilen Anwendungen funktionieren würde …

Natürlich freuen wir uns über Feedback: Was können wir noch einbauen? Was könnte man wo besser machen? Was funktioniert nicht?

Bürger baut Stadt auf der re:publica

Wir stellen unsere Anwendung auf der re:publica vor.
Wann: Mittwoch, 8. Mai um 11.00 Uhr
Wo: http://www.re-publica.de/ | große Halle am Stand von New Thinking (http://newthinking.de/)

SLC_republica2013

Animationsfilm erklärt Bürger baut Stadt

In Zukunft wollen wir unser Projekt und die Seite mit einem kleinen Animationsfilm bewerben und publik machen. Dafür hat Marlene in den letzten Tagen fleißig illustriert, animiert und geschnitten. Die Bilder und die Handlung stehen. Jetzt wird es an das Vertonen gehen und wir machen uns auf die Suche nach Baulärm, Kindergeschrei und klappernden Kaffeetassen.

Still Animation

Nächste Seite »