PlanetGMaps Forum

planetGMaps

Die deutsche Google Maps Community.
Die Möglichkeiten sind da!

Forum

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


zum vorhergehenden Thema Thema drucken zum nächsten Thema

Übersicht ::  Google Maps API ::  Google Maps API ::  Gruppierung von Markern bei versch. Zoomstufen
moderiert von: Steffen

Zum aktuellsten Beitrag 

Gruppierung von Markern bei versch. Zoomstufen

Xarf verfasst: 29.11.2007, 11:23
Neu hier
Neu hier
Xarf

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]
Nach oben  Profil PM senden
 
Xarf verfasst: 29.11.2007, 14:15
Neu hier
Neu hier
Xarf

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*
Nach oben  Profil PM senden
 


User online:

Diese Angaben basieren auf den Useraktivitäten der letzten 10 Minuten

^ Top | © 2006 planet-gmaps.de | css | xhtml