H5高德地图常用方法



/**
 * 经纬度转地址
 * @param {*} AMap 地图类
 * @param {*} station 要查询地址信息的经纬度
 * @returns 查询结果
 */
export const codingConversionAddress = (AMap, station) => {
    let cityCode = getUrlParam('city') || '340500';
    return new Promise((resolve, reject) => {
        try {
            AMap.plugin('AMap.Geocoder', function () {
                var geocoder = new AMap.Geocoder({
                    city: cityCode// city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
                })
                geocoder.getAddress(station, function (status, result) {
                    if (status === 'complete' && result.info === 'OK') {
                        // result为对应的地理位置详细信息
                        resolve(result)
                    } else {
                        reject(result)
                    }
                })
            })
        } catch (err) {
            console.error(err)
        }
    })
}
/**
 * 
 * @param {*} AMap 地图类
 * @param {*} value 地点名称
 * @returns 线路公交站点  三坝 五常 浙大紫金港
 */
export const stationSearch = (AMap, value) => {
    let cityCode = getUrlParam('city') || '340500';
    return new Promise((resolve, reject) => {
        try {
            AMap.plugin(["AMap.StationSearch"], function () {
                //实例化公交站点查询类
                var station = new AMap.StationSearch({
                    pageIndex: 1, //页码,默认值为1
                    pageSize: 10, //单页显示结果条数,默认值为20,最大值为50
                    city: cityCode //限定查询城市,可以是城市名(中文/中文全拼)、城市编码,默认值为『全国』
                });

                //执行关键字查询
                station.search(value, function (status, result) {
                    //打印状态信息status和结果信息result
                    //status:complete 表示查询成功,no_data 为查询无结果,error 代表查询错误。
                    let array = []
                    if (result?.info == 'OK') {
                        array = result?.lineInfo
                    }
                    resolve(array)
                });
            });
        }
        catch (e) {
            reject([])
            console.log('e:', e)
        }
    })
}

/**
 * 
 * @param {*} AMap 地图类
 * @param {*} value 地点名称
 * @returns 线路公交 K313 K348 K437
 */

export const lineSearch = (AMap, value) => {
    let cityCode = getUrlParam('city') || '340500';
    return new Promise((resolve, reject) => {
        try {
            AMap.plugin(["AMap.LineSearch"], function () {
                //实例化公交线路查询类
                var linesearch = new AMap.LineSearch({
                    pageIndex: 1, //页码,默认值为1
                    pageSize: 10, //单页显示结果条数,默认值为20,最大值为50
                    city: cityCode, //限定查询城市,可以是城市名(中文/中文全拼)、城市编码,默认值为『全国』
                    extensions: "all" //是否返回公交线路详细信息,默认值为『base』
                });

                //执行公交路线关键字查询
                linesearch.search(value, function (status, result) {
                    //打印状态信息status和结果信息result
                    // console.log(status, result);
                    let array = []
                    if (result?.info == 'OK') {
                        array = result?.lineInfo
                    }
                    resolve(array)
                });
            });
        }
        catch (e) {
            console.log('e:', e)
            reject([])
        }
    })
}
/**
 * 
 * @param {*} AMap 地图类
 * @param {*} value 地点名称
 * @returns 搜索提示
 */
export const searchLocation = (AMap, value) => {
    let cityCode = getUrlParam('city') || '340500';
    return new Promise((resolve, reject) => {
        try {
            AMap.plugin('AMap.AutoComplete', function () {
                var autoOptions = {
                    //city 限定城市,默认全国
                    city: cityCode
                };
                // 实例化AutoComplete
                var autoComplete = new AMap.AutoComplete(autoOptions);
                // 根据关键字进行搜索
                autoComplete.search(value, function (status, result) {
                    // 搜索成功时,result即是对应的匹配数据
                    let array = []
                    for (let key in result.tips) {
                        if (result?.tips[key]?.location) {
                            array.push(result?.tips?.[key])
                        }
                    }
                    resolve(array)
                })
            })
        } catch (err) {
            reject(err)
            // console.error(err)
        }
    })
}

/**
 * 唤醒高德步行导航
 * @param {*} userPosition 用户所在位置信息
 * @param {*} targetPosition 目标地点经纬度
 */
export const mapWalkingNavigation = (userPosition, targetPosition) => {
    // 跳转高德地图
    const { latEnd, lonEnd, destination } = targetPosition;
    const { usrLat, usrLon } = userPosition;
    // 获取到用户定位信息,走导航模式;未获取到用户定位信息,走单点标注模式
    if (usrLat && usrLon) {
        return `https://m.amap.com/navigation/carmap/saddr=${usrLon},${usrLat},我的位置&daddr=${lonEnd},${latEnd},${destination}&sort=dist`
        //window.location.href = `https://m.amap.com/navigation/carmap/saddr=${usrLon},${usrLat},我的位置&daddr=${lonEnd},${latEnd},${destination}&sort=dist`
    } else {
        window.location.href = `https://uri.amap.com/marker?position=${lonEnd},${latEnd}&name=${destination}&src=mypage&coordinate=gaode&callnative=1`;
    }
}

/**
 * 线路规划
 * @param {*} AMap 地图类
 * @param {*} startPoint 起点
 * @param {*} endPoint 终点
 * @param {*} strategy 驾车|步行
 */
export const linePlanning = (AMap, startPoint, endPoint, mode) => {
    console.log("startPoint:", startPoint)
    console.log("endPoint:", endPoint)
    console.log('线路规划 mode:', mode)
    let cityCode = getUrlParam('city') || '340500';
    return new Promise((resolve, reject) => {
        // LEAST_TIME:最少时间
        // LEAST_WALK:最少步行
        // LEAST_TRANSFER:最少换乘
        // MOST_ECONOMICAL:最经济
        // NO_SUBWAY:不乘地铁
        AMap.plugin('AMap.Transfer', function () {
            console.log('AMap.TransferPolicy:', AMap.TransferPolicy)
            var Transfer = new AMap.Transfer({
                city: cityCode,
                policy: mode
            })
            Transfer.search(startPoint, endPoint, function (status, result) {
                // 未出错时,result即是对应的路线规划方案
                if (status === 'complete') {
                    // let distance = 0;//距离
                    // let time = 0;//用时
                    // let points = [];//线路点
                    // result.routes.forEach(el => {
                    //     distance += el.distance;
                    //     time += el.time;
                    //     points = points.concat(el.steps.map(o => o.path))
                    // })
                    // let path = flatten(points).map(p => [p?.lng, p?.lat]);
                    resolve(result)
                } else {
                    reject(result)
                }
            })
        })
    })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值