用于实时跟踪的ESRI javascript API

问题描述:

我正在尝试使用ESRI ArcGIS JavaScript API实现实时跟踪功能。我无法根据从数据库中检索到的lat,lng移动标记。为了给出一个清晰的想法,这是我们为此目的使用Google地图的现有代码。如何使用ESRI arcGIS javascript API实现相同?用于实时跟踪的ESRI 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> 
+1

提示:重写代码使用适当的ESRI的ArcGIS的JavaScript API方法 –

+0

您提到的资源对于实现实时曲目非常有用。我期待通过在标记移动时添加平滑动画效果来改善它。 – Rajarishi

那么,有直接的方式来实现这一点。

正如你在问题中提到的,你已经在你的数据库中的某处存在所有那些活的lat/long值。

注意: -在ArGIS和Google地图中处理GIS数据的方法很不相同。为了在地图上显示位置,我们通常在ArcGIS JS API中使用图形图层(推荐)。

下面是步骤,以实现这 -

  1. 创建ESRI Map
  2. 创建并加载graphics layer现场跟踪功能
  3. 从数据库中获得的current/live location
  4. 一旦您从数据库中获得实时位置,请清除以前的实时跟踪功能并在新找到的位置添加新的位置。
  5. 在每次刷新间隔后,您必须清除地图中以前的数据/点并添加新的点。

您可以使用使用ArcGIS/ESRI工具的特征的move Edit operation但将太复杂所以建议删除和添加功能。

希望能上面的提示将帮助你:)

+0

是的!我试过这个程序,事实证明它是有效的。谢谢你的建议。这很简单直接。 – Rajarishi