java使用Geotools处理地理数据

一、准备工作


Maven引入依赖

镜像配置修改

1
2
3
4
注意:国内用户一般会配置阿里云镜像,而一些镜像配置的教程往往是错误的,往往会将mirrorOf参数设置为*,这种情况下,阿里云镜像会拦截所有的 maven 请求,并向自己的镜像仓库请求数据下载,但事实上,阿里云镜像只提供对中央资源的镜像,不包含 GeoTools 的资源,因此这种情况下,maven 无法获取我们需要的 jar 包。因此,我们需要将mirrorOf参数值设置为central,同时配置 repository。

链接:https://juejin.cn/post/6955459228324593701
来源:稀土掘金

pom文件添加私有仓库地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<repositories>
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>osgeo-snapshot</id>
<name>OSGeo Snapshot Repository</name>
<url>https://repo.osgeo.org/repository/snapshot/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>

官方文档地址

二、自己做过的一些操作案例

从GeoJson导入地理数据进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//遍历每个区域
for (DcPersonArea area : dcPersonAreas) {
//创建区域的对象
FeatureJSON featureJson = new FeatureJSON(new GeometryJSON(15));
try {
//区域的feature集合
FeatureCollection featureCollection = featureJson.readFeatureCollection(area.getAreaVector());
SimpleFeatureIterator featureIterator = (SimpleFeatureIterator) featureCollection.features();
//遍历每个特征,判断每个人员是否在该区域中
while (featureIterator.hasNext()) {
Geometry defaultGeometry = (Geometry) featureIterator.next().getDefaultGeometry();
//遍历人员点位
for (DcUserGpsVo person : latestLocationVoList) {
Point point = new GeometryFactory().createPoint(new Coordinate(person.getLat().doubleValue(), person.getLon().doubleValue()));
//当有人员在范围内时
if (defaultGeometry.contains(point)) {
area.setCurrentPerson(area.getCurrentPerson() + 1);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
resultList.add(area);
}

java使用Geotools处理地理数据
http://blog.jingxiang.ltd/2023/03/30/java使用Geotools/
作者
yemangran
发布于
2023年3月30日
许可协议