You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AGM搭建的谷歌地图中添加指定三角形区域内的路线图?

AGM谷歌地图指定三角形区域路线功能实现方案

现有代码仅完成了基础地图渲染、单点标记的逻辑,缺少路线服务调用、区域范围校验、路线绘制的相关逻辑,按以下步骤调整即可实现需求:

  • 变量命名修正:原有代码中long是JS保留关键字,建议修改为lng;类方法内调用属性需用小写this而非大写This
  • 提前定义你需要限制的三角形区域三个顶点的经纬度坐标,用于后续路线点范围过滤
  • 引入Google Maps Directions API实现路线查询,获取路线点集后过滤出落在三角形区域内的部分,再通过Polyline绘制到地图上
// 基础地图配置
locationChoosen = false;
lat = 63.4313378;
lng = 10.4015246;
zoom = 7;
map: any;
// 替换为你实际的三角形区域三个顶点坐标
trianglePoints = [
  { lat: 63.5, lng: 10.3 },
  { lat: 63.4, lng: 10.5 },
  { lat: 63.3, lng: 10.2 }
];
// 点是否在三角形内判断算法
pointInTriangle (p, a, b, c) {
  const v0 = { x: c.lng - a.lng, y: c.lat - a.lat };
  const v1 = { x: b.lng - a.lng, y: b.lat - a.lat };
  const v2 = { x: p.lng - a.lng, y: p.lat - a.lat };
  const dot00 = v0.x * v0.x + v0.y * v0.y;
  const dot01 = v0.x * v1.x + v0.y * v1.y;
  const dot02 = v0.x * v2.x + v0.y * v2.y;
  const dot11 = v1.x * v1.x + v1.y * v1.y;
  const dot12 = v1.x * v2.x + v1.y * v2.y;
  const invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
  const u = (dot11 * dot02 - dot01 * dot12) * invDenom;
  const v = (dot00 * dot12 - dot01 * dot02) * invDenom;
  return (u >= 0) && (v >= 0) && (u + v < 1);
}
onChoseLocation(event) {
  this.locationChoosen = true;
}
initDrawingManager(map) {
  // 原有绘制逻辑保留,新增路线查询逻辑
  const directionsService = new google.maps.DirectionsService();
  const request = {
    // 替换为你实际的路线起点、终点
    origin: new google.maps.LatLng(63.430, 10.390),
    destination: new google.maps.LatLng(63.432, 10.410),
    travelMode: google.maps.TravelMode.DRIVING
  };
  directionsService.route(request, (response, status) => {
    if (status == google.maps.DirectionsStatus.OK) {
      const routePoints = response.routes[0].overview_path;
      // 过滤出落在三角形区域内的路线点
      const filteredPoints = routePoints.filter(point => {
        const p = { lat: point.lat(), lng: point.lng() };
        return this.pointInTriangle(p, this.trianglePoints[0], this.trianglePoints[1], this.trianglePoints[2]);
      });
      // 绘制过滤后的路线
      new google.maps.Polyline({
        path: filteredPoints,
        geodesic: true,
        strokeColor: '#FF0000',
        strokeOpacity: 1.0,
        strokeWeight: 2,
        map: map
      });
    }
  });
}
onMapReady(map) {
  this.map = map;
  this.initDrawingManager(map);
}
<agm-map 
  [latitude]="lat" 
  [longitude]="lng"
  (mapReady)="onMapReady($event)"
  (mapClick)="onChoseLocation($event)"
  [zoom]="zoom"
>
  <agm-marker 
    [latitude]="lat" 
    [longitude]="lng"
  >    
  </agm-marker>
</agm-map>

注意:需要确保你项目的AGM配置已经正确引入Google Maps的相关API权限,否则路线服务会调用失败;如果你的路线是自定义的固定坐标点,可直接替换路线请求部分的逻辑,直接传入你的坐标点集做过滤绘制即可。

内容的提问来源于stack exchange,提问作者virendra kumawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:09:02