/** * Compute the minimum bounding circle center of a geometry * @param geometry Any geometry * @return Minimum bounding circle center point */ public static Point getCircumCenter(Geometry geometry) { if(geometry == null || geometry.getNumPoints() == 0) { return null; } return geometry.getFactory().createPoint(new MinimumBoundingCircle(geometry).getCentre()); } }
void run(int nPts) { Coordinate[] randPts = createRandomPoints(nPts); Geometry mp = geomFact.createMultiPoint(randPts); MinimumBoundingCircle mbc = new MinimumBoundingCircle(mp); Coordinate centre = mbc.getCentre(); double radius = mbc.getRadius(); System.out.println("Testing " + nPts + " random points. Radius = " + radius); checkWithinCircle(randPts, centre, radius, 0.0001); }
private void doMinimumBoundingCircleTest(String wkt, String expectedWKT, Coordinate expectedCentre, double expectedRadius) throws ParseException { MinimumBoundingCircle mbc = new MinimumBoundingCircle(reader.read(wkt)); Coordinate[] exPts = mbc.getExtremalPoints(); Geometry actual = geometryFactory.createMultiPoint(exPts); double actualRadius = mbc.getRadius(); Coordinate actualCentre = mbc.getCentre(); //System.out.println( // " Centre = " + actualCentre // + " Radius = " + actualRadius); Geometry expected = reader.read(expectedWKT); boolean isEqual = actual.equals(expected); // need this hack because apparently equals does not work for MULTIPOINT EMPTY if (actual.isEmpty() && expected.isEmpty()) isEqual = true; if (!isEqual) { System.out.println("Actual = " + actual + ", Expected = " + expected); } assertTrue(isEqual); if (expectedCentre != null) { assertTrue(expectedCentre.distance(actualCentre) < TOLERANCE); } if (expectedRadius >= 0) { assertTrue(Math.abs(expectedRadius - actualRadius) < TOLERANCE); } }