/**
* 经纬度转地址
* @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)
}
})
})
})
}