Первая нормальная версия разбора файла в формате GPX. Не работают пока только неймспейсы в XML, т.е. не вытягивается дополнительная информация. На карте выводятся точки WPT и фрагменты трека с именами.

This commit is contained in:
Krivchikov Dmitry 2016-05-15 11:41:21 +03:00
parent 79c2a22069
commit 28591415fa
3 changed files with 107 additions and 0 deletions

View File

@ -3,6 +3,78 @@
class IndexController extends Controller class IndexController extends Controller
{ {
static function actionTest()
{
// $gpxObject = simplexml_load_file('/tmp/doc2.gpx');
$gpxObject = simplexml_load_file('/tmp/doc(gpsvisualizer.com).gpx');
// $gpxObject = simplexml_load_file('/tmp/1100.gpx');
$trip = array(
'name' => isset($gpxObject->metadata->name) ? (string) $gpxObject->metadata->name : 'Track',
'time' => isset($gpxObject->metadata->time) ? strtotime($gpxObject->metadata->time) : '',
);
$wayPoints = array();
$tracks = array();
$latlngs = array();
foreach ($gpxObject as $key => $block) {
if ($key == 'wpt') {
if (empty($block)) {
continue;
}
$wayPoints[] = array(
'lat' => floatval($block['lat']),
'lng' => floatval($block['lon']),
'time' => strtotime($block->time),
'name' => (string) $block->name,
'desc' => (string) $block->desc,
);
}
if ($key == 'trk') {
// print_r($block);die;
if (empty($block->trkseg)) {
continue;
}
foreach ($block->trkseg as $trkpt) {
if ($trkpt) {
$trackPoints = array();
$latlngs = array();
foreach ($trkpt as $tpt) {
// $trackPoints[] = array(
// 'lat' => floatval($tpt['lat']),
// 'lng' => floatval($tpt['lon']),
// 'time' => isset($tpt->time) ? strtotime($tpt->time) : 0,
// 'ele' => isset($tpt->ele) ? floatval($tpt->ele) : 0,
// );
$latlngs[] = array(
'lat' => floatval($tpt['lat']),
'lng' => floatval($tpt['lon']),
);
}
}
}
// $tracks[] = $trackPoints;
$tracks[] = array(
'name' => (string)$block->name,
'length' => 0,
'latlngs' => $latlngs
);
}
}
$trip['tracks'] = $tracks;
// $trip['latlngs'] = $latlngs;
$trip['wayPoints'] = $wayPoints;
self::renderPartial('json.php', $trip);
}
/** /**
* Действие по умолчанию * Действие по умолчанию
*/ */

BIN
public/ico/marker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -37,6 +37,13 @@ categories.simplepoint = L.icon({
popupAnchor: [7, 7] popupAnchor: [7, 7]
}); });
categories.marker = L.icon({
iconUrl: '/ico/marker.png',
iconSize: [32, 37],
iconAnchor: [16, 37],
popupAnchor: [0, 1]
});
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
if (pointLat == pointLng) { if (pointLat == pointLng) {
@ -569,3 +576,31 @@ function onLocationFound(e) {
function onLocationError(e) { function onLocationError(e) {
alert('Ошибка при определении координат: ' + e.message); alert('Ошибка при определении координат: ' + e.message);
} }
function drawTrek()
{
colors = ['red', 'green', 'blue'];
track = new Array();
$.ajax({
url: "/index/test/",
success: function (data) {
if (typeof (data.tracks) != 'undefined') {
for (var i = 0; i < data.tracks.length; i++) {
color = colors[Math.floor(Math.random() * colors.length)]
// console.log(color);
track[i] = L.polyline(data.tracks[i].latlngs, {color: color, width: 4, opacity: 0.8});
track[i].addTo(myMap);
track[i].bindPopup(data.tracks[i].name);
}
// myMap.fitBounds(track[i].getBounds());
}
if (typeof (data.wayPoints) != 'undefined') {
for (var i = 0; i < data.wayPoints.length; i++) {
// console.log(data.wayPoints[i]);
L.marker([data.wayPoints[i]['lat'], data.wayPoints[i]['lng']], {icon: categories.marker, title: data.wayPoints[i]['name']}).addTo(myMap);
}
}
}
});
}