Google maps 谷歌地图v3中的限速检测仿真

Google maps 谷歌地图v3中的限速检测仿真,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在谷歌地图第三版中开发一个速度检测系统的模拟。我已经能够模拟在两个坐标之间移动汽车。我还定义了一个速度区,比如说40 km/h,带有两个标记。接下来,我需要做的是如何检测移动标记何时通过该速度区的起点,并提供一个警报,告知其已进入该速度区,以及在其离开该速度区时发出警报。请帮忙!我真的被困在这里了!请参阅下面的代码以获取进一步参考 // Declare variable map and marker var map, marker; // Set start position

我正在谷歌地图第三版中开发一个速度检测系统的模拟。我已经能够模拟在两个坐标之间移动汽车。我还定义了一个速度区,比如说40 km/h,带有两个标记。接下来,我需要做的是如何检测移动标记何时通过该速度区的起点,并提供一个警报,告知其已进入该速度区,以及在其离开该速度区时发出警报。请帮忙!我真的被困在这里了!请参阅下面的代码以获取进一步参考

   // Declare variable map and marker
  var map, marker;
  // Set start position of car
  // Define coordinates in an array
  var startPosition = [-20.248685163166048, 57.68921500152305];
  // Set speed in km/h
  var speed = 35;

  // Set delay time in milliseconds
  /*
    If you set the delay below 1000ms and you go to another tab,
    the setTimeout function will wait to be the active tab again
    before running the code.
  */
  var delay = 100;

  // Define function animateMarker()
  // to animate the car between coordinates
  function animateMarker(marker, coords, km_h) {
      var target = 0;
      var km_h = km_h || 35;
      coords.push([startPosition[0], startPosition[1]]);

      // Define function goToPoint()
      // to go to a specified point/coordinate
      function goToPoint() {
        var latitude = marker.position.lat();
        var longitude = marker.position.lng();
        // Define step movement in metres
        var step = (km_h * 1000 * delay) / 3600000;

        var destination = new google.maps.LatLng(coords[target][0], coords[target][1]);

        // Compute distance between marker and destination in metres
        var distance = google.maps.geometry.spherical.computeDistanceBetween(destination, marker.position);

        // Compute number of steps
        var numOfSteps = distance / step;
        var i = 0;
        var deltaLatitude = (coords[target][0] - latitude) / numOfSteps;
        var deltaLongitude = (coords[target][1] - longitude) / numOfSteps;

        // Define function moveMarker()
        // to move the marker
        function moveMarker() {
          latitude += deltaLatitude;
          longitude += deltaLongitude;
          i += step;

          if (i < distance) {
            marker.setPosition(new google.maps.LatLng(latitude, longitude));
            setTimeout(moveMarker, delay);
          } else {
            marker.setPosition(destination);
            target++;
            if (target == coords.length) {
              target = 0;
            }
            setTimeout(goToPoint, delay);
          }
        }
        moveMarker();
      }
    goToPoint();
  }

  // Define function initialize()
  function initialize() {
    var mapOptions = {
      zoom: 16,
      center: new google.maps.LatLng(-20.248685163166048, 57.68921500152305),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

    var startPositionImage = 'images/markers/red_MarkerS.png';
    startPositionMarker = new google.maps.Marker({
      position: new google.maps.LatLng(-20.248685163166048, 57.68921500152305),
      map: map,
      icon: startPositionImage
    });

    var endPositionImage = 'images/markers/red_MarkerF.png';
    endPositionMarker = new google.maps.Marker({
      position: new google.maps.LatLng(-20.251659574520456, 57.684199270665204),
      map: map,
      icon: endPositionImage
    });

    var carImage = 'images/car/car-03-32.png';
    carMarker = new google.maps.Marker({
      position: new google.maps.LatLng(startPosition[0], startPosition[1]),
      map: map,
      icon: carImage,
      zIndex:9999
    });

    var speedLimitImage = 'images/speed-signs/speed-40.png';
    speedLimitStartMarker = new google.maps.Marker({
      position: new google.maps.LatLng(-20.249944010457316, 57.6869901091452),
      map: map,
      icon: speedLimitImage
    });

    speedLimitEndMarker = new google.maps.Marker({
      position: new google.maps.LatLng(-20.25161302114367, 57.68424151545719),
      map: map,
      icon: speedLimitImage
    });

    var alertImage = 'images/alert-signs/alert-03.png';
    alertMarker = new google.maps.Marker({
      position: new google.maps.LatLng(-20.249267123751885, 57.68821371147283),
      map: map,
      icon: alertImage
    });

    google.maps.event.addListenerOnce(map, 'idle', function() {
      animateMarker(carMarker, [
            // The coordinates of each point you want the marker to go to.
            // You don't need to specify the starting position again.
            [-20.248685163166048, 57.68921500152305],
            [-20.251659574520456, 57.684199270665204]
            ], speed);
    });
  }
  window.onload = initialize;
//声明变量映射和标记
var图,标记;
//设置轿厢启动位置
//定义数组中的坐标
var startPosition=[-20.248688516316048,57.68921500152305];
//设定速度(单位:km/h)
无功转速=35;
//以毫秒为单位设置延迟时间
/*
如果将延迟设置为1000毫秒以下,然后转到另一个选项卡,
setTimeout函数将等待再次成为活动选项卡
在运行代码之前。
*/
无功延迟=100;
//定义函数animateMarker()
//在坐标之间设置汽车动画的步骤
功能动画标记器(标记器、坐标、公里){
var目标=0;
var km|h=km|h | 35;
coords.push([startPosition[0],startPosition[1]]);
//定义函数goToPoint()
//转到指定点/坐标的步骤
函数goToPoint(){
var纬度=marker.position.lat();
var经度=marker.position.lng();
//以米为单位定义步进运动
var步长=(公里小时*1000*延迟)/3600000;
var destination=new google.maps.LatLng(coords[target][0],coords[target][1]);
//计算标记和目标之间的距离(以米为单位)
var distance=google.maps.geometry.spheremic.ComputedDistanceBeween(目的地、标记、位置);
//计算步数
var numOfSteps=距离/步长;
var i=0;
变量deltaLatitude=(坐标[target][0]-纬度)/numOfSteps;
变量deltalongitence=(坐标[target][1]-经度)/numfosteps;
//定义函数moveMarker()
//移动标记
函数moveMarker(){
纬度+=三角度;
经度+=三角度;
i+=阶跃;
如果(i<距离){
marker.setPosition(新的google.maps.LatLng(纬度、经度));
设置超时(移动标记,延迟);
}否则{
标记器。设置位置(目的地);
目标++;
如果(目标==coords.length){
目标=0;
}
设置超时(goToPoint,delay);
}
}
moveMarker();
}
goToPoint();
}
//定义函数初始化()
函数初始化(){
变量映射选项={
缩放:16,
中心:新google.maps.LatLng(-20.248688516316048,57.68921500152305),
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
var startPositionImage='images/markers/red_markers.png';
startPositionMarker=新建google.maps.Marker({
位置:new google.maps.LatLng(-20.248688516316048,57.68921500152305),
地图:地图,
图标:startPositionImage
});
var endPositionImage='images/markers/red_MarkerF.png';
endPositionMarker=新的google.maps.Marker({
位置:new google.maps.LatLng(-20.2516595745204567.684199270665204),
地图:地图,
图标:endPositionImage
});
var carImage='images/car/car-03-32.png';
carMarker=new google.maps.Marker({
位置:new google.maps.LatLng(startPosition[0],startPosition[1]),
地图:地图,
图标:carImage,
zIndex:9999
});
var speedLimitImage='images/speed-signs/speed-40.png';
speedLimitStartMarker=新的google.maps.Marker({
位置:new google.maps.LatLng(-20.249944010457316,57.6869901091452),
地图:地图,
图标:speedLimitImage
});
speedLimitEndMarker=新建google.maps.Marker({
位置:new google.maps.LatLng(-20.25161302114367,57.68424151545719),
地图:地图,
图标:speedLimitImage
});
var alertImage='images/alert-signs/alert-03.png';
alertMarker=新建google.maps.Marker({
位置:new google.maps.LatLng(-20.249267123751885,57.68821371147283),
地图:地图,
图标:alertImage
});
google.maps.event.addListenerOnce(map'idle',function(){
动画师[
//要标记的每个点的坐标。
//无需再次指定起始位置。
[-20.248685163166048, 57.68921500152305],
[-20.251659574520456, 57.684199270665204]
],速度);
});
}
window.onload=初始化;

使用geofence创建具有入口点和出口点(标记)的多边形,并在用户进出围栏时创建警报。这里的例子是:好的,先生。我会考虑上面的例子。