@Override protected DataReader createReader(GraphHopperStorage ghStorage) { return initDataReader(new OSMReader(ghStorage)); }
long relationFlags = getRelFlagsMap().get(way.getId()); int first = getNodeMap().get(osmNodeIds.get(0)); int last = getNodeMap().get(osmNodeIds.get(osmNodeIds.size() - 1)); double firstLat = getTmpLatitude(first), firstLon = getTmpLongitude(first); double lastLat = getTmpLatitude(last), lastLon = getTmpLongitude(last); if (!Double.isNaN(firstLat) && !Double.isNaN(firstLon) && !Double.isNaN(lastLat) && !Double.isNaN(lastLon)) { double estimatedDist = distCalc.calcDist(firstLat, firstLon, lastLat, lastLon); for (int i = 0; i < size; i++) { long nodeId = osmNodeIds.get(i); long nodeFlags = getNodeFlagsMap().get(nodeId); getNodeFlagsMap().put(nodeId, 0); long newNodeId = addBarrierNode(nodeId); if (i > 0) { partNodeIds.add(osmNodeIds.buffer, lastBarrier, length); partNodeIds.set(length - 1, newNodeId); createdEdges.addAll(addOSMWay(partNodeIds, wayFlags, wayOsmId)); createdEdges.addAll(addBarrierEdge(newNodeId, nodeId, wayFlags, nodeFlags, wayOsmId)); } else { createdEdges.addAll(addBarrierEdge(nodeId, newNodeId, wayFlags, nodeFlags, wayOsmId)); LongArrayList partNodeIds = new LongArrayList(); partNodeIds.add(osmNodeIds.buffer, lastBarrier, size - lastBarrier);
for (int i = 0; i < osmNodeIds.size(); i++) { long osmId = osmNodeIds.get(i); int tmpNode = getNodeMap().get(osmId); if (tmpNode == EMPTY_NODE) continue; tmpNode = handlePillarNode(tmpNode, osmId, null, true); tmpNode = -tmpNode - 3; if (pointList.getSize() > 1 && firstNode >= 0) { newEdges.add(addEdge(firstNode, tmpNode, pointList, flags, wayOsmId)); pointList.clear(); pointList.add(nodeAccess, tmpNode); tmpNode = handlePillarNode(tmpNode, osmId, pointList, convertToTowerNode); pointList.add(nodeAccess, tmpNode); if (firstNode >= 0) { newEdges.add(addEdge(firstNode, tmpNode, pointList, flags, wayOsmId)); pointList.clear(); pointList.add(nodeAccess, tmpNode);
/** * Create a copy of the barrier node */ long addBarrierNode(long nodeId) { ReaderNode newNode; int graphIndex = getNodeMap().get(nodeId); if (graphIndex < TOWER_NODE) { graphIndex = -graphIndex - 3; newNode = new ReaderNode(createNewNodeId(), nodeAccess, graphIndex); } else { graphIndex = graphIndex - 3; newNode = new ReaderNode(createNewNodeId(), pillarInfo, graphIndex); } final long id = newNode.getId(); prepareHighwayNode(id); addNode(newNode); return id; }
private void prepareRestrictionRelation(ReaderRelation relation) { OSMTurnRelation turnRelation = createTurnRelation(relation); if (turnRelation != null) { getOsmWayIdSet().add(turnRelation.getOsmIdFrom()); getOsmWayIdSet().add(turnRelation.getOsmIdTo()); } }
private void processNode(ReaderNode node) { if (isInBounds(node)) { addNode(node); // analyze node tags for barriers if (node.hasTags()) { long nodeFlags = encodingManager.handleNodeTags(node); if (nodeFlags != 0) getNodeFlagsMap().put(node.getId(), nodeFlags); } locations++; } else { skippedLocations++; } }
boolean addNode(ReaderNode node) { int nodeType = getNodeMap().get(node.getId()); if (nodeType == EMPTY_NODE) return false; double lat = node.getLat(); double lon = node.getLon(); double ele = getElevation(node); if (nodeType == TOWER_NODE) { addTowerNode(node.getId(), lat, lon, ele); } else if (nodeType == PILLAR_NODE) { pillarInfo.setNode(nextPillarId, lat, lon, ele); getNodeMap().put(node.getId(), nextPillarId + 3); nextPillarId++; } return true; }
graphHopperStorage.create(1000); for (String osmFile : osmFiles) { OSMReader osmReader = new OSMReader(graphHopperStorage); osmReader.setFile(new File(osmFile)); osmReader.setCreateStorage(false); try { osmReader.readGraph(); } catch (IOException e) { throw new RuntimeException(e);
public void processRelation(ReaderRelation relation) throws XMLStreamException { if (relation.hasTag("type", "restriction")) { OSMTurnRelation turnRelation = createTurnRelation(relation); if (turnRelation != null) { GraphExtension extendedStorage = graph.getExtension(); if (extendedStorage instanceof TurnCostExtension) { TurnCostExtension tcs = (TurnCostExtension) extendedStorage; Collection<TurnCostTableEntry> entries = analyzeTurnRelation(turnRelation); for (TurnCostTableEntry entry : entries) { tcs.addTurnInfo(entry.edgeFrom, entry.nodeVia, entry.edgeTo, entry.flags); } } } } }
/** * Add a zero length edge with reduced routing options to the graph. */ Collection<EdgeIteratorState> addBarrierEdge(long fromId, long toId, long flags, long nodeFlags, long wayOsmId) { // clear barred directions from routing flags flags &= ~nodeFlags; // add edge barrierNodeIds.clear(); barrierNodeIds.add(fromId); barrierNodeIds.add(toId); return addOSMWay(barrierNodeIds, flags, wayOsmId); }
public Collection<TurnCostTableEntry> analyzeTurnRelation(OSMTurnRelation turnRelation) { Map<Long, TurnCostTableEntry> entries = new LinkedHashMap<>(); for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (TurnCostTableEntry entry : analyzeTurnRelation(encoder, turnRelation)) { TurnCostTableEntry oldEntry = entries.get(entry.getItemId()); if (oldEntry != null) { // merging different encoders oldEntry.flags |= entry.flags; } else { entries.put(entry.getItemId(), entry); } } } return entries.values(); }
/** * @return converted tower node */ private int handlePillarNode(int tmpNode, long osmId, PointList pointList, boolean convertToTowerNode) { tmpNode = tmpNode - 3; double lat = pillarInfo.getLatitude(tmpNode); double lon = pillarInfo.getLongitude(tmpNode); double ele = pillarInfo.getElevation(tmpNode); if (lat == Double.MAX_VALUE || lon == Double.MAX_VALUE) throw new RuntimeException("Conversion pillarNode to towerNode already happended!? " + "osmId:" + osmId + " pillarIndex:" + tmpNode); if (convertToTowerNode) { // convert pillarNode type to towerNode, make pillar values invalid pillarInfo.setNode(tmpNode, Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE); tmpNode = addTowerNode(osmId, lat, lon, ele); } else if (pointList.is3D()) pointList.add(lat, lon, ele); else pointList.add(lat, lon); return (int) tmpNode; }
/** * Create a copy of the barrier node */ long addBarrierNode(long nodeId) { ReaderNode newNode; int graphIndex = getNodeMap().get(nodeId); if (graphIndex < TOWER_NODE) { graphIndex = -graphIndex - 3; newNode = new ReaderNode(createNewNodeId(), nodeAccess, graphIndex); } else { graphIndex = graphIndex - 3; newNode = new ReaderNode(createNewNodeId(), pillarInfo, graphIndex); } final long id = newNode.getId(); prepareHighwayNode(id); addNode(newNode); return id; }
private void processNode(ReaderNode node) { if (isInBounds(node)) { addNode(node); // analyze node tags for barriers if (node.hasTags()) { long nodeFlags = encodingManager.handleNodeTags(node); if (nodeFlags != 0) getNodeFlagsMap().put(node.getId(), nodeFlags); } locations++; } else { skippedLocations++; } }
boolean addNode(ReaderNode node) { int nodeType = getNodeMap().get(node.getId()); if (nodeType == EMPTY_NODE) return false; double lat = node.getLat(); double lon = node.getLon(); double ele = getElevation(node); if (nodeType == TOWER_NODE) { addTowerNode(node.getId(), lat, lon, ele); } else if (nodeType == PILLAR_NODE) { pillarInfo.setNode(nextPillarId, lat, lon, ele); getNodeMap().put(node.getId(), nextPillarId + 3); nextPillarId++; } return true; }
private void prepareRestrictionRelation(ReaderRelation relation) { OSMTurnRelation turnRelation = createTurnRelation(relation); if (turnRelation != null) { getOsmWayIdSet().add(turnRelation.getOsmIdFrom()); getOsmWayIdSet().add(turnRelation.getOsmIdTo()); } }
public void processRelation(ReaderRelation relation) throws XMLStreamException { if (relation.hasTag("type", "restriction")) { OSMTurnRelation turnRelation = createTurnRelation(relation); if (turnRelation != null) { GraphExtension extendedStorage = graph.getExtension(); if (extendedStorage instanceof TurnCostExtension) { TurnCostExtension tcs = (TurnCostExtension) extendedStorage; Collection<TurnCostTableEntry> entries = analyzeTurnRelation(turnRelation); for (TurnCostTableEntry entry : entries) { tcs.addTurnInfo(entry.edgeFrom, entry.nodeVia, entry.edgeTo, entry.flags); } } } } }
/** * Add a zero length edge with reduced routing options to the graph. */ Collection<EdgeIteratorState> addBarrierEdge(long fromId, long toId, long flags, long nodeFlags, long wayOsmId) { // clear barred directions from routing flags flags &= ~nodeFlags; // add edge barrierNodeIds.clear(); barrierNodeIds.add(fromId); barrierNodeIds.add(toId); return addOSMWay(barrierNodeIds, flags, wayOsmId); }
public Collection<TurnCostTableEntry> analyzeTurnRelation(OSMTurnRelation turnRelation) { Map<Long, TurnCostTableEntry> entries = new LinkedHashMap<Long, OSMTurnRelation.TurnCostTableEntry>(); for (FlagEncoder encoder : encodingManager.fetchEdgeEncoders()) { for (TurnCostTableEntry entry : analyzeTurnRelation(encoder, turnRelation)) { TurnCostTableEntry oldEntry = entries.get(entry.getItemId()); if (oldEntry != null) { // merging different encoders oldEntry.flags |= entry.flags; } else { entries.put(entry.getItemId(), entry); } } } return entries.values(); }
/** * @return converted tower node */ private int handlePillarNode(int tmpNode, long osmId, PointList pointList, boolean convertToTowerNode) { tmpNode = tmpNode - 3; double lat = pillarInfo.getLatitude(tmpNode); double lon = pillarInfo.getLongitude(tmpNode); double ele = pillarInfo.getElevation(tmpNode); if (lat == Double.MAX_VALUE || lon == Double.MAX_VALUE) throw new RuntimeException("Conversion pillarNode to towerNode already happended!? " + "osmId:" + osmId + " pillarIndex:" + tmpNode); if (convertToTowerNode) { // convert pillarNode type to towerNode, make pillar values invalid pillarInfo.setNode(tmpNode, Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE); tmpNode = addTowerNode(osmId, lat, lon, ele); } else if (pointList.is3D()) pointList.add(lat, lon, ele); else pointList.add(lat, lon); return (int) tmpNode; }