src.dualinventive.com/mtinfo/dist/webroot/main/include/kml.php

379 lines
20 KiB
PHP

<?php
/** \file include\kml.php
* \brief DI webinterface kml functions
* \author Rob Schalken, Core|Vision
* \version 1.0
* \date 17-10-2008
*
* This file generates the kml xml file
*/
// Get log data from the "report" database
db_connect("report", "log");
// Get KML settings from ini file
$ini_file = get_all_files($_PAGE_INFO['base_path'] . SKIN_DIR . $_PAGE_INFO['skin'] . "/", array("ini"));
$_PAGE_INFO['ini'] = parse_ini_file($ini_file[0], true);
// Retreive information
$customer = db_fetch_customer($_PAGE_INFO['login']['customer']['id'], 1);
$date = date('Y-m-d');
// Begin and end of report period/action/filename
if (isset($_GET['equipment'])) {
// "Stop" session
SessionStop();
// Begin/end
$begin = "";
$end = "";
if ((isset($_GET['begin_period'])) && (strlen($_GET['begin_period']))) {
$begin = $_GET['begin_period'];
}
if ((isset($_GET['end_period'])) && (strlen($_GET['end_period']))) {
$end = $_GET['end_period'];
}
// Action
$kml_action = "download";
// Filename
$file = _("GPS track") . "_" . $customer['klantnaam'] . "_" . $date . ".kml";
}
else {
// Begin/end
$begin = $begin_period;
$end = $end_period;
// Action
$kml_action = "write_file";
// Filename
$file = $info['idcode'] . "_gps_track.kml";
}
// Send document header
download_document_header("application/vnd.google-earth.kml+xml", $file, $kml_action, "kml");
// Send KML header
download_document_data("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", $kml_action, "kml");
download_document_data("<kml xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:kml=\"http://www.opengis.net/kml/2.2\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n", $kml_action, "kml");
download_document_data("<Folder>\n", $kml_action, "kml");
//download_document_data("<name>" . _("GPS track") . " - " . $customer['bedrijfsnaam'] . " - " . $date . "</name>\n", $kml_action, "kml");
if (strlen($end)) {
download_document_data("<name>" . _("MTinfo") . " - " . $begin . " " . _("tot") . " " . $end . " (" . $customer['klantnaam'] . ")</name>\n", $kml_action, "kml");
}
else {
download_document_data("<name>" . _("MTinfo") . " - " . $begin . " (" . $customer['klantnaam'] . ")</name>\n", $kml_action, "kml");
}
// default values
$counter = 0;
$line_width = 3;
$org_line_color = ff216ff3;
$lookat_range = 200;
$icon = "";
if (is_array($_PAGE_INFO['ini'])) {
// get line width
if ((isset($_PAGE_INFO['ini']['kml']['line_width'])) && (strlen($_PAGE_INFO['ini']['kml']['line_width']))) {
$line_width = $_PAGE_INFO['ini']['kml']['line_width'];
}
// Get line color
if ((isset($_PAGE_INFO['ini']['kml']['line_color'])) && (strlen($_PAGE_INFO['ini']['kml']['line_color']))) {
$org_line_color = $_PAGE_INFO['ini']['kml']['line_color'];
}
// Get look at range
if ((isset($_PAGE_INFO['ini']['kml']['lookat_range'])) && (strlen($_PAGE_INFO['ini']['kml']['lookat_range']))) {
$lookat_range = $_PAGE_INFO['ini']['kml']['lookat_range'];
}
// Get kml icon
if ((isset($_PAGE_INFO['ini']['kml']['icon'])) && (strlen($_PAGE_INFO['ini']['kml']['icon']))) {
$icon = $_PAGE_INFO['base'] . SKIN_DIR . $_PAGE_INFO['skin'] . "/" . $_PAGE_INFO['ini']['kml']['icon'];
}
}
// Equipement
$equipment = (isset($_GET['equipment'])) ? $_GET['equipment'] : $item;
$valid_data = 0;
// Create equipment array
if (strlen($equipment)) {
$items = split(",", $equipment);
if (is_array($items)) {
foreach($items as $item) {
// Fetch equipment name
$info = db_fetch_lance($item, "", 1);
// Detect firmware version
$version_info = db_fetch_firmware($info);
// send new document name
download_document_data("\t<Document>\n", $kml_action, "kml");
$device = db_fetch_system_device_name($_PAGE_INFO['i18n'], $info['device'], $kml_action);
$idcode = ($info['idcode'] == $info['serienr']) ? $info['idcode'] : $info['idcode'] . " - " . $info['serienr'];
$idcode .= (strlen($info['rtstatus'])) ? " (" . $info['rtstatus'] . ")" : "";
download_document_data("\t\t<name>" . $idcode . " (" . $device . ")" . "</name>\n", $kml_action, "kml");
download_document_data("\t\t<Style id=\"" . $info['idcode'] . "\">\n", $kml_action, "kml");
if (strlen($icon)) {
download_document_data("\t\t\t<IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<href>" . $icon . "</href>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t</IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t<LabelStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t</LabelStyle>\n", $kml_action, "kml");
}
download_document_data("\t\t\t<LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<color>" . $org_line_color . "</color>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<width>" . $line_width . "</width>\n", $kml_action, "kml");
download_document_data("\t\t\t</LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t</Style>\n", $kml_action, "kml");
// JW20100705: Geofence style (green line)
download_document_data("\t\t<Style id=\"" . $info['idcode'] . "_geofence_inside\">\n", $kml_action, "kml");
if (strlen($icon)) {
download_document_data("\t\t\t<IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<href>" . $icon . "</href>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t</IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t<LabelStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t</LabelStyle>\n", $kml_action, "kml");
}
download_document_data("\t\t\t<LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<color>" . "7d00ff00" . "</color>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<width>" . $line_width . "</width>\n", $kml_action, "kml");
download_document_data("\t\t\t</LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t</Style>\n", $kml_action, "kml");
// Button styles
for ($i=0; $i<5; $i++) {
// define line color
switch($i) {
// Red
case 0:
$line_color = "7d0000ff";
break;
// Green
case 1:
$line_color = "7d00ff00";
break;
// Blue
case 2:
$line_color = "7dff0000";
break;
// Yellow
case 3:
$line_color = "7d00ffff";
break;
// purple
case 4:
$line_color = "7dc080ff";
break;
default:
break;
}
download_document_data("\t\t<Style id=\"" . $info['idcode'] . "_" . $i . "\">\n", $kml_action, "kml");
if (strlen($icon)) {
download_document_data("\t\t\t<IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<href>" . $icon . "</href>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</Icon>\n", $kml_action, "kml");
download_document_data("\t\t\t</IconStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t<LabelStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<scale>0.5</scale>\n", $kml_action, "kml");
download_document_data("\t\t\t</LabelStyle>\n", $kml_action, "kml");
}
download_document_data("\t\t\t<LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<color>" . $line_color . "</color>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<width>" . $line_width . "</width>\n", $kml_action, "kml");
download_document_data("\t\t\t</LineStyle>\n", $kml_action, "kml");
download_document_data("\t\t</Style>\n", $kml_action, "kml");
}
// Initial values
$prev_coordinate = "";
$line_placed = "";
// Get all gps coordinates
$coordinates = db_fetch_lance_log_gps_info($item, 0, $begin, $end, 0);
$last_long = "";
$prev = "";
$coords_incr = TRUE;
if (is_array($coordinates)) {
if ($coordinates['result']) {
for ($i = 0; $i < $coordinates['nr_rows']; $i++) {
// Last coordinate?
$last = (($i + 1) == $coordinates['nr_rows']) ? 1 : 0;
// Fetch coordinate data
$coordinate = mysql_fetch_assoc($coordinates['result']);
// First/last coordinates or to far or time gap (> 60 secs)
if ((!is_array($prev_coordinate)) ||
($last) ||
(abs($coordinate['longitude'] - $prev_coordinate['longitude']) > 0.1) ||
(abs($coordinate['latitude'] - $prev_coordinate['latitude']) > 0.1) ||
(abs($coordinate['t'] - $prev_coordinate['t']) > 60)) {
// Initital value
$points = array();
// Create end point
if (($line_placed) && (!$last)) {
$prev_coordinate['lookat_range'] = $lookat_range;
array_push($points, $prev_coordinate);
}
// Create starting point
$coordinate['lookat_range'] = $lookat_range;
array_push($points, $coordinate);
// New start point/end point
if (is_array($points)) {
for($j=0; $j<sizeof($points); $j++) {
// New end & start point?
if (($j) || (!$line_placed)) {
// Store when only 1 valid point? => not a real trace!!
if (($i) && (!$j) && (!$line_placed)) {
download_document_data("\t\t\t\t<name>" . convert_datetime($start_time,TRUE) . "</name>\n", $kml_action, "kml");
download_document_data("\t\t</Folder>\n", $kml_action, "kml");
// Valid data
$valid_data = 1;
}
// Create new starting point
download_document_data("\t\t<Folder>\n", $kml_action, "kml");
$start_time = $points[$j]['t'];
$start_latitude = $points[$j]['latitude'];
$start_longitude = $points[$j]['longitude'];
}
download_document_data("\t\t\t<Placemark>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<name>" . date("Y-m-d H:i:s", $points[$j]['t']) . "</name>\n", $kml_action, "kml");
if ((isset($_GET['speed'])) || (!isset($_GET['equipment']))) {
download_document_data("\t\t\t\t<description>" . _("Speed") . ": " . $points[$j]['speed'] . " km/h</description>\n", $kml_action, "kml");
}
download_document_data("\t\t\t\t<LookAt>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<longitude>" . $points[$j]['longitude'] . "</longitude>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<latitude>" . $points[$j]['latitude'] . "</latitude>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<heading>" . $points[$j]['heading'] . "</heading>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<range>" . $points[$j]['lookat_range'] . "</range>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<gx:TimeStamp><when>" . date("Y-m-d", $points[$j]['t']) . "T" . date("H:i:s", $points[$j]['t']) . "</when></gx:TimeStamp>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</LookAt>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<styleUrl>#". $info['idcode'] . "</styleUrl>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<Point>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<coordinates>" . $points[$j]['longitude'] . "," . $points[$j]['latitude'] . ",0</coordinates>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</Point>\n", $kml_action, "kml");
download_document_data("\t\t\t</Placemark>\n", $kml_action, "kml");
if (((!$j) && ($line_placed)) || ($last)) {
// Store trace
download_document_data("\t\t\t\t<name>" . date("Y-m-d H:i:s", $start_time) . " - " . date("Y-m-d H:i:s", $points[$j]['t']) . "</name>\n", $kml_action, "kml");
download_document_data("\t\t</Folder>\n", $kml_action, "kml");
if (!isset($_GET['equipment'])) {
// Determine gps info
$gps_info_start = $start_latitude . ", " . $start_longitude;
$gps_info_start_link = GOOGLE_MAPS . "maps?q=" . $start_latitude . ", " . $start_longitude;
$gps_info_end = $points[$j]['latitude'] . ", " . $points[$j]['longitude'];
$gps_info_end_link = GOOGLE_MAPS . "maps?q=" . $points[$j]['latitude'] . ", " . $points[$j]['longitude'];
// Determine time info
$timestamp_start = $start_time;
$timestamp_end = $points[$j]['t'];
// Get duration in hours/minutes/seconds
$duration = $timestamp_end - $timestamp_start;
$hours = (int)($duration/3600);
$duration = (int)$duration - ($hours*3600);
$minutes = (int)($duration/60);
$duration = (int)$duration - ($minutes*60);
$seconds = (int)($duration);
$duration = sprintf("%02u:%02u:%02u", $hours, $minutes, $seconds);
// Do not display GPS data anymore, only KML attachment
//report_data(array(value => array(++$counter, $gps_info_start, $timestamp_start, $gps_info_end, $timestamp_end, $duration),
// border => array("LRBT","LRBT","LRBT","LRBT","LRBT","LRBT") ,
// bold => array(0,0,0,0,0,0) ,
// align => array("C","L","L","L","L","L") ,
// font_size => array(8,8,8,8,8,8) ,
// cell_width => array(15,35,33,35,33,29) ,
// check_page_end => 1 ,
// ishtml => array("",array(type => link, data => $gps_info_start_link),"",array(type => link, data => $gps_info_end_link),"","")));
}
// Valid data
$valid_data = 1;
}
}
}
// clear flag
$line_placed = 0;
}
else {
// Create line element
download_document_data("\t\t\t<Placemark>\n", $kml_action, "kml");
// Initial values
$button_selected = 0;
// JW20100705: Geofencing
$geofence_info = db_fetch_data("select minor from log_zkl where major=0xB and (minor=0x88 or minor=0x89) and zkl='" . $info['id'] . "' and id<'" . $coordinate['id'] . "' and sdcard='" . $coordinate['sdcard'] . "' and rpgmcount='" . $coordinate['rpgmcount'] . "' and startup='" . $coordinate['startup'] . "'order by id desc limit 1;");
$geofence_inside = is_array($geofence_info) && $geofence_info[0]['minor'] == 0x88;
download_document_data("\t\t\t\t<name>" . date("Y-m-d H:i:s", $coordinate['t']) . "</name>\n", $kml_action, "kml");
if ((isset($_GET['speed'])) || (!isset($_GET['equipment']))) {
if ($button_selected) {
download_document_data("\t\t\t\t<description>" . _("Speed") . ": " . $coordinate['speed'] . " km/h, " . _("Button") . ": " . $button_selected . "</description>\n", $kml_action, "kml");
}
else {
download_document_data("\t\t\t\t<description>" . _("Speed") . ": " . $coordinate['speed'] . " km/h</description>\n", $kml_action, "kml");
}
}
else if ($button_selected) {
download_document_data("\t\t\t\t<description>" . _("Button") . ": " . $button_selected . "</description>\n", $kml_action, "kml");
}
download_document_data("\t\t\t\t<LookAt>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<longitude>" . $coordinate['longitude'] . "</longitude>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<latitude>" . $coordinate['latitude'] . "</latitude>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<heading>" . $coordinate['heading'] . "</heading>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<range>" . $lookat_range . "</range>\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<gx:TimeStamp><when>" . date("Y-m-d", $point['t']) . "T" . date("H:i:s", $point['t']) . "</when></gx:TimeStamp>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</LookAt>\n", $kml_action, "kml");
// Define style
$style = ($button_selected) ? $info['idcode'] . "_" . ($button_selected - 1) : ($info['idcode'] . ($geofence_inside ? '_geofence_inside' : ''));
download_document_data("\t\t\t\t<styleUrl>#". $style . "</styleUrl>\n", $kml_action, "kml");
download_document_data("\t\t\t\t<LineString id=\"" . $info['idcode'] . "\">\n", $kml_action, "kml");
download_document_data("\t\t\t\t\t<coordinates>" . $prev_coordinate['longitude'] . "," . $prev_coordinate['latitude'] . ",0 " . $coordinate['longitude'] . "," . $coordinate['latitude'] . ",0</coordinates>\n", $kml_action, "kml");
download_document_data("\t\t\t\t</LineString>\n", $kml_action, "kml");
download_document_data("\t\t\t</Placemark>\n", $kml_action, "kml");
// Set flag
$line_placed = 1;
}
// Store coordinate
$prev_coordinate = $coordinate;
}
}
}
download_document_data("\t</Document>\n", $kml_action, "kml");
}
}
}
// KML footer
download_document_data("</Folder>\n", $kml_action, "kml");
download_document_data("</kml>", $kml_action, "kml");
?>