前言
最近在做一个项目,涉及到求线与面的交点问题,查阅了API,没有发现符合需求的函数,于是就动手实现了求线与面交点的功能。
注意:这里的线与面的交点仅指二维平面的交点,而非三维的
参考链接:GeoTools官方文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、maven引入GeoTools依赖
项目中用到的Geotools中的依赖都在这了,如果只是实现本文的线与面的交点功能,则不需要全部添加。
<repositories>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
</repository>
</repositories>
<properties>
<geotools.version>17.0</geotools.version>
</properties>
<dependencies>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${
geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>${
geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>${
geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>${
geotools.version}</version>
</dependency>
</dependencies>
二、方法实现
这里考虑了面状数据为Polygon和MultiPolygon的情况,其中MultiPolygon中考虑每个Polygon中包含环的情况。
1.实现思路
将面状数据(Polygon/MultiPolygon)转换为线状数据(MultiLineString),然后使用GeoTools提供的intersection方法,计算两条线的交点坐标。
2.面转换为线
面转换为线代码如下:
public static Geometry polygon2LineString(Geometry geoms) {
GeometryFactory gf = JTSFactoryFinder.getGeometryFactory