前端开发中,需要进行唤起高德地图并且规划线路的操作,携带一组路经点,起始+途径。 带有途径地点时: 直接一个栗子:
gaodeUri= 'amapuri://route/plan?sid=&slat=39.92848272&slon=116.39560823&sname=A&did=&dlat=39.98848272&dlon=116.47560823&dname=B&dev=0&t=0&vian=2&vialons=116.8|116.5&vialats=39.5|39.7&vianames=途径点1|途径点2&sourceApplication=applicationName'
window.location.href = gaodeUri;
export function startNavigationG(
{ waypoints = [] }
) {
const normalizePoint = (p) => {
if (!p) return null;
const lat =
typeof p.latitude === "number" ? p.latitude : Number(p.latitude);
const lng =
typeof p.longitude === "number" ? p.longitude : Number(p.longitude);
if (!Number.isFinite(lat) || !Number.isFinite(lng)) return null;
return { latitude: lat, longitude: lng, name: p.name };
};
const validPoints = Array.isArray(waypoints)
? waypoints.map(normalizePoint).filter(Boolean)
: [];
if (validPoints.length < 1) {
console.warn("waypoints 无有效坐标,无法导航");
return;
}
const origin = validPoints[0] || null;
const destination = validPoints[validPoints.length - 1];
const viaPoints = validPoints.slice(1, -1);
const wslngs = viaPoints.map((p) => p.longitude).join("|");
const wslats = viaPoints.map((p) => p.latitude).join("|");
const wsnams = viaPoints
.map((p, index) => p.name || `途径点${index + 1}`)
.join("|");
const gaodeUri =
`amapuri://route/plan?sid=&slat=${origin.latitude}&slon=${
origin.longitude
}&sname=${encodeURIComponent(origin.name || "起点")}` +
`&did=&dlat=${destination.latitude}&dlon=${
destination.longitude
}&dname=${encodeURIComponent(destination.name || "终点")}` +
(viaPoints.length
? `&vian=${viaPoints.length}&vialons=${wslngs}&vialats=${wslats}&vianames=${wsnams}`
: "") +
`&dev=0&t=0`;
window.location.href = gaodeUri;
}