JTS-通过Coordinate点截断几何Geometry

26 篇文章 3 订阅

背景

通过一堆点,线上的点或者靠近线的点,来截取线段,将线段截取成多段
在这里插入图片描述

代码片段

/**
     * 通过点截取线,点可以是线上的形状点也可以是靠近线的点
     *
     * 线 ------------------------------------------
     * 点 .        .     .      .       .           .
     *
     * 截取完的线段:
     *    .---------.-----.------.-------.-----------.
     *
     */
    public static List<Geometry> subLineUseCoordinates(Geometry lineString, Coordinate[] coordinates){

        List<LinearLocation> linearLocations = new ArrayList<>();

        LocationIndexedLine locationIndexedLine = new LocationIndexedLine(lineString);

        LinearLocation startIndex = locationIndexedLine.getStartIndex();
        LinearLocation endIndex = locationIndexedLine.getEndIndex();

        //加入线的收尾 偏移量
        linearLocations.add(startIndex);
        linearLocations.add(endIndex);

        //加入点的偏移量
        for (Coordinate coordinate : coordinates) {
            LinearLocation indexOfCoordinate = locationIndexedLine.indexOf(coordinate);
            linearLocations.add(indexOfCoordinate);
        }

        //排序
        linearLocations.sort(Comparator.comparingDouble(e-> e.getSegmentIndex()+e.getSegmentFraction()));

        List<Geometry> subGeos = new ArrayList<>();

        //截取
        for (int i= 0; i < linearLocations.size(); i++) {
            int next = i+1;
            if(next >= linearLocations.size()){
                break;
            }
            LinearLocation currentLinear = linearLocations.get(i);
            LinearLocation nextLinear = linearLocations.get(next);

            subGeos.add(locationIndexedLine.extractLine(currentLinear, nextLinear));
        }

        return subGeos;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值