Java Code Examples for org.oscim.core.Box#map2mercator()

The following examples show how to use org.oscim.core.Box#map2mercator() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Map.java    From trekarta with GNU General Public License v3.0 4 votes vote down vote up
public BoundingBox getBoundingBox(int expand) {
    Box box = new Box();
    mViewport.getBBox(box, expand);
    box.map2mercator();
    return new BoundingBox(box.ymin, box.xmin, box.ymax, box.xmax);
}
 
Example 2
Source File: AbstractVectorLayer.java    From trekarta with GNU General Public License v3.0 4 votes vote down vote up
/**
 * running on worker thread
 */
@Override
public boolean doWork(Task t) {

    Box bbox;
    float[] box = new float[8];

    Viewport v = mMap.viewport().getSyncViewport();
    synchronized (v) {
        bbox = v.getBBox(null, 0);
        v.getMapExtents(box, 0);
        v.getMapPosition(t.position);
    }

    /* Hmm what is this for? */
    //    double scale = t.position.scale * Tile.SIZE;
    //    t.position.x = (long) (t.position.x * scale) / scale;
    //    t.position.y = (long) (t.position.y * scale) / scale;

    bbox.map2mercator();

    //    double xmin = bbox.xmin;
    //    double xmax = bbox.xmax;
    //    Box lbox = null;
    //    Box rbox = null;
    //    if (bbox.xmin < -180) {
    //        bbox.xmin = -180;
    //        lbox = new Box(bbox);
    //    }
    //    if (bbox.xmax > 180) {
    //        bbox.xmax = 180;
    //        rbox = new Box(bbox);
    //    }

    processFeatures(t, bbox);

    //if (lbox != null) {
    //    t.position.x += 1;
    //    lbox.xmax = 180;
    //    lbox.xmin = xmin + 180;
    //    processFeatures(t, lbox);
    //    t.position.x -= 1;
    //}
    //
    //if (rbox != null) {
    //    t.position.x -= 1;
    //    rbox.xmin = -180;
    //    rbox.xmax = xmax - 180;
    //    processFeatures(t, rbox);
    //    t.position.x += 1;
    //}

    t.buckets.prepare();

    mMap.render();
    return true;
}
 
Example 3
Source File: ItemizedLayer.java    From trekarta with GNU General Public License v3.0 4 votes vote down vote up
/**
 * When a content sensitive action is performed the content item needs to be
 * identified. This method does that and then performs the assigned task on
 * that item.
 *
 * @return true if event is handled false otherwise
 */
protected boolean activateSelectedItems(MotionEvent event, ActiveItem task) {
    int size = mItemList.size();
    if (size == 0)
        return false;

    int eventX = (int) event.getX() - mMap.getWidth() / 2;
    int eventY = (int) event.getY() - mMap.getHeight() / 2;
    Viewport mapPosition = mMap.viewport();

    Box box = mapPosition.getBBox(null, 128);
    box.map2mercator();
    box.scale(1E6);

    int nearest = -1;
    int inside = -1;
    double insideY = -Double.MAX_VALUE;

    // squared dist: 50x50 px ~ 2mm on 400dpi
    // 20x20 px on baseline mdpi (160dpi)
    double dist = 20 * 20 * CanvasAdapter.getScale();

    for (int i = 0; i < size; i++) {
        Item item = mItemList.get(i);

        if (!box.contains(item.getPoint().longitudeE6,
                item.getPoint().latitudeE6))
            continue;

        mapPosition.toScreenPoint(item.getPoint(), mTmpPoint);

        float dx = (float) (mTmpPoint.x - eventX);
        float dy = (float) (mTmpPoint.y - eventY);

        MarkerSymbol it = item.getMarker();
        if (it == null)
            it = mMarkerRenderer.mDefaultMarker;

        if (it.isInside(dx, dy)) {
            if (mTmpPoint.y > insideY) {
                insideY = mTmpPoint.y;
                inside = i;
            }
        }
        if (inside >= 0)
            continue;

        double d = dx * dx + dy * dy;
        if (d > dist)
            continue;

        dist = d;
        nearest = i;
    }

    if (inside >= 0)
        nearest = inside;

    if (nearest >= 0 && task.run(nearest)) {
        mMarkerRenderer.update();
        mMap.render();
        return true;
    }
    return false;
}
 
Example 4
Source File: ItemizedLayer.java    From trekarta with GNU General Public License v3.0 4 votes vote down vote up
/**
   * When a content sensitive action is performed the content item needs to be
   * identified. This method does that and then performs the assigned task on
   * that item.
   *
   * @return true if event is handled false otherwise
   */
  protected boolean activateSelectedItems(MotionEvent event, ActiveItem task) {
      int size = mItemList.size();
      if (size == 0)
          return false;

      int eventX = (int) event.getX() - mMap.getWidth() / 2;
      int eventY = (int) event.getY() - mMap.getHeight() / 2;
      Viewport mapPosition = mMap.viewport();

      Box box = mapPosition.getBBox(null, 128);
      box.map2mercator();
      box.scale(1E6);

      int nearest = -1;
      int inside = -1;
      double insideY = -Double.MAX_VALUE;

/* squared dist: 50*50 pixel ~ 2mm on 400dpi */
      // TODO Use android tap size
      double dist = 2500;

      for (int i = 0; i < size; i++) {
          Item item = mItemList.get(i);

          if (!box.contains(item.getPoint().longitudeE6,
                  item.getPoint().latitudeE6))
              continue;

          mapPosition.toScreenPoint(item.getPoint(), mTmpPoint);

          float dx = (float) (mTmpPoint.x - eventX);
          float dy = (float) (mTmpPoint.y - eventY);

          MarkerSymbol it = item.getMarker();
          if (it == null)
              it = mMarkerRenderer.mDefaultMarker;

          if (it.isInside(dx, dy)) {
              if (mTmpPoint.y > insideY) {
                  insideY = mTmpPoint.y;
                  inside = i;
              }
          }
          if (inside >= 0)
              continue;

          double d = dx * dx + dy * dy;
          if (d > dist)
              continue;

          dist = d;
          nearest = i;
      }

      if (inside >= 0)
          nearest = inside;

      if (nearest >= 0 && task.run(nearest)) {
          mMarkerRenderer.update();
          mMap.render();
          return true;
      }
      return false;
  }