【JTS -- 空间数据处理】--计算两个几何图形的关系

当前需求是需要为建图算法建立评价指标,比如精准率和召回率指标,这两个指标如何计算在此不细说了,其中主要用到了JTS做空间关系计算。

差分出两份OSM 文件中同一个Way节点之间的重合的Node部分,多余的部分和空缺的部分;
用到了JTS 中的 buffer 和 intersection来做

两个Way也就是两个LINESTRING ,但并不是所有Node经纬度完全相同的Linestring, 而是两条在一定阈值内重合的Linestring,所以这里通过buffer在扩大阈值的范围

buffer:

一条linestring经过buffer之后某种意义上变成一个ploygon,下面蓝色的线经过buffer之后成为了这个样子,如此就可以判断两条在一定阈值内重合的线,实质上是扩大了一条线的范围,然后再求buffer这个ploygon与另外一条linestring有无交集。
在这里插入图片描述

常见的关系:

在这里插入图片描述

Demo

计算出预测线与实际线再阈值为1的情况下重合的部分:
在这里插入图片描述

    @Test
    public void contextLoads() throws ParseException {
        // 创建g1-预测值
        Geometry g1 = new WKTReader().read("LINESTRING (0 0, 2 3, 3 2.5, 5 4, 6 3)");
        System.out.println("Geometry 1: " + g1);

        // 创建g2-实际值  
        Geometry g2 = new WKTReader().read("LINESTRING (1 1, 2 2, 3 1, 5 3, 6 2, 8 3)");
        System.out.println("Geometry 2: " + g2);

        Geometry buffer = g1.buffer(1);
        // 重合的部分
        Geometry g1_g2 = buffer.intersection(g2);
        System.out.println("G1 intersection G2: " + g1_g2);

        // g2- g1_g2
        Geometry difference_addLine = g2.difference(g1_g2);
        System.out.println("G2 difference g1_g2: " + difference_addLine);

        //计算两条线的交集
        Geometry g3 = g1.intersection(g2);
        System.out.println("G1 intersection G2: " + g3);
    }

输出结果:

Geometry 1: LINESTRING (0 0, 2 3, 3 2.5, 5 4, 6 3)
Geometry 2: LINESTRING (1 1, 2 2, 3 1, 5 3, 6 2, 8 3)
G1 intersection G2: MULTILINESTRING ((1 1, 2 2, 2.321110255092798 1.6788897449072022), (4 1.9999999999999998, 5 3, 6 2), (6 2, 6.791532493266639 2.3957662466333196))
G1 difference g1_g2: MULTILINESTRING ((0 0, 0.2390229155277314 0.3585343732915971), (2.8284271247461903 2.585786437626905, 3 2.5, 3.3431457505076203 2.7573593128807152))
G2 difference g1_g2: MULTILINESTRING ((2 2, 3 1, 5 3), (6.791532493266639 2.3957662466333196, 8 3))
G1 intersection G2: LINESTRING EMPTY
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页