Package org.openstreetmap.osmosis.dataset.v0_6.impl

Source Code of org.openstreetmap.osmosis.dataset.v0_6.impl.BoundingBoxContext

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.dataset.v0_6.impl;

import java.awt.geom.Rectangle2D;
import java.util.Comparator;

import org.openstreetmap.osmosis.core.filter.common.DynamicIdTracker;
import org.openstreetmap.osmosis.core.filter.common.IdTracker;
import org.openstreetmap.osmosis.core.store.UnsignedIntegerComparator;
import org.openstreetmap.osmosis.core.util.TileCalculator;


/**
* Contains the data associated with a bounding box iteration call on a dataset.
*
* @author Brett Henderson
*/
public class BoundingBoxContext {
  /**
   * The coordinates of the box represented as an AWT box for use in AWT API
   * calls.
   */
  public final Rectangle2D boundingBox;
  /**
   * The maximum tile value for the box.
   */
  public final int maximumTile;
  /**
   * The minimum tile value for the box.
   */
  public final int minimumTile;
  /**
   * All node ids are stored within this tracker.
   */
  public final IdTracker nodeIdTracker;
  /**
   * All way ids are stored within this tracker.
   */
  public final IdTracker wayIdTracker;
  /**
   * All relation ids are stored within this tracker.
   */
  public final IdTracker relationIdTracker;
  /**
   * All nodes outside the bounding box are stored within this tracker.
   */
  public final IdTracker externalNodeIdTracker;
 
 
  /**
   * Creates a new instance. This initialises all internal variables so that
   * no public variables require initialisation by external code.
   *
   * @param left
   *            The longitude marking the left edge of the bounding box.
   * @param right
   *            The longitude marking the right edge of the bounding box.
   * @param top
   *            The latitude marking the top edge of the bounding box.
   * @param bottom
   *            The latitude marking the bottom edge of the bounding box.
   */
  public BoundingBoxContext(double left, double right, double top, double bottom) {
    TileCalculator tileCalculator;
    Comparator<Integer> tileOrdering;
    int calculatedTile;
    int tmpMinimumTile;
    int tmpMaximumTile;
   
    // Create utility objects.
    tileCalculator = new TileCalculator();
    tileOrdering = new UnsignedIntegerComparator();
   
    // Create a rectangle representing the bounding box.
    boundingBox = new Rectangle2D.Double(left, bottom, right - left, top - bottom);
   
    // Calculate the maximum and minimum tile values for the bounding box.
    calculatedTile = (int) tileCalculator.calculateTile(top, left);
    tmpMaximumTile = calculatedTile;
    tmpMinimumTile = calculatedTile;
   
    calculatedTile = (int) tileCalculator.calculateTile(top, right);
    if (tileOrdering.compare(calculatedTile, tmpMinimumTile) < 0) {
      tmpMinimumTile = calculatedTile;
    }
    if (tileOrdering.compare(calculatedTile, tmpMaximumTile) > 0) {
      tmpMaximumTile = calculatedTile;
    }
   
    calculatedTile = (int) tileCalculator.calculateTile(bottom, left);
    if (tileOrdering.compare(calculatedTile, tmpMinimumTile) < 0) {
      tmpMinimumTile = calculatedTile;
    }
    if (tileOrdering.compare(calculatedTile, tmpMaximumTile) > 0) {
      tmpMaximumTile = calculatedTile;
    }
   
    calculatedTile = (int) tileCalculator.calculateTile(bottom, right);
    if (tileOrdering.compare(calculatedTile, tmpMinimumTile) < 0) {
      tmpMinimumTile = calculatedTile;
    }
    if (tileOrdering.compare(calculatedTile, tmpMaximumTile) > 0) {
      tmpMaximumTile = calculatedTile;
    }
   
    // The tile values at the corners are all zero. If max tile is 0 but if
    // the maximum longitude and latitude are above minimum values set the
    // maximum tile to the maximum value.
    if (tmpMaximumTile == 0) {
      if (right > -180 || top > -90) {
        tmpMaximumTile = 0xFFFFFFFF;
      }
    }
   
    // Set the "final" versions of tile variables with the results.
    maximumTile = tmpMaximumTile;
    minimumTile = tmpMinimumTile;
   
    // Create the id trackers.
    nodeIdTracker = new DynamicIdTracker();
    wayIdTracker = new DynamicIdTracker();
    relationIdTracker = new DynamicIdTracker();
    externalNodeIdTracker = new DynamicIdTracker();
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.dataset.v0_6.impl.BoundingBoxContext

TOP
Copyright © 2018 www.massapi.com. 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.