Der richtige Treffer

Geografische Suche mit PHP

Aus einer Menge an Orten soll der Nutzer möglichst einfach den nächstgelegenen finden. Zeit, sich mit der geografischen Suche in PHP zu beschäftigen.

internet, webdesign, php, api, geo-information, open street map

© Internet Magazin

internet, webdesign, php, api, geo-information, open street map

Für die Arbeit mit Standort-Informationen gibt es eine Reihe von APIs/Datenquellen und Bibliothek. Es kann beispielsweise durchaus aufschlussreich sein (mit gewisser Treffergenauigkeit) die Besucher einer Website anhand ihrer IP-Adresse in der passenden Landessprache zu begrüßen oder eingegebene Straßen- und Orts-Angaben gegen eine Datenbank zu validieren.Hierzu verfügt zum Beispiel das Projekt Open Street Map über eine wahre Flut von Geo-Informationen - neben Straßen beispielsweise auch über die genauen Aufstellplätze vieler Briefkästen oder Apotheken. Möchte man aber nur mal kurz eine Postleitzahl oder einen Ort nachschlagen, empfiehlt es, sich aufgrund des Datenumfangs eventuell auf andere Quellen zurückzugreifen.Ein Klassiker in Bezug auf Daten zu Postleitzahlen, Länder, Bundesländern, Orten und Städten/ Gemeinden ist Open Geo DB (open-geodb.giswiki.org/wiki/OpenGeoDB ). Die hier bereitgestellten Daten enthalten neben Deutschland die benachbarten Länder Belgien, Litauen, Österreich und die Schweiz. Sie werden als SQL-Dumps zum Import in eine lokale Datenbank bereitgestellt. Die Basisarbeit ist durch Download und Einspielen der benötigten Dateien schnell erledigt.1. opengeodb-begin.sql

Diese Datei enthält die Grundstrukturen der Datenbank. Sie stellt die notwendigen Tabellen und Feld-Definitionen bereit.2. AT.sql - ÖsterreichBE.sql - BelgienCH.sql - SchweizDE.sql - DeutschlandLI.sql - Lichtenstein

Je nach gewünschtem Land können hier die einzelnen Daten importiert werden. Hierbei handelt es ganz allgemein um Standorte (Locations), Koordinaten (coordinates) und damit verbundene Daten (Text- Werte und numerische Werte). Hierbei liegen die Angaben teilweise auch in mehreren Sprachen vor.3. opengeodb-end.sql

Zur einfacheren Suche werden hier die Indizes auf die soeben importierten Tabellen angelegt.4. changes.sql

Letzte Änderungen werden in einer separaten Datei geliefert und helfen dann beim Update.5. extra.sql

Zusätzliche Daten wie etwa Kontinente finden sich in diesem SQL-Dump.6. AThier.sqlBEhier.sqlCHhier.sqlDEhier.sqlLIhier.sql

Die Hierarchiedaten enthalten die eigentlichen Strukturen. Hier sind die Beziehungen und Stufen der einzelnen Einträge definiert. Jene Tabelle gibt vor, bei welchen Einträgen es sich beispielsweise um eine Stadt handelt und in welchem Bundesland diese zu finden ist.

Hierarchische Daten

Am interessantesten sind hierbei die Hierarchie-Daten, welche Sie in der Tabelle geodb_hierarchies finden. Ein Standort (location) wird hierbei über loc_id angegeben, dessen Hierarchie-Stufe über das Feld level.Um einen einfachen Zugriff auf übergeordnete Stufen zu ermöglichen, sind in weiteren Feldern id_lvl1 bis id_lvl9 außerdem alle übergeordneten Stufen zu finden - zu einer Stadt also zum Beispiel die Location-IDs für Kontinent, Land, Bundesland und Kreis.Um über die Datenbank auch historische Datenstände abbilden zu können, existieren in den verschiedenen Tabellen der Open Geo DB außerdem noch Spalten die angeben, von/bis wann jene Informationen (wie die Zugehörigkeit zu oder der Name eines Kreises) gültig sind. Dies muss entsprechend beachtet werden, wenn man jeweils mit den aktuellen Daten arbeiten möchte.Die Typen der Standorte lassen sich anhand der loc_id der Tabelle geodb_locations zuordnen. Deren Bedeutung ist wie folgt:>>>> 100100000 Erdteil>>>> 100200000 Staat/Land>>>> 100300000 Bundesland>>>> 100400000 Regierungsbezirk>>>> 100500000 Landkreis>>>> 100600000 Politische Gliederung>>>> 100700000 Ortschaft>>>> 100800000 Postleitzahlgebiet>>>> 100900000 OrtsteilNachzulesen ist das auch unter opengeodb.giswiki.org/wiki/OpenGeoDB-Dateninhalt . Die als Wiki organisierte Website ist auch ansonsten eine gute Informationsquelle.Pro Standort existieren dann verschiedene Angaben je nach Typ in Tabellen geodb_textdata beziehungsweise geodb_intdata oder geodb_floatdata. Hier einige Beispiele:>>>> 500100002 Sortiername>>>> 500100000 Name>>>> 200200000 Breitengrad (latitude)>>>> 200300000 Längengrad (longitude)>>>> 500300000 Postleitzahl>>>> 500500000 KFZ-KennzeichenFür die Stadt "Neuss" können wir auf diesem Wege in geodb_ textdata einen Eintrag mit dem Namen (500100000) "Neuss" finden, welcher in geodb_locations als "Politische Gliederung" (100600000) markiert ist. Dieser besitzt (derzeit) die Location- ID 21554.

internet, webdesign, php, api, geo-information, open street map

© Internet Magazin

Bibliothek: Das PHP-PEAR-Paket für Geonames erlaubt den einfachen Zugriff auf den Web Service.

Ein Blick in die Hierarchie-Tabelle geodb_hierarchies führt zu einem Eintrag der angibt, dass es sich hier um einen eine Gliederung auf Ebene (Level) 6 handelt und die übergeordneten Ebenen-IDs 104,105,117,181,195,21554 lauten. Hierzu lassen sich dann anhand der DB ebenfalls beispielsweise die Namen und Gliederungstypen nachschlagen. Hier sehen Sie zur Verdeutlichung zwei komplette Beispiele:Neuss, loc_id 21554, level 6, Politische GliederungRhein-Kreis Neuss, loc_id 195, Landkreis Düsseldorf, loc_id 181, Regierungsbezirk Nordrhein-Westfalen, loc_id 117, BundeslandBundesrepublik Deutschland, loc_id 105, Staat/Landlevel 1: loc_id 104, hierzu keine Daten vorliegendUnd als weiteres Beispiel München:München, loc_id 21179, level 6, Politische GliederungMünchen, loc_id 212, LandkreisOberbayern, loc_id 166, Regierungsbezirk Bayern, loc_id 111, BundeslandBundesrepublik Deutschland, loc_id 105, Staat/Landlevel 1: loc_id 104, hierzu keine Daten vorliegendDie Geo-Koordinaten hierzu lassen sich anhand der Tabelle geodb_coordinates mithilfe der Location-ID leicht ermitteln (Neuss: 51.2, 6.68333; München: 48.15, 11.5833).Für PHP findet in Zusammenhang mit PHP die "GeoClass for PHP" verschiedentlich Erwähnung. Die letzte Veröffentlichung liegt jedoch bereits etwa sechs Jahre zurück und die Klasse passt nicht mehr in allen Punkten zur aktuellen Datenbankstruktur von OpenGeoDB.

Geonames

Um auf einfache Weise auf bestimmte Geo-Informationen zuzugreifen, eignet sich außerdem die Datenbank des Geonames- Projekts (www.geonames.org/ ) sehr gut. Diese bieten im Gegensatz zu Open Geo DB eine Datenbank, welche weltweit Einträge umfasst. Auch hier stehen Datenbank- Exporte zum lokalen Import und der Nutzung der Daten in eigenen Programmen zur Verfügung. Außerdem werden eine Reihe von Webservice-Schnittstellen angeboten. So ist beispielsweise die Abfrage von Städten innerhalb eines gewissen Gebiets auf einfache Weise möglich:

ws.geonames.org/cities?north=51&south
=51.5&east=7&west=5&lang=de&style=
full

findet beispielsweise Neuss.Auch existiert für PHP eine PEAR-Library zum komfortablen Zugriff auf die Webservices (pear.php.net/package/Services_Geo-Names ). Hierbei ist es mit nur wenigen Zeilen möglich, beispielsweise eine Umgebungsabfrage zu realisieren:

<?php
require_once ,Services/GeoNames.php';
$geo = new Services_GeoNames();
// Postleitzahlen nahe Neuss
$postalCodes = $geo->
findNearbyPostalCodes(array(
,lat' => 51.20000,
,lng' => 6.68333,
,radius' => 10, // 10km
,maxRows' => 100
));
foreach ($postalCodes as $code) {
printf(,, - %s (%s)\", $code->
postalCode, $code->placeName);
}
echo ,,\n'';
?>

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".