基于两个不同GIS节点之间的距离的“选择输出”条件

时间:2019-05-18 02:27:01

标签: anylogic

我正在尝试寻找一个条件,以根据两个GIS点之间的距离输入选择输出。我的网络中包括与人通行的电车,我希望我的人在距其房屋最近的电车站下车。电车以逆向循环运动,我想放置条件,以便该人退出时在右电车站下车。你能帮我吗?

我已经尝试过distanceByRoute,但是我不知道如何通过statechart或selectOutput为其形成条件。enter image description here

2 个答案:

答案 0 :(得分:0)

假设

  • 您有 Station 个代理商,这些代理商名为 stations
  • 您有一个 Passenger -名为 passengers
  • 的代理商
  • 您有一群叫 trams
  • Tram -Agent
  • 您有一个 Home -名为 homes
  • 的代理商

一步一步

  1. Tram -Agent添加一个 Station 类型的变量 nextStation ,其中moveTo-Block始终保存当前到达的站点

  2. Passenger -Agent添加一个名为 home Home 类型的参数,其中在模型启动时为 Home -Agent已填充

  3. 创建一个名为 getNearestStation 的函数,其输入类型为 Passenger ,输出类型为 Station

Function Definition

    //initialize with first station
    Station nearestStation = stations.get(0);
    double distanceToNearestStation = passenger.home.distanceByRoute(nearestStation);
    double currentDistance;

    for(Station station:stations){
        currentDistance = passenger.home.distanceByRoute(station);
        //save it if you find a closer station
        if( currentDistance < distanceToNearestStation){
            nearestStation = station;
            distanceToNearestStation = passenger.home.distanceByRoute(station);
        }
    }

    return nearestStation;

除了拥有 Station 代理之外,您还可以在电车中的Variable nextStation和getNearestStation代码中使用 GISPoint

  1. 在您的流程图中添加一个放置块,并将放置条件设置为以下内容: getNearestStation(agent).equals(container.nextStation)

Dropoff-Block


附加说明

为了减少距离计算,在每个乘客初始化时仅执行一次 getNearestStation 并将其保存在变量中,而不是在每次通过下车程序块时进行计算。 / p>

答案 1 :(得分:0)

enter image description here

tramCollection这是我在Main的地图上位于GIS / INode中的电车站的集合。