geocoder.getPoint(address, callback) 為異步回調,需將兩個地址解析後的坐標傳給 driving.search(point1, point2)。
var point1, point2;
var count = 0;
function getPoint(address, index) {
geocoder.getPoint(address, function(p) {
if (index === 1) point1 = p;
else point2 = p;
if (++count === 2) {
driving.search(point1, point2);
}
});
}
getPoint("中關村", 1);
getPoint("天安門", 2);
function geocode(address) {
return new Promise((resolve, reject) => {
geocoder.getPoint(address, p => p ? resolve(p) : reject("解析失敗"));
});
}
Promise.all([geocode("中關村"), geocode("天安門")])
.then(([p1, p2]) => driving.search(p1, p2))
.catch(err => console.error(err));
driving.search **原生支持地址字符串**,內部自動調用地理編碼:
var driving = new BMap.DrivingRoute(map, { renderOptions: { map: map, autoViewport: true } });
driving.search("中關村", "天安門"); // 直接傳地址,無需手動 getPoint
**參考文檔**:百度地圖 JS API 駕車導航
優先用 **直接傳地址**,簡潔可靠;若必須拿到 Point 對象再處理,用 Promise 封裝異步流程,避免回調地獄。