H5唤起高德地图(含途径地点)

210 阅读1分钟

前端开发中,需要进行唤起高德地图并且规划线路的操作,携带一组路经点,起始+途径。 带有途径地点时: 直接一个栗子:

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;
}