Die deutsche Google Maps Community.
Die Möglichkeiten sind da!
Forum Suche | Forum Übersicht | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen
Übersicht ::
Google Maps API ::
Google Maps API ::
Gruppierung von Markern bei versch. Zoomstufen
moderiert von:
Steffen
Gruppierung von Markern bei versch. Zoomstufen |
||
|---|---|---|
| Xarf | verfasst: 29.11.2007, 11:23 | |
Neu hier
registriert: Nov. 2007
Beiträge: 2
Status: offline letzter Besuch: 29.11.07 |
Wie der Titel schon sagt arbeite ich grad an einer API. Ich habe eine MySQL Datnebank mit ca. 90.000 Geocoords ich hab auch einen PHP Algorithmus entwickelt mit dem ich mir aus bestimmten Regionen die Daten holen kann und die dann in Ballungsgebiete aufteile. Nur habe ich nun keine Ahnung wie ich das mit der API darstellen soll. Hat jemand eine Idee ausser den marker Manager weil der will irgendwie nicht. Gibt es dafür irgendeine fertige klasse oder so? danke ;) hier noch der algorithmus: [code=php]<? /* ############################# ## Calculate the Ambit of two Geokoordinates ## ## ## ## Martin E. ## ## ## ## Nov. 2007 ## ############################ */ function ambit_calc($x , $y , $range) { // Database Connection require("connect.php"); $connect = mysql_connect($server,$username,$password); mysql_select_db($db_name,$connect); //------------------------------------------- // Minimum and Maximum Ambit Filter Variables $y_max = $y+1; $y_min = $y-1; $x_max = $x+1; $x_min = $x-1; //----------------------------------------------------------- // SQL-Query which filters the Datas which are in $range from $x and $y $query = "SELECT objectNumber,positionLatitude,positionLongitude, SQRT( ((abs( $x - positionLatitude ) * 111.2981 ) * ( abs( $x - positionLatitude ) * 111.2981 )) + ( (abs( $y - positionLongitude ) * 111.2981 ) * ( abs( $y - positionLongitude ) * 111.2981 ))) AS dif FROM objects WHERE positionLongitude < ".$y_max." AND positionLongitude > ".$y_min." AND positionLatitude < ".$x_max." AND positionLatitude > ".$x_min." HAVING dif < ".$range; $result = mysql_query($query); if (!$result) { die("Falscher Query: ".mysql_error()); } //------------------------------------------------------------------------------------------------- // Output $i = 0; while ($daten = mysql_fetch_array($result)) { $output_array[$i]['objectNumber'] = $daten['objectNumber']; $output_array[$i]['dif'] = $daten['dif']; $output_array[$i]['lat'] = $daten['positionLatitude']; $output_array[$i]['lon'] = $daten['positionLongitude']; $output_array[$i]['objectType'] = $daten['objectType']; $i++; } return $output_array; } /* ################################ ## Calculate the Range between two Geokoordinates ## ## ## ## Martin E. ## ## ## ## Nov. 2007 ## ################################ */ function range_calc($s_x, $s_y, $e_x, $e_y) { $erg = SQRT( ((abs( $s_x - $e_x ) * 111.2981 ) * ( abs( $s_x - $e_x ) * 111.2981 )) + ( (abs( $s_y - $e_y ) * 111.2981 ) * ( abs( $s_y - $e_y ) * 111.2981 ))); return $erg; } /* ############################# ## Divides an Array in GroupArrays ## ## ## ## Martin E. ## ## ## ## Nov. 2007 ## ############################ */ function clearArray($array,$range) { $i = 0; $z = 0; while(count($array) > 0) { // Check if there is something near for($i = 1; $i <= count($array); $i++) { if(range_calc($array[0]['lat'],$array[0]['lon'],$array[$i]['lat'],$array[$i]['lon']) < $range) { $endArray[$z][$i] = Array( "objectNumber" => $array[$i]['objectNumber'], "lon" => $array[$i]['lon'], "lat" => $array[$i]['lat'], "dif" => range_calc($array[0]['lat'],$array[0]['lon'],$array[$i]['lat'],$array[$i]['lon']), "group_id" => $z , "key" => 0); /* // Database Connection require("connect.php"); $connect = mysql_connect($server,$username,$password); mysql_select_db($db_name,$connect); //------------------------------------------- $i++; */ unset($array[$i]); } } array_shift($array); $z++; } array_shift($endArray); for($i = 0; $i <= count($endArray)-1; $i++) { if(count($endArray[$i]) > 1) { $endArray[$i][1]['group_id'] = "group_leader"; $endArray[$i][1]['key'] = $endArray[$i][2]['group_id']; } if(count($endArray[$i]) == 1) { $endArray[$i][1]['group_id'] = "house"; } } return $endArray; } /* $array = ambit_calc( 52.536858 , 13.411742 ,10); $array2 = clearArray($array,1); echo "Im 10Km Umkreis von Berlin Mitte wurden ".count($array)." Einträge gefunden. "; echo "Unterteilt man diese nun in Gruppen in denen der Abstand 1 Km beträgt erhält man: ".count($array2)." Gruppen. "; echo "Abstand zwischen Berlin-Frankfurt: ".round(range_calc(50.11222 , 08.68194 , 52.536858, 13.411742),2)." Km "; */ ?>[/code] |
|
|
|
|
|
| Xarf | verfasst: 29.11.2007, 14:15 | |
Neu hier
registriert: Nov. 2007
Beiträge: 2
Status: offline letzter Besuch: 29.11.07 |
hab selber was gefunden nennt sich clusterer nu muss ich nurnoch sehen wie ich die 87000 datensätze aufeinmal lade ohne das es zusehr laggt .. *hhmm* | |
|
|
|
|
User online:
Diese Angaben basieren auf den Useraktivitäten der letzten 10 Minuten