Your-pMF
     registrieren     benutzer     suche     team     kalender     hilfe     index    
Chat     downloads     link us     gästebuch     supportforum    
 

Locator (Google Maps)

original Thema anzeigen

 
14.01.07, 16:24:45

fossie

[quote="spike_putin"]Derzeit wird im support Forum ja an einer Google Map Lösung gearbeitet. Allerdings gibt es dort wohl erhebliche Performance Probleme und zudem scheint der Funktionsumfang nicht so ganz einfach zu erweitern sein. ..... [/quote] Hy, die Googlevariante gibt es schon fürs PMF. Alle Variablen werden über das Profil gezogen. Schaut mal hier: http://www.diskustalk.de Benutzer: Marlboro PWD: test (Wäre nett, wenn der Benutzer nicht in die Karte eingeblendet wird.) Gruss Dirk
14.01.07, 17:46:47

spike_putin

Sieht super aus Dirk !!! Kannst du mal die Einbauanleitung online stellen?
14.01.07, 22:20:01

fossie

Hallo, kann ich leider nicht. Das hat unser tech.Admin gebastelt. Ich bin in solchen Sachen leider eine Vollniete. :rolleyes: Er hat den Link hier und meldet sich sobald er etwas Zeit bekommt. Ist mom. etwas im Stress. Gruss Dirk
14.01.07, 23:01:31

Daniel

geändert von: Daniel - 14.01.07, 23:02:52

Hi, habe mich gerade angemeldet, also erstmal ein HALLO!!! Vorab: Vielleicht quetscht das ja mal jemand in eine Installationsdatei. Ich helfe gerne, habe aber selber nicht die Zeit! Ich bin der Schuldige von dem Dirk geredet hat. Hier mal ganz kurz: Die PHP-Datei: [CODE] $geodata){ $str = "SELECT value FROM ".$_cfg['DB_PREFIX']."user_field_value WHERE user_id = ".$geodata[user_id]." AND field_id = 12"; $geodatas[$key]['city'] = my_get_var($str); $str = "SELECT value FROM ".$_cfg['DB_PREFIX']."user_field_value WHERE user_id = ".$geodata[user_id]." AND field_id = 15"; $geodatas[$key]['plz'] = my_get_var($str); $str = "SELECT name FROM ".$_cfg['DB_PREFIX']."user WHERE id = ".$geodata[user_id]; $geodatas[$key]['name'] = my_get_var($str); $str = "SELECT x, y FROM ".$_cfg['DB_PREFIX']."hack_map WHERE uid = ".$geodata[user_id]; $tmp = my_get_assoc_array($str); $geodatas[$key]['x'] = $tmp[x]; $geodatas[$key]['y'] = $tmp[y]; } } eval ('echo "'.$_style->get('map').'";'); footer(); ?>[/CODE] Die PHP-fitten können damit sicher was anfangen. In der Datenbank-Tabelle werden die x und y sowie userid gespeichert. Dann eine weitere Datei, die in der signon.php und in der user.php eingebunden ist: [CODE] $elem){ $l_user[$key] = trim($l_user[$key]); $l_user[$key] = str_replace("ß", "ss", $l_user[$key]); $l_user[$key] = str_replace(" ", "+", $l_user[$key]); } $querry[0] = ""; if ($l_user[street] != "") { $querry[0] = $l_user[street]; } if ($l_user[housenumber] != "") { if($querry[0] != ""){ $querry[0] .= "+".$l_user[housenumber]; } } $querry[1] = ""; if ($l_user[zip] != "") { $querry[1] .= $l_user[zip]; } if ($l_user[town] != "") { if($querry[1] != ""){ $querry[1] .= "+".$l_user[town]; } else { $querry[1] = $l_user[town]; } } if ($querry[0] == ""){ if($querry[1] == ""){ if($l_user[country] == ""){ $q = ""; } else { $q = $l_user[country]; } } else { $q = $querry[1]; if($l_user[country] != ""){ $q .= ",".$l_user[country]; } } }else{ $q = $querry[0]; if($querry[1] != ""){ $q .= ",".$querry[1]; } if($l_user[country] != ""){ $q .= ",".$l_user[country]; } } $geodata = file_get_contents('http://maps.google.com/maps/geo?q='.$q.'&output=csv&key=ABQIAAAAP64Sr3wKbLwq0rgQoLl14hRDqmV08Gpgtb6bOtZZwmJ8OxM8UhTrL40UY8q-RxyN58LFVXby9NdqmA'); $geodata = explode(",", $geodata); $str = "SELECT COUNT(*) FROM `".$_cfg['DB_PREFIX']."hack_map` WHERE uid = '".$l_user[user_id]."'"; if (my_get_var($str) != 0){ $str = "UPDATE `".$_cfg['DB_PREFIX']."hack_map` SET `x` = '".$geodata[2]."', `y` = '".$geodata[3]."' WHERE `uid` = '".$l_user[user_id]."'"; } else { $str = "INSERT INTO `".$_cfg['DB_PREFIX']."hack_map` (`uid`, `x`, `y`) VALUES ('".$l_user[user_id]."', '".$geodata[2]."', '".$geodata[3]."')"; } my_get_result($str); } ?>[/CODE] Das Template: In muss: [CODE] [/CODE] Der Body muss so aussehen: [CODE][/CODE] Und dann noch die Map in der html Datei, je nachdem wie man will: [CODE]

Map Reset

Benutzer zentrieren:
global $geodatas; if (is_array($geodatas)){ foreach($geodatas as $geodata){ if ($geodata['x'] != NULL AND $geodata['y'] != NULL){ echo ''.$geodata['name'].' '; } } }

Wieso werde ich hier nicht angezeigt?
Um Deinen Eintrag in der Karte zu aktivieren müsst Du unter "Profil" -> "Profil bearbeiten" -> mindestens Ort und PLZ angeben und bei "Locator" ja markieren. Wenn es dann noch nicht funktioniert, ist vermutlich der Ortsname, die PLZ, Straßenname, oder das Land falsch geschrieben.

[/CODE] Den Key im Head gibt es bei google: http://www.google.com/apis/maps/documentation/ Ist recht einfach zu basteln! So, das ist das ganze Geheimnis! Quick & Dirty, wenn ich Zeit habe mache ich das schön, die habe ich aber glaube ich nicht. Also fragt einfach nach... Gruß, Daniel
14.01.07, 23:05:15

Daniel

Hi, ich vergaß noch: Die mysql.php die ich da eingebunden habe: [CODE]query($my_own_sql); if ($result){ mysql_insert_id(); return TRUE; } $my_own_sql = NULL; } # function returns the count of the values function my_get_int($my_own_sql){ $result = mysql_query($my_own_sql); # $result = $_db->query($my_own_sql); if($result){ return mysql_num_rows($result); } $my_own_sql = NULL; } # function returns a variable function my_get_var($my_own_sql){ $result = mysql_query($my_own_sql); # $result = $_db->query($my_own_sql); if($result){ $to_return = mysql_fetch_row($result); return $to_return[0]; } $my_own_sql = NULL; } # function returns an associative array function my_get_assoc_array($my_own_sql){ $result = mysql_query($my_own_sql); # $result = $_db->query($my_own_sql); if($result){ return mysql_fetch_array($result); } $my_own_sql = NULL; } # function returns an array including associative arrays function my_get_big_assoc_array($my_own_sql){ $sql_i = 0; $result = mysql_query($my_own_sql); # $result = $_db->query($my_own_sql); if($result){ while ($to_return_data = mysql_fetch_array($result, MYSQL_ASSOC)){ $to_return[$sql_i] = $to_return_data; $sql_i++; } } return $to_return; $my_own_sql = NULL; } ?>[/CODE] Die ist bei mir ca. 5 Jahre alt, aber ich war zu faul die Querrys jedesmal manuell zu verwurschten... Sollte man vielleicht auch nochmal machen. Gruß, Daniel
14.01.07, 23:18:37

fossie

geändert von: fossie - 14.01.07, 23:19:42

Hallo, Danke Daniel! Gruss Dirk
15.01.07, 11:53:23

spike_putin

Erst einmal vielen Dank !!! Kurze Nachfrage: Wo bekomme ich denn folgende Datei her: locator_addition.php ?
15.01.07, 17:38:39

Daniel

geändert von: Daniel - 15.01.07, 17:40:11

Hi, das ist die 2. Datei die ich gepostet habe. Das ist die die in der signon.php und in der user.php eingebunden wird... Es steht nur da wie ich die in die beiden Dateien eingebunden habe, deswegen stehen die da auch nur als Kommentar! Gruß, Daniel
28.01.07, 20:27:39

spike_putin

So, heute hatte ich ein wenig Zeit um das mla bei mir einzubauen - leider klappt es noch nicht ganz: - Weder im Profil, noch bei der Registrierung erscheinen die Felder für den Locator und die Möglichkeit diesen zu aktivieren. - Ich habe die locator_addition.php allerdings eingebunden wie beschrieben. Muss denn sonst noch etwas gemacht werden außer dem was hier in der Anleitung steht?
31.01.07, 21:23:35

siebi

Kann man die mysql.php so übernehmen oder muss da noch was verändert werden? Sieht mir doch fast so aus, oder?! Außerdem wird nix in die "pmf_hack_map" Tabelle gespeichert :( Ich habe die Tabelle wie folgt angelegt: [CODE]CREATE TABLE `pmf_hack_map` ( `uid` int(11) NOT NULL default '0', `x` int(11) NOT NULL default '0', `y` int(11) NOT NULL default '0', PRIMARY KEY (`uid`)) TYPE=MyISAM;[/CODE] Ist das mit dem "Typ" so richtig? Wenn ich manuell was eingebe speichert er keine Punkte. Es werden sicherlich noch weitere Probleme auftreten, aber das solls für heute erst mal gewesen sein ;) Wäre schön, wenn mal jemand schauen könnte ;)
03.02.07, 21:48:22

Daniel

Hi, also die mysql.php ist so komplett... Sind ja nur ein paar Funktionen die das Leben erleichtern, aber eben nicht unbedingt effizient! Zu der Struktur: CREATE TABLE `pmf_hack_map` ( `uid` int(5) unsigned NOT NULL default '0', `x` float NOT NULL default '0', `y` float NOT NULL default '0', KEY `uid` (`uid`) ) x und y müssen Float Variablen sein! Gruß, Daniel
03.02.07, 22:10:14

siebi

Danke dir schon mal. Aber irgendwie funzt das bei mir noch net so richtig :( Die Koordinaten werden nicht in die Tabelle "hack_map" gespeichert. Wenn ich sie manuell eingebe funzt das aber super. Vielleicht ne Idee wo da der Fehler liegen könnte?
03.02.07, 22:24:12

spike_putin

@Siebi: Klappt das denn bei dir? [quote="spike_putin"]- Weder im Profil, noch bei der Registrierung erscheinen die Felder für den Locator und die Möglichkeit diesen zu aktivieren.[/quote]
03.02.07, 22:37:32

siebi

@spike_putin Du musst die Felder im admin anlegen. Und die Profilfelder im Code entsprechend ändern. z.B.: [PHP] $str = "SELECT value FROM ".$_cfg['DB_PREFIX']."user_field_value WHERE user_id = ".$l_user[user_id]." AND field_id = 12";[/PHP] musst du die "field_id = 12" in die "field_id" ändern, die du für das Profilfeld "town" hast.
04.02.07, 11:11:43

spike_putin

geändert von: spike_putin - 04.02.07, 11:12:11

Danke dir siebi, hatte das allerdings auch schon gesehen und vorher einfach meine bestehenden Profilfelder im code geändert. Kurzum: Die Koordinaten wurden nicht in der Karte angezeigt. Vorschlag: Da die Lösung von Dirk für das phpmyforum sinnvoll ist und wir ja zudem derzeit keine vernünftige Lösung für eine Karte der Mitglieder haben (der User Locator funzt ja auch nicht so richtig und hat Fehler) würde ich vorschlagen, dass evtl. einer von den php-Fitten mal einen Installer baut? Zu einem Forensystem gehört eigentlich auch eine Usermap ... ich würde sogar sagen, dass ist ein Hack der nicht fehlen sollte :rolleyes: Ist doch bei der Vorarbeit von Dirk bestimmt für die Coder hier nicht mehr so aufwändig einen Installer zu bauen, oder?
05.02.07, 19:32:35

siebi

Im Prinzip brauchen wir nur ein Script, was die Adresse der User aus den Profilfeldern ausliest und in die Koordinaten umwandelt.
05.02.07, 20:09:01

siebi

Jetzt weiß ich, wo der Fehler ist :rolleyes: [QUOTE]Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in[/QUOTE] Kann man diesen Befehl irgendwie umgehen? um den Inhalt einer Seite auszulesen? Ansonsten scheint es zu funzen.
14.02.07, 10:31:16

spike_putin

Hallo siebi, hast du den Hack zum Laufen bekommen?
16.02.07, 08:46:11

siebi

[quote="spike_putin"]Hallo siebi, hast du den Hack zum Laufen bekommen? [/quote] Ja, so einigermaßen. Bin da noch ein paar Sachen für mich am anpassen. Ich glaube das Hauptproblem war (zumindest bei mir), dass die Falschen Zeilen für [PHP]require('extensions/locator_addition.php');[/PHP] angegeben wurden. Ich habs so eingebunden: Öffne "user.php" Suche: [PHP] // remove unused if (count($del) > 0) { $_db->u_query('DELETE FROM `'.$_cfg['DB_PREFIX'].'user_field_value` WHERE `user_id` = '.$_user['id'].' AND field_id IN ('.implode(',', $del).')'); }[/PHP] Danach einfügen: [PHP] require('extensions/locator_addition.php'); [/PHP] Öffne "signup.php" Suche: [PHP] ### variable Felder $del = array(); if (is_array($fields)) { foreach ($fields AS $name => $values) { if (!empty($_POST['profile'][$name]) || $_POST['profile'][$name] == '0') { $_POST['profile'][$name] = ($values['maxlength'] > 0) ? substr($_POST['profile'][$name], 0, $values['maxlength']) : $_POST['profile'][$name]; $_db->u_query('REPLACE INTO `'.$_cfg['DB_PREFIX'].'user_field_value` (`user_id`,`field_id`,`value`) VALUES ('.$user_id.','.$values['id'].',\''.gpc_addslashes($_POST['profile'][$name]).'\')'); } }[/PHP] Danach einfügen: [PHP] require('locator_addition.php'); [/PHP] Dann müssten die Koordinaten gespeichert werden. Aber wie gesagt, dein Server muss die Funktion "file_get_contents()" unterstützen. Bei Funpic funzt das so net :rolleyes: Ich hoffe, ich konnte dir ein bisschen weiterhelfen?!
17.02.07, 17:42:01

spike_putin

Danke siebi! Das funktioniert einwandfrei. Endlich eine vernünftige Usermap :D Ganz interessant wäre noch folgendes: Eine Möglichkeit wo man bei Eingabe des Landes und seiner eigenen PLZ die nächsten z.B. +/- 50 auf- und absteigenden PLZ der User in der Nähe sich anzeigen lassen könnte. So als Bsp.: Meine PLZ 47608 in Deutschland Ausgabe aller User deren PLZ im Bereich 47558 bis 47658 liegen. Das wird vermutlich für Programmierer nicht zu schwer zu realisieren sein und wäre ein super Mehrwert für das phpmyforum!
 
 
Powered by: phpMyForum 4.2.1 © Christoph Roeder
SQL Error