Esri / geometry-api-java

The Esri Geometry API for Java enables developers to write custom applications for analysis of spatial data. This API is used in the Esri GIS Tools for Hadoop and other 3rd-party data processing solutions.
Apache License 2.0
694 stars 260 forks source link

Convex Hull of One Point #288

Open randallwhitman opened 2 years ago

randallwhitman commented 2 years ago

Expected: non-empty degenerate polygon. Actual: empty geometry. Is there a different way I should be calling the convex-hull operator? Relates SF4H-181.


  private static class OnePointCursor extends GeometryCursor {
    private boolean flag = true;
    OnePointCursor() {}
    public Geometry next() {
      if (flag) {
        flag = false;
        return new Point(1.2, 3.4);
      } else
        return null;
    }
    public int getGeometryID() {
      throw new UnsupportedOperationException();
    }
  }

  @Test
  public static void testOnePoint() {
    GeometryCursor geomCursor = new OnePointCursor();
    GeometryCursor convexResult = OperatorConvexHull.local().execute(geomCursor, true, null);
    Geometry result = convexResult.next();
    System.err.println(result);  // {"rings":[]}
    assertFalse(result.isEmpty());  // junit.framework.AssertionFailedError
  }

cc @JordanMLee

JordanMLee commented 2 years ago

works for me image

stolstov commented 2 years ago

A point polygon, or polygon which is degenerate to a line is not valid for many operations, so I am not sure what would you be able to use it for. The merge=false version of the operator returns point if convex hull is a point, or a line if convex hull is a line. The merging version should probably do the same.

randallwhitman commented 2 years ago

Btw, I tested with Geometry-2.2.4 ; I believe Jordan tested with something else.