首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

百度地圖 API geocoder.getPoint 回調異步獲取坐標:全局變量或 Promise 封裝

     編輯:程式設計綜合問答

問題

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);

方案二:Promise 封裝 (現代寫法)

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 封裝異步流程,避免回調地獄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved