java 利用geotools包对wkt格式数据进行操作

引入相关pom依赖,我这边是引用全部的。利用jar包的方式引用过来的。

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-shapefile</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-shapefile-19.2.jar</systemPath>
</dependency>
<dependency>
    <groupId>org.ejml</groupId>
    <artifactId>ejml-ddense</artifactId>
    <version>0.39</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/ejml-ddense-0.32.jar</systemPath>
</dependency>
<dependency>
    <groupId>org.ejml</groupId>
    <artifactId>ejml-core</artifactId>
    <version>0.39</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/ejml-core-0.39.jar</systemPath>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-opengis</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-opengis-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-data</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-data-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-api</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-api-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-main</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-main-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-metadata</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-metadata-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-referencing</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-referencing-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-geojson</artifactId>
    <version>19.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/gt-geojson-19.2.jar</systemPath>
</dependency>

<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/jts-1.13.jar</systemPath>
</dependency>

相关资源包可到https://download.csdn.net/download/saygood999/86539069进行下载

1、判断点是否在面内

 WKTReader2 wktReader = new WKTReader2();
 Point point = new GeometryFactory().createPoint(new Coordinate(110.00741191345466,31.08890400396027));

 Geometry geometry = wktReader.read("MULTIPOLYGON(((110.00741191345466 31.08890400396027,112.10423570721355 31.08890400396027,112.10423570721355 35.14276333856076,110.00741191345466 35.14276333856076,110.00741191345466 31.08890400396027)))");
 StringWriter writer = new StringWriter();
 System.out.println(geometry.contains(point));

如果单纯的contains其实并不能满足正确的判断。这个方法,我发现了一个问题,如果在面的最边缘上和面进行相交与一点。这个方法是返回false的。

所以就要加上另个判断 geometry.intersects(point)相交

 

System.out.println(geometry.contains(point) || geometry.intersects(point));

意思满足两者任何一个就行。

2、wkb格式数据转换成geojson

 WKTReader2 wktReader = new WKTReader2();
 
 Geometry geometry = wktReader.read("MULTIPOLYGON(((110.00741191345466 31.08890400396027,112.10423570721355 31.08890400396027,112.10423570721355 35.14276333856076,110.00741191345466 35.14276333856076,110.00741191345466 31.08890400396027)))");
 StringWriter writer = new StringWriter();

 GeometryJSON geometryJSON = new GeometryJSON();
 geometryJSON.write(geometry,writer);
 System.out.println(writer.toString());

类似还有很多的方法。比较判断面积大小,其实搞过postgis的,知道函数的。在geotools上都能找到对应的方法。postgis函数推荐看这篇postgresql gis常用函数介绍_王威振的csdn的博客-CSDN博客_postgresql st函数

geotools学习文档

org.locationtech.jts:jts-core 1.19.0 API

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在Java中引入GeoTools,可以按照以下步骤进行操作: 1. 下载GeoTools:你可以从官方网站上下载GeoTools的最新版本。下载完成后,将其解压到你想要保存的目录中。 2. 在你的Java项目中添加GeoTools:打开你的Java项目,右键单击项目名称,选择“Properties”(属性)选项。在弹出的对话框中,选择“Java Build Path”(Java构建路径)选项卡,然后单击“Add External JARs”(添加外部JAR)按钮。在文件选择器中,找到你之前下载并解压的GeoTools,选中它,然后单击“OK”按钮。 3. 配置GeoTools路径:在你的Java项目中,右键单击项目名称,选择“Properties”(属性)选项。在弹出的对话框中,选择“Run/Debug Settings”(运行/调试设置)选项卡,然后单击“New”按钮。在弹出的对话框中,输入一个名称,选择你的Java应用程序的主类,然后单击“Arguments”(参数)选项卡。在“VM arguments”(VM参数)中,输入以下内容: -Djava.library.path=/path/to/geotools/native 这里,“/path/to/geotools/native”应替换为你之前下载并解压的GeoTools中“native”文件夹的完整路径。 4. 测试GeoTools:现在,你可以在你的Java项目中使用GeoTools了。你可以尝试编写一些代码,例如使用GeoTools中提供的函数来读取地图数据,并查看是否能够成功编译和运行你的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王威振的csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值