Package org.openstreetmap.osmosis.core.domain.v0_6

Examples of org.openstreetmap.osmosis.core.domain.v0_6.Way


 
  /**
   * {@inheritDoc}
   */
  public void process(WayContainer wayContainer) {
    Way way;
    long wayId;
    long objectOffset;
    int minimumTile;
    int maximumTile;
    boolean tilesFound;
   
    if (nodeObjectReader == null) {
      nodeObjectStore.complete();
      nodeObjectReader = nodeObjectStore.createReader();
    }
    if (nodeObjectOffsetIndexReader == null) {
      nodeObjectOffsetIndexWriter.complete();
      nodeObjectOffsetIndexReader = nodeObjectOffsetIndexWriter.createReader();
    }
   
    way = wayContainer.getEntity();
    wayId = way.getId();
   
    // Write the way to the object store and save the file offset in an
    // index keyed by way id.
    objectOffset = wayObjectStore.add(way);
    wayObjectOffsetIndexWriter.write(
      new LongLongIndexElement(wayId, objectOffset)
    );
   
    if (enableWayTileIndex) {
    // Calculate the minimum and maximum tile indexes for the way.
    tilesFound = false;
    minimumTile = 0;
    maximumTile = 0;
    for (WayNode wayNode : way.getWayNodes()) {
      long nodeId;
      Node node;
      int tile;
     
      nodeId = wayNode.getNodeId();
     
      try {
      node = nodeObjectReader.get(
        nodeObjectOffsetIndexReader.get(nodeId).getValue()
      );
     
      tile = (int) tileCalculator.calculateTile(node.getLatitude(), node.getLongitude());
     
      if (tilesFound) {
        if (uintComparator.compare(tile, minimumTile) < 0) {
          minimumTile = tile;
        }
        if (uintComparator.compare(maximumTile, tile) < 0) {
          maximumTile = tile;
        }
       
      } else {
        minimumTile = tile;
        maximumTile = tile;
       
        tilesFound = true;
      }
       
      } catch (NoSuchIndexElementException e) {
        // Ignore any referential integrity problems.
        if (LOG.isLoggable(Level.FINER)) {
          LOG.finest(
            "Ignoring referential integrity problem where way " + wayId
            + " refers to non-existent node " + nodeId + "."
          );
    }
      }
    }
   
    // Write the way id to an index keyed by tile but only if tiles were
    // actually found.
    if (tilesFound) {
    wayTileIndexWriter.write(wayId, minimumTile, maximumTile);
      }
     
    } else {
      for (WayNode wayNode : way.getWayNodes()) {
        long nodeId;
       
        nodeId = wayNode.getNodeId();
       
        nodeWayIndexWriter.write(new LongLongIndexElement(nodeId, wayId));
View Full Code Here


  /**
   * {@inheritDoc}
   */
  @Override
  public Way getEntity(long entityId) {
    Way entity;
   
    entity = super.getEntity(entityId);
   
    loadFeatures(entityId, entity);
   
View Full Code Here

 
  /**
   * {@inheritDoc}
   */
  public void process(WayContainer container) {
    Way way;
    boolean inArea;
   
    way = container.getEntity();

    // Check if we're storing entities for later.
    if (storeEntities) {
      allWays.add(container);
    }
   
    // First look through all the nodes to see if any are within the filtered area
    inArea = false;
    for (WayNode nodeReference : way.getWayNodes()) {
      if (availableNodes.get(nodeReference.getNodeId())) {
        inArea = true;
        break;
      }
    }
   
    // If the way has at least one node in the filtered area.
    if (inArea) {
      availableWays.set(way.getId());
     
      // If complete ways are desired, mark any unavailable nodes as required.
      if (completeWays) {
        for (WayNode nodeReference : way.getWayNodes()) {
          long nodeId = nodeReference.getNodeId();
         
          if (!availableNodes.get(nodeId)) {
            requiredNodes.set(nodeId);
          }
View Full Code Here

  /**
   * Test processing a Way.
   */
  @Test
  public final void testProcess6() {
    Way testWay;
   
    testWay = new Way(new CommonEntityData(3456, 0, new Date(), new OsmUser(12, "OsmosisTest"), 0));
    testWay.getWayNodes().add(new WayNode(1234));
    testWay.getWayNodes().add(new WayNode(1235));
    testWay.getTags().add(new Tag("test_key1", "test_value1"));
   
    testOsmWriter.process(new WayContainer(testWay));
    // Nothing to assert; just expect no exception
  }
View Full Code Here

   *            Way to be sent.
   */
  private void emitWay(WayContainer wayContainer) {
    if (clipIncompleteEntities) {
      WayContainer filteredWayContainer;
      Way filteredWay;
     
      filteredWayContainer = wayContainer.getWriteableInstance();
      filteredWay = filteredWayContainer.getEntity();
     
      // Remove node references for nodes that are unavailable.
      for (Iterator<WayNode> i = filteredWay.getWayNodes().iterator(); i.hasNext();) {
        WayNode nodeReference = i.next();
       
        if (!availableNodes.get(nodeReference.getNodeId())) {
          i.remove();
        }
      }
     
      // Only add ways that contain nodes.
      if (filteredWay.getWayNodes().size() > 0) {
        sink.process(filteredWayContainer);
      }
     
    } else {
      sink.process(wayContainer);
View Full Code Here

  /**
   * Test processing a Bound after a Way.
   */
  @Test(expected = OsmosisRuntimeException.class)
  public final void testProcess7() {
    Way testWay;
   
    testWay = new Way(new CommonEntityData(3456, 0, new Date(), new OsmUser(12, "OsmosisTest"), 0));
    testWay.getWayNodes().add(new WayNode(1234));
    testWay.getWayNodes().add(new WayNode(1235));
    testWay.getTags().add(new Tag("test_key1", "test_value1"));
   
    testOsmWriter.process(new WayContainer(testWay));
    testOsmWriter.process(new BoundContainer(new Bound("source")));
  }
View Full Code Here

  private void selectWayNodes() {
    ReleasableIterator<WayContainer> i = allWays.iterate();
   
    try {
      while (i.hasNext()) {
        Way way = i.next().getEntity();
        long wayId = way.getId();
       
        // Only examine available relations.
        if (availableWays.get(wayId)) {
          // Select all nodes within the way.
          for (WayNode wayNode : way.getWayNodes()) {
            availableNodes.set(wayNode.getNodeId());
          }
        }
      }
     
View Full Code Here

  /**
   * {@inheritDoc}
   */
  @Override
  public Way mapRow(ResultSet rs, int rowNumber) throws SQLException {
    Way way;
    Array nodeIdArray;
    Long[] nodeIds;
    List<WayNode> wayNodes;
   
    way = new Way(mapCommonEntityData(rs));
   
    nodeIdArray = rs.getArray("nodes");
   
    if (nodeIdArray != null) {
      nodeIds = (Long[]) nodeIdArray.getArray();
      wayNodes = way.getWayNodes();
      for (long nodeId : nodeIds) {
        wayNodes.add(new WayNode(nodeId));
      }
    }
   
View Full Code Here

    // within the bounding box.
    tileWayIndexValues = getWayIdsForTileRange(bboxCtx.minimumTile, bboxCtx.maximumTile);
    try {
      while (tileWayIndexValues.hasNext()) {
        long wayId;
        Way way;
        List<Node> nodes;
       
        // Load the current way.
        wayId = tileWayIndexValues.next();
        way = getWay(wayId);
       
        // Load the nodes within the way.
        nodes = new ArrayList<Node>();
        for (WayNode wayNode : way.getWayNodes()) {
          try {
            nodes.add(getNode(wayNode.getNodeId()));
          } catch (NoSuchIndexElementException e) {
            // Ignore any referential integrity problems.
            if (LOG.isLoggable(Level.FINER)) {
              LOG.finest(
                "Ignoring referential integrity problem where way " + wayId
                + " refers to non-existent node " + wayNode.getNodeId() + "."
              );
            }
          }
        }
       
        // Determine if the way lies within the required bounding box.
        if (isWayInsideBox(bboxCtx.boundingBox, nodes)) {
          bboxCtx.wayIdTracker.set(wayId);
         
          // If we want complete ways, we need to check the list of nodes
          // adding any nodes that haven't already been selected (ie.
          // those that are outside the box).
          if (completeWays) {
            for (WayNode wayNode : way.getWayNodes()) {
              long nodeId;
             
              nodeId = wayNode.getNodeId();
             
              if (!bboxCtx.nodeIdTracker.get(nodeId)) {
View Full Code Here

    // already been selected (ie. those that are outside the box).
    // This is done outside the main loop so that ways are loaded
    // in ascending order which utilises index caching more effectively
    if (completeWays) {
      for (Long wayId : bboxCtx.wayIdTracker) {
        Way way;
       
        way = getWay(wayId);
       
        for (WayNode wayNode : way.getWayNodes()) {
          long externalNodeId;
         
          externalNodeId = wayNode.getNodeId();
         
          if (!bboxCtx.nodeIdTracker.get(externalNodeId)) {
View Full Code Here

TOP

Related Classes of org.openstreetmap.osmosis.core.domain.v0_6.Way

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.