干货!使用Geotools解析shap数据实例

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文将重点介绍基于Java和Geotools来解析shap文件,并打印解析内容的过程。

文将重点介绍基于Java和Geotools来解析shap文件,并打印解析内容的过程。

环境:jdk 1.8  

        maven 3.3

第一步、pom.xml 设置

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yelang</groupId><artifactId>geotools-demo1</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><geotools.version>24.0</geotools.version></properties><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><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>${geotools.version}</version></dependency></dependencies></project>

提示:geotools依赖包在中央仓库中不存在,如果不设置私有仓库,jar会无法下载。解决办法有两种:第一种是在pom中设置私有仓库地址;第二种是在maven的setttings.xml中设置私服镜像。需要注意的是,镜像的设置mirrorOf一定不要设置*,否则无法下载依赖。推荐如下

<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

第二步、解析shap文件

packagecom.yelang;
importjava.io.File;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importorg.geotools.data.FileDataStore;
importorg.geotools.data.FileDataStoreFinder;
importorg.geotools.data.simple.SimpleFeatureCollection;
importorg.geotools.data.simple.SimpleFeatureIterator;
importorg.geotools.data.simple.SimpleFeatureSource;
importorg.junit.Test;
importorg.opengis.feature.Property;
importorg.opengis.feature.simple.SimpleFeature;
publicclassReadShapTest {
@TestpublicvoidreadShap() throwsIOException {
longstartTime=System.currentTimeMillis();
//加载文件StringfilePath="D:/cesium code/数据/矢量数据/0319点.shp";
Filefile=newFile(filePath);
if (!file.exists()) {
System.out.println("文件不存在");
return;
        }
//map记录shapefile key-value数据List<Map<String,Object>>list=newArrayList<Map<String, Object>>();
//通过store获取featurecollectionFileDataStorestore=FileDataStoreFinder.getDataStore(file);
SimpleFeatureSourcefeatureSource=store.getFeatureSource();
SimpleFeatureCollectionsimpleFeatureCollection=featureSource.getFeatures();
SimpleFeatureIteratoritertor=simpleFeatureCollection.features();
//遍历featurecollectionwhile (itertor.hasNext()){
Map<String,Object>data=newHashMap<String, Object>();
SimpleFeaturefeature=itertor.next();
Collection<Property>p=feature.getProperties();
Iterator<Property>it=p.iterator();
//遍历feature的propertieswhile(it.hasNext()) {
Propertypro=it.next();
if(null!=pro&&null!=pro.getValue()) {
Stringfield=pro.getName().toString();
Stringvalue=pro.getValue().toString();
field=field.equals("the_geom")?"wkt":field;
byte[]bytes=value.getBytes("iso8859-1");
value=newString(bytes, "gbk");
System.out.println(newString(field.getBytes("iso8859-1"),"gbk") +"=="+value);
data.put(field, value);
                }
            }
list.add(data);
        }
longendTime=System.currentTimeMillis();
System.out.println("当前程序耗时:"+(endTime-startTime)+"ms");
    }
}

第三步、查看输出结果

image.png

第四步、使用GUI工具查看结果

packagecom.yelang;
importjava.io.File;
importjava.io.IOException;
importorg.geotools.data.FileDataStore;
importorg.geotools.data.FileDataStoreFinder;
importorg.geotools.data.simple.SimpleFeatureSource;
importorg.geotools.map.FeatureLayer;
importorg.geotools.map.Layer;
importorg.geotools.map.MapContent;
importorg.geotools.styling.SLD;
importorg.geotools.styling.Style;
importorg.geotools.swing.JMapFrame;
importorg.geotools.swing.data.JFileDataStoreChooser;
publicclassReadShapGui {
publicstaticvoidmain(String[] args) throwsIOException {
// display a data store file chooser dialog for shapefilesFilefile=JFileDataStoreChooser.showOpenFile("shp", null);
if (file==null) {
return;
        }
FileDataStorestore=FileDataStoreFinder.getDataStore(file);
SimpleFeatureSourcefeatureSource=store.getFeatureSource();
// Create a map content and add our shapefile to itMapContentmap=newMapContent();
map.setTitle("Quickstart");
Stylestyle=SLD.createSimpleStyle(featureSource.getSchema());
Layerlayer=newFeatureLayer(featureSource, style);
map.addLayer(layer);
// Now display the mapJMapFrame.showMap(map);
    }
}

image.png

通过以上几步,可掌握通过geotools读取数据,并进行展示的方法。

目录
相关文章
|
17天前
|
弹性计算 缓存 应用服务中间件
阿里云服务器2核2G99元和2核4G199元实例规格性能及适用场景解析
2024年阿里云推出了两款云服务器,2核2G3M带宽40G ESSD Entry盘价格只要99元1年,2核4G5M带宽80G ESSD Entry盘价格只要199元1年,这两款云服务器的活动截止日期为2026年3月31日,活动期间新购、续费同价。那么这两款云服务器怎么样呢?可以用来做什么?本文将对这两款云服务器进行深度解析,包括配置介绍、实例规格、使用场景以及购买建议,以供选择参考。
阿里云服务器2核2G99元和2核4G199元实例规格性能及适用场景解析
|
18天前
|
JSON JavaScript 测试技术
掌握JMeter:深入解析如何提取和利用JSON数据
Apache JMeter教程展示了如何提取和使用JSON数据。创建测试计划,包括HTTP请求和JSON Extractor,设置变量前缀和JSON路径表达式来提取数据。通过Debug Sampler和View Results Tree监听器验证提取结果,然后在后续请求和断言中使用这些数据。此方法适用于复杂测试场景,提升性能和自动化测试效率。
29 0
|
20天前
|
存储 机器学习/深度学习 编解码
深度解析阿里云服务器计算型c7与计算型c8y实例区别与选择参考
在阿里云提供的众多计算型云服务器实例规格中,计算型c7和计算型c8y实例是两款备受关注的云服务器规格。主要适用于网站应用、批量计算、视频编码等各种类型和规模的企业级应用,对于初次接触阿里云服务器的新手用户来说,可能并不是很清楚他们之间的区别,因此可能不知道怎么选择。本文将从实例的架构、处理器、存储与网络能力、使用场景、指标数据、收费标准以及实时活动价格等多个维度,对计算型c7和计算型c8y实例进行深度解析,以供参考和选择。
深度解析阿里云服务器计算型c7与计算型c8y实例区别与选择参考
|
3天前
|
存储 SQL BI
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
|
4天前
|
JavaScript 前端开发 API
Vue核心指令解析:探索MVVM与数据操作之美
Vue核心指令解析:探索MVVM与数据操作之美
|
4天前
|
监控 NoSQL MongoDB
MongoDB中的TTL索引:自动过期数据的深入解析与使用方式
MongoDB中的TTL索引:自动过期数据的深入解析与使用方式
|
7天前
|
数据采集 前端开发 JavaScript
python语言通过简单爬虫实例了解文本解析与读写
python|通过一个简单爬虫实例简单了解文本解析与读写
|
17天前
|
XML 数据格式 Python
Python使用xpath对解析内容进行数据提取
在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。
|
23天前
|
存储 NoSQL 数据挖掘
深入探索MongoDB聚合操作:解析数据之美
深入探索MongoDB聚合操作:解析数据之美
|
2天前
|
前端开发 程序员 UED
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
3 0

推荐镜像

更多