java 使用jts-jar计算任意多边形的内点、质点(不是中心也不是重心,内点经测试都在图形内部)
先上结果图
官方api 可以自行查找需要用到的方法:
https://locationtech.github.io/jts/javadoc/index.html?org/locationtech/jts/algorithm/Centroid.html
https://locationtech.github.io/jts/javadoc/index.html?org/locationtech/jts/algorithm/
pom文件引入jar
<!-- https://mvnrepository.com/artifact/org.locationtech.jts/jts-core -->
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.16.0</version>
</dependency>
//计算内心、质心
public static Points getCenterOfGravityPoint4( List<Coordinate> CoordinateList) {
Coordinate[] coordinates = new Coordinate[CoordinateList.size()];
CoordinateList.toArray(coordinates);
GeometryFactory geometryFactory = new GeometryFactory();
//MultiPoint mpoint=geometryFactory.createMultiPointFromCoords(coordinates);//创建多点
//Point pt=mpoint.getCentroid();//得到多点的质心
//Point pt=mpoint.getInteriorPoint();//多点内心
Polygon p=geometryFactory.createPolygon(coordinates);//创建多边形
//Point pt=p.getCentroid();//多边形质心
Point pt=p.getInteriorPoint();//多边形内心
return new Points(pt.getX(),pt.getY());
}
public static void main(String[] args){
List<Coordinate> CoordinateList=new ArrayList<>();
//CoordinateList.add(new Coordinate("经度","纬度"));
CoordinateList.add(new Coordinate(120.027481492,30.4893409945));
CoordinateList.add(new Coordinate(120.058490113,30.5338655666));
CoordinateList.add(new Coordinate(120.23076023,30.4754847477));
CoordinateList.add(new Coordinate(120.079162527,30.2604610546));
CoordinateList.add(new Coordinate(119.870141451,30.3040985299));
CoordinateList.add(new Coordinate(119.944791835,30.3794266105));
CoordinateList.add(new Coordinate(120.05963858,30.3516809045));
CoordinateList.add(new Coordinate(120.11821042,30.4576666754));
CoordinateList.add(new Coordinate(120.027481492,30.4893409945));
Points pt=getCenterOfGravityPoint4(CoordinateList);
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Points {
private Long index; //点序列
private double lng; //经度
private double lat; //纬度
public Points(double lng,double lat){
this.lng=lng;
this.lat=lat;
}
}