gpt4 book ai didi

google-maps - 谷歌地图。在 map 上追踪历史。由于坐标错误,路线不正确

转载 作者:行者123 更新时间:2023-12-02 04:34:18 30 4
gpt4 key购买 nike

我的应用程序在谷歌地图上显示车辆的跟踪历史。我们每 2 分钟从我们的移动应用程序接收一次位置并将其存储在数据库中。之后,我们在 map 上显示路线(使用 JS API、Directions Service)。

{
origin: 'Chicago, IL',
destination: 'Los Angeles, CA',
waypoints: [
...
],
provideRouteAlternatives: false,
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.IMPERIAL
}

但是,有时位置可能不准确,只有 3-5 米。例如,某些位置可以显示在迎面而来的交通线上。结果,谷歌围绕几个街区等创建了路线。
enter image description here

所以问题是:是否有任何可能的方法来忽略这些不准确的点,而只是“迫使”谷歌在一个方向上创建路线?

谢谢!

最佳答案

我有个主意。看起来它有效,至少对于我在类似情况下选择的航点而言。

我将腿(=航点之间的路线段)放在for循环中。对于每个部分,我计算/读取“沿路线的距离”并将其除以飞行路径距离。这个比率应该是 1 左右。如果它远大于 1,则有问题。我将阈值设置为 2.0,您可能应该降低它(估计一个介于 1 和 2 之间的值)。

当找到这样一个因素时,我删除了那个航路点(好吧,我制作了一个没有这个项目的新数组“newWaypoints”),然后重新开始,这会在 2 秒 setTimeout 后产生一条红色路线。

该函数是递归的,我不知道应该删除的多个点会发生什么。也许它可能会再试一次以上。

<style>
#map {height: 400px;}
</style>
<div id="map"></div>
<div id="log"></div>
<input type="button" value="click" onclick="calc()">
<script>
var directionsDisplay;
var directionsService;
var map;
var maxFactor = 2.0; // FEEL FREE TO GUESTIMATE ANOTHER VALUE
function initMap() {
var start = new google.maps.LatLng(50.96622130043278,3.8518730520809185);
var mapOptions = {
zoom:7,
center: start
}
map = new google.maps.Map(document.getElementById('map'), mapOptions);
directionsService = new google.maps.DirectionsService();
}
function calcRoute(start, end, waypoints, color) {
directionsDisplay = new google.maps.DirectionsRenderer({ map: map, polylineOptions: {strokeColor: color} });
var request = {
origin: start,
destination: end,
waypoints: waypoints,
provideRouteAlternatives: false,
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.IMPERIAL
};
directionsService.route(request, function(result, status) {
if (status == 'OK') {
var newWaypoints = [];

directionsDisplay.setDirections(result);
var legs = result.routes[0].legs;
var problemIndex = -1;
for(var i in legs) {
var routeSegment = legs[i].distance.value;
var origin = legs[i].start_location;
var destination = legs[i].end_location;
var flightpathDistance = google.maps.geometry.spherical.computeDistanceBetween(origin, destination);
var factor = (routeSegment / flightpathDistance);
if(factor > maxFactor && problemIndex == -1) {
// too long
problemIndex = i;
document.getElementById('log').innerHTML += 'factor ' + factor.toFixed(2) + ' - segment looks too long. romove waypoint ' + i + ' (0 based)<br/>';
}
else if(factor > maxFactor && problemIndex == i -1) {
if(i<legs.length - 1) { // skip the destination; this is not a waypoint
newWaypoints.push(waypoints[i]);
}
document.getElementById('log').innerHTML += 'factor ' + factor.toFixed(2) + ' - segment also too long, but the problem is probably the previous segment<br/>';
}
else {
if(i<legs.length - 1) { // skip the destination; this is not a waypoint
newWaypoints.push(waypoints[i]);
}
document.getElementById('log').innerHTML += 'factor ' + factor.toFixed(2) + '<br/>';
}
}
document.getElementById('log').innerHTML += '<hr/>';
if(problemIndex > -1) {
setTimeout(function() {
calcRoute(start, end, newWaypoints, 'red');
}, 2000);

}
}
});
}
function calc() {
calcRoute(
'50.95487921891042,3.879781222422025',
'51.002379049703315,3.757394492495223',
[
{location: '50.96622130043278,3.8518730520809185', stopover: true},
{location: '50.9725522849737,3.8379914402503345', stopover: true},
{location: '50.97957292616706,3.8236401199901593', stopover: true}, // This is the problem point, on the opposite side of the road
{location: '50.98570531465853,3.81125807762146', stopover: true},
{location: '50.98941308813775,3.8019619700935436', stopover: true}
],
"blue"
);
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap&libraries=geometry"></script>

关于google-maps - 谷歌地图。在 map 上追踪历史。由于坐标错误,路线不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45210058/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com