Ways to make feature tile layers interactive

Most maps do not just consist of a static base map. Usually you want to visualize some additional data on top of that base map. This additional data, for example POIs, tracks or boundaries, should be presented in a way that the user can interact with the data.

If your data does not exceed a certain size, the browser does a great job in rendering the data and taking care of the interaction. Just download the feature geometries to the client using GeoJSON, KML, or some other vector format, and use SVG or canvas to render the geometries.

But if you try to map all deaths in the Iraq war, show election data in a choropleth map or display a large number of buildings, then rendering your features inside the browser does not work that well any more. For several reasons: First, it will take some time to transfer the whole vector data to the client. Then, rendering gets slow and your map does not feel that responsive any more when panning or zooming.

So at this point you will do the same as you (or someone else) did with your base map: You will render your geometries on the server-side and serve the data as image tiles. But with plain images we are loosing interactivity! We still want to be able to click on features and we want visual feedback when hovering a feature, so that we know where to click! So, that is what this post is about: How do you preserve interactivity when using feature tiles?

In the following we will take a look at three different web mapping applications that use tiles for displaying features and we will compare the different approaches taken to make these tile layers interactive. Read the rest of this entry »

Comments off

Geo BI with Google Fusion Tables?

Google Fusion Tables has been around for a while, but inspired by the talks at Google I/O 2011 I felt like finally giving it a try. For quite a while I wanted to generate some maps for my family’s winery, so I thought, let’s see how this would work with Google Fusion Tables. Read the rest of this entry »

Comments (13)

Moving your SVN repository from Kenai to Google Code with svnsync

Do you want to move your svn repository but without losing your history? No problem with svnsync!

  1. Create a new Google Code project with a SVN repository.
  2. Reset the Google Code SVN repository.
    By default every Google Code SVN repository does have an initial structure, but svnsync needs an empty repository. So go to the “Source” tab and at the bottom of the page there is a link “reset this repository”.
  3. Now open up a terminal.
    $ export FROMREPO=https://svn.kenai.com/svn/YOUR-PROJECT
    $ export TOREPO=https://YOUR-PROJECT.googlecode.com/svn/
  4. Then you will be asked for your username/password after running this command.
    $ svnsync init ${TOREPO} ${FROMREPO}
  5. And finally to start the process, execute the following:
    $ svnsync --non-interactive sync ${TOREPO}

See also: using-svnsync

Comments (3)

Codemetriken in PHP

Eine Übersicht von Tools, die zur Verbesserung der Codequalität in PHP eingesetzt werden können:

phpcpd (PHP Copy&Paste Detection)

Einzige Aufgabe dieses Tools von Sebastian Bergmann ist es, den Code auf die Verwendung des Copy&Paste-Anti-Pattern hin zu untersuchen. Ab wann eine Code-Passage als „kopiert“ gilt, lässt sich über die Anzahl der Zeichen/Zeilen, die identisch sind, einstellen.

Eine Beispiel-Ausgabe findet sich auf der Projekt-Homepage von phpcpd.

phploc (PHP Lines of Code)

Auch dieses kleine Tool ist von Sebastian Bergmann. Es erstellt einfache Codemetriken, wie die Anzahl der Zeilen, der Kommentar-Zeilen, der Klassen, und mehr.

Eine Beispiel-Ausgabe findet sich auch wieder auf der Projekt-Homepage von phploc.

PHP Depend

Komplexere Metriken, zum Beschreiben und Charakterisieren der Architektur eines Systems, erstellt PHP Depend, das Äquivalent zu JDepend.

Hauptbestandteil dieser Analyse ist die sog. „Overview Pyramid“ (weitere Informationen dazu: “The overview pyramid in detail” (PDF) oder “Software-Metriken” (PDF)), die drei wichtige Aspekte (Größe/Komplexität, Kopplung und Verwendung der Vererbung) in einem übersichtlichen Format darstellt.Overview Pyramid

Die linke, untere Seite beschreibt Größe und Komplexität des Systems. Die Maßzahlen sind im einzelnen (jeweils von unten nach oben):

  • Direkt erfassbare Kennzahlen:
    • CYCLO (zyklomatische Komplexität): Maß für die Komplexität des Kontrollflusses eines Programms
    • LOC: Lines of Code
    • NOM: Number of Methods
    • NOC: Number of Classes
    • NOP: Number of Packages
  • Abgeleitete Kennzahlen:
    • Intrinsic operation complexity (CYCLO/LOC)
    • Operation structuring (LOC/NOM)
    • Class structuring (NOM/NOC)
    • High-Level structuring (NOC/NOP)

Die abgeleiteten Kennzahlen ermöglichen Aussagen über die Granularität des Systems, zum Beispiel wieviele Methoden in einer Klasse vorkommen.

Die rechte, untere Seite der Pyramide beschreibt die Kopplung innerhalb des Systems.

  • Direkt erfassbare Kennzahlen:
    • FANOUT: Zahl der aufgerufenen Klassen
    • CALLS: Zahl der Methoden-Aufrufe
  • Abgeleitete Kennzahlen:
    • Coupling disperson (FANOUT/CALLS): Wie viele andere Operationen werden von einer Operation aus aufgerufen?
    • Coupling intensity (CALLS/NOM) : Wie stark sind die Klassen gekoppelt?

Der obere Teil der Pyramide gibt die folgenden, direkt erfassbaren Kennzahlen an, die die Verwendung von Vererbung charakterisieren:

  • AHH: Average Hierarchy Height (Tiefe des Vererbungsbaums)
  • ANDC: Average Number of Derived Classes (durchschnittliche Anzahl der direkt abgeleiteten Klassen: Breite des Vererbungsbaums)

PHP CodeSniffer

PHP CodeSniffer dient dazu, den Code auf die Einhaltung von Coding-Standards hin zu überprüfen. Dabei wird folgendes untersucht:

  • Vollständige Kommentar-Abdeckung
  • Einrückung / Groß- und Kleinschreibung
  • Namenskonventionen
  • Gestaltung von Kontrollstrukturen / Klammersetzung
  • und mehr

Vorgefertigte Coding-Standards zum Beispiel von Zend oder PEAR können verwendet werden oder es können auch eigene Coding-Standards mit neuen Regeln angelegt werden. Wie dies funktioniert, wird hier beschrieben: PHP Code Sniffer – Parameter und eigene Regelset.

PHPUnit – Code Coverage

PHPUnit beinhaltet auch eine Funktionalität zur Überprüfung der Code-Abdeckung der Unit-Tests: Code Coverage Analysis.

Als Ausgabe wird ein übersichtlicher Report erstellt, aus dem auch genau ersichtlich wird, welche Codezeilen durch welche Tests abgedeckt wurden und welche gar nicht getestet wurden.


Alle diese Tools lassen sich über den PEAR-Installer installieren. Die jeweiligen Channels finden sich auf den Projekt-Homepages.

Wer sich näher mit der Qualitätssicherung in PHP beschäftigen will/muss, dem kann ich folgende Seiten empfehlen:

Comments off

KML-Dateien mit europäischen Jugendherbergen

Letztes Jahr mussten die KML-Dateien noch selber erstellt werden, mittlerweile bietet Hosting International auch Karten an, wobei die einzelnen Jugendherbergen über KML-Dateien eingeblendet werden.

Alle Jugendherbergen in Deutschland werden auf dieser Karte angezeigt, dies ist die passende KML-Datei dazu.

Für alle anderen Länder sind die URL’s ähnlich aufgebaut. Es muss einfach das Länderkürzel ersetzt werden.

Zum Beispiel für Frankreich (FR):
URL zur Karte: http://www.hihostels.com/dba/cmap-FR.de.htm?himap=Y
URL zur KML-Datei: http://www.hihostels.com/mapcoord/FR.de.kml

Oder auch für Luxemburg (LU):
URL zur Karte: http://www.hihostels.com/dba/cmap-LU.de.htm?himap=Y
URL zur KML-Datei: http://www.hihostels.com/mapcoord/LU.de.kml

Comments (1)

typeof() in C++

Wie findet man in C++ zur Laufzeit heraus, von welchem Typ eine Variable ist?

int* a, b;

Ist b jetzt vom Typ “Zeiger auf Integer” oder vom Typ “Integer”?

Mit folgendem Aufruf hat man dies schnell geklärt:

int* a, b;
std::cout << (typeid(b) == typeid(int*)) << std::endl;
//Ausgabe: 0

Siehe auch: typeid()

Comments off

Nautilus-Scripts: Geo-Referenzierte Photos in Google Maps/Earth anzeigen

Um “mal eben” eine Auswahl an geo-referenzierten Photos aus dem Dateimanager Nautilus auf einer Karte in Google Maps/Earth anzeigen zu lassen, habe ich mir 2 kleine Bash-Skripte für Nautilus-Scripts geschrieben, die mir dabei behilflich sind.

Nun selektiere ich einfach ein paar Photos, mache einen Rechtsklick und wähle “Skripte > Open in Google Maps” aus.

Im Hintergrund werden jetzt die EXIF-Header der ausgewählten Photos mit Hilfe von exiftool auf Koordinaten untersucht. Es wird dann eine temporäre HTML-Seite in Firefox geöffnet, die eine Google Maps-Karte mit allen Photos enthält.

Alternativ können die Photos auch in Google Earth angezeigt werden. Hierfür wird dann eine temporäre KML-Datei erstellt.

Und so lassen sich die Skripte einrichten:

Read the rest of this entry »

Comments (1)

Geocoding mit Google Earth: Karte mit allen Jugendherbergen in Deutschland

Update:

Mittlerweile bietet Hosting International auch direkt Karten an, siehe KML-Dateien mit europäischen Jugendherbergen.

Beim Planen einer Tour in die Provence mit GoogleMaps ist mir aufgefallen, dass dafür gar keine Layer/Karten mit allen Jugendherbergen zu finden sind.

Deshalb habe ich mir heute auf die Schnelle ein kleines Java-Programm geschrieben, dass alle Jugendherbergen von Hostelling International heraussucht und die Adressen in eine KML-Datei schreibt. Über GoogleEarth habe ich diese Adressen dann geokodieren lassen.

Hochgeladen in GoogleMaps kann diese Karte nun frei verwendet werden:

Karte mit allen Jugendherbergen in Deutschland (KML)

Und dies ist die Karte für Frankreich:

Karte mit allen Jugendherbergen in Frankreich (KML)

Da in GoogleMaps nur die Jugendherbergen auf der Karte angezeigt werden, die links auf der im Inhaltsverzeichnis ausgewählten Seite aufgelistet sind, schaut man sich es besser in GoogleEarth über die KML-Dateien an.

Comments (5)