javascript - Google Directions API - 新请求后路线模糊
问题描述
我正在使用 Vue.js 来使用一个 REST API,该 API 发送有关即将到来的总线传输的数据。在上面的图片中,每个列表项都代表一个转移,单击时,地图应显示路线。从小到大的切换是可以的,但是当我切换到较短的路线时,指示它的蓝线显得模糊且比正常大。当我放大/缩小时问题消失了,它只是初始显示。
每次新请求后,我都在地图对象上尝试了setZoom(int)函数,但这不起作用。
这是来自 Vue 实例的相关代码:
methods: {
...
calcRoute() {
const request = {
origin: this.start,
destination: this.end
}
this.directionsService.route(request, (result, status) => {
if (status == 'OK') {
this.directionsRenderer.setDirections(result);
//this.map.setZoom(12);
}
})
}
},
watch: {
start: () => {
if (this.end && this.start) {
this.calcRoute();
}
},
...
}
编辑:按照建议,我提供了一个正在运行的代码片段。单击更改方向按钮以查看问题。
编辑 2:为简单起见,我在纯 JS 中实现了它
编辑 3:提供您的 API 密钥
const transfers = [{
"id": 29,
"date": "2020-02-12T08:00:00.000Z",
"pick_up": "Sofia Airport, Terminal 1",
"drop_off": "Stara Zagora",
"driver": "СТ",
"vehicle": 6264,
},
{
"id": 43,
"date": "2020-02-13T08:30:00.000Z",
"pick_up": "Sofia Terminal 1",
"drop_off": "Boutique One Hotel Sofia",
"driver": "СТ",
"vehicle": 6264,
}];
let map, directionsService, directionsRenderer;
let selectedTrans = 0;
window.addEventListener('load', function() {
map = new google.maps.Map(document.getElementById("map"), {
zoom: 7,
center: {
lat: 42.698334,
lng: 23.319941
}
});
directionsService = new google.maps.DirectionsService();
directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
calcRoute();
});
function calcRoute() {
const start = transfers[selectedTrans].pick_up;
const end= transfers[selectedTrans].drop_off;
const request = {
origin: start,
destination: end,
travelMode: 'DRIVING'
};
directionsService.route(request, (result, status) => {
if (status == 'OK') {
directionsRenderer.setDirections(result);
}
})
}
document.getElementById('changeDirectionsBtn').addEventListener('click', () => {
selectedTrans = selectedTrans == 0 ? 1 : 0;
calcRoute();
});
#map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<button id="changeDirectionsBtn"> Change Directions </button>
<div id="map">
</div>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY" defer></script>
解决方案
当我有时间时,我需要进一步调查这个问题......
该文档提到
因为渲染器是一个 MVCObject,它会自动检测其属性的任何变化,并在其关联方向发生变化时更新地图。
我不确定这到底意味着什么。
也就是说,只需directionsRenderer.setMap(null);
在计算新路由之前调用并directionsRenderer.setMap(map);
在回调中解决问题。请参阅下面的片段。
const transfers = [{
"id": 29,
"date": "2020-02-12T08:00:00.000Z",
"pick_up": "Sofia Airport, Terminal 1",
"drop_off": "Stara Zagora",
"driver": "СТ",
"vehicle": 6264,
},
{
"id": 43,
"date": "2020-02-13T08:30:00.000Z",
"pick_up": "Sofia Terminal 1",
"drop_off": "Boutique One Hotel Sofia",
"driver": "СТ",
"vehicle": 6264,
}];
let map, directionsService, directionsRenderer;
let selectedTrans = 0;
window.addEventListener('load', function() {
map = new google.maps.Map(document.getElementById("map"), {
zoom: 7,
center: {
lat: 42.698334,
lng: 23.319941
}
});
directionsService = new google.maps.DirectionsService();
directionsRenderer = new google.maps.DirectionsRenderer();
calcRoute();
});
function calcRoute() {
directionsRenderer.setMap(null);
const start = transfers[selectedTrans].pick_up;
const end= transfers[selectedTrans].drop_off;
const request = {
origin: start,
destination: end,
travelMode: 'DRIVING'
};
directionsService.route(request, (result, status) => {
if (status == 'OK') {
directionsRenderer.setDirections(result);
directionsRenderer.setMap(map);
}
})
}
document.getElementById('changeDirectionsBtn').addEventListener('click', () => {
selectedTrans = selectedTrans == 0 ? 1 : 0;
calcRoute();
});
#map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<button id="changeDirectionsBtn"> Change Directions </button>
<div id="map">
</div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk" defer></script>
推荐阅读
- python - 如何检查同一个字典中是否存在两个键值对
- three.js - 使用 OrbitControls 围绕网格的 ThreeJS 奇怪的相机移动
- actions-on-google - 谷歌上的操作 - 如何处理长时间运行的操作
- python - Python:使用递归返回文件的完整路径
- c# - 如何在 .net core 2.0 中创建自定义路由控制器
- performance - 对 Gradle 性能问题进行故障排除
- firebase - 如何解决flutter中的gradle googleplayservices版本错误?
- c - 为什么 gethostbyname() 在不存在的主机名上不会失败?
- typescript - 在 webpack 4 中使用 moment.js 和 ts-loader
- docker - Revel 和 Docker 容器