版本
org.locationtech.jts:jts-core:1.19.0
链接: github
代码
import org.locationtech.jts.algorithm.distance.DiscreteHausdorffDistance;
import org.locationtech.jts.algorithm.distance.PointPairDistance;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.util.GeometricShapeFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pers.stu.util.GeoGebraUtil;
import java.util.Arrays;
/**
* 豪斯多夫距离计算
* 计算一个点,距离图形最远的一个点
* @author LiHan
* 2023-11-09 17:11:41
*/
public class DiscreteHausdorffDistanceUse {
private static final Logger LOGGER = LoggerFactory.getLogger(DiscreteHausdorffDistanceUse.class);
public static void main(String[] args) {
DiscreteHausdorffDistanceUse discreteHausdorffDistanceUse = new DiscreteHausdorffDistanceUse();
discreteHausdorffDistanceUse.test00();
}
public void test00() {
// 创建圆型
GeometricShapeFactory geometricShapeFactory = new GeometricShapeFactory();
geometricShapeFactory.setSize(20);
geometricShapeFactory.setNumPoints(30);
geometricShapeFactory.setBase(new Coordinate(10, 10));
geometricShapeFactory.setRotation(0);
Polygon rect = geometricShapeFactory.createEllipse();
LOGGER.info(rect.toText());
LOGGER.info(GeoGebraUtil.compare(rect));
// 创建点
GeometryFactory geometryFactory = new GeometryFactory();
Point point = geometryFactory.createPoint(new Coordinate(20, 5));
DiscreteHausdorffDistance discreteHausdorffDistance = new DiscreteHausdorffDistance(rect, point);
discreteHausdorffDistance.distance();
LOGGER.info("获取点位:{}", Arrays.toString(discreteHausdorffDistance.getCoordinates()));
// 计算豪斯多夫距离
LOGGER.info("最远距离: {}", DiscreteHausdorffDistance.distance(rect,point));
}
}
16:41:08.671 [main] INFO pers.stu.algorithm.DiscreteHausdorffDistanceUse - 获取点位:[(20.0, 5.0, NaN), (21.045284632676537, 29.945218953682733, NaN)]
16:41:08.671 [main] INFO pers.stu.algorithm.DiscreteHausdorffDistanceUse - 最远距离: 24.9671097368214