Kategorie: Tutorial

WordPress für Journalisten – Tipps zum Einstieg

Letzte Woche habe ich im Media Lab Bayern ein Seminar über WordPress für Journalisten gehalten. Die Folien dazu gibt es jetzt kostenlos online. Einfach mal reinschauen.

Wordpress für Journalisten

Und das waren die Themen: Installation, Beiträge und Seiten, Navigation, Widgets, Themes, Plugins, SEO, Social Media, Storytelling.

Beitrag teilen:

Geodaten aus Open Street Map importieren

Die Open Street Map (OSM) bietet kostenlos Geodaten zu verschiedenen Themen. Die einzelnen Layer der Open Street Map lassen sich über eine Schnittstelle abrufen und weiterverwenden. Typische Anwendungsfälle sind beispielsweise:

  • Ich möchte eine Karte aller Landkreise (Polygone) Deutschlands erstellen.
  • Ich möchte eine Karte aller Autobahnen (Ways) in Europa erstellen.
  • Ich möchte eine Karte aller Spielplätze (Nodes) in München erstellen.

Bei der Verwendung von Open Street Map-Daten ist immer die Quelle zu nennen. Für den deutschen Sprachraum muss der Quellennachweis © OpenStreetMap-Mitwirkende lauten. Mehr Informationen dazu hier.

Datenanfrage mit Overpass Turbo
Overpass Turbo ist eine Webanwendung mit einem Wizard, der das Erstellen von Anfragen erleichtert. Zudem bietet Overpass Turbo vielen Exportmöglichkeiten.

Um zum Beispiel alle Autobahnen in Bayern zu bekommen, würde man im Wizard highway=motorway and type:way in bavaria eingeben. Eine Dokumentation der Wizard-Syntax findet sich hier. Der Wizard übersetzt die Anfrage in die Syntax der OSM Overpass API:

1
2
3
4
5
6
7
8
[out:json][timeout:25];
{{geocodeArea:bavaria}}->.searchArea;
(
  way["highway"="motorway"](area.searchArea);
);
out body;
>;
out skel qt;

Bei größeren Anfragen kann es sein, dass man das Timeout hochsetzen muss. Die Angabe des Timeouts erfolgt in Sekunden. Hat die Anfrage geklappt, kann man die Daten zum Beispiel im GeoJSON-Format exportieren und in QGIS weiterverarbeiten.

Overpass Turbo

Weitere Beispiele für Anfragen in Overpass Turbo:

  • Alle Landkreise Deutschlands: boundary=administrative and admin_level=6 and type:relation in germany
  • Touristenattraktionen in der Nähe des Marienplatzes: tourism=attraction around "Marienplatz, München"

Für das Auffinden der einzelnen Orte (Bavaria, Marienplatz etc.) nutzt Overpass Turbo den sehr mächtigen OSM-Geocoder Nominatim.

Datenanfrage mit Quick OSM (QGIS)
Quick OSM ist ein Plugin für das Gedodatenprogramm QGIS. Genau wie in Overpass Turbo hilft Quick OSM dabei Anfragen an die  OSM-API zu formulieren. Quick OSM hat jedoch den Vorteil, dass man schon eine  Übersicht der verfügbaren Layer hat und so Datensätze entdecken kann. Die so erstellte Anfrage kann dann noch verändert werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<osm-script output="xml" timeout="300"> 
  <id-query ref="3600051477" type="area" into="area"/> 
  // <id-query {{geocodeArea:Germany}} into="area"/> 
  <union>
    <query type="relation">
      <has-kv k="boundary" v="administrative"/>
      <has-kv k="admin_level" v="6"/> 
      <area-query from="area"/>
    </query>
  </union>
  <union>
    <item />
    <recurse type="down"/>
  </union>
  <print mode="body" />
</osm-script>

In diesem Fall wurde das Timeout auf 300 Sekunden erhöht und als zusätzlicher Filter <has-kv k="admin_level" v="6"/> eingefügt. Der zusätzliche Filter führt dazu, dass man nur Verwaltungsgrenzen auf Landkreisebene zurück bekommt. Ohne diesen Filter würde man sehr viele Daten zurückbekommen, da auch Bundeslandgrenzen, Regierungsbezirke usw. enthalten wären.

QGIS mit Overpass Turbo

Es bietet sich an, Anfragen an die OSM-API immer so einfach wie möglich zu halten und die Daten später in QGIS zu filtern. Komplexe Anfragen an die OSM-API dauern ewig.

Exportieren der Daten
Sowohl in Overpass Turbo als auch QGIS kann man die Daten als GeoJSON exportieren. GeoJSON-Dateien sind recht platzsparend, werden von einer Vielzahl an Anwendungen unterstützt und sind im Nachhinein noch berarbeitbar. Für die finale Anwendung empfiehlt sich das Format TopoJSON, welches noch deutlichen kleiner ist.

Anwendungsfall Verwaltungsgrenzen
OpenStreetMap bietet Daten für Verwaltungsgrenzen, Wahlkreise und Postleitzahlgebiete. Vor allem die Verwaltungsgrenzen braucht man im Alltag immer wieder. Im OpenStreetMap-Kontext sind diese Grenzen von Typ boundary=administrativ. Um die jeweils richtigen Grenzen zu bekommen, muss man sich mit dem Konzept des admin_levels, sprich der Verwaltungsebene, auseinandersetzen. Diese können von Land zu Land anders sein. Für Deutschland gibt es diese Verwaltungsebenen:

  1. Landesgrenze
  2. Bundesland
  3. Regierungsbezirk
  4. Landkreis / Kreis / kreisfreie Stadt / Stadtkreis
  5. Amtsgemeinde, Verwaltungsgemeinschaft
  6. Stadt, Gemeinde
  7. Stadtbezirk / Gemeindeteil mit Selbstverwaltung
  8. Stadtteil / Gemeindeteil ohne Selbstverwaltung

Um also an die Stadtbezirksteile Münchens zu kommen, müsste man die Verwaltungsgrenze (boundary=administrativ) auf der Verwaltungseben 10 (admin_level=0) anfragen.

Ich hoffe ihr könnt etwas mit dieser kurzen Anleitung anfangen. Wenn nicht, einfach in den Kommentaren nachfragen.

Beitrag teilen:

Social Media Tools für Journalisten

Hier ein paar nützliche Social Media Tools für die Recherche in den sozialen Netzwerken. Dazu noch ein paar Beispiele, was man mit Social Media-Recherchen so anfangen kann. Grundlage für diese Tipps sind die Notizen, welche ich bei einem Vortrag von tame-Gründer Frederik Fischer im Rahmen der DJV-Tagung 24 Stunden Zukunft gemacht habe.

1. Followerwonk
Finde Twitter-Nutzer aufgrund ihrer Biografie und filtere sie nach Einfluss. Followerwonk ist ein praktisches Tool um eine Expertenlisten anzulegen. Beispiel: „Einflussreiche Journalisten aus der Ukraine“

https://followerwonk.com

2. twXplorer
Finde den richtigen Hashtag und andere relevanten Begriffe zu einem bestimmten Thema. Beispiel: „Welchen Hashtag benutzen Twitter-Nutzer, um über die Syrien-Krise zu sprechen?“

http://twxplorer.knightlab.com/search/

3. Topsy
Finde die Anzahl an Tweets zu einem bestimmten Thema, um zum Beispiel Trends zu bestimmen. Zudem kann Topsy den (gesamten?) Twitter-Verlauf durchsuchen. Beispiel: „Wer hat zuerst über Terry Pratchetts Tod getwittert“

http://topsy.com/

4. Nuzzle und tame
Welche Themen war heute wichtig? Außerdem kann Nuzzle einem Benachrichtigungen schicken, wenn Themen plötzlich viral werden. Beispiel: „Welche Themen waren gestern wichtig und was trendet gerade in meinem Netzwerk?“

http://nuzzel.com/https://tame.it/

5. Trendsmap
Wo sind gerade welche Themen wichtig?

http://trendsmap.com/

6. Erweiterte Suche in Twitter
Genau das, was der Name nahelegt. Bonus: Tweets nach Zeitraum und Ort durchsuchen.

https://twitter.com/search-advanced

7. Tweetdeck
Bietet einen guten Überblick über die eigenen Accounts. Praktische Funktionen, wie Tweets nach Engagement sortieren. Außerdem kann man mit Tweetdeck planen, wann ein Tweet abgeschickt wird. Zudem kann man sich benachrichtigen lassen, wenn zu bestimmten Themen getwittert wird.

https://tweetdeck.twitter.com/ oder als App

8. ShareTally
Finde heraus, wie oft eine Link in allen sozialen Netzwerken geteilt wurde. Simpel, aber definitiv eines meiner Lieblingstools.

Link http://sharetally.co/

9. Facebook Graph Search
Um die Facebook Open Graph-Suche zu aktivieren, muss man zur Zeit noch seine Profilsprache auf Englisch (US) umstellen.

Man kann semantisch nach dem Muster „Facebook-Nutzer die X machen, machen auch Y“ suchen. Beispielhaft könnte man zum Beispiel nach Freunden suchen, die Pegida mögen: https://www.facebook.com/browse/friended_fans_of/?page_id=790669100971515

Wozu kann man Social Media als Journalist nutzen?
Der US-amerikanische Journalist Andy Carvin nutzte Twitter um Informationen über den Arabischen Frühling zu sammeln und zu verifizieren, und das von seinem Schreibtisch in Washington aus. Sein Erfolg baut vor allem auf sein gigantisches Twitter-Netzwerk auf. Stichwort: #followerpower

Storyful ist ein erfolgreiches irisches Unternehmen, welches sich auf Social Media-Verifikation spezialisiert hat und bezeichnet sich selbst als „erste Nachrichtenagentur für die soziale Medien“. Zu den Kunden gehören unter anderem Reuters, Bloomberg und die New York Times.

Pegida mag dich analysierte detailliert die Facebook-Freunde von Pegida. Das Projekt wurde viral und von fast allen Medien aufgegriffen. Die Kernaussage: Pegida-Mitglieder sind arbeitslose Männer in ihren Dreißigern. Auch wenn diese These sehr gefällig ist, sollte man mit derartigen Analysen vorsichtig sein, da Facebook-Fans von Pegida nur eine Teilmenge der Grundgesamtheit Pegida bilden.

Diese Aufzählung ist natürlich unvollständig. Ich freue mich aber auf weitere Beispiele, wie Journalisten mit Social Media-Recherche Erfolg haben können.

Beitrag teilen:

Nebeneinkünfte der Bundestagsabgeordneten visualisieren

Letzthin habe ich erklärt, wie man die Nebeneinkünfte der Bundestagsabgeordneten scrapen kann. Jetzt wird es Zeit diese Daten zu filtern und zu visualisieren. Leider machen es einem die angegebenen Einkommensstufen nicht gerade leicht eine eindeutige Geschichte zu finden und zu erzählen. Dazu aber später mehr.

Mein Tool der Wahl zu ersten Datenauswertung ist entweder Excel, OpenOffice oder LibreOffice. Auf der Suche nach einer Geschichte kann man schnell Daten filtern, sortieren oder visualisieren.

Eine erste Auswertung kann man über die Anzahl der Nebenkommen machen. In diesem Fall um die durchschnittliche Zahl der Nebeneinkommen pro Abgeordneten(-sitz) herauszufinden. Man sieht deutlich, welche Fraktion die meisten Nebeneinkommen hat.

nebeneinkuenfte-fraktionen
Durchschnittliche Anzahl der Nebeneinkünfte pro Sitz 

Spannend sind hierbei auch einzelne Politiker. Dr. Peter Gauweiler (CSU) und Dr. Daniela De Ridder (SPD) mit 19, beziehungsweise 13 Nebeneinkommen scheinen schwer beschäftig zu sein. Gauweiler verdient sein Geld als Anwalt in der eigenen Kanzlei und De Ridder als Beraterin im universitären Umfeld. Insgesamt haben nur ein Fünftel der Bundestagsabgeordneten ein Nebeneinkommen angegeben.

Stufenproblem: So bald man anfängt mit der Höhe der Nebeneinkünfte zu arbeiten, stößt man schnell auf ein Problem. Da nur Einkommensstufen angegeben sind, weiß man nicht genau wie viel der einzelne Abgeordnete eigentlich verdient. Es macht als Sinn, erstmal den unteren Grenzwert des Intervals für die Berechnung heranzuziehen. Für die Stufe 4, nehmen wir als ein Einkommen von 15.001 € an Damit lässt sich schon mal grob rechnen und kann sich sicher sein, dass man niemand ein zu hohes Nebeneinkommen anhängt.

Wer es nicht mehr vor Augen hat, das sind die einzelnen Einkommensstufen:

  • Stufe 1: 1.000 bis 3.500 €
  • Stufe 2: über 3.500 € bis 7.000 €
  • Stufe 3: über 7000 € bis 15.000 €
  • Stufe 4: über 15.000 € bis 30.000 €
  • Stufe 5: über 30.000 € bis 50.000 €
  • Stufe 6: über 50.000 € bis 75.000 €
  • Stufe 7: über 75.000 € bis 100.000 €
  • Stufe 8: über 100.000 € bis 150.000 €
  • Stufe 9: über 150.000 € bis 250.000 €
  • Stufe 10: über 250.000 €

Wenn wir aber mehrere Personen miteinander vergleichen wollen, reicht der untere Grenzwert nicht mehr aus. Dummerweise hat aber die Stufe 10 keinen oberen Grenzwert. Das heißt man weiß nicht, ob die Spitzenverdiener nur 250.001 € bekommen oder, überspitzt gesagt, 250.000.000 €. In meinem Diagramm habe ich versucht die nach offenen Intervalle durch einen Verlauf am oberen Ende des Balkens deutlich zu machen.

nebeneinkuenfte-topverdiener
Spitzenverdiener im Bundestag, Nebeneinkünfte in Intervallen

Auch wenn man nicht genau weiß, was Gauweiler, Stegemann, Michelbach und Harbarth tatsächlich verdienen, man kann davon ausgehen, dass es eine ganz schöne Summe ist. Ob da wohl noch Zeit für die Erfüllung des Bundestagsmandats bleibt? Hier lohnt es sich bestimmt noch mal genauer hinzuschauen.

Auch wenn man versucht die gesamten Nebeneinkünfte der einzelnen Fraktionen zu visualisieren, stößt man auf das Obergrenzenproblem. Auch hier bleibt einem nur in der Darstellung transparent zu machen, dass bei der Union das maximale Einkommen nach Oben hin offen ist.

nebeneinkuenfte-summe
Relative Nebeneinkünfte der Fraktionen pro Sitz (links) und einmal gesamt (rechts)

Das Ergebnis ist in meinen Augen eindeutig, obwohl wir nur ungefähre Intervalle angeben können. Die CDU/CSU-Fraktion hat sowohl absolut als auch relativ die höchsten Nebeneinkünfte. Ob die Nähe zur Wirtschaft gut ist, sei dahin gestellt. Für die Zukunft wäre es schön, ein noch feineres Stufenmodell zu haben. Zu dem sollte es keine Stufe 10 geben, welche nach oben hin offen ist. Im Vergleich zum vorherigen 3-Stufen-Modell ist aber auch das jetzige 10-Stufen-Modell schon eine große Verbesserung.

Interessant auch zum Weiterlesen: https://www.abgeordnetenwatch.de/blog/nebeneinkuenfte2014

Beitrag teilen:

Nebeneinkünfte der Abgeordneten mit Ruby scrapen

Die Nebeneinkünfte der Bundestagsabgeordneten sind endlich online, obwohl es diesmal ein wenig länger gedauert hat, bis auch der letzte Abgeordnete seine Einkommenserklärung abgegeben hat. Es ist immer spannend mal zu sehen was unsere Politiker eigentlich so nebenher verdienen. Da diese Daten vom Bundestag nicht systematisch aufbereitet werden, sondern auf die 631 Profilseiten der einzelnen Abgeordneten verstreut sind, fängt man erstmal nichts damit an. Um diese Daten in eine geeigneteres Format zu bringen, habe ich ein kleine Ruby-Script (Scraper) geschrieben.

Ich verwende für meinen Scraper die Ruby-Bibliothek Nokogiri. Diese Bibliothek ermöglicht es ganz einfach bestimmte HTML-Elemente über ihre Klasse oder ID anzusprechen.

1
2
3
4
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'json'

Zuerst brauchen wir die Liste aller Bundestagsabgeordneten und den Link zu ihrem Profil. Dafür speichern wir erst mal alle Indexseiten ab. Nur die Indexseiten für die Nachnamen mit Q und X schließen wir aus, da es diese Wahlperiode keine Abgeordneten mit den entsprechenden Nachnamen gibt.

6
7
8
9
alphabeticalList = []
(('A'..'Z').to_a-['Q','X']).each do |b|
  alphabeticalList &lt;&lt; "http://www.bundestag.de/bundestag/abgeordnete18/biografien/#{b}/"
end

Als Nächstes durchsucht das Skript die alphabetischen Indizes aller Abgeordneten nach Links zu den einzelnen Profilen. Wenn alles gut läuft, kommen wir auf  631 Abgeordneten-Profile insgesamt.

11
12
13
14
15
16
17
18
19
20
profileUrls = []
alphabeticalList.each do |url|
  doc = Nokogiri::HTML(open(url))
  urlList = doc.css('ul.standardLinkliste')
  urlList.css('li a').each do |l|
    profileUrls &lt;&lt; url+l['href']
  end
  sleep 1
  puts "Getting URLs from ..."+url[-3,2]+" ...found #{profileUrls.length}"
end

Jetzt schauen wir uns die Nebeneinkünfte der einzelnen Abgeordneten an. Ich habe mich hierfür für eine Datenstruktur nach dem Schema „Wie oft?“/“Welche Höhe?“ entschieden.

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
allMembers = []
profileUrls.each do |url|
  currentDoc = Nokogiri::HTML(open(url).read)
  currentDoc.encoding = 'UTF-8'
 
  nameAndParty = currentDoc.css('div.biografie h1').inner_html
  name, party = nameAndParty.split(',').map {|w| w.strip}
 
  member = {
      :name =~ name,
      :party =~ party,
      :s1m =~ 0,
      :s2m =~ 0,
      :s3m =~ 0,
      :s4m =~ 0,
      :s5m =~ 0,
      :s6m =~ 0,
      :s7m =~ 0,
      :s8m =~ 0,
      :s9m =~ 0,
      :s10m =~ 0,
      :s1j =~ 0,
      :s2j =~ 0,
      :s3j =~ 0,
      :s4j =~ 0,
      :s5j =~ 0,
      :s6j =~ 0,
      :s7j =~ 0,
      :s8j =~ 0,
      :s9j =~ 0,
      :s10j =~ 0
    }

Das HTML-Element mit der Klasse „p.voa_tab1“ enthält die Daten zu den Nebeneinkünften. Hat ein Bundestagsabgeordneter mehrere Nebeneinkünfte, kommt diese Element mehrfach vor. Jedes Mal wenn in einem Element ein bestimmtes Muster vorkommt,  wird der Zähler für das jeweilige Einkommen um 1 erhöht.

55
56
57
  currentDeclaration = currentDoc.css('p.voa_tab1')
  currentDeclaration.each do |a|
    str = a.inner_html

Wenn ein bestimmtes Muster vorkommt, wird das in der Konsole zurückgeben. Dadurch kann überprüft werden, ob der Scraper halbwegs richtig funktioniert. Jeder Abgeordnete ist ein Objekt und wird in ein Array geschrieben, es sei denn es handelt sich um Jakob Maria Mierscheid.

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
    for i in 1..11
      if str.match(/\bStufe #{i}\b/) &amp;&amp; str.match(/monatlich/)
        puts str
        member[:"s#{i}m"] += 1
      end
    end
 
     for j in 1..11
      if str.match(/\bStufe #{j}\b/) &amp;&amp; str.match(/\bjährlich\b|(\s20(09|10|11|12|13|14))/)
        puts str
        member[:"s#{j}j"] += 1
      end
    end
  end
 
      puts "Name: #{member[:name].ljust(30)} Party: #{member[:party].ljust(10)}"
        unless name == "Jakob Maria Mierscheid"
      allMembers &lt;&lt; member
    end
end

Am Schluss schreiben wir alle Daten noch in eine JSON-Datei. Dieses Format ermöglicht es uns die Daten direkt in einer Webanwendung zu verwenden oder eine Tabelle daraus zu erstellen.

81
82
83
File.open("outsideIncome.json","w") do |f|
  f.write(allMembers.to_json)
end

Der Scraper hat momentan noch ein paar Schwächen, die ich aber nach und nach beseitigen werde:

  • Manchmal gibt es noch doppelte Ergebnisse, wenn die Bundestagsabgeordneten mehrere Nebeneinkünfte in einer Zeile angeben
  • Es wird noch nicht unterschieden, ob jemand ausgeschieden (z.B. Edathy) oder gestorben ist, was dazu führt, dass der Scraper zur Zeit 634 Nebenabgeordnete findet.

Aber: Wie kann man das Skript jetzt eigentlich nutzen? Ganz einfach, dazu müssen nur Ruby, Ruby Gems und Nokogiri installiert werden. Ist das geschehen, kann man das Skript mit ruby meinscraper.rb im Terminal ausgeführt werden.

Das vollständige Script findet ihr auf Github, zur weiteren Verwendung freigegeben. Eine bereinigte Tabelle mit allen Nebeneinkünften habe ich bei Google hochgeladen. Ich erhebe natürlich keinen Anspruch auf Vollständigkeit und Korrektheit. Wenn ihr Fehler finden solltet, gebt mir einfach kurz Bescheid!

Beitrag teilen:

Lobbyliste: Adressen direkt in Google Docs geocodieren

Wenn man eine Datensatz mit vielen Adressen hat, muss man diese manchmal von Hand geocodieren. Geocodieren heißt in diesem Fall, dass man jedem Ort Koordinaten zuweist.

Beispiel:
Adresse: Deutscher Bundestag, Platz der Republik 1, 11011 Berlin
Koordinaten: 51.1758057 Nord (Breitengrad = Latitude), 10.4541194 Ost (Längengrad = Longitude)

Manche Dienste (Google Fusion Tables, CartoDB usw.) bieten diesen Dienst schon von Haus aus an. Doch oftmals gibt es für nicht-zahlende Benutzer Beschränkungen. In meinem Beispiel versuche ich die Lobbyliste des Bundestags mit über 2000 Adressen zu geocodieren. Mit meinem kostenlosen CartoDB-Account könnte ich zum Beispiel nur 100 Adressen gecodieren.

Ich schreibe gerade noch eine Anleitung, wie ich das PDF in eine Tabelle umgewandelt habe. Diese werde ich in Kürze hier verfügbar machen. Soweit kann ich euch verraten: PDFs in Tabellen umzuwandeln ist kein Spaß 😉
geocode-01-data

Als ersten Schritt muss man ein Skript kopieren, dass wir später in Google Docs einfügen. Das JavaScript findet sich hier und wurde vom Kartendienstleister MapBox entwickelt. Einfach alles markieren und kopieren.

Nun muss man den Skripteditor öffnen…
geocode-03-scripteditor

… und den kompletten, bisher bestehenden Code function() {} mit dem eben kopiertem Code ersetzen. Außerdem muss man oben in der Titelzeile, wo noch Unbenannt steht, als Titel geo eintragen. Nach einem Klick auf Datei > Speichern kommt man wieder zur Tabelle zurück.
geocode-04-insertcode

Jetzt dürfte in der Menüleiste neben Hilfe noch ein weiterer Reiter Geo auftauchen. Ist das nicht der Fall, einfach die ganze Seite neu laden. Wenn der Reiter Geo jetzt auftaucht, können wir mit dem Geocodieren beginnen. Einfach im Reiter Geo > Geocode adresses auswählen. Nun muss das Skript einmalig autorisiert werden.

geocode-06-authorise

Nach der Autorisierung muss man in der Tabelle die Spalten auswählen, welche man geocodieren möchte. In unserem Fall ist das Adresse und Postleitzahl. Nun kann man nochmals auf Geo > Geocode adresses gehen. Es sollte nun das Geocodieren-Fenster aufgehen.

geocode-07-service

Unter Geocoding service kann man zwischen mapquest, yahoo und cicero auswählen – Bei mir funktionierte jedoch nur mapquest ohne API-Key. Mit einem Klick auf Geocode geht’s los. Bei mir hat das Geocodieren etwa ein dreiviertel Stunde gedauert.

geocode-08-done

Was sofort auffällt ist, dass da Geocoding-Skript der Tabelle drei neue Spalten hinzugefügt hat: geo_latitude, geo_longitude und geo_accuracy. Die ersten beiden Werte sind die Koordinaten, der dritte Wert gibt die Genauigkeit an.
geocode-09-columns

Manchmal kommt es vor das eine Adresse nicht geocodiert wurde. Bei mir war das zum Beispiel bei Adressen der Fall, bei denen ein Postfach angegeben wurde. Diese Adressen habe ich einfach noch mal geocodieren lassen, diesmal aber nur die Postleitzahl und der Ort. Die Genauigkeit der Geocodierung fällt in diesem Fall auf city, was aber für meine Visualisierungsidee vollkommen ausreicht.

Die Visualisierung habe ich in CartoDB gemacht. Wie man ein solche Cluster-Visualiserung macht, werde ich ein anderes Mal erklären.

geocode-10-visualize

Die vollständige Visualisierung findet ihr hier, den vollständigen Datensatz im Google Drive gibt es hier. Die Tabelle ist noch nicht perfekt und es fehlen noch einige Felder. Ich werde versuchen, dass noch besser hinzubekommen.

Sagt mir Bescheid wie ihr mit der Anleitung klar kommt.

Viel Spaß beim Experimentieren!

Beitrag teilen:

Vektorkarten: Shapefiles nach KML exportieren mit QGIS

Digitale Vektorkarten müssen oft als KML vorliegen, damit man sie zum Beispiel mit CartoDB oder Google Fusion Tables verwenden kann. Die Ausgangskarten kann man oft als sogenanntes ESRI-Shapefile herunterladen. Das Problem ist, dass Shapefiles aus mehreren Dateien bestehen (*.shp für die Geometrie, *.dbf für Daten, *.prj für die Projektion usw.). Das an XML angelehnte Dateiformat KML ist da deutlich praktischer, da es alle Daten in eine Datei zusammenfasst und diese für Menschen halbwegs lesbar bleiben.

In unserem Fall wollen wir eine Karte der Wahlkreise Deutschlands von der Website des Bundeswahlleiterbüros ins KML-Format umwandeln. Zum Konvertieren verwenden wir die mächtige Open Source Geo-Software QGIS. Diese ermöglicht es, Shapefiles zu bearbeiten und in verschiedene Formate zu exportieren.

Importieren kann man das Shapefile über Layer > Vektorlayer hinzufügen oder in dem man die Datei einfach auf die Arbeitsfläche von QGIS zieht. Sieht man jetzt eine Karte der Wahlkreise, hat alles geklappt. Im folgenden Schritt schauen wir uns an, was für Daten die Karte beinhaltet. Dazu klickt man mit Rechts auf den Layer Namen und geht anschließen auf Attributtabelle öffnen.qgis-open-table

Hier sieht man die Namen und Nummern der Wahlkreise. Wichtig ist es, sich zu überlegen, worüber man später seine Wahlkreise identifizieren möchte. In unserem Fall bietet sich WKR_NR an. Merken!qgis-attribute-table

Nach Schließen des Fensters öffnen wir den Export-Dialog Speichern als mit einem weiteren Rechts-Klick auf den Layer-Namen.

In dem aufgehenden Fenster muss als Format Keyhole Markup Language ausgewählt und ein Speicherort festgelegt werden. Unter mehr Einstellungen kann man nun die WKR_NR im Feld NameField eintragen und wenn man möchte, im Feld DescriptionField noch den Wahlkreisname WKR_NAME.qgis-export-dialog

Ältere Versionen von QGIS: In älteren Versionen von QGIS gibt es die beiden Felder Name- und Description-Field noch nicht. Hier gibt es nur eine Textfeld OGR Attributerzeugung. Um zum gleichen Ergebnis zu kommen, muss man hier einfach folgendes eintragen:

NameField=WKR_NR
DescriptionField=WKR_NAME

Mit einem Klick auf OK wird das KML exportiert. Ob alles geklappt hat, kann man überprüfen, indem man das KML mit Google Earth öffnet. Liegen die Wahlkreise dort wo sie liegen sollten (Deutschland) hat man gewonnen. Der Weiterverarbeitung der KML-Datei mit anderen Programmen und Anwendungen steht nun nichts mehr im Wege.

Für die Nerds: Durch das Ausfüllen von Name- und DescriptionField hat später jedes Polygon, beziehungsweise jeder Wahlkreis, die folgende Datenstruktur:

<Placemark>
    <name>1</name>
    <description>Flensburg Schleswig</description>
    <Polygon>9.982564417898971,54.644060720627934</Polygon>
</Placemark>

Happy coding!

Beitrag teilen: