org.locationtech.jts.index.quadtree.Quadtree.query()方法的使用及代码示例

x33g5p2x  于2022-01-28 转载在 其他  
字(6.8k)|赞(0)|评价(0)|浏览(217)

本文整理了Java中org.locationtech.jts.index.quadtree.Quadtree.query方法的一些代码示例,展示了Quadtree.query的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Quadtree.query方法的具体详情如下:
包路径:org.locationtech.jts.index.quadtree.Quadtree
类名称:Quadtree
方法名:query

Quadtree.query介绍

[英]Queries the tree and returns items which may lie in the given search envelope. Precisely, the items that are returned are all items in the tree whose envelope may intersect the search Envelope. Note that some items with non-intersecting envelopes may be returned as well; the client is responsible for filtering these out. In most situations there will be many items in the tree which do not intersect the search envelope and which are not returned - thus providing improved performance over a simple linear scan.
[中]

代码示例

代码示例来源:origin: geotools/geotools

protected Node find(Polygon polygon) {
  List close = index.query(polygon.getEnvelopeInternal());
  for (Iterator itr = close.iterator(); itr.hasNext(); ) {
    Node node = (Node) itr.next();
    Polygon p = (Polygon) node.getObject();
    if (rel.equal(polygon, p)) {
      return node;
    }
  }
  return null;
}

代码示例来源:origin: geotools/geotools

/**
 * Returns true if there is any label in the index within the specified distance from the
 * bounds. For speed reasons the bounds will be simply expanded by the distance, no curved
 * buffer will be generated
 *
 * @param bounds
 * @param distance
 * @return
 */
@SuppressWarnings("unchecked")
public boolean labelsWithinDistance(Rectangle2D bounds, double distance) {
  if (distance < 0) return false;
  Envelope e = toEnvelope(bounds);
  e.expandBy(distance);
  List<InterferenceItem> results = index.query(e);
  if (results.size() == 0) return false;
  for (Iterator<InterferenceItem> it = results.iterator(); it.hasNext(); ) {
    InterferenceItem item = it.next();
    if (item.env.intersects(e)) {
      return true;
    }
  }
  return false;
}

代码示例来源:origin: geotools/geotools

@Override
public boolean checkAndReserve(List<AffineTransform2D> transforms)
    throws MismatchedDimensionException, TransformException {
  List<Geometry> transformedConflictBounds = new ArrayList<Geometry>();
  boolean conflict = false;
  for (AffineTransform2D tx2d : transforms) {
    if (conflict) {
      break;
    }
    Geometry cbTransformed = JTS.transform(conflictBounds, tx2d);
    transformedConflictBounds.add(cbTransformed);
    List results = qt.query(cbTransformed.getEnvelopeInternal());
    for (Iterator it = results.iterator(); it.hasNext(); ) {
      Geometry candidate = (Geometry) it.next();
      if (candidate.intersects(cbTransformed)) {
        // location conflict
        conflict = true;
        break;
      }
    }
  }
  // reserve the area if no conflict
  if (!conflict) {
    for (Geometry tcb : transformedConflictBounds) {
      qt.insert(tcb.getEnvelopeInternal(), tcb);
    }
  }
  return !conflict;
}

代码示例来源:origin: geotools/geotools

protected void relate(Node node) {
    Polygon polygon = (Polygon) node.getObject();
    List close = index.query(polygon.getEnvelopeInternal());

    for (Iterator itr = close.iterator(); itr.hasNext(); ) {
      Node n = (Node) itr.next();
      Polygon p = (Polygon) n.getObject();

      if (!rel.equal(polygon, p) && rel.related(polygon, p)) {
        Edge edge = builder.buildEdge(node, n);
        builder.addEdge(edge);
        builder.addEdge(edge);
      }
    }
  }
}

代码示例来源:origin: locationtech/jts

public List query(Envelope searchEnv)
{
 return index.query(searchEnv);
}
public void finishInserting()

代码示例来源:origin: org.geotools/gt-graph

protected Node find(Polygon polygon) {
  List close = index.query(polygon.getEnvelopeInternal());
  for (Iterator itr = close.iterator(); itr.hasNext(); ) {
    Node node = (Node) itr.next();
    Polygon p = (Polygon) node.getObject();
    if (rel.equal(polygon, p)) {
      return node;
    }
  }
  return null;
}

代码示例来源:origin: locationtech/jts

/**
 * Queries the tree and returns items which may lie in the given search envelope.
 * Precisely, the items that are returned are all items in the tree 
 * whose envelope <b>may</b> intersect the search Envelope.
 * Note that some items with non-intersecting envelopes may be returned as well;
 * the client is responsible for filtering these out.
 * In most situations there will be many items in the tree which do not
 * intersect the search envelope and which are not returned - thus
 * providing improved performance over a simple linear scan.    
 * 
 * @param searchEnv the envelope of the desired query area.
 * @return a List of items which may intersect the search envelope
 */
public List query(Envelope searchEnv)
{
 /**
  * the items that are matched are the items in quads which
  * overlap the search envelope
  */
 ArrayListVisitor visitor = new ArrayListVisitor();
 query(searchEnv, visitor);
 return visitor.getItems();
}

代码示例来源:origin: locationtech/jts

public List query(LineSegment querySeg)
 {
  Envelope env = new Envelope(querySeg.p0, querySeg.p1);

  LineSegmentVisitor visitor = new LineSegmentVisitor(querySeg);
  index.query(env, visitor);
  List itemsFound = visitor.getItems();

//    List listQueryItems = index.query(env);
//    System.out.println("visitor size = " + itemsFound.size()
//                       + "  query size = " + listQueryItems.size());
//    List itemsFound = index.query(env);

  return itemsFound;
 }
}

代码示例来源:origin: locationtech/jts

void queryTest(Envelope env)
 {
  List candidateList = q.query(env);
  List finalList = getOverlapping(candidateList, env);

  List eList = envList.query(env);
//System.out.println(finalList.size());

  if (finalList.size() != eList.size() )
   throw new RuntimeException("queries do not match");
 }

代码示例来源:origin: locationtech/jts

public static Geometry quadTreeQuery(Geometry geoms, Geometry queryEnv)
{
 Quadtree index = buildQuadtree(geoms);
 // if no query env provided query everything inserted 
 if (queryEnv == null) queryEnv = geoms;
 List result = index.query(queryEnv.getEnvelopeInternal());
 return geoms.getFactory().buildGeometry(result);
}

代码示例来源:origin: org.geotools/gt-graph

protected void relate(Node node) {
    Polygon polygon = (Polygon) node.getObject();
    List close = index.query(polygon.getEnvelopeInternal());

    for (Iterator itr = close.iterator(); itr.hasNext(); ) {
      Node n = (Node) itr.next();
      Polygon p = (Polygon) n.getObject();

      if (!rel.equal(polygon, p) && rel.related(polygon, p)) {
        Edge edge = builder.buildEdge(node, n);
        builder.addEdge(edge);
        builder.addEdge(edge);
      }
    }
  }
}

代码示例来源:origin: locationtech/jts

@SuppressWarnings("rawtypes")
 public void testNullQuery() {
  Quadtree qt = new Quadtree();
  List result1 = qt.query(null); 
  assertTrue(result1.size() == 0);
  
  qt.insert(new Envelope(0, 10, 0, 10), "some data");
  List result2 = qt.query(null); 
  assertTrue(result2.size() == 0);
}

代码示例来源:origin: orbisgis/h2gis

/**
 * Compute unique index for the coordinate
 * Index count from 0 to n
 * If the new vertex is closer than distMerge with an another vertex then it will return its index.
 * @return The index of the vertex
 */
private int getOrAppendVertex(Coordinate newCoord, Quadtree ptQuad) {
  Envelope queryEnv = new Envelope(newCoord);
  queryEnv.expandBy(epsilon);
  QuadTreeVisitor visitor = new QuadTreeVisitor(epsilon, newCoord);
  try {
    ptQuad.query(queryEnv, visitor);
  } catch (RuntimeException ex) {
    //ignore
  }
  if (visitor.getNearest() != null) {
    return visitor.getNearest().index;
  }
  // Not found then
  // Append to the list and QuadTree
  EnvelopeWithIndex ret = new EnvelopeWithIndex(triVertex.size(), newCoord);
  ptQuad.insert(queryEnv, ret);
  triVertex.add(ret);
  return ret.index;
}

代码示例来源:origin: org.jaitools/jt-vectorize

filterIter.remove();
List nbrs = spIndex.query(smallPoly.getEnvelopeInternal());
Geometry selectedNbr = null;
if (!nbrs.isEmpty()) {

代码示例来源:origin: locationtech/jts

Coordinate[] innerRingPts = innerRing.getCoordinates();
List results = quadtree.query(innerRing.getEnvelopeInternal());

相关文章

微信公众号

最新文章

更多