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.
Nicht-kommerzielle Webseiten erhalten diesen Schlüssel selbstverständlich kostenfrei.
Bitte schreiben Sie unter Angabe Ihres Domainnamens und der IP-Adresse eine E-Mail an support@umkreis.net.
Etwaige Unannehmlichkeiten durch die Umstellung bitten wir zu entschuldigen, aber nur durch diese Maßnahme sehen wir uns in der Lage, den Service aufrecht zu erhalten und bitten um Verständnis.

umkreis.net - Umkreissuche "for the rest of us"

  • Keine Software-Installation auf Ihrem Server
  • Kein Umbau der bestehenden Suchabfragen
  • Leichte Integration in bestehende Systeme
  • Kostenfrei für nichtkommerzielle Seiten und für weniger als 5.000 Anfragen/Monat

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:

ID Name Adresse PLZ Ort Sortiment
1 Bekleidung Müller Textilstraße 1 39307 Tucheim Bekleidung
2 Farben Schmidt Rotband 2 66869 Blaubach Farben
3 Metzgerei Meier Schlachthof 3 97422 Schweinfurt Wurstwaren
4 Farben Schulze Blauer Weg 4 95493 Bischofsgrün Farben
5 ...

Ihre bisherige SQL-Abfrage sah vielleicht so aus:

SELECT * FROM Adressen WHERE Sortiment LIKE '%farbe%';

mit dem Ergebnis

ID Name Adresse PLZ Ort Sortiment
2 Farben Schmidt Rotband 2 66869 Blaubach Farben
4 Farben Schulze Blauer Weg 4 95493 Bischofsgrün Farben

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:

ID Name Adresse PLZ Ort Sortiment dist
2 Farben Schmidt Rotband 2 66869 Blaubach Farben 7.92