Modul: Google Maps mit Datenbank-Anbindung und Geocoding
Verfasst: Mi 6. Dez 2006, 09:30
Ich möchte auch mal ein Modul vorweisen können. Mir ist zwar "tommo" zuvor gekommen, aber ich poste mein Google Maps Modul dennoch, da es etwas andere Möglichkeiten aufzeigt. Zumindest spar ich mir dann die Grundinstallation von Google Maps, da er sie sehr gut erklärt.
Zu sehen ist das Ergebnis unter www.kleinaitingen.com und einem Klick auf einen Firmenamen. Die Kontaktdaten werden dann in der Google Maps dargestellt. Vielleicht hat der ein oder andere noch tolle Ideen das ganze zu erweitern, wäre toll!
Im Input-Modul nutzen wir die CMS_VALUE[99], um auf einfache Art und Weise den Ort mit einem Namen z.B. "Kleinaitingen" vorzubelegen.
INPUT-MODUL
In unserer Datenbank haben wir zum Teil LAT und LON hinterlegt, um das Ziel genau zu treffen, ansonsten werden mit get_lat_long die Geocoding-Daten interpoliert. Daher kann es sein, dass man das ein oder andere Haus nicht wirklich genau trifft.
Die Zahl "17" bei "map.setCenter(new GLatLng(<? echo "$lat, $lon"; ?>), 17, G_SATELLITE_MAP);" stellt den Zoomfaktor dar. Ist in der Kartendarstellung nichts sichtbar, den Wert verkleinern.
$row[0] = firmenid
$row[1] = firma
$row[2] = name
$row[3] = anschrift
$row[4] = plz
$row[5] = ort
$row[6] = lat
$row[7] = lon
$row[8] = fon
$row[9] = fax
$row[10] = mobil
$row[11] = email
$row[12] = homepage
$row[13] = branche
$row[14] = memo
OUTPUT-MODUL
Ist sicher nicht hunderprozentig optimal programmiert, aber zumindest lauffähig.
Gruss aus Bayern
Zu sehen ist das Ergebnis unter www.kleinaitingen.com und einem Klick auf einen Firmenamen. Die Kontaktdaten werden dann in der Google Maps dargestellt. Vielleicht hat der ein oder andere noch tolle Ideen das ganze zu erweitern, wäre toll!
Im Input-Modul nutzen wir die CMS_VALUE[99], um auf einfache Art und Weise den Ort mit einem Namen z.B. "Kleinaitingen" vorzubelegen.
INPUT-MODUL
Code: Alles auswählen
?><?php
/*****************************************************
* CONTENIDO MODUL INPUT - FIRMENLISTE MIT GOOGLE MAPS
*
* Modulname : Firmenliste inkl. Google Maps
* Author(s) : Wolfgang Kundler <kundler@wallaby.de>
* Copyright : www.onlineshop-handbuch.de
* Created : 2006-12-03
*****************************************************/
?>
<table border="0">
<tr>
<td><?php echo mi18n("Gemeinde");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[99]";?>" value="<?php echo "CMS_VALUE[99]"; ?>"></td>
</tr>
</table>
<?php
Die Zahl "17" bei "map.setCenter(new GLatLng(<? echo "$lat, $lon"; ?>), 17, G_SATELLITE_MAP);" stellt den Zoomfaktor dar. Ist in der Kartendarstellung nichts sichtbar, den Wert verkleinern.
$row[0] = firmenid
$row[1] = firma
$row[2] = name
$row[3] = anschrift
$row[4] = plz
$row[5] = ort
$row[6] = lat
$row[7] = lon
$row[8] = fon
$row[9] = fax
$row[10] = mobil
$row[11] = email
$row[12] = homepage
$row[13] = branche
$row[14] = memo
OUTPUT-MODUL
Code: Alles auswählen
<?php
/*****************************************************
* CONTENIDO MODUL OUTPUT - FIRMENLISTE MIT GOOGLE MAPS
*
* Modulname : Firmenliste inkl. Google Maps
* Author(s) : Wolfgang Kundler <kundler@wallaby.de>
* Copyright : www.onlineshop-handbuch.de
* Created : 2006-12-03
*****************************************************/
$host=localhost;
$dbname='hierdatenbanknameeintragen';
$user='hierdatenbankusereintragen';
$pwd='hierdatenbankpassworteintragen';
$gemeinde = $_GET['Gemeinde'];
$idart = $_GET['idart'];
$idcat = $_GET['idcat'];
$firmenid = $_GET['firmenid'];
$lat = $_GET['lat'];
$lon = $_GET['lon'];
if(isset($firmenid))
{
if($lon==0)
{
echo"Für dieses Unternehmen sind leider keine genauen Geocoding-Daten hinterlegt! ";
echo"Wir hinterlegen für Sie auch kostenlos einen längeren HTML-Text zu Ihrem Unternehmen. ";
echo"Falls Sie wünschen, können Sie uns diese Information (und auch Geocoding-Koordinaten) gerne mitteilen.<br /><br />";
echo"Öffnen Sie dazu einfach per Mausklick unser <a href='http://www.kleinaitingen.com/front_content.php?idart=147&idcat=81'>Anmeldeformular</a>.";
}
Googlemaps($firmenid, $lat, $lon);
}
else
{
$gemeinde=CMS_VALUE[99];
if($sortierung=="") {$sortierung="branche";};
Firmenliste($gemeinde,$sortierung);
}
// Datenbank-Verbindung herstellen
function verbinden()
{
global $host;
global $dbname;
global $user;
global $pwd;
$db=mysql_connect($host, $user, $pwd) or die ("Keine Verbindung!");
$select=mysql_select_db($dbname,$db);
return $db;
}
// Geocoding-Daten einholen anhand der Adresse (= Strasse PLZ Ort)
function get_lat_long($q)
{
global $lat;
global $lon;
$q = urlencode($q);
$gm = fopen('http://maps.google.com/maps?q=' . str_replace('','+',$q) . '&output=js','r');
$tmp = @fread($gm,30000);
fclose($gm);
$pos=strpos($tmp,"center");
$wert=substr($tmp,$pos,40);
$lat=substr($wert,14,9);
$lon=substr($wert,29,9);
}
// Darstellung der Google Map inkl. aller Kontaktdaten aus der Datenbank
function Googlemaps($firmenid, $lat, $lon)
{
global $lat;
global $lon;
$db=verbinden();
$sql="SELECT * FROM con_firmenverzeichnis WHERE firmenid='$firmenid'";
$rs1=mysql_query($sql,$db);
$row=mysql_fetch_row($rs1);
if($row[6]>0.1)
{
// Die genauen Geodaten liegen in unserer Datenbank!
$lat=$row[6];
$lon=$row[7];
}
else
{
// Die Geodaten werden interpoliert dargestellt!
$tmp = get_lat_long("$row[3], $row[4] $row[5]");
}
?>
<h1><? echo "$row[1]"; ?></h1>
<h2><? echo "Branche: $row[13]"; ?></h2>
<p><? echo "$row[14]"; ?></p>
<div id="map" style="width:585px; height:425px"></div>
<script type="text/javascript">
//<![CDATA[
function load()
{
if (GBrowserIsCompatible())
{
var map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(<? echo "$lat, $lon"; ?>), 17, G_SATELLITE_MAP);
// Our info window content
var infoTabs = [
new GInfoWindowTab("Anschrift", "<? echo "<b>Firma:</b> $row[1] <br /><b>Name:</b> $row[2] <br /><b>Anschrift:</b> $row[3] <br /><b>PLZ/Ort:</b> $row[4] $row[5]"; ?>"),
new GInfoWindowTab("Kontakt", "<? echo "<b>Fon:</b> $row[8]<br /><b>Fax:</b> $row[9]<br /><b>Mobil:</b> $row[10]<br /><b>eMail:</b> "; if($row[11]=="k.A.") {echo "k.A.";} else {echo "<a href='mailto:$row[11]?subject=Kontakt%20%FCber%20www.kleinaitingen.com' target='_blank'>$row[11]</a>";} echo"<br /><b>Homepage:</b> "; if($row[12]=="k.A.") {echo "k.A.";} else {echo "<a href='$row[12]' target='_blank'>$row[12]</a>";} ?>"),
new GInfoWindowTab("Geocoding", "<? echo "<b>LAT:</b> $lat <br /><b>LON:</b> $lon"; ?>")
];
// Place a marker in the center of the map and open the info window automatically
var marker = new GMarker(map.getCenter());
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowTabsHtml(infoTabs);
});
map.addOverlay(marker);
marker.openInfoWindowTabsHtml(infoTabs);
}
}
//]]>
</script>
<?
}
// Ausgabe einer nach Branchen sortierten Firmenliste
function Firmenliste($gemeinde, $sortierung)
{
global $gemeinde;
global $lat;
global $lon;
if($gemeinde=="Oberottmarshausen") { $idart='165'; }
elseif($gemeinde=="Großaitingen") { $idart='169'; }
elseif($gemeinde=="Graben") {$idart='168';}
else { $idart='166'; };
?>
<div>
<table summary="Ausgabe eines Firmenverzeichnisses einer einzelnen Gemeinde" class="mytable" border="0" width="585">
<thead>
<tr>
<th id="branche" abbr="Branche"> <a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=branche">Branche</a><img src="images/sort.gif" alt="V" hspace="10" /> </th>
<th id="firma" abbr="Firma"> <a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=firma">Firma</a><img src="images/sort.gif" alt="V" hspace="10" /> </th>
<th id="anschrift" abbr="Anschrift"> <a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=anschrift">Anschrift</a><img src="images/sort.gif" alt="V" hspace="10" /> </th>
</tr>
</thead>
<tfoot><tr><td></td><td></td><tr></tfoot>
<tbody>
<?
$db=verbinden();
$sql="SELECT * FROM con_firmenverzeichnis WHERE ort='$gemeinde' ORDER by $sortierung";
$rs=mysql_query($sql,$db);
while($row=mysql_fetch_row($rs))
{
echo"<tr><td headers='branche'> $row[13]</td>";
if($row[3]=="k.A.") { echo"<td headers='firma'> <a href='http://www.kleinaitingen.com/front_content.php?idart=147&idcat=81'>$row[1]</a></td>"; }
else { echo"<td headers='firma'> <a href='front_content.php?idart=$idart&firmenid=$row[0]&lat=$row[6]&lon=$row[7]'>$row[1]</a></td>"; }
echo"<td headers='anschrift'> $row[3]</td>";
echo"</tr>";
}
echo"</tbody></table>";
echo"<em><strong>Tabelle:</strong> Unternehmen in $gemeinde</em>";
?>
</div>
<?
}
?>
Gruss aus Bayern