private Map<Id<Node>, ArrayList<ActivityFacility>> aggregateMeasurePointsWithSameNearestNode() { Map<Id<Node>,ArrayList<ActivityFacility>> aggregatedOrigins = new ConcurrentHashMap<>(); Gbl.assertNotNull(measuringPoints); Gbl.assertNotNull(measuringPoints.getFacilities()) ; for (ActivityFacility measuringPoint : measuringPoints.getFacilities().values()) { // Determine nearest network node (from- or toNode) based on the link Node nearestNode = NetworkUtils.getCloserNodeOnLink(measuringPoint.getCoord(), NetworkUtils.getNearestLinkExactly(network, measuringPoint.getCoord())); Id<Node> nearestNodeId = nearestNode.getId(); // Create new entry if key does not exist! if(!aggregatedOrigins.containsKey(nearestNodeId)) { aggregatedOrigins.put(nearestNodeId, new ArrayList<ActivityFacility>()); } // Assign measure point (origin) to it's nearest node aggregatedOrigins.get(nearestNodeId).add(measuringPoint); } LOG.info("Number of measuring points: " + measuringPoints.getFacilities().values().size()); LOG.info("Number of aggregated measuring points: " + aggregatedOrigins.size()); return aggregatedOrigins; }