JTS -- 空间数据处理--计算两个几何图形的关系
Posted Hepburn Yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于JTS -- 空间数据处理--计算两个几何图形的关系的主要内容,如果未能解决你的问题,请参考以下文章