package org.opentrafficsim.imb.kpi.demo; import org.opentrafficsim.imb.IMBException; import org.opentrafficsim.imb.connector.Connector.IMBEventType; import org.opentrafficsim.imb.connector.IMBConnector; /** *
* Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License.
*
* @version $Revision$, $LastChangedDate$, by $Author$, initial version 9 nov. 2016
* @author Alexander Verbraeck
* @author Peter Knoppers
* @author Wouter Schakel
*/
public class VissimImposer
{
/**
* @param args command line args
* @throws IMBException in case of IMB exception
*/
public static void main(String[] args) throws IMBException
{
String host = "localhost"; // "vps17642.public.cloudvps.com";
int port = 4000;
String modelName = "VISSIM";
int modelId = 1;
String federation = "OTS_RT";
IMBConnector connector;
try
{
connector = new IMBConnector(host, port, modelName, modelId, federation);
}
catch (IMBException exception)
{
throw new RuntimeException(exception);
}
String networkId = "DTV";
for (int redo = 0; redo < 100; redo++)
{
for (String[] linkString : net)
{
connector.postIMBMessage("Node", IMBEventType.NEW,
new Object[] { 0.0, networkId, linkString[0], 0.0, 0.0, 0.0 });
connector.postIMBMessage("Node", IMBEventType.NEW,
new Object[] { 0.0, networkId, linkString[1], 0.0, 0.0, 0.0 });
}
for (String[] linkString : net)
{
int points = 1 + (int) (Math.random() * 100);
Object[] coords = new Object[points * 3];
for (int i = 0; i < points * 3; i++)
{
coords[i] = Math.random();
}
Object[] linkDat =
append(new Object[] { 0.0, networkId, linkString[2], linkString[0], linkString[1], points }, coords);
Object[] laneDat = append(new Object[] { 0.0, networkId, linkString[2], "1", 1, points }, coords);
connector.postIMBMessage("Link_GTU", IMBEventType.NEW, linkDat);
connector.postIMBMessage("Lane_GTU", IMBEventType.NEW, laneDat); // first lane sent very quickly, to test
int n = Integer.parseInt(linkString[4]);
for (int i = 2; i <= n; i++)
{
connector.postIMBMessage("Lane_GTU", IMBEventType.NEW,
append(new Object[] { 0.0, networkId, linkString[2], Integer.toString(i), i, points }, coords));
}
}
}
}
private static Object[] append(Object[] a, Object[] b)
{
Object[] out = new Object[a.length + b.length];
System.arraycopy(a, 0, out, 0, a.length);
System.arraycopy(b, 0, out, a.length, b.length);
return out;
}
/**
* Hard-coded vissim network: from node, to node, link id, length [m], number of lanes. Lane id's are defined as linkId.#.
* Lane lengths are equal to the link lengths.
*/
private final static String[][] net = new String[][] { new String[] { "461", "462", "10062", "7.71", "1" },
new String[] { "463", "464", "10063", "8.02", "1" }, new String[] { "457", "458", "10060", "7.18", "1" },
new String[] { "459", "460", "10061", "6.81", "1" }, new String[] { "469", "470", "10066", "23.42", "1" },
new String[] { "471", "472", "10067", "12.55", "1" }, new String[] { "465", "466", "10064", "30.32", "1" },
new String[] { "467", "468", "10065", "30.82", "1" }, new String[] { "327", "328", "165", "51.34", "2" },
new String[] { "497", "498", "10080", "24.54", "1" }, new String[] { "473", "474", "10068", "18.77", "1" },
new String[] { "475", "476", "10069", "29.91", "1" }, new String[] { "361", "362", "10012", "14.69", "2" },
new String[] { "499", "500", "10081", "25.86", "1" }, new String[] { "265", "266", "133", "157.20", "1" },
new String[] { "263", "264", "132", "142.13", "1" }, new String[] { "261", "262", "131", "107.87", "1" },
new String[] { "259", "260", "130", "35.15", "1" }, new String[] { "273", "274", "137", "57.80", "1" },
new String[] { "271", "272", "136", "57.80", "1" }, new String[] { "269", "270", "135", "124.43", "1" },
new String[] { "267", "268", "134", "127.02", "1" }, new String[] { "547", "548", "10105", "13.89", "1" },
new String[] { "545", "546", "10104", "10.74", "1" }, new String[] { "277", "278", "139", "66.33", "1" },
new String[] { "275", "276", "138", "66.33", "1" }, new String[] { "539", "540", "10101", "15.03", "1" },
new String[] { "329", "330", "166", "261.86", "3" }, new String[] { "543", "544", "10103", "15.33", "1" },
new String[] { "541", "542", "10102", "12.60", "1" }, new String[] { "47", "48", "24", "816.44", "2" },
new String[] { "49", "50", "25", "182.51", "2" }, new String[] { "51", "52", "26", "157.13", "1" },
new String[] { "53", "54", "27", "93.81", "2" }, new String[] { "39", "40", "20", "60.87", "2" },
new String[] { "41", "42", "21", "1456.31", "2" }, new String[] { "43", "44", "22", "110.12", "1" },
new String[] { "45", "46", "23", "29.15", "3" }, new String[] { "317", "318", "160", "70.95", "1" },
new String[] { "629", "630", "10146", "8.04", "2" }, new String[] { "55", "56", "28", "262.64", "4" },
new String[] { "57", "58", "29", "73.82", "3" }, new String[] { "319", "320", "161", "68.62", "1" },
new String[] { "609", "610", "10136", "18.63", "1" }, new String[] { "635", "636", "10149", "9.74", "1" },
new String[] { "7", "8", "4", "56.82", "1" }, new String[] { "15", "16", "8", "301.40", "2" },
new String[] { "323", "324", "163", "51.11", "2" }, new String[] { "523", "524", "10093", "16.63", "2" },
new String[] { "237", "238", "119", "25.50", "1" }, new String[] { "479", "480", "10071", "28.13", "1" },
new String[] { "455", "456", "10059", "20.53", "2" }, new String[] { "453", "454", "10058", "12.22", "1" },
new String[] { "451", "452", "10057", "6.98", "1" }, new String[] { "449", "450", "10056", "8.94", "1" },
new String[] { "357", "358", "10010", "22.21", "2" }, new String[] { "445", "446", "10054", "21.60", "1" },
new String[] { "443", "444", "10053", "12.86", "2" }, new String[] { "441", "442", "10052", "15.68", "1" },
new String[] { "439", "440", "10051", "16.35", "2" }, new String[] { "437", "438", "10050", "13.35", "1" },
new String[] { "239", "240", "120", "25.50", "1" }, new String[] { "241", "242", "121", "36.63", "1" },
new String[] { "243", "244", "122", "36.63", "1" }, new String[] { "245", "246", "123", "28.66", "1" },
new String[] { "247", "248", "124", "28.66", "1" }, new String[] { "249", "250", "125", "57.15", "1" },
new String[] { "251", "252", "126", "57.95", "1" }, new String[] { "253", "254", "127", "19.70", "1" },
new String[] { "255", "256", "128", "19.67", "1" }, new String[] { "257", "258", "129", "108.25", "1" },
new String[] { "565", "566", "10114", "6.76", "1" }, new String[] { "567", "568", "10115", "21.47", "1" },
new String[] { "331", "332", "167", "133.04", "4" }, new String[] { "563", "564", "10113", "8.31", "1" },
new String[] { "389", "390", "10026", "47.68", "2" }, new String[] { "529", "530", "10096", "15.95", "1" },
new String[] { "235", "236", "118", "41.32", "1" }, new String[] { "117", "118", "59", "80.44", "1" },
new String[] { "115", "116", "58", "78.53", "1" }, new String[] { "109", "110", "55", "313.42", "1" },
new String[] { "107", "108", "54", "79.51", "2" }, new String[] { "113", "114", "57", "918.90", "2" },
new String[] { "111", "112", "56", "238.80", "1" }, new String[] { "101", "102", "51", "67.18", "1" },
new String[] { "99", "100", "50", "164.45", "1" }, new String[] { "105", "106", "53", "40.13", "2" },
new String[] { "103", "104", "52", "373.22", "1" }, new String[] { "573", "574", "10118", "22.82", "1" },
new String[] { "515", "516", "10089", "30.90", "1" }, new String[] { "391", "392", "10027", "49.33", "2" },
new String[] { "553", "554", "10108", "14.15", "1" }, new String[] { "325", "326", "164", "50.85", "1" },
new String[] { "435", "436", "10049", "24.02", "2" }, new String[] { "371", "372", "10017", "26.26", "1" },
new String[] { "369", "370", "10016", "23.79", "1" }, new String[] { "477", "478", "10070", "16.50", "1" },
new String[] { "417", "418", "10040", "16.76", "2" }, new String[] { "419", "420", "10041", "15.49", "2" },
new String[] { "421", "422", "10042", "21.25", "2" }, new String[] { "395", "396", "10029", "18.85", "1" },
new String[] { "425", "426", "10044", "10.58", "2" }, new String[] { "427", "428", "10045", "14.10", "2" },
new String[] { "429", "430", "10046", "25.53", "1" }, new String[] { "431", "432", "10047", "19.60", "1" },
new String[] { "229", "230", "115", "88.60", "1" }, new String[] { "227", "228", "114", "83.61", "1" },
new String[] { "175", "176", "88", "8.81", "1" }, new String[] { "177", "178", "89", "416.80", "1" },
new String[] { "221", "222", "111", "43.34", "1" }, new String[] { "219", "220", "110", "43.34", "1" },
new String[] { "225", "226", "113", "65.06", "1" }, new String[] { "223", "224", "112", "43.38", "1" },
new String[] { "163", "164", "82", "12.86", "1" }, new String[] { "165", "166", "83", "333.72", "1" },
new String[] { "159", "160", "80", "367.71", "1" }, new String[] { "161", "162", "81", "13.66", "1" },
new String[] { "171", "172", "86", "19.56", "1" }, new String[] { "173", "174", "87", "7.62", "1" },
new String[] { "167", "168", "84", "349.30", "1" }, new String[] { "169", "170", "85", "16.69", "1" },
new String[] { "549", "550", "10106", "51.27", "1" }, new String[] { "363", "364", "10013", "19.80", "2" },
new String[] { "491", "492", "10077", "35.52", "1" }, new String[] { "483", "484", "10073", "21.83", "1" },
new String[] { "525", "526", "10094", "7.62", "1" }, new String[] { "489", "490", "10076", "29.56", "2" },
new String[] { "593", "594", "10128", "29.66", "1" }, new String[] { "537", "538", "10100", "17.94", "1" },
new String[] { "5", "6", "3", "56.13", "2" }, new String[] { "13", "14", "7", "87.97", "1" },
new String[] { "519", "520", "10091", "34.54", "1" }, new String[] { "379", "380", "10021", "18.05", "2" },
new String[] { "487", "488", "10075", "26.51", "2" }, new String[] { "605", "606", "10134", "7.90", "1" },
new String[] { "607", "608", "10135", "17.30", "1" }, new String[] { "365", "366", "10014", "26.61", "1" },
new String[] { "611", "612", "10137", "8.28", "1" }, new String[] { "597", "598", "10130", "22.38", "1" },
new String[] { "599", "600", "10131", "0.15", "1" }, new String[] { "601", "602", "10132", "25.55", "2" },
new String[] { "603", "604", "10133", "8.63", "1" }, new String[] { "531", "532", "10097", "14.77", "1" },
new String[] { "407", "408", "10035", "14.63", "1" }, new String[] { "615", "616", "10139", "8.74", "3" },
new String[] { "215", "216", "108", "87.20", "1" }, new String[] { "217", "218", "109", "43.38", "1" },
new String[] { "415", "416", "10039", "30.57", "3" }, new String[] { "413", "414", "10038", "31.75", "1" },
new String[] { "203", "204", "102", "46.91", "1" }, new String[] { "205", "206", "103", "62.52", "1" },
new String[] { "199", "200", "100", "45.54", "1" }, new String[] { "201", "202", "101", "47.88", "1" },
new String[] { "211", "212", "106", "33.56", "1" }, new String[] { "213", "214", "107", "37.56", "1" },
new String[] { "207", "208", "104", "62.45", "1" }, new String[] { "209", "210", "105", "84.15", "1" },
new String[] { "77", "78", "39", "71.45", "2" }, new String[] { "75", "76", "38", "192.09", "2" },
new String[] { "613", "614", "10138", "8.34", "3" }, new String[] { "65", "66", "33", "861.78", "2" },
new String[] { "63", "64", "32", "242.25", "3" }, new String[] { "61", "62", "31", "91.81", "1" },
new String[] { "59", "60", "30", "86.58", "1" }, new String[] { "73", "74", "37", "172.76", "2" },
new String[] { "71", "72", "36", "509.55", "3" }, new String[] { "69", "70", "35", "391.52", "3" },
new String[] { "67", "68", "34", "36.36", "3" }, new String[] { "517", "518", "10090", "25.72", "2" },
new String[] { "521", "522", "10092", "29.67", "1" }, new String[] { "433", "434", "10048", "22.20", "1" },
new String[] { "555", "556", "10109", "38.98", "1" }, new String[] { "619", "620", "10141", "11.78", "3" },
new String[] { "345", "346", "10004", "5.53", "3" }, new String[] { "623", "624", "10143", "15.51", "1" },
new String[] { "621", "622", "10142", "15.56", "1" }, new String[] { "627", "628", "10145", "6.59", "2" },
new String[] { "527", "528", "10095", "14.12", "1" }, new String[] { "631", "632", "10147", "12.65", "2" },
new String[] { "347", "348", "10005", "13.16", "1" }, new String[] { "411", "412", "10037", "15.52", "2" },
new String[] { "633", "634", "10148", "16.67", "1" }, new String[] { "575", "576", "10119", "19.51", "1" },
new String[] { "351", "352", "10007", "14.40", "2" }, new String[] { "349", "350", "10006", "29.45", "1" },
new String[] { "119", "120", "60", "731.84", "2" }, new String[] { "121", "122", "61", "91.86", "1" },
new String[] { "123", "124", "62", "90.92", "1" }, new String[] { "125", "126", "63", "211.45", "2" },
new String[] { "127", "128", "64", "61.35", "2" }, new String[] { "129", "130", "65", "2516.84", "2" },
new String[] { "131", "132", "66", "91.76", "1" }, new String[] { "133", "134", "67", "92.50", "1" },
new String[] { "135", "136", "68", "2287.27", "2" }, new String[] { "137", "138", "69", "715.82", "2" },
new String[] { "385", "386", "10024", "21.53", "1" }, new String[] { "387", "388", "10025", "23.69", "2" },
new String[] { "381", "382", "10022", "17.01", "1" }, new String[] { "383", "384", "10023", "14.72", "2" },
new String[] { "377", "378", "10020", "22.54", "2" }, new String[] { "339", "340", "10001", "39.92", "1" },
new String[] { "409", "410", "10036", "8.24", "1" }, new String[] { "341", "342", "10002", "17.25", "1" },
new String[] { "569", "570", "10116", "16.97", "1" }, new String[] { "399", "400", "10031", "28.34", "1" },
new String[] { "337", "338", "10000", "39.26", "2" }, new String[] { "343", "344", "10003", "17.37", "1" },
new String[] { "589", "590", "10126", "6.38", "1" }, new String[] { "511", "512", "10087", "30.29", "2" },
new String[] { "397", "398", "10030", "28.34", "2" }, new String[] { "591", "592", "10127", "0.15", "1" },
new String[] { "3", "4", "2", "118.92", "2" }, new String[] { "321", "322", "162", "126.30", "4" },
new String[] { "403", "404", "10033", "20.02", "3" }, new String[] { "11", "12", "6", "63.83", "3" },
new String[] { "401", "402", "10032", "23.38", "1" }, new String[] { "639", "640", "10152", "0.15", "4" },
new String[] { "551", "552", "10107", "16.69", "1" }, new String[] { "625", "626", "10144", "10.98", "3" },
new String[] { "423", "424", "10043", "10.53", "1" }, new String[] { "617", "618", "10140", "11.43", "1" },
new String[] { "571", "572", "10117", "17.52", "1" }, new String[] { "197", "198", "99", "48.25", "1" },
new String[] { "195", "196", "98", "83.79", "2" }, new String[] { "375", "376", "10019", "20.91", "1" },
new String[] { "373", "374", "10018", "19.03", "1" }, new String[] { "333", "334", "168", "47.53", "4" },
new String[] { "335", "336", "169", "129.99", "1" }, new String[] { "393", "394", "10028", "52.26", "1" },
new String[] { "181", "182", "91", "49.61", "1" }, new String[] { "179", "180", "90", "368.08", "1" },
new String[] { "185", "186", "93", "291.44", "1" }, new String[] { "183", "184", "92", "58.83", "1" },
new String[] { "189", "190", "95", "24.67", "1" }, new String[] { "187", "188", "94", "131.86", "1" },
new String[] { "193", "194", "97", "75.82", "2" }, new String[] { "191", "192", "96", "22.27", "1" },
new String[] { "21", "22", "11", "74.14", "1" }, new String[] { "19", "20", "10", "570.77", "2" },
new String[] { "25", "26", "13", "81.82", "1" }, new String[] { "23", "24", "12", "86.14", "2" },
new String[] { "29", "30", "15", "139.73", "2" }, new String[] { "27", "28", "14", "136.32", "2" },
new String[] { "33", "34", "17", "70.53", "1" }, new String[] { "31", "32", "16", "699.43", "2" },
new String[] { "37", "38", "19", "210.12", "1" }, new String[] { "35", "36", "18", "1118.59", "2" },
new String[] { "535", "536", "10099", "46.21", "1" }, new String[] { "533", "534", "10098", "16.22", "1" },
new String[] { "501", "502", "10082", "17.40", "1" }, new String[] { "233", "234", "117", "41.25", "1" },
new String[] { "405", "406", "10034", "13.94", "1" }, new String[] { "485", "486", "10074", "15.06", "1" },
new String[] { "231", "232", "116", "112.02", "1" }, new String[] { "299", "300", "151", "190.45", "2" },
new String[] { "297", "298", "150", "681.40", "2" }, new String[] { "303", "304", "153", "91.51", "2" },
new String[] { "301", "302", "152", "190.24", "1" }, new String[] { "307", "308", "155", "74.37", "1" },
new String[] { "305", "306", "154", "328.61", "3" }, new String[] { "311", "312", "157", "34.04", "1" },
new String[] { "309", "310", "156", "14.78", "1" }, new String[] { "315", "316", "159", "73.19", "1" },
new String[] { "313", "314", "158", "76.24", "1" }, new String[] { "353", "354", "10008", "15.37", "1" },
new String[] { "355", "356", "10009", "16.70", "1" }, new String[] { "583", "584", "10123", "36.94", "1" },
new String[] { "637", "638", "10151", "19.01", "3" }, new String[] { "581", "582", "10122", "15.01", "1" },
new String[] { "579", "580", "10121", "18.47", "1" }, new String[] { "561", "562", "10112", "16.83", "1" },
new String[] { "577", "578", "10120", "16.36", "1" }, new String[] { "513", "514", "10088", "29.16", "1" },
new String[] { "503", "504", "10083", "3.58", "1" }, new String[] { "95", "96", "48", "61.27", "1" },
new String[] { "97", "98", "49", "168.13", "1" }, new String[] { "91", "92", "46", "295.15", "1" },
new String[] { "93", "94", "47", "20.05", "1" }, new String[] { "87", "88", "44", "155.40", "2" },
new String[] { "89", "90", "45", "49.21", "1" }, new String[] { "83", "84", "42", "51.23", "1" },
new String[] { "85", "86", "43", "84.59", "1" }, new String[] { "79", "80", "40", "467.01", "3" },
new String[] { "81", "82", "41", "192.06", "2" }, new String[] { "1", "2", "1", "552.22", "2" },
new String[] { "367", "368", "10015", "21.32", "1" }, new String[] { "9", "10", "5", "158.50", "3" },
new String[] { "587", "588", "10125", "6.13", "1" }, new String[] { "17", "18", "9", "93.85", "1" },
new String[] { "585", "586", "10124", "38.02", "1" }, new String[] { "447", "448", "10055", "8.84", "1" },
new String[] { "289", "290", "146", "514.16", "1" }, new String[] { "291", "292", "147", "159.01", "1" },
new String[] { "287", "288", "144", "58.01", "1" }, new String[] { "481", "482", "10072", "34.35", "1" },
new String[] { "283", "284", "142", "76.40", "1" }, new String[] { "285", "286", "143", "76.40", "1" },
new String[] { "279", "280", "140", "56.92", "1" }, new String[] { "281", "282", "141", "56.92", "1" },
new String[] { "495", "496", "10079", "24.97", "2" }, new String[] { "493", "494", "10078", "30.34", "1" },
new String[] { "293", "294", "148", "116.58", "1" }, new String[] { "295", "296", "149", "24.30", "1" },
new String[] { "153", "154", "77", "74.09", "1" }, new String[] { "151", "152", "76", "312.62", "1" },
new String[] { "149", "150", "75", "326.92", "1" }, new String[] { "147", "148", "74", "92.15", "1" },
new String[] { "145", "146", "73", "66.33", "1" }, new String[] { "143", "144", "72", "69.34", "1" },
new String[] { "141", "142", "71", "89.25", "1" }, new String[] { "139", "140", "70", "80.61", "1" },
new String[] { "557", "558", "10110", "42.72", "1" }, new String[] { "157", "158", "79", "290.16", "1" },
new String[] { "155", "156", "78", "73.25", "1" }, new String[] { "595", "596", "10129", "42.32", "1" },
new String[] { "359", "360", "10011", "22.19", "1" }, new String[] { "505", "506", "10084", "7.32", "1" },
new String[] { "507", "508", "10085", "21.16", "1" }, new String[] { "559", "560", "10111", "16.00", "1" },
new String[] { "509", "510", "10086", "4.95", "1" } };
}