ADD функция слежения за координатами

This commit is contained in:
Krivchikov Dmitry 2014-12-23 20:18:55 +03:00
parent 171d23829c
commit 650405b393
6 changed files with 45 additions and 16 deletions

View File

@ -27,6 +27,7 @@ class IndexController extends Controller
self::addScript('/js/leaflet.markercluster.js'); self::addScript('/js/leaflet.markercluster.js');
self::addScript('/js/fotorama.js'); self::addScript('/js/fotorama.js');
self::addScript('/js/suggest.js?ver=' . App::getConfig('version')); self::addScript('/js/suggest.js?ver=' . App::getConfig('version'));
self::addScript('/js/navigation.js?ver=' . App::getConfig('version'));
self::addStyle('/css/style.css?ver=' . App::getConfig('version')); self::addStyle('/css/style.css?ver=' . App::getConfig('version'));
self::addStyle('http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css'); self::addStyle('http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css');

View File

@ -7,7 +7,7 @@
<div class="glyphicon glyphicon-globe _t boxButtonLayers" onclick="openBox('Layers')" title="Слои карты"></div> <div class="glyphicon glyphicon-globe _t boxButtonLayers" onclick="openBox('Layers')" title="Слои карты"></div>
<div class="glyphicon glyphicon-filter _c boxButtonFilter" title="Фильтры и поиск" onclick="openBox('Filter')"></div> <div class="glyphicon glyphicon-filter _c boxButtonFilter" title="Фильтры и поиск" onclick="openBox('Filter')"></div>
<div class="glyphicon glyphicon-screenshot _b" title="Я на карте" onclick="showMeOnTheMap()"></div> <div class="glyphicon glyphicon-screenshot _b" id="showMeOnTheMap" title="Я на карте" onclick="showMeOnTheMap(false)"></div>
<div class="glyphicon glyphicon-list boxButtonRoute" title="Маршрут" onclick="openBox('Route')"></div> <div class="glyphicon glyphicon-list boxButtonRoute" title="Маршрут" onclick="openBox('Route')"></div>

View File

@ -53,7 +53,8 @@ div.leaflet-popup-content button:hover span.label {display: inline;}
/*Controls for BOX*/ /*Controls for BOX*/
div#control {width: 50px; position: absolute; top: 0; right: 0;bottom: 50px; color: white; font-size: 20px; padding-top: 10px;} div#control {width: 50px; position: absolute; top: 0; right: 0;bottom: 50px; color: white; font-size: 20px; padding-top: 10px;}
body.openBox div#control {right: 250px;} body.openBox div#control {right: 250px;}
div#control div {background-color: rgba(15, 15, 15, 0.65); border-radius: 8px 0 0 8px; width: auto; padding: 10px; margin-left: 10px; margin-bottom: 8px;} div#control div {background-color: rgba(15, 15, 15, 0.65); border-radius: 8px 0 0 8px; width: auto; padding: 10px; margin-left: 10px; margin-bottom: 8px; cursor: pointer;}
div#control div:before {cursor: pointer;}
div#control div:hover {background-color: #000;} div#control div:hover {background-color: #000;}
div#control div.active {background-color: rgb(255, 162, 0);} div#control div.active {background-color: rgb(255, 162, 0);}
div#control div.big {font-size: 22px; padding: 14px; margin-left: 0;} div#control div.big {font-size: 22px; padding: 14px; margin-left: 0;}

View File

@ -166,3 +166,7 @@ window.addEventListener('popstate', function(e)
} }
} }
}, false); }, false);
function getTime() {
return Math.floor(Date.now() / 1000);
}

View File

@ -304,20 +304,6 @@ function searchAdderess()
}); });
} }
/**
* Пытается более точно определить координаты пользователя на карте и, при необходимости, обновляет положение точки "im"
* @returns {undefined}
*/
function showMeOnTheMap()
{
navigator.geolocation.getCurrentPosition(function (pos) {
coords = [pos.coords.latitude, pos.coords.longitude];
myMap.removeLayer(points.im);
points.im.setLatLng(coords).addTo(myMap);
myMap.setView(coords, defaultZoom);
});
}
/** /**
* Активирет добавление точки - ждёт выбор координат, меняет курсор на прицел. * Активирет добавление точки - ждёт выбор координат, меняет курсор на прицел.
* @returns {Boolean} * @returns {Boolean}

37
public/js/navigation.js Normal file
View File

@ -0,0 +1,37 @@
var showMeLastTime = 0;
var showMeTimerOn = false;
var intervalId = null;
/**
* Пытается более точно определить координаты пользователя на карте и, при необходимости, обновляет положение точки "im"
* @returns {undefined}
*/
function showMeOnTheMap(interval)
{
if (!interval) {
if (showMeTimerOn) {
clearInterval(intervalId);
intervalId = null;
showMeTimerOn = false;
$('#showMeOnTheMap').removeClass('active');
} else {
if (showMeLastTime + 10 >= getTime() && !showMeTimerOn) {
showMeTimerOn = true;
$('#showMeOnTheMap').addClass('active');
intervalId = setInterval('showMeOnTheMap(true)', 15000);
showMeLastTime = getTime();
}
}
showMeLastTime = getTime();
}
navigator.geolocation.getCurrentPosition(function (pos) {
coords = [pos.coords.latitude, pos.coords.longitude];
myMap.removeLayer(points.im);
points.im.setLatLng(coords).addTo(myMap);
myMap.setView(coords, myMap.getZoom());
});
}