1

我正在尝试使用 ESRI ArcGIS javascript API 实现实时跟踪功能。我无法根据从数据库中检索到的 lat、lng 移动标记。为了给出一个清晰的概念,这是我们为此目的使用 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>
4

2 回答 2

4

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

于 2017-04-28T22:07:30.017 回答
0

好吧,有直接的方法可以实现这一目标。

正如您在问题中提到的那样,您已经lat/long在数据库中的某个位置拥有所有这些实时值。

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

以下是实现这一目标的步骤 -

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

您可以使用move Edit operationArcGIS/ESRI 工具使用该功能,但这太复杂了,因此建议您删除并添加功能。

希望以上提示对您有所帮助:)

于 2017-04-26T06:57:19.677 回答