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

AnyLogic中如何通过数据表经纬度配置moveTo块实现列车GIS移动

报错原因与修复方案

"Non-unique value in the database"报错的核心原因是数据库查询语句未使用唯一筛选条件,单次查询返回了多条记录,修复步骤如下:

  1. 给存储列车时刻表的数据表添加唯一主键字段(如自增id、唯一车次号),确保每条列车运行记录可被唯一定位
  2. 为列车Agent提前添加属性存储目标坐标,避免在moveTo执行时临时查询数据库:
    • 给列车Agent新增4个double类型属性:depLon、depLat、arrLon、arrLat,新增1个String类型属性trainId存储唯一车次标识
    • 在source块生成列车实例时完成属性赋值,示例代码放在source块的On exit动作中:
    // 替换train_schedule为你的表名,替换字段名为你实际表的对应字段名
    agent.trainId = (String) selectFrom(train_schedule)
        .where(train_schedule.id.eq(agent.getIndex()))
        .uniqueResult(train_schedule.train_id);
    agent.arrLon = (double) selectFrom(train_schedule)
        .where(train_schedule.train_id.eq(agent.trainId))
        .uniqueResult(train_schedule.arr_lon);
    agent.arrLat = (double) selectFrom(train_schedule)
        .where(train_schedule.train_id.eq(agent.trainId))
        .uniqueResult(train_schedule.arr_lat);
    
    注意必须使用uniqueResult()方法获取查询结果,确保查询仅返回单条记录。
MoveTo块动态设置GIS目的地配置

不需要在moveTo块中配置固定目的地,直接调用列车Agent提前存储的经纬度生成目标GIS点即可,配置规则如下:

  • moveTo块的目的地类型选择Point
  • 点参数输入动态值:new GISPoint(agent.arrLon, agent.arrLat, defaultGISMap)
    (把defaultGISMap替换为你工程中GIS地图组件的变量名)
    AnyLogic会自动基于GIS地图的路网生成行驶路径,不需要手动导入铁路线路。
注意事项
  • 确保数据表存储的经纬度坐标系和GIS地图默认的WGS84坐标系一致,避免坐标偏移
  • 若需要停靠到已创建的站场Agent,可提前将所有站场存入Map<String, Agent>集合,key为站场名称,moveTo目的地类型选择Agent,值输入stationMap.get(agent.arrStationName),稳定性高于直接传经纬度
  • 所有数据库查询操作尽量在代理生成阶段完成,不要在仿真运行过程中反复查询数据库,避免触发并发查询异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:57:03