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;
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值