Hallo,
es wurde hier gefragt nach einer Darstellung der GPS-Daten in GoogleMaps.
Ich habe mich in den letzten Tagen mal in die API von GoogleMaps hineingelesen und etwas experimentiert. Da der Abruf der Karten nicht ganz ohne ist und auch für andere Zwecke verwendet werden kann, habe ich das nicht in das AUtomower-Modul integriert sondern ein neues Modul gemacht, das hier zu finden ist: GitHub - demel42/IPSymconGoogleMaps: Interface for GoogleMaps API to create simple Maps
Das Modul ist experimentell, daher habe ich noch keine eigene Module-Seite erstell, es ist noch nicht vollständig (Routen und Verkehrsfluss fehlt z.B. noch) und die Dokumentation lässt noch zu wünschen.
Wenn jemand Interesse hat, kann er das ausprobieren.
Je nachdem, ob welche Art man benutzen will, ist der Weg unterschiedlich
a) StaticMap (was für diese Zwecke eigentlich reicht):
-
eine Variable vom Typ HTML-Box anlegen
-
folgendes Script anlegen
<?
$cdata = AutomowerDevice_GetRawData(1234 /*[Rasenmäher\Automower]*/, 'LastLocations');
$jdata = json_decode($cdata, true);
$points = [];
foreach ($jdata as $jpoint) {
$points[] = [
'lat' => $jpoint['latitude'],
'lng' => $jpoint['longitude'],
];
}
// allgemeine Angaben zur Karte
$map = [];
// Mittelpunkt der Karte
$map['center'] = $points[0];
$map['zoom'] = 20;
$map['size'] = '640x640';
$map['scale'] = 1;
$map['maptype'] = 'satellite';
$markers = [];
$marker_points = [];
$marker_points[0] = $points[0];
$markers[] = [
'color' => 'green',
'label' => 'P',
'points' => $marker_points,
];
$map['markers'] = $markers;
$paths = [];
$paths[] = [
'color' => '0xff0000ff', // 0xhhhhhhoo oo=opacity
'weight' => 2,
'points' => $points,
];
$map['paths'] = $paths;
$url = GoogleMaps_GenerateStaticMap(4711 /*[GoogleMaps]*/, json_encode($map));
$html = '<img width="500", height="500" src="' . $url . '" />';
SetValueString(8888 /*[GoogleMaps\Karte (static)]*/, $html);
Dieses Script könnte man per Ereignis aufrufen, wenn die Variable ‚letzter Status‘ des Automower sich ändert.
b) DynamicMap
ist etwas komplizierter; da IPS die Webseite nicht direkt darstellen kann, muss man den Umweg über ein WebHook gehen.
- Variable vom Typ HTML-Box anlegen und mit einer iframe-Anweisung befüllen, zB mit einem solchen Script.
<?
$url = 'http://<IPS-IP/Name>:3777/hook/GoogleMaps_Automower';
$html = '<iframe width="500", height="500" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="' . $url . '"></iframe>';
SetValueString(4711 /*[GoogleMaps\Karte (dynamic)]*/, $html);
- Script anlegen
<?
$cdata = AutomowerDevice_GetRawData(1234 /*[Rasenmäher\Automower]*/, 'LastLocations');
$jdata = json_decode($cdata, true);
$points = [];
foreach ($jdata as $jpoint) {
$points[] = [
'lat' => $jpoint['latitude'],
'lng' => $jpoint['longitude'],
];
}
// allgemeine Angaben zur Karte
$map = [];
// Zentrum der Karte
$map['center'] = $points[0];
// Optionen für google.maps.Map
$map_options = [
'zoom' => 20, // 1: World, 5: Landmass/continent, 10: City, 15: Streets, 20: Buildings
'tilt' => 0, // 0..45
'mapTypeId' => 'satellite', // roadmap, terrain, hybrid, satellite
];
$map['map_options'] = $map_options;
// Standard-Optionen für google.maps.InfoWindow
$infowindow_options = [
'maxWidth' => 200, // pixel
];
$map['infowindow_options'] = $infowindow_options;
// Karte mit Positionen
$markers = [];
$marker = [];
$marker_points = [];
$marker_points[0] = $points[0];
// Text eines Punktes für google.maps.InfoWindow
$marker_points[0]['info'] = 'akt. Position';
// Optionen eines Punktes für google.maps.Marker
$marker_options = [
'icon' => [
'url' => 'http://maps.google.com/mapfiles/kml/paddle/grn-circle.png',
'scaledSize' => [
'width' => 32,
'height' => 32
]
]
];
$marker['marker_options'] = $marker_options;
// GPS-Punkte
$marker['points'] = $marker_points;
$markers[] = $marker;
$map['markers'] = $markers;
// Karte mit verbundenen Punkten
$paths = [];
$path = [];
// GPS-Punkte
$path['points'] = $points;
// Optionen für google.maps.Polyline
$polyline_options = [
'strokeColor' => '#FF0000',
'strokeOpacity' => 1.0, // 0.0 .. 1.0
'strokeWeight' => 2, // pixel
];
$path['polyline_options'] = $polyline_options;
$paths[] = $path;
$map['paths'] = $paths;
$html = GoogleMaps_GenerateDynamicMap(4711 /*[GoogleMaps]*/, json_encode($map));
echo $html;
- WebHook anlegen (unter Kernel-Module), Namen passend zu (1) vergeben und als Script das unter (2) angelegte Script eintragen.
Da die Daten immer aktuell bei Aufruf des WebHook ermittelt werden, ist eine ereignisgesteuerte Aktualisierung nicht erforderlich.
Gruß
demel