ESRI javascript API для отслеживания в реальном времени
Я пытаюсь реализовать функцию трассировки в реальном времени с помощью API-интерфейса ESRI ArcGIS javascript. Я не могу переместить маркер на основе широты, полученной из базы данных. Чтобы дать четкое представление, это существующий код, где мы используем карты Google для этой цели. Как добиться того же, используя ESRI arcGIS javascript API?
<script type="text/javascript">
var marker, map, ct=0, geocoder ;
function initialize() {
var myLatlng = new google.maps.LatLng(<?php echo $lat; ?>, <?php echo $lng; ?>);
var mapOptions = {
zoom: 14,
maxZoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('main-map'), mapOptions);
geocoder = new google.maps.Geocoder();
var image = new google.maps.MarkerImage(
'assets/images/marker-images/image.png',
new google.maps.Size(20,21),
new google.maps.Point(0,0),
new google.maps.Point(10,21)
);
marker = new google.maps.Marker({
position: myLatlng,
map: map,
icon: image,
title: 'I might be here'
});
}
///////////////////////////////////////////////////
$(function() {
initialize();
live();
setInterval( live , 10000);
});
function live() {
var duration = 10000;
$.ajax({
type: "GET",
url: "otravels_ajax/getlivedata.php?vid=<?php echo $imei; ?>",
dataType: 'xml',
async:false,
success: function(xml) {
$(xml).find("marker").each(function(){
var id = $(this).find('id').text(); lid=id; //alert(lid);
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));//console.log(point);
var ts = $(this).find('ts').text();//alert(ts);
var speed = $(this).find('speed').text();
var status = $(this).find('status').text();
if(status=='A') status="<span class='label label-success '>Active</span>"; else status="<span class='label label-important '>InActive</span>";
var loc_addr = $(this).find('loc').text();
var img=$(this).find('img').text();
var image = new google.maps.MarkerImage(
img,
new google.maps.Size(46,42),
new google.maps.Point(0,0),
new google.maps.Point(23,42)
);
marker.setIcon(image);
marker.animateTo(point, {easing: 'linear', duration: duration});
if(!map.getBounds().contains(point))
map.panTo(point);
// $('#live_data').html("<tr><td>"+ts+"</td><td>"+speed+"KM/HR</td><td>"+status+"</td><td id=\"loc\">"+loc_addr+"</td></tr>");
$("#d_time").html(ts);
$("#d_speed").html(speed+"KM/HR");
$("#d_status").html(status);
geocoder.geocode({
"latLng":point
}, function (results, status) { // alert("fgb");
if (status == google.maps.GeocoderStatus.OK) {
var placeName = results[1].formatted_address; //alert(placeName);
$("#loc").html(placeName);
}
});
});
}
});
}
</script>
2 ответа
Документация API включает два примера для отслеживания.
Для отслеживания текущего местоположения: https://developers.arcgis.com/javascript/latest/sample-code/widgets-track-basic/index.html
Чтобы смоделировать отслеживание из набора мест: https://developers.arcgis.com/javascript/latest/sample-code/widgets-track/index.html
Ну, есть прямой путь для достижения этой цели.
Как вы упомянули в вопросе, у вас уже есть все эти живые lat/long
значения где-то в вашей базе данных.
Примечание:- Существует совершенно другой подход к обработке данных ГИС на картах ArGIS и Google. Для отображения местоположения на карте мы обычно используем графические слои (рекомендуется) в ArcGIS JS API.
Ниже приведены шаги для достижения этой
- Создать
ESRI Map
- Создать и загрузить
graphics layer
для отслеживания в реальном времени - Получить
current/live location
из базы данных. - Как только вы получите текущее местоположение из своей базы данных, затем очистите предыдущие функции отслеживания в реальном времени и добавьте новые в недавно найденные местоположения.
- После каждого интервала обновления вы должны удалить предыдущие данные / точку с карты и добавить новые.
Ты можешь использовать move Edit operation
функции с использованием инструментов ArcGIS/ESRI, но это будет слишком сложно, поэтому рекомендуем удалить и добавить функцию.
Надеюсь, что выше подсказки помогут вам:)