geometry创建Polygon多边形时报错Invalid number of points in LinearRing (found 2 - must be 0 or >= 4)

由于网上的这个报错有点少且出bug的代码不太相同,所以我在此记录一下。

报错展示:

之前坐标数据量少,没发现什么问题,当数据量一增大,就报错了

java.lang. IllegalArgument异常:LinearRing中的点数无效(发现2 -必须为0或>= 4)

报错原因:

根据提示,当我们用GeometryFactory()去构建Polygon多边形的时候,点数points必须为0或者大于等于4,这是因为LinearRing是一个闭合的线性环,由它我们再来构建多边形Polygon,要求点数必须为0或者大于等于4才能构建,所以当点数大于0小于4的时候,无法构建出LinearRing。

解决方法:

增加判断方法:

    /**
     * 判斷 -- 是否是闭合的(Polygon)
     * @param coords
     * @return
     */
    public static boolean isClosed(Coordinate coords[]){
        /**
         * 闭合条件
         * 1.点(坐标)数组不等于空
         * 2.点(坐标)数组至少含4个元素(>=4 or >3 --  最基本的闭合多边形是---> 三角形)
         * 3.点(坐标)数组首尾元素相当(关键条件,所谓的闭合,也就是首尾点是同一个点,绕了一圈又绕回来了才称之为闭合)
         */
        return coords!=null && coords.length>3 && coords[0].equals(coords[coords.length-1]);
    }

将原来直接构建Polygon多边形的方法,从直接构建

Coordinate[] coordinates = new Coordinate[rangeArray.size()];
...
...
...(省略若干代码)
Geometry geometry = new GeometryFactory().createPolygon(coordinates);

变成(增加个判断)

Coordinate[] coordinates = new Coordinate[rangeArray.size()];
...
...
...(省略若干代码)
Geometry geometry;
GeometryFactory geometryFactory = new GeometryFactory();
if (isClosed(coordinates)){
    //如果是闭合的多边形
    geometry = geometryFactory.createPolygon(coordinates);
}else {
      if(coordinates.length==1){
          //如果坐标数组就一个元素的话,除了Point,我想不到其他Geometry
          geometry = geometryFactory.createPoint(coordinates[0]);
      }else{
          //否则的话,不闭合也不是点,那么它只能是线了--- LineString
          geometry =geometryFactory.createLineString(coordinates);
      }
}

 ok了。

参考文章:

构建Polygon多边形的时候提示 -- Invalid number of points in LinearRing (found 3 - must be 0 or >= 4)-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值