[mySQL+PHP+GeoClass] Abstand zwischen PLZ's finden

Quidoff

Lieutenant
Registriert
Feb. 2005
Beiträge
897
Hallo,
hat es schon einmal jemand geschafft den Abstand zwischen zwei Postleitzahlen zu berechnen?
Ich konnte immerhin schon die DB der Postleitzahlen installieren, aber ich weiß nicht wie ich die dazugehörige Klasse verwenden muss.
Ich bin mir auch unsicher, von welcher Klasse ich ein Objekt erzeugen muss. Die nötige Funktion (findCloseByGeoObjects()) befindet sich in der Klasse Geo_DB, was beim erstellen des Objekts aber zu Fehlern wegen unbekannten Konstanten führt.
Ich benutze die Version 0.3.1 alpha.

Hat sich schonmal jemand erfolgreich mit diesem Thema beschäftigt? Es muss auch nicht zwangsläufig die GeoClass verwendet werden. Es muss nur funktionieren, und das möglichst mit PHP und mySQL. ;)
 
Erstell dir mal eine phpinfo.php
mit folgendem Inhalt:
Code:
<?php phpinfo() ?>

Dann rufst du die Seite auf und kuckst was in der Konfigurationsvariable include_path (z.B: .:/usr/lib/php) steht. In einem der Pfade (durch : separiert) wirst du eine PEAR.php finden. In dieses Verzeichnis entpackst du die GeoClass-0.3.1a.tgz. Dann das Verzeichnis GeoClass-0.3.1a in Geo umbennen.
Jetzt müsste es eine Geo/Geo.php im include path geben.
Damit sollte das Problem mit den Konstanten oder ähnlichen Fehlern erledigt sein.

Dann lädst du dir am besten die location.php.zip herunter, um die Datenbank auf Korrektheit zu testen. Die location.php entpackst du in irgendein Verzeichnis unter dem document root. DSN im Script anpassen und testen - so müsste dass dann beispielsweise aussehen.

Dann könntest du mal ein eigenes Script ausprobieren:
PHP:
<?php
require_once 'Geo/sources/Geo_DB_OpenGeoDB.php';

$geo = new Geo_DB_OpenGeoDB('mysql://username:password@hostname/databasename');

class GeoLoc {
  var $latitudeRad;
  var $longitudeRad;

  function __construct($lat,$long) {
    $this->latitudeRad = $lat;
    $this->longitudeRad = $long;
  }
}

$geoLocation = new GeoLoc(1,2);

var_export($geo->findCloseByGeoObjects($geoLocation));

Leider hab ich die Klasse für einen Geostandort nirgends gefunden - und sie anhand der benötigten Attribute rekonstruiert :)
 
Zuletzt bearbeitet:
Nachdem mir Enigma per ICQ noch geholfen hat, sind wir zu folgendem Code gekommen, der immerhin schon keine Script Fehler enthält:
PHP:
<?php
	require_once 'Geo/sources/DB_OpenGeoDB.php';
	require_once 'Geo/Geo.php';

	$geo = new Geo_DB_OpenGeoDB('mysql://user:pass@hostname/dbname');
	echo '<pre>';print_r($geo);echo '</pre>';

	class GeoLoc {
		var $latitudeRad;
		var $longitudeRad;

		function __construct($lat,$long) {
			$this->latitudeRad = $lat;
			$this->longitudeRad = $long;
		}
	}

	$geoLocation = new GeoLoc(9.65,47.8167);

	var_export($geo->findCloseByGeoObjects($geoLocation)); 
?>
Wie man die PLZ aus dem Ortsnamen und herausfindet und umgekehrt und wie man dann daraus den Abstand bzw. Orte in der Umgebung herausfindet, ist weiterhin ungeklärt.
Ich geh erstmal pennen und werd mich dann nochmal damit beschäftigen.

Auf jeden Fall schonmal ein "Danke" an Enigma.

//edit
Ich hab noch nen anderen Weg gefunden, bei dem man keine Datenbank brauch.
Und zwar hier. Man kann das Script lokal speichern und es holt die nötigen Werte vom Server ab.

//edit2
Also das mit dem Abstand berechnen funktioniert soweit ganz gut. Ich hab dazu mal ein kleines Beispiel geschrieben (verwendet AJAX).
*klick*
Ich brauch nur diese zwei Dateien, die sich im Verzeichnis auf der Seite befinden. Einträge in die Datenbank sind nicht nötig.
 
Zuletzt bearbeitet: (Anderen Weg gefunden)
Zurück
Oben