Dienstag, 29. Januar 2013

PLZ Entfernungen und PLZ Umkreissuche

Auf www.plz-umkreis.com gibt es zwei ganz neue Tools zur Entfernungsberechnung und zur PLZ im Umkreis Berechnung.


Die Entfernungsberechnung kann sowohl Luftlinie als auch Strassenentfernung berechnen und Ihr findet sie hier:

 http://www.plz-umkreis.com/plz-entfernungen

Postleitzahlen im Umkreis kann man hier berechnen lassen:

 http://www.plz-umkreis.com/plz-umkreissuche

Beide Berechnungen funktionieren fuer Deutschland, Oesterreich, Schweiz und Liechtenstein und das ganze funktioniert auch laenderuebergreifend.

Die Scripte gibt es gratis in PHP und ASP und C# und die dazu notwendigen Datenbanken gibt es kaeuflich zu erwerben und enthalten bereits einen kostenlosen Updateservice.

Die Daten sind im Gegensatz zu anderen Anbietern wirklich akkurat und vollstaendig.
Sehr empfehlenswert.

ZIP Codes in a radius

There is a rather new website that offers ZIP Code databases for the USA and Canada and some awesome free tools like a distance between ZIP code calculator and a tool that calculates all ZIP codes within a radius.
This is the link to the homepage: http://www.zipcodesoft.com/


The free tools regarding the US ZIP codes you can find here:
http://www.zipcodesoft.com/freetools
The free tools regarding the Canadian postal codes you can find here:
http://www.zipcodesoft.com/freetools-canada
What is really new with this scripts is that the distances between ZIP codes are calculated both as beeline and as road distance.

Freitag, 8. Oktober 2010

PLZ Umkreissuche

Eine “PLZ Umkreissuche” erlaubt die Auswahl von Datensätzen innerhalb eines beliebigen Radius um eine gegebene PLZ.

Viele Webseiten benutzen diese Technik um Ihren Benutzer die Möglichkeit zu geben Suchergebnisse nur aus Ihrem näheren Umkreis (z.B. 50 km ) anzeigen zu lassen.

Typische Anwendungsgebiete sind die Filialsuche (Dealer Locator) oder Dating Websites, Immobilienportale, An/Verkauf bzw. Kleinanzeigen und Auktionsportale wie Ebay.

Dazu benötigt man eine Datenbank mit allen Postleitzahlen und den dazugehörigen Geo-Koordinaten (Längengrad / Breitengrad).

Des Weiteren benötigt man ein Script dass die notwendige Berechnung durchführt und die in Frage kommenden Postleitzahlen berechnet.

Die Entfernungsberechnung auf einer Kugeloberfläche (Erde) zwischen 2 Punkten nennt man Orthodromie und erfolgt mittels folgender Formel:

Distance(A,B) = 6371 * ACos( Cos(LatA) * Cos(LatB) * Cos(LngB - LngA) + Sin(LatA) * Sin(LatB) )

Das Ergebnis ist die Entfernung zwischen Punkt A und Punkt B in Kilometer.

Im Folgenden sehen Sie ein auf PHP und MySQL basierendes Script dass diese Berechnung umsetzt:


// Form
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<input type="text" name="postcode" value="<?php echo $_GET['postcode']; ?>" maxlength="5"/><br />
<input type="text" name="distance" value="<?php echo $_GET['distance']; ?>" maxlength="5"/><br />
<input type="submit" name="Search" value="Search" />
</form>

// PHP-Code

<?php
if(isset($_GET['Search']))
{
$zipcode = $_GET['postcode'];
$distance = $_GET['distance'];

$conn = mysql_connect('127.0.0.1', 'root', '') or die('db connect error: ' . mysql_error());
mysql_select_db('igonow', $conn) or die('could not select database');

$sqlstring = "SELECT * FROM geodb WHERE postcode = '".$zipcode."'";
$result = mysql_query($sqlstring);

$row = mysql_fetch_assoc($result);

$lng = $row["longitude"] / 180 * M_PI;
$lat = $row["latitude"] / 180 * M_PI;

mysql_free_result($result);

$sqlstring2 = "SELECT DISTINCT geodb.postcode,geodb.place,(6367.41*SQRT(2*(1-cos(RADIANS(geodb.latitude))*cos(".$lat.")*(sin(RADIANS(geodb.longitude))*sin(".$lng.")+cos(RADIANS(geodb.longitude))*cos(".$lng."))-sin(RADIANS(geodb.latitude))* sin(".$lat.")))) AS Distance FROM geodb AS geodb WHERE (6367.41*SQRT(2*(1-cos(RADIANS(geodb.latitude))*cos(".$lat.")*(sin(RADIANS(geodb.longitude))*sin(".$lng.")+cos(RADIANS(geodb.longitude))*cos(".$lng."))-sin(RADIANS(geodb.latitude))*sin(".$lat."))) <= '".$distance."') ORDER BY Distance";

$result = mysql_query($sqlstring2) or die('query failed: ' . mysql_error());

$str = "<table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
$str .= "<tr>";
$str .= "<th>Postcode</th>";
$str .= "<th>Town</th>";
$str .= "<th>Distance</th>";
$str .= "</tr>";

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$str .= "<tr><td>".$row["postcode"]."</td><td>".$row["place"]."</td><td>".round($row['Distance'])."km</td></tr>";
}

$str .= "</table>";

mysql_free_result($result);
mysql_close($conn);
echo $str;
}
?>

Die im Script genannte Tabelle ‚geodb’ enthält alle Postleitzahlen aus dem in Frage kommenden Raum (z.b. Deutschland, Österreich, Schweiz) mit mindestens folgenden Datendeldern:

postcode, town, longitude, latitude. D.h. PLZ, Ortschaft, Längengrad, Breitengrad

Für diese Art von PLZ Datenbanken gibt es mehrere Anbieter.

Dieser ist der empfehlenswerteste was die Aktualitaet und die Qualitaet der Daten angeht:

PLZ Umkreissuche

Viel Erfolg!