From 2c15d1d2344fe32f549f755de24b973822631181 Mon Sep 17 00:00:00 2001 From: bfabiszewski Date: Wed, 19 Jun 2013 13:27:14 +0200 Subject: phpTrackme 1.0 --- download.php | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100755 download.php (limited to 'download.php') diff --git a/download.php b/download.php new file mode 100755 index 0000000..995f190 --- /dev/null +++ b/download.php @@ -0,0 +1,221 @@ +startElement("Style"); + $xml->writeAttribute("id", $name."Style"); + $xml->startElement("IconStyle"); + $xml->writeAttribute("id", $name."Icon"); + $xml->startElement("Icon"); + $xml->writeElement("href", $url); + $xml->endElement(); + $xml->endElement(); + $xml->endElement(); +} +function toHMS($s) { + $d = floor($s/86400); + $h = floor(($s%86400)/3600); + $m = floor((($s%86400)%3600)/60); + $s = (($s%86400)%3600)%60; + return (($d>0)?($d." d "):"").(substr("00".$h,-2)).":".(substr("00".$m,-2)).":".(substr("00".$s,-2)); +} + +if ($trackid>0 && $userid>0) { + $query = $mysqli->prepare("SELECT positions.ID,Latitude,Longitude,Altitude,Speed,Angle,DateOccurred,username,Name FROM positions LEFT JOIN users ON (positions.FK_Users_ID=users.ID) LEFT JOIN trips ON (positions.FK_Trips_ID=trips.ID) WHERE positions.FK_Users_ID=? AND positions.FK_Trips_ID=? ORDER BY positions.DateOccurred"); + $query->bind_param("ii", $userid, $trackid); + $query->execute(); + $query->store_result(); + $query->bind_result($positionid,$latitude,$longitude,$altitude,$speed,$angle,$dateoccured,$username,$trackname); + $query->fetch(); // take just one row to get trackname etc + $query->data_seek(0); // and reset result set + switch ($type) { + case "kml": + default: + header("Content-type: application/vnd.google-earth.kml+xml"); + header("Content-Disposition: attachment; filename=\"track$trackid.kml\""); + $xml = new XMLWriter(); + $xml->openURI("php://output"); + $xml->startDocument("1.0"); + $xml->startElement("kml"); + $xml->writeAttribute("xmlns", "http://earth.google.com/kml/2.1"); + $xml->setIndent(true); + $xml->startElement("Document"); + $xml->writeElement("name", $trackname); + // line style + $xml->startElement("Style"); + $xml->writeAttribute("id", "lineStyle"); + $xml->startElement("LineStyle"); + $xml->writeElement("color","7f0000ff"); + $xml->writeElement("width","4"); + $xml->endElement(); + $xml->endElement(); + // marker styles + addStyle($xml,"red","http://maps.google.com/mapfiles/markerA.png"); + addStyle($xml,"green","http://maps.google.com/mapfiles/marker_greenB.png"); + addStyle($xml,"gray","http://labs.google.com/ridefinder/images/mm_20_gray.png"); + $style = "#redStyle"; // for first element + $i = 0; + $totalMeters = 0; + $totalSeconds = 0; + while ($query->fetch()) { + $distance = (isset($prev_latitude))?haversine_distance($prev_latitude,$prev_longitude,$latitude,$longitude):0; + $prev_latitude = $latitude; + $prev_longitude = $longitude; + $seconds = (isset($prev_dateoccured))?(strtotime($dateoccured)-strtotime($prev_dateoccured)):0; + $prev_dateoccured = $dateoccured; + $totalMeters += $distance; + $totalSeconds += $seconds; + + if(++$i == $query->num_rows) { $style = "#greenStyle"; } // last element + $xml->startElement("Placemark"); + $xml->writeAttribute("id", $positionid); + //$xml->writeElement("name", $i); + $description = + "
".$lang_user.": ".strtoupper($username)."
".$lang_track.": ".strtoupper($trackname). + "
". + "
". + "
".$lang_time.": ".$dateoccured."
". + (($speed)?"".$lang_speed.": ".round($speed*3.6,2*$factor_kmh)." ".$unit_kmh."
":""). + (($altitude != null)?"".$lang_altitude.": ".round($altitude*$factor_m)." ".$unit_m."
":""). + "".$lang_ttime.": ".toHMS($totalSeconds)."
". + "".$lang_aspeed.": ".(($totalSeconds!=0)?round($totalMeters/$totalSeconds*3.6*$factor_kmh,2):0)." ".$unit_kmh."
". + "".$lang_tdistance.": ".round($totalMeters/1000*$factor_km,2)." ".$unit_km."
"."
". + "
".$lang_point." ".$i." ".$lang_of." ".($query->num_rows-1)."
". + "
"; + $xml->startElement("description"); + $xml->writeCData($description); + $xml->endElement(); + $xml->writeElement("styleUrl", $style); + $xml->startElement("Point"); + $coordinate[$i] = $longitude.",".$latitude.(($altitude) ? ",".$altitude : ""); + $xml->writeElement("coordinates", $coordinate[$i]); + $xml->endElement(); + $xml->endElement(); + $style = "#grayStyle"; // other elements + } + $coordinates = implode("\n",$coordinate); + $xml->startElement("Placemark"); + $xml->writeElement("styleUrl", "#lineStyle"); + $xml->startElement("LineString"); + $xml->writeElement("coordinates", $coordinates); + $xml->endElement(); + $xml->endElement(); + + + $xml->endElement(); + $xml->endElement(); + $xml->endDocument(); + $xml->flush(); + + break; + + case "gpx": + header("Content-type: application/application/gpx+xm"); + header("Content-Disposition: attachment; filename=\"track$trackid.gpx\""); + $xml = new XMLWriter(); + $xml->openURI("php://output"); + $xml->startDocument("1.0"); + $xml->startElement("gpx"); + $xml->writeAttribute("xmlns", "http://www.topografix.com/GPX/1/1"); + $xml->writeAttribute("xmlns:gpxdata", "http://www.cluetrust.com/XML/GPXDATA/1/0"); + $xml->writeAttribute("creator", "phpTrackme"); + $xml->writeAttribute("version", "1.1"); + $xml->startElement("metadata"); + $xml->writeElement("name", $trackname); + $xml->writeElement("time", str_replace(" ","T",$dateoccured)); + $xml->endElement(); + $xml->startElement("trk"); + $xml->writeElement("name", $trackname); + $xml->startElement("trkseg"); + $i = 0; + $totalMeters = 0; + $totalSeconds = 0; + while ($query->fetch()) { + $distance = (isset($prev_latitude))?haversine_distance($prev_latitude,$prev_longitude,$latitude,$longitude):0; + $prev_latitude = $latitude; + $prev_longitude = $longitude; + $seconds = (isset($prev_dateoccured))?(strtotime($dateoccured)-strtotime($prev_dateoccured)):0; + $prev_dateoccured = $dateoccured; + $totalMeters += $distance; + $totalSeconds += $seconds; + $xml->startElement("trkpt"); + $xml->writeAttribute("lat", $latitude); + $xml->writeAttribute("lon", $longitude); + if($altitude) { $xml->writeElement("ele", $altitude); } + $xml->writeElement("time", str_replace(" ","T",$dateoccured)); + $xml->writeElement("name", ++$i); + $xml->startElement("desc"); + $description = + $lang_user.": ".strtoupper($username)." ".$lang_track.": ".strtoupper($trackname). + " ".$lang_time.": ".$dateoccured. + (($speed)?" ".$lang_speed.": ".round($speed*3.6,2*$factor_kmh)." ".$unit_kmh:""). + (($altitude != null)?" ".$lang_altitude.": ".round($altitude*$factor_m)." ".$unit_m:""). + " ".$lang_ttime.": ".toHMS($totalSeconds)."". + " ".$lang_aspeed.": ".(($totalSeconds!=0)?round($totalMeters/$totalSeconds*3.6*$factor_kmh,2):0)." ".$unit_kmh. + " ".$lang_tdistance.": ".round($totalMeters/1000*$factor_km,2)." ".$unit_km. + " ".$lang_point." ".$i." ".$lang_of." ".($query->num_rows-1); + $xml->writeCData($description); + $xml->endElement(); + $xml->endElement(); + } + $xml->endElement(); + $xml->endElement(); + $xml->endElement(); + $xml->endDocument(); + $xml->flush(); + + break; + } + $query->free_result(); + $query->close(); +} +$mysqli->close(); +?> -- cgit v1.2.3