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

调用VROOM API获取优化坐标遇端口及HTTP错误求助

垃圾收集路线优化:VROOM API请求错误排查与修复

问题背景

我正在做垃圾收集路线优化的研究,流程是:从OpenStreetMaps获取坐标列表,用OSRM计算当前路线距离,生成VROOM格式的JSON文件后,通过HTTP请求调用VROOM获取优化后的坐标列表。但遇到了两个问题:

  • 按文档指定3000端口请求时,返回500错误
  • 本地用npm run serve启动VROOM后,服务跑在9966端口,改端口请求后返回404错误

代码片段

import json
import requests

# Generate VROOM file:
def generateVROOMFile(data):

  # Lists for vehicles and jobs
  vehicles = []  # (Initially, I will only implement one vehicle, for now, this list is useless)
  jobs = []

  start_coord = [data.longitude[0], data.latitude[0]]  # Garage position
  end_coord = [data.longitude.iloc[-1], data.latitude.iloc[-1]]  # Landfill position

  # Add a single vehicle
  vehicle = {
      "id": 1,
      "start": start_coord,
      "end": end_coord,
      "steps": [
          {"type": "start"}
      ]
  }

  # Adding steps
  for j in range(len(data.latitude) - 1):
    vehicle["steps"].append({"type": "job", "id": j+1})
  vehicle["steps"].append({"type": "end"})

  # Add the vehicle to the list of vehicles
  vehicles.append(vehicle)

  # Adding "jobs" for each coordinate
  for i in range(len(data.latitude) - 1):

    coord = [data.longitude[i], data.latitude[i]]

    job = {
        "id": i+1,
        "description": data.logradouro[i],
        "location": coord
    }
    jobs.append(job)

  # Create the VROOM object
  vroom_data = {
      "vehicles": vehicles,
      "jobs": jobs
  }

  # Save the data to a file
  with open(f'VROOM_{data.name}.json', 'w') as f:
    json.dump(vroom_data, f, indent=2)

  return vroom_data


# Get optimized coordinates from VROOM
def getOptimizedCoords(vroom_data):

  # Local address of the VROOM server
  vroom_url = 'http://localhost:3000'

  # Send a POST request to the local VROOM API
  response = requests.post(vroom_url, json=vroom_data)

  # Check if the request was successful (status 200)
  if response.status_code == 200:
    return response.json()
  else:
    print("Error querying VROOM API:", response.status_code)
    return None

错误原因分析

  1. 端口混淆:前端服务 vs API服务
    npm run serve启动的是VROOM的Web前端演示界面,不是后台API服务。前端服务的9966端口没有提供优化请求的接口,所以会返回404。而文档里的3000端口是VROOM API服务(比如vroom-express)的默认端口,如果你没正确启动API服务,请求就会返回500。

  2. VROOM请求格式错误
    手动给vehicle添加steps的写法不符合VROOM API规范。VROOM的核心是自动分配任务到车辆,不需要手动指定steps列表,这种手动指定的方式会导致API解析失败,触发500错误。

修复方案

1. 正确启动VROOM API服务

如果你用的是vroom-express(官方推荐的API封装),按以下步骤启动:

  • 安装依赖:npm install -g vroom-express
  • 启动服务:vroom-express(默认端口3000)
    确认服务启动后,用curl测试连通性:
curl http://localhost:3000

正常会返回VROOM的API说明信息。

2. 修正VROOM数据生成代码

去掉手动添加steps的逻辑,让VROOM自动处理任务分配:

def generateVROOMFile(data):
    vehicles = []
    jobs = []

    start_coord = [data.longitude[0], data.latitude[0]]  # Garage position
    end_coord = [data.longitude.iloc[-1], data.latitude.iloc[-1]]  # Landfill position

    # 简化车辆配置,不需要手动指定steps
    vehicle = {
        "id": 1,
        "start": start_coord,
        "end": end_coord
    }
    vehicles.append(vehicle)

    # 添加任务,注意任务id从1开始,避免和车辆id冲突
    for i in range(len(data.latitude) - 1):
        coord = [data.longitude[i], data.latitude[i]]
        job = {
            "id": i + 1,
            "description": data.logradouro[i],
            "location": coord
        }
        jobs.append(job)

    vroom_data = {
        "vehicles": vehicles,
        "jobs": jobs
    }

    with open(f'VROOM_{data.name}.json', 'w') as f:
        json.dump(vroom_data, f, indent=2)

    return vroom_data

3. 修正API请求路径

vroom-express的优化接口路径是/optimize,所以需要修改请求URL:

def getOptimizedCoords(vroom_data):
    vroom_url = 'http://localhost:3000/optimize'
    response = requests.post(vroom_url, json=vroom_data)

    if response.status_code == 200:
        return response.json()
    else:
        # 打印响应内容,方便排查具体错误
        print("Error response:", response.text)
        print("Error querying VROOM API:", response.status_code)
        return None

验证步骤

  1. 启动VROOM API服务后,运行代码生成JSON文件
  2. 用curl测试生成的JSON是否符合规范:
    curl -X POST http://localhost:3000/optimize -H "Content-Type: application/json" -d @VROOM_xxx.json
    
  3. 如果curl返回正常的优化结果,再运行Python代码即可获取优化后的坐标列表。

内容的提问来源于stack exchange,提问作者Vitor Fernandes Reis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:34:59