Geodaten basierte Umkreissuche

Das Thema hört sich einfach an und ist heutzutage in vielen Applikationen standard: zeige mir Datenbankinhalte in einem Radius von x km um Ort Y. Zu diesem Thema gibt es zahlreiche Infos im Netz.

Allen gemeinsam ist - dier Erde ist keine Scheibe - und daher brauchen wir eine Berechnung mit Winkelfunktionen.

Die erforderliche mysql Abfrage kann man sich auch ohne mathematische Kenntnisse leicht aus den google Ergebnissen zu diesem Thema zusammen bauen.

Wenn man direct "old school" die Datenbankabfrage mit $GLOBALS['TYPO3_DB']->exec_SELECTquery() stellt, ist das auch kein Problem. Eine schöne Umsetzung ist das aber nicht wirklich und da jeder Datensatz in der DB berechnet werden muss, weiss ich auch noch nicht wie dier Performance mit zig tausen Datensätzen ist.

Vielleicht hat irgendjemand mehr Erfahrung oder ähnliches schonmal umgesetzt. Ich freue mich auf eure Anregungen.

Das Snippet was ich bisher einsetzte:

//variables from Form
//$search['distance']
//$search['lat']
//$search['lng']

$table = 'tx_myextension_domain_model_pois';
$latField =  'tx_myextension_domain_model_pois.lat'
$lngField =  'tx_myextension_domain_model_pois.lng'
$earthradius = 6378.2;

$smallerThanMaxRadius = ' < ' . $search['distance'];
$destLat = $search['lat'];
$destLng = $search['lng'];
	
$andWhere = 
     'AND ( ACOS (
      SIN( RADIANS( ' . $latField . ') ) * SIN( RADIANS( ' . $destLat . ' ) )
     + COS( RADIANS( ' .  $latField . '  ) ) * COS( RADIANS( ' . $destLat . ' ) )
     * COS( RADIANS( ' . $lngField . ' )   - RADIANS( ' . $destLng . ' ) )
     )
    * ' . $earthradius . '
    ) ' . $smallerThanMaxRadius . '
   ';

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    '*',
    'tx_myextension_domain_model_pois', 
			'hidden = 0'  . $andWhere, 
			'', // GROUP BY... 
			'', // ORDER BY... 
			'' // LIMIT ... 
);

while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    $result[] = $row;
}

 

Wenn ich das Snippet das nächste mal brauche, schreibe ich es zu mindestens ins Repoitory, im Augenblick nutze ich das so im Controller.

Für Verbessungsvorschläge bin ich dankbar, schreibt eure Gedanken einfach in die Kommentare ....

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

Google Maps API 3

Verständlich geschrieben, mit vielen Code Beispielen und Kartenabbildungen werden alle Elemente der Google API erläutert: Polygone - Marker - Info Windows etc. Mit den praxisnahen Beispielen und der API Referenz im Anhang ist dieses Buch ein wichtiger Begleiter bei der Entwicklung der eigenen Map Applikation.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.