feat:新增地图视图效果,接口待对接

This commit is contained in:
2025-08-08 14:51:45 +08:00
parent 67eb4e5516
commit c5b8026fba
49 changed files with 2811 additions and 884 deletions
+155
View File
@@ -0,0 +1,155 @@
"use strict";
const common_vendor = require("../common/vendor.js");
const AMAP_KEY = "4c513a688938fd89b88b296e867f66ec";
class AmapUtil {
constructor() {
this.key = AMAP_KEY;
}
// 逆地理编码 - 根据经纬度获取地址信息
async regeocode(longitude, latitude) {
try {
const res = await common_vendor.index.request({
url: "https://restapi.amap.com/v3/geocode/regeo",
method: "GET",
data: {
key: this.key,
location: `${longitude},${latitude}`,
poitype: "",
radius: 1e3,
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) {
common_vendor.index.__f__("error", "at utils/amap.js:38", "逆地理编码异常:", error);
return {
success: false,
message: "网络异常"
};
}
}
// 地理编码 - 根据地址获取经纬度
async geocode(address, city = "") {
try {
const res = await common_vendor.index.request({
url: "https://restapi.amap.com/v3/geocode/geo",
method: "GET",
data: {
key: this.key,
address,
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) {
common_vendor.index.__f__("error", "at utils/amap.js:71", "地理编码异常:", error);
return {
success: false,
message: "网络异常"
};
}
}
// 搜索POI
async searchPOI(keywords, location = "", radius = 3e3, city = "") {
try {
const res = await common_vendor.index.request({
url: "https://restapi.amap.com/v3/place/text",
method: "GET",
data: {
key: this.key,
keywords,
location,
radius,
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) {
common_vendor.index.__f__("error", "at utils/amap.js:107", "POI搜索异常:", error);
return {
success: false,
message: "网络异常"
};
}
}
// 路径规划
async getRoute(origin, destination, strategy = 0) {
try {
const res = await common_vendor.index.request({
url: "https://restapi.amap.com/v3/direction/driving",
method: "GET",
data: {
key: this.key,
origin,
destination,
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) {
common_vendor.index.__f__("error", "at utils/amap.js:142", "路径规划异常:", error);
return {
success: false,
message: "网络异常"
};
}
}
// 计算两点间距离
calculateDistance(lat1, lng1, lat2, lng2) {
const radLat1 = lat1 * Math.PI / 180;
const radLat2 = lat2 * Math.PI / 180;
const a = radLat1 - radLat2;
const b = lng1 * Math.PI / 180 - lng2 * Math.PI / 180;
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 * 1e4) / 1e4;
return s;
}
}
const AmapUtil$1 = new AmapUtil();
exports.AmapUtil = AmapUtil$1;
//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/amap.js.map