|
Neuerungen zum 1. Juli 2008 Da sich unser Webserice immer größerer Beliebtheit erfreut und bisher leider wenig bis keine Kontrolle über
eventuell mißbräuchliche Nutzung des Dienstes möglich war, muss ab dem 1. Juli 2008 ein Nutzer-Schlüssel mit der
Anfrage übergeben werden. umkreis.net - Umkreissuche "for the rest of us"
Zu hunderten werden im Internet Suchformulare angeboten, in denen der Besucher der Webseite z. B. Filialen eines großen Unternehmens in seiner Nähe finden kann. Wenn es dabei die Möglichkeit gibt, in der Umgegend des Standortes zu suchen, greifen die Webseitenbetreiber oft auf teure Web-Services großer Kartenanbieter zu. In vielen Fällen reicht aber schon eine einfache Suche aus, welche die Filial-Standorte im Umkreis einer Postleitzahl aus einer Datentabelle herausfiltert. umkreis.net bietet Ihnen als Webseitenbetreiber einen denkbar einfach zur Integrtation von Umkreissuchen. Das Problem Sie haben auf Ihrem Server folgende Tabelle mit dem Namen "Adressen" liegen:
Ihre bisherige SQL-Abfrage sah vielleicht so aus: SELECT * FROM Adressen WHERE Sortiment LIKE '%farbe%'; mit dem Ergebnis
Dabei kommt die Anfrage von einer Person aus 55777 Fohren-Linden, nur ca. 8km von Blaubach entfernt, aber über 300km entfernt von Bischofsgrün. An diesem Beispiel wird deutlich, dass auch eine Suche nach einer Postleitzahl des gleichen Nummernkreises kein Ergebnis gebracht hätte. Die Lösung Sie können jetzt Ihre SQL-Abfrage von oben an unseren WebService senden. Dabei übergeben Sie per GET außerdem das PLZ-Gebiet, um das herum gesucht werden soll (z. B. 55777), den Namen der Spalte, die die PLZ enthält ("PLZ") und den Radius, in dem gesucht werden soll. http://www.umkreis.net/webService/uks?query=SELECT+%2A+FROM+Adressen+WHERE+Sortiment+LIKE+%27%25farbe%25%27&radius=30&plzField=PLZ&plz=55777 Das folgende Beispiel zeigt, wie Sie den WebService mit PHP nutzen können: <?php // KEY: In Zukunft wird die Abfrage per WebService über einen // Key reglementiert werden. define("UKS_KEY", "DUMMY"); // PLZ_FIELD: Name der Spalte, in der in der vorhandenen Datenbank // die Postleitzahlen abgelegt sind. define("UKS_PLZ_FIELD", "PLZ"); // DIST_NAME: Dem Result-Set wird eine Spalte hinzugefügt, die die // Distanz zur übergebenen PLZ enthält. Der Name lässt // sich ändern, um Doppelbenennungen zu vermeiden. define("UKS_DIST_NAME", "dist"); // SHOW_DIST: Die Abfrage kann kürzer und schneller werden, wenn // die Distanz nicht ausgwertet werden soll. define("UKS_SHOW_DIST", true); // DEBUG: Gibt Fehlermeldungen zurück wenn true, sonst liefert // die Funktion als Ergebnis false. define("UKS_DEBUG", false); // Diese Funktione erleichtert die Abfrage des WebService. function uksQuery($query, $plz, $radius) { $url = "http://www.umkreis.net/webService/uks?" ."&query=".urlencode($query) ."&radius=".$radius ."&plzField=".UKS_PLZ_FIELD ."&distName=".UKS_DIST_NAME ."&plz=".$plz ."&key=".urlencode(UKS_KEY); $uksQuery = file_get_contents($url); if (strstr($uksQuery, "ERROR")) { if(UKS_DEBUG) { print $uksQuery; } return false; } else { return $uksQuery; } } $query = "SELECT * FROM Adressen WHERE Sortiment LIKE '%farbe%';"; $plz = "55777"; $radius = 30; $uksQuery = uksQuery($query, $plz, $radius); ?> Die vom WebService neu berechnete SQL-Abfrage sieht für unser Beispiel dann so aus: SELECT * , (1 * ELT(FIELD(PLZ, '55777', '55776', '55779', '66629', '66871', '66869', '55768', '55774', '66640', '66885', '55765', '66909', '66887', '55767', '66606', '66907', '66625', '66903', '66649', '55743', '66916', '66904', '67746', '67756', '67754', '66879', '67749', '66564', '66901', '67745', '66882', '54422', '66914', '55758', '66646', '67742', '67744', '67752', '66892', '55756', '66620', '67686', '66636', '66450', '67757', '67753', '55621', '66877', '66540', '67685', '55608', '67737', '54411', '66578', '55606', '66849', '66538', '66557', '67748', '66894', '66424', '67734', '67700', '67732', '67827', '66539', '54424', '67688', '55627', '66589', '55592', '54426', '66687', '55619', '66862', '67759', '66571'), 0, 5.02, 5.58, 6.01, 6.25, 7.96, 8.35, 9.42, 11.54, 12.1, 12.38, 13.31, 14.21, 14.45, 14.66, 14.99, 15.27, 15.49, 15.69, 16.24, 16.57, 16.96, 18.11, 18.55, 18.79, 18.91, 19, 19.85, 20, 20.53, 21.4, 21.45, 21.5, 21.66, 22.14, 22.23, 22.61, 22.69, 22.87, 23.18, 23.28, 23.45, 23.87, 23.87, 24.18, 24.52, 24.56, 24.72, 24.96, 25.25, 25.26, 25.96, 26.37, 26.75, 26.8, 27.04, 27.4, 27.5, 27.58, 27.83, 27.92, 28.18, 28.53, 28.53, 28.8, 28.86, 29.04, 29.33, 29.43, 29.44, 29.49, 29.73, 29.86, 29.88, 29.91, 29.91, 29.99)) AS dist FROM Adressen WHERE (Sortiment LIKE '%farbe%' ) AND PLZ IN('55777', '55776', '55779', '66629', '66871', '66869', '55768', '55774', '66640', '66885', '55765', '66909', '66887', '55767', '66606', '66907', '66625', '66903', '66649', '55743', '66916', '66904', '67746', '67756', '67754', '66879', '67749', '66564', '66901', '67745', '66882', '54422', '66914', '55758', '66646', '67742', '67744', '67752', '66892', '55756', '66620', '67686', '66636', '66450', '67757', '67753', '55621', '66877', '66540', '67685', '55608', '67737', '54411', '66578', '55606', '66849', '66538', '66557', '67748', '66894', '66424', '67734', '67700', '67732', '67827', '66539', '54424', '67688', '55627', '66589', '55592', '54426', '66687', '55619', '66862', '67759', '66571') ORDER BY dist ASC
Damit wird folgendes Ergebnis für die Abfrage geliefert:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||