Google maps 谷歌地图v3中的限速检测仿真
我正在谷歌地图第三版中开发一个速度检测系统的模拟。我已经能够模拟在两个坐标之间移动汽车。我还定义了一个速度区,比如说40 km/h,带有两个标记。接下来,我需要做的是如何检测移动标记何时通过该速度区的起点,并提供一个警报,告知其已进入该速度区,以及在其离开该速度区时发出警报。请帮忙!我真的被困在这里了!请参阅下面的代码以获取进一步参考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
// 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创建具有入口点和出口点(标记)的多边形,并在用户进出围栏时创建警报。这里的例子是:好的,先生。我会考虑上面的例子。