Условие для выбора вывода на основе расстояния между двумя различными узлами ГИС - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь найти условие для добавления в выходные данные выбора, основанные на расстоянии между двумя точками ГИС. Моя сеть включает в себя трамвай с людьми, и я хочу, чтобы мой человек выходил на трамвайной остановке, ближайшей к его дому. Трамвай движется по встречной петле, и я хочу поставить условие, чтобы человек, выходящий из машины, падал на правой остановке. Не могли бы вы помочь мне с этим?

Я уже пробовал distanceByRoute, но я не знаю, как сформировать для него условие с помощью диаграммы состояний или в selectOutput. введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

введите описание изображения здесь

tramCollection вот моя коллекция трамвайных остановок (в ГИС / INode), расположенная на моей карте в Main.

0 голосов
/ 20 мая 2019

Допущения

  • У вас есть население Станция -Агенты с именем станции
  • У вас есть население Пассажир -Агенты по имени пассажиры
  • У вас есть население Трамвай -Агенты по имени Трамваи
  • У вас естьнаселение Дом -Агенты по имени дома

Шаг за шагом

  1. Добавить к Tram -Агент переменной nextStation типа Станция , в которой moveTo-Block всегда сохраняет текущую станцию ​​прибытия

  2. Добавить Пассажир -Агент параметр типа Дом с именем Дом , где при запуске модели Дом -Агент заполняется

  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 вы также можете использовать GISPoint как для своей переменной NextStation внутри трамвая, так и для кода getNearestStation.

Добавьте Dropoff-Block к вашей потоковой диаграмме и установите следующие условия: getNearestStation(agent).equals(container.nextStation)

Dropoff-Block


Дополнительное примечание

Чтобы сделать вычисление расстояния менее частым, выполняйте getNearestStation только один раз при инициализации каждого пассажира и сохраняйте его в переменной, вместо того, чтобы вычислять его при каждом прохождениивыпадающий блок.

...