feat:新增地图视图效果,接口待对接
This commit is contained in:
+163
@@ -0,0 +1,163 @@
|
||||
// 高德地图工具类
|
||||
const AMAP_KEY = '4c513a688938fd89b88b296e867f66ec'
|
||||
|
||||
class AmapUtil {
|
||||
constructor() {
|
||||
this.key = AMAP_KEY
|
||||
}
|
||||
|
||||
// 逆地理编码 - 根据经纬度获取地址信息
|
||||
async regeocode(longitude, latitude) {
|
||||
try {
|
||||
const res = await uni.request({
|
||||
url: 'https://restapi.amap.com/v3/geocode/regeo',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: this.key,
|
||||
location: `${longitude},${latitude}`,
|
||||
poitype: '',
|
||||
radius: 1000,
|
||||
extensions: 'base',
|
||||
batch: false,
|
||||
roadlevel: 0
|
||||
}
|
||||
})
|
||||
|
||||
if (res.statusCode === 200 && res.data.status === '1') {
|
||||
return {
|
||||
success: true,
|
||||
data: res.data.regeocode
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
success: false,
|
||||
message: res.data.info || '逆地理编码失败'
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('逆地理编码异常:', error)
|
||||
return {
|
||||
success: false,
|
||||
message: '网络异常'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 地理编码 - 根据地址获取经纬度
|
||||
async geocode(address, city = '') {
|
||||
try {
|
||||
const res = await uni.request({
|
||||
url: 'https://restapi.amap.com/v3/geocode/geo',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: this.key,
|
||||
address: address,
|
||||
city: city
|
||||
}
|
||||
})
|
||||
|
||||
if (res.statusCode === 200 && res.data.status === '1' && res.data.geocodes.length > 0) {
|
||||
return {
|
||||
success: true,
|
||||
data: res.data.geocodes[0]
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
success: false,
|
||||
message: res.data.info || '地理编码失败'
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('地理编码异常:', error)
|
||||
return {
|
||||
success: false,
|
||||
message: '网络异常'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 搜索POI
|
||||
async searchPOI(keywords, location = '', radius = 3000, city = '') {
|
||||
try {
|
||||
const res = await uni.request({
|
||||
url: 'https://restapi.amap.com/v3/place/text',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: this.key,
|
||||
keywords: keywords,
|
||||
location: location,
|
||||
radius: radius,
|
||||
city: city,
|
||||
citylimit: true
|
||||
}
|
||||
})
|
||||
|
||||
if (res.statusCode === 200 && res.data.status === '1') {
|
||||
return {
|
||||
success: true,
|
||||
data: res.data.pois || []
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
success: false,
|
||||
message: res.data.info || '搜索失败'
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('POI搜索异常:', error)
|
||||
return {
|
||||
success: false,
|
||||
message: '网络异常'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 路径规划
|
||||
async getRoute(origin, destination, strategy = 0) {
|
||||
try {
|
||||
const res = await uni.request({
|
||||
url: 'https://restapi.amap.com/v3/direction/driving',
|
||||
method: 'GET',
|
||||
data: {
|
||||
key: this.key,
|
||||
origin: origin,
|
||||
destination: destination,
|
||||
strategy: strategy,
|
||||
extensions: 'base'
|
||||
}
|
||||
})
|
||||
|
||||
if (res.statusCode === 200 && res.data.status === '1') {
|
||||
return {
|
||||
success: true,
|
||||
data: res.data.route
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
success: false,
|
||||
message: res.data.info || '路径规划失败'
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('路径规划异常:', error)
|
||||
return {
|
||||
success: false,
|
||||
message: '网络异常'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 计算两点间距离
|
||||
calculateDistance(lat1, lng1, lat2, lng2) {
|
||||
const radLat1 = lat1 * Math.PI / 180.0
|
||||
const radLat2 = lat2 * Math.PI / 180.0
|
||||
const a = radLat1 - radLat2
|
||||
const b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0
|
||||
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))
|
||||
s = s * 6378.137
|
||||
s = Math.round(s * 10000) / 10000
|
||||
return s
|
||||
}
|
||||
}
|
||||
|
||||
export default new AmapUtil()
|
||||
Reference in New Issue
Block a user