Pular para o conteúdo

Exemplo 10 da Micro API do Aimsun Next

Exemplo de informações de Detector

Este exemplo mostra como usar funções da API do Aimsun Next para ler e imprimir no log informações dos detectores.

Esta API é baseada na rede do tutorial: Edição - Rede finalizada.

Versão C++

#include "AKIProxie.h"
#include "CIProxie.h"
#include "ANGConProxie.h"
#include "AAPI.h"
#include <stdio.h>

int detectorId = 1571;

int AAPILoad()
{
    AKIPrintString("LOAD");
    return 0;
}

int AAPIInit()
{
    AKIPrintString("\tInit");
    ANGConnEnableVehiclesInBatch(true);
    return 0;
}
int AAPISimulationReady()
{
    AKIPrintString("\tAAPISimulationReady");
    return 0;
}

int AAPIManage(double time, double timeSta, double timTrans, double acicle)
{
    //AKIPrintString("\tManage");
    return 0;
}

int AAPIPostManage(double time, double timeSta, double timTrans, double acicle)
{
    char astring[128];
    //AKIPrintString("\tPostManage");
    int instantDetection = AKIDetGetPresenceInstantDetectionbyId(detectorId, 0, time);
    double instantOccupiedTime = AKIDetGetTimeOccupiedInstantDetectionbyId(detectorId, 0, time);
    int vehiclesDetectedCount = AKIDetGetCounterCyclebyId(detectorId, 0);
    double instantSpeed = AKIDetGetSpeedInstantDetectionbyId(detectorId, 0, time);
    double instantDensity = AKIDetGetDensityInstantDetectionbyId(detectorId, 0, time);
    int counterAggregated = AKIDetGetCounterAggregatedbyId(detectorId, 0);
    double speedAggregated = AKIDetGetSpeedAggregatedbyId(detectorId, 0);
    double occupancyAggregated = AKIDetGetTimeOccupiedAggregatedbyId(detectorId, 0);
    int presenceAggregated = AKIDetGetPresenceAggregatedbyId(detectorId, 0);
    if (instantDetection > 0.0){
        snprintf(astring, 128, "\t\t ------------------Detector %d INSTANT MEASURES------------------:", detectorId);
        AKIPrintString(astring);
        snprintf(astring, 128, "Detection %d", instantDetection);
        AKIPrintString(astring);
        snprintf(astring, 128, "Occupied time %g", instantOccupiedTime);
        AKIPrintString(astring);
        snprintf(astring, 128, "Vehicles detected %d", vehiclesDetectedCount);
        AKIPrintString(astring);
        snprintf(astring, 128, "Speed %f", instantSpeed);
        AKIPrintString(astring);
        snprintf(astring, 128, "Density %f", instantDensity);
        AKIPrintString(astring);
        if (counterAggregated > 0){
            snprintf(astring, 128, "Aggregated Count %d", counterAggregated);
            AKIPrintString(astring);
            snprintf(astring, 128, "Aggregated Speed %f", speedAggregated);
            AKIPrintString(astring);
            snprintf(astring, 128, "Aggregated Occupancy %f", occupancyAggregated);
            AKIPrintString(astring);
            snprintf(astring, 128, "Aggregated Presence %d", presenceAggregated);
            AKIPrintString(astring);
        }
    }
    return 0;
}

int AAPIFinish()
{
    AKIPrintString("\tFinish");
    return 0;
}

int AAPIUnLoad()
{
    AKIPrintString("UNLOAD");
    return 0;
}

int AAPIPreRouteChoiceCalculation(double time, double timeSta)
{
    AKIPrintString("\tPreRouteChoice Calculation");
    return 0;
}

int AAPIVehicleStartParking(int idveh, int idsection, double time)
{
    return 0;
}

int AAPIActionActivated(int idAction)
{
    return 0;
}

int AAPIActionDeactivated(int idAction)
{
    return 0;
}

int AAPIEnterVehicle(int idveh, int idsection)
{
    return 0;
}

int AAPIExitVehicle(int idveh, int idsection)
{
    return 0;
}

int AAPIEnterVehicleSection(int idveh, int idsection, double atime)
{
    return 0;
}

int AAPIExitVehicleSection(int idveh, int idsection, double time)
{
    return 0;
}

int AAPIEnterPedestrian(int idPedestrian, int originCentroid)
{
    AKIPrintString("A Pedestrian has entered the network");
    return 0;
}

int AAPIExitPedestrian(int idPedestrian, int destinationCentroid)
{
    AKIPrintString("A Pedestrian has exited the network");
    return 0;
}

Versão Python

from AAPI import *

DETECTOR_IDS = [1571]

def AAPILoad():
    AKIPrintString( "AAPILoad" )
    return 0

def AAPIInit():
    AKIPrintString( "AAPIInit" )
    return 0
def AAPISimulationReady():
    AKIPrintString( "AAPISimulationReady" )
    return 0
def AAPIManage(time, timeSta, timeTrans, acycle):
    # AKIPrintString( "AAPIManage" )
    return 0

def AAPIPostManage(time, timeSta, timeTrans, acycle):
    for detectorId in DETECTOR_IDS:
        instantDetection = AKIDetGetPresenceInstantDetectionbyId( detectorId, 0, time)
        instantOccupiedTime = AKIDetGetTimeOccupiedInstantDetectionbyId( detectorId, 0, time )
        vehiclesDetectedCount = AKIDetGetCounterCyclebyId(detectorId, 0)
        instantSpeed = AKIDetGetSpeedInstantDetectionbyId( detectorId, 0, time)
        instantDensity =AKIDetGetDensityInstantDetectionbyId( detectorId, 0, time)
        counterAggregated = AKIDetGetCounterAggregatedbyId( detectorId, 0)
        speedAggregated = AKIDetGetSpeedAggregatedbyId( detectorId, 0)
        occupancyAggregated = AKIDetGetTimeOccupiedAggregatedbyId( detectorId, 0)
        presenceAggregated = AKIDetGetPresenceAggregatedbyId(detectorId, 0 )
        if instantDetection >0:
            AKIPrintString( "------------------ Detector " + str(detectorId) + " INSTANT MEASURES ------------------" )
            AKIPrintString( "detection %s"%instantDetection )
            AKIPrintString( "Occupied Time (Percentage) %s"%instantOccupiedTime )
            AKIPrintString( "%s Vehicles in the last cycle"%vehiclesDetectedCount )
            AKIPrintString( "Speed: " + str(instantSpeed) )
            AKIPrintString( "density: " + str(instantDensity) )
            if counterAggregated > 0: #Aggregated stats are only available after the first statistics interval
                AKIPrintString( "------------------ Detector " + str(detectorId) + " AGGREGATED MEASURES ------------------" )
                AKIPrintString( "Count: " + str( counterAggregated ) )
                AKIPrintString( "Speed: " + str( speedAggregated ) )
                AKIPrintString( "Occupancy: " + str( occupancyAggregated ) )
                AKIPrintString( "Presence: " + str( presenceAggregated ) )

    return 0

def AAPIFinish():
    AKIPrintString( "AAPIFinish" )
    return 0

def AAPIUnLoad():
    AKIPrintString( "AAPIUnLoad" )
    return 0

def AAPIPreRouteChoiceCalculation(time, timeSta):
    AKIPrintString( "AAPIPreRouteChoiceCalculation" )
    return 0

def AAPIEnterVehicle(idveh, idsection):
    return 0

def AAPIExitVehicle(idveh, idsection):
    return 0

def AAPIEnterPedestrian(idPedestrian, originCentroid):
    return 0

def AAPIExitPedestrian(idPedestrian, destinationCentroid):
    return 0

def AAPIEnterVehicleSection(idveh, idsection, atime):
    return 0

def AAPIExitVehicleSection(idveh, idsection, atime):
    return 0

def AAPIVehicleStartParking (idveh, idsection, time):
    return 0

def AAPIActionActivated(idAction):
    return 0

def AAPIActionDeactivated(idAction):
    return 0