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

如何在React项目的PTV矢量地图上渲染特定路线的司机停靠/休息点

解决PTV矢量地图上渲染特定路线停靠/休息点的问题

一、获取特定路线的停靠/休息点数据

你可能忽略了PTV Route Calculation或Route Optimization API返回结果中包含的停靠/休息点信息,调整请求参数并解析响应即可获取:

  1. 请求API时配置必要参数

    • 如果用Route Calculation API:发送请求时需包含waypoints(停靠点),同时添加restRules参数启用休息点计算,示例请求参数片段:
      {
        "waypoints": [
          {"location": {"latitude": 52.5200, "longitude": 13.4050}},
          {"location": {"latitude": 51.5074, "longitude": -0.1278}}
        ],
        "restRules": {
          "drivingTimeBeforeRest": 4.5,
          "restDuration": 0.5
        },
        "returnEvents": true
      }
      
    • 如果用Route Optimization API:在vehicles数组中配置breakRules,同时确保返回结果包含routes字段,请求会返回每个司机的路线详情,其中包含waypoints(停靠任务点)和breaks(休息点)。
  2. 解析API响应提取目标点

    • Route Calculation API的响应中:
      • 停靠点:在routes[0].legs下的waypoints数组,每个元素包含location字段(经纬度)。
      • 休息点:在routes[0].events数组中,筛选type为REST_STOP的条目,从中获取location。
    • Route Optimization API的响应中:
      • 特定司机的停靠点:solutions[0].routes[目标司机索引].waypoints。
      • 休息点:solutions[0].routes[目标司机索引].breaks,每个休息点包含location和duration。

二、在React的PTV矢量地图上渲染点

使用PTV Maps Web SDK提供的Marker组件,结合React的状态管理来渲染:

import { useEffect, useState } from 'react';
import { Map, Marker } from '@ptvgroup/maps-react';

const RouteMap = () => {
  const [stops, setStops] = useState([]); // 存储停靠点
  const [restStops, setRestStops] = useState([]); // 存储休息点

  useEffect(() => {
    // 实际替换为你的API请求逻辑
    const fetchRouteData = async () => {
      const response = await fetch('你的PTV API接口地址', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json', 'ApiKey': '你的API密钥' },
        body: JSON.stringify(/* 之前配置的请求参数 */)
      });
      const data = await response.json();

      // 提取停靠点(以Route Calculation API为例)
      const extractedStops = data.routes[0].legs.flatMap(leg => 
        leg.waypoints.map(wp => ({ lat: wp.location.latitude, lng: wp.location.longitude }))
      );
      // 提取休息点
      const extractedRestStops = data.routes[0].events
        .filter(event => event.type === 'REST_STOP')
        .map(event => ({ lat: event.location.latitude, lng: event.location.longitude }));

      setStops(extractedStops);
      setRestStops(extractedRestStops);
    };

    fetchRouteData();
  }, []);

  return (
    <Map apiKey="你的API密钥" center={{ lat: 52.5200, lng: 13.4050 }} zoom={6}>
      {/* 渲染停靠点,用默认标记 */}
      {stops.map((stop, index) => (
        <Marker key={`stop-${index}`} position={stop} />
      ))}
      {/* 渲染休息点,自定义图标区分 */}
      {restStops.map((restStop, index) => (
        <Marker 
          key={`rest-${index}`} 
          position={restStop}
          icon={{
            url: '休息点图标路径', // 替换为你的自定义图标URL
            size: [32, 32]
          }}
        />
      ))}
    </Map>
  );
};

export default RouteMap;

注意事项

  • 确保请求API时启用了休息点计算的相关参数,否则响应中不会返回休息点数据。
  • 如果使用Route Optimization API,需根据优化结果中的司机ID或路线索引筛选特定路线的点。
  • 自定义Marker图标时,需确保图标路径可访问,也可以使用PTV SDK提供的内置图标样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:22:18