public Collection<TransitRouterNetworkNode> getNearestNodes(final Coord coord, final double distance) { return this.qtNodes.getDisk(coord.getX(), coord.getY(), distance); }
public Collection<TransitRouterNetworkNode> getNearestNodes(final Coord coord, final double distance) { return this.qtNodes.getDisk(coord.getX(), coord.getY(), distance); }
public Collection<TransitStopFacility> getNearestTransitStopFacilities(final Coord coord, final double distance) { return this.quadTree.getDisk(coord.getX(), coord.getY(), distance); }
/** * finds the nodes within distance to <code>coord</code> * * @param coord the coordinate around which nodes should be located * @param distance the maximum distance a node can have to <code>coord</code> to be found * @return all nodes within distance to <code>coord</code> */ @Override public Collection<Node> getNearestNodes(final Coord coord, final double distance) { if (this.nodeQuadTree == null) { buildQuadTree(); } return this.nodeQuadTree.getDisk(coord.getX(), coord.getY(), distance); }
/** * finds the nodes within distance to <code>coord</code> * * @param coord the coordinate around which nodes should be located * @param distance the maximum distance a node can have to <code>coord</code> to be found * @return all nodes within distance to <code>coord</code> */ @Override public Collection<ActivityFacility> getNearestFacilities(final Coord coord, final double distance) { if (this.facilitiesQuadTree == null) { buildQuadTree(); } return this.facilitiesQuadTree.getDisk(coord.getX(), coord.getY(), distance); }
private Map<TransitStopFacility, HashMap<WrappedTransitRouteStop, TransferEntryPointer>> createTransfers(Map<TransitStopFacility, Set<Id<TransitRoute>>> transitStopFacilities2RouteIdsServed, Map<WrappedTransitRouteStop, Id<TransitRoute>> routeStop2routeId, double maxBeelineWalkConnectionDistance) { Map<TransitStopFacility, HashMap<WrappedTransitRouteStop, TransferEntryPointer>> stop2TransitRouteStop2Transfers = new HashMap<>(); QuadTree<WrappedTransitRouteStop> transitRouteStopQuadTree = this.createTransitRouteStopQuadTree(routeStop2routeId.keySet()); // create transfers for all transit route stops if they're located less than beelineWalkConnectionDistance from each other for (TransitStopFacility sourceStop : transitStopFacilities2RouteIdsServed.keySet()) { // (just goes through all stops) HashMap<WrappedTransitRouteStop, TransferEntryPointer> transfersFromThis = new HashMap<WrappedTransitRouteStop, TransferEntryPointer>(); for (WrappedTransitRouteStop destinationStop : transitRouteStopQuadTree.getDisk(sourceStop.getCoord().getX(), sourceStop.getCoord().getY(), maxBeelineWalkConnectionDistance)) { // (goes through all stops within walkConnectionDistance) double transferTime = this.raptorDisutility.getTransferTime(sourceStop.getCoord(), destinationStop.transitRouteStop.getStopFacility().getCoord()); transfersFromThis.put(destinationStop, new TransferEntryPointer(-1, transferTime, destinationStop, routeStop2routeId.get(destinationStop))); // (memorize: (1) which stop the walk goes to; (2) route id associated with that stop (presumably one stop per route even at same location) } stop2TransitRouteStop2Transfers.put(sourceStop, transfersFromThis); } int transfersAdded = 0; for (HashMap<WrappedTransitRouteStop, TransferEntryPointer> routeStop2Transfers : stop2TransitRouteStop2Transfers.values()) { transfersAdded += routeStop2Transfers.size(); } log.info("Added " + transfersAdded + " transfers (from each transit stop facility to each other transit route stop within " + maxBeelineWalkConnectionDistance + "m beeline distance."); return stop2TransitRouteStop2Transfers; }
@Test public void testGetDistance_fromOutsideExtent() { QuadTree<String> qt = getTestTree(); assertContains(new String[] {"100.0, 0.0"}, qt.getDisk(160.0, 0, 60.1)); // E assertContains(new String[] {"15.0, 15.0", "15.0, 15.0 B"}, qt.getDisk(15.0, 160, 145.1)); // N assertContains(new String[] {"-15.0, 0.0"}, qt.getDisk(-60.0, 0, 45.1)); // W assertContains(new String[] {"100.0, 0.0"}, qt.getDisk(100.0, -60, 60.1)); // S }
public ArrayList<ActivityFacility> computeChoiceSetCircle(Coord coordStart, Coord coordEnd, double radius, String type) { double midPointX = (coordStart.getX()+coordEnd.getX())/2.0; double midPointY = (coordStart.getY()+coordEnd.getY())/2.0; return (ArrayList<ActivityFacility>) this.quadTreesOfType.get(this.defineFlexibleActivities.getConverter().convertType(type)). getDisk(midPointX, midPointY, radius); }
@Test public void testGetDistance_EntryOnDividingBorder() { QuadTree<String> qt = new QuadTree<>(0, 0, 40, 60); qt.put(10.0, 10.0, "10.0, 10.0"); qt.put(20.0, 20.0, "20.0, 20.0"); // on vertical border qt.put(20.0, 30.0, "20.0, 30.0"); // exactly on center qt.put(30.0, 30.0, "30.0, 30.0"); // on horizontal border qt.put(12.0, 15.0, "12.0, 15.0"); qt.put(10.0, 25.0, "10.0, 25.0"); assertContains(new String[] {"10.0, 10.0"}, qt.getDisk(10.0, 7.0, 3.0)); assertContains(new String[] {"10.0, 10.0"}, qt.getDisk(10.0, 12.0, 2.0)); assertContains(new String[] {"10.0, 10.0"}, qt.getDisk(7.0, 10.0, 3.0)); assertContains(new String[] {"10.0, 10.0"}, qt.getDisk(13.0, 10.0, 3.0)); assertContains(new String[] {"20.0, 20.0"}, qt.getDisk(20.0, 23.0, 3.0)); assertContains(new String[] {"20.0, 30.0"}, qt.getDisk(20.0, 27.0, 3.0)); assertContains(new String[] {"30.0, 30.0"}, qt.getDisk(27.0, 30.0, 3.0)); assertContains(new String[] {"12.0, 15.0"}, qt.getDisk(15.0, 15.0, 3.0)); assertContains(new String[] {"10.0, 25.0"}, qt.getDisk(10.0, 28.0, 3.0)); }
Collection<ClusterActivity> neighbourhood = quadTree.getDisk(p.getCoord().getX(), p.getCoord().getY(), radius); List<ClusterActivity> uN = new ArrayList<ClusterActivity>(neighbourhood.size()); List<ClusterActivity> cN = new ArrayList<ClusterActivity>(neighbourhood.size());
protected final boolean modifyLocation(Activity act, Coord startCoord, Coord endCoord, double radius) { double midPointX = (startCoord.getX() + endCoord.getX()) / 2.0; double midPointY = (startCoord.getY() + endCoord.getY()) / 2.0; ArrayList<ActivityFacility> facilitySet = (ArrayList<ActivityFacility>) this.quadTreesOfType.get(this.defineFlexibleActivities.getConverter().convertType(act.getType())). getDisk(midPointX, midPointY, radius); ActivityFacility facility = null; if (facilitySet.size() > 1) { facility = facilitySet.get(super.random.nextInt(facilitySet.size())); } else { return false; } act.setFacilityId(facility.getId()); act.setLinkId(NetworkUtils.getNearestLink(((Network) this.scenario.getNetwork()), facility.getCoord()).getId()); act.setCoord(facility.getCoord()); return true; }
@Test public void testGetDistance_EntryOnOutsideBorder() { QuadTree<String> qt = new QuadTree<>(0.0, 0.0, 40.0, 60.0); // the 4 corners qt.put(0.0, 0.0, "SW"); qt.put(40.0, 0.0, "SE"); qt.put(0.0, 60.0, "NW"); qt.put(40.0, 60.0, "NE"); // the 4 sides qt.put(10.0, 60.0, "N"); qt.put(40.0, 10.0, "E"); qt.put(10.0, 0.0, "S"); qt.put(0.0, 10.0, "W"); assertContains(new String[] {"SW"}, qt.getDisk(3.0, 0.0, 3.0)); assertContains(new String[] {"SE"}, qt.getDisk(40.0, 3.0, 3.0)); assertContains(new String[] {"NW"}, qt.getDisk(3.0, 60.0, 3.0)); assertContains(new String[] {"NE"}, qt.getDisk(40.0, 57.0, 3.0)); assertContains(new String[] {"N"}, qt.getDisk(7.0, 60.0, 3.0)); assertContains(new String[] {"E"}, qt.getDisk(40.0, 13.0, 3.0)); assertContains(new String[] {"S"}, qt.getDisk(13.0, 0.0, 3.0)); assertContains(new String[] {"W"}, qt.getDisk(3.0, 10.0, 3.0)); }
Collection<ActivityFacilityWithIndex> list = this.quadTreesOfType.get(convertedType).getDisk(center.getX(), center.getY(), maxRadius);
Collection<String> values = qt.getDisk(15.0, 15.0, 1.0); assertEquals(2, values.size()); assertTrue(values.contains("15.0, 15.0")); values = qt.getDisk(15.0, 15.0, 0.0); assertEquals(2, values.size()); assertTrue(values.contains("15.0, 15.0")); values = qt.getDisk(9.0, 9.0, 10.0); assertEquals(3, values.size()); assertTrue(values.contains("10.0, 10.0")); values = qt.getDisk(50.0, 0.0, 51.0); assertEquals(5, values.size()); assertTrue(values.contains("100.0, 0.0")); values = qt.getDisk(90.0, 0.0, 9.0); assertEquals("test with distance 9.0", 0, values.size()); values = qt.getDisk(90.0, 0.0, 9.999); assertEquals("test with distance 9.999", 0, values.size()); values = qt.getDisk(90.0, 0.0, 10.0); assertEquals("test with distance 10.0", 1, values.size()); values = qt.getDisk(90.0, 0.0, 10.001); assertEquals("test with distance 10.001", 1, values.size()); values = qt.getDisk(90.0, 0.0, 11.0);