Hallo zusammen,
ich habe in den letzten Tagen das Thema Standortbestimmung auch umgesetzt und wollte dann auch die bereits angesprochene Linie der letzten Standorte umsetzen. Inzwischen habe ich das auch hinbekommen. Da ich aber in SQL bisher überhaupt keine Erfahrung hatte, habe ich dafür relativ lange gebraucht und habe jetzt bestimmt eine Lösung wo einige darüber lachen werden. Deshalb meine Bitte wenn die SQL Abfragen irgendwie besser gehen, bin ich und bestimmt ander für jeden Tipp dankbar.
Die SQL Abfrage habe ich dann aber in die map.php datei verschoben, da ja sonst viele Daten in dem Link übergeben werden müßen.
Die Google API kann die Linie als Overlay ausgeben, das heist bei denen Polylinien mit dem Link könnt ihr nachlesen wenn ihr wollt:
https://developers.google.com/maps/documentation/javascript/overlays?hl=de-DE#Polylines
Ich habe dann noch eine zusätzliche Integer Variable Anzahl angelegt, damit könnt ihr dann die Anzahl der Datensätze angeben die dargestellt werden sollen.
Mein Skript Standort bestimmen sieht dann nur noch so aus (ggf. Variablen anpassen):
<?
// Hilfs-Integervariable mit Profil anlegen
if($IPS_SENDER == "WebFront")
{
SetValue($IPS_VARIABLE, $IPS_VALUE);
}
//Abfrage des eingestellten Gerätes
$name = GetValueFormatted(15478 /*[meine Hardware\Standortbestimmung\Standortbestimmung\Geräte]*/);
//Festlegen der Anzahl der anzuzeigenden letzten Standorte per Linie
$anzahl = GetValueInteger(44685 /*[meine Hardware\Standortbestimmung\Standortbestimmung\Anzahl letzte Standorte]*/);
//Festlegen des Links für den Aufruf der Karte
SetValueString(42759 /*[meine Hardware\Standortbestimmung\Standortbestimmung\Karte]*/, "<iframe src=\"user/utrackme/map.php?devicename=".$name."&anzahl=".$anzahl."\" border=\"0\" frameborder=\"0\" style=\"top:0pt; bottom:0pt; left:0pt; right:0pt; width:100%; height:400px;\"/></iframe>");
?>
Die map.php Datei enthält dann jetzt auch die SQL Abfragen und sieht so aus (die Datenbanktabelle heist bei mir utrackme ggf. im Skript bei euch ändern):
<?php
//Übergebe Parameter aus dem Link
$devicename = $_GET['devicename'];
$anzahl = $_GET['anzahl'];
// SQL Datenbank Zugriffsdaten
$MySQLHost="xxxxxxxxxxxxxxx";
$username="xxxxxxxxxxxxxx";
$password="xxxxxxxxxxxxxxxxxxxx";
// Connect zur Datenbank
$link = mysql_connect($MySQLHost, $username, $password) or die("Keine Verbindung möglich!");
mysql_select_db("xxxxxxxxxxxxxxxxxxxx") or die("Auswahl der Datenbank fehlgeschlagen");
//Abfrage Anzahl der gesamten Zeilen für die Limit Funktion
$select0 = "SELECT id FROM utrackme where (devicename = '$devicename')";
$zeilen1 = mysql_query($select0);
$zeilen = mysql_num_rows($zeilen1);
//Abfrage der eigentlichen Daten für die Linie
$select1 = "SELECT devicename,date,time,latitude,longitude FROM utrackme where (devicename = '$devicename') ORDER BY id LIMIT ".($zeilen-$anzahl).", ".$anzahl;
$query1 = mysql_query($select1);
//Abfrage der Daten für den Marker und das zentrieren der Map
$select2 = "SELECT devicename,date,time,latitude,longitude FROM utrackme where (devicename = '$devicename') ORDER BY id DESC LIMIT 0,1";
$query2 = mysql_query($select2);
// Connect zur Datenbank trennen
mysql_close($link);
//Tabelle für die Linien generieren
$tabelle = "";
while($row1 = mysql_fetch_object($query1))
{
$tabelle = $tabelle."new google.maps.LatLng(".$row1->latitude.", ".$row1->longitude."),";
}
//Die Koordinaten für den Marker generieren
while($row2 = mysql_fetch_object($query2))
{
$aktuelle = $row2->latitude.", ".$row2->longitude;
$time = $row2->date.", ".$row2->time;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map_canvas { height: 100% }
</style>
<script type="text/javascript"
src="https://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(<?php echo $aktuelle; ?>);
var myOptions = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
var marker = new google.maps.Marker({
position: latlng,
map: map,
title:"<?php echo $devicename; ?>"
});
var flightPlanCoordinates = [
<?php echo $tabelle; ?>
];
var flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 2
});
flightPath.setMap(map);
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>
in dem Berich var flightPlanCoordinates… wird eben jetzt eine Aufzählung der Koordinaten für die letzten Standorte generiert. Weil ich das in der richtigen Reihenfolge haben wollte und natürlich immer die letzten XX Standorte aus der Datenbank, war das mit der SQL Abfrage für mich jedenfalls sehr schwierig. Ich bin dann mit der LIMIT funktion und die angabe der Zeile (also die Gesamte anzahl abzüglich der darzustellenden Zeilen) auf mein Ergebnis gekommen. Geht das irgendwie einfacher???
Also, ich hoffe damit kann jemand was anfangen. Viel Spaß damit.