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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本文将重点介绍基于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读取数据,并进行展示的方法。

目录
相关文章
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
193 2
|
2月前
|
XML 数据格式 开发者
解析数据的Beautiful Soup 模块(一)
解析数据的Beautiful Soup 模块(一)
65 0
数据解析之xpath 太6了
数据解析之xpath 太6了
|
1月前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
100 57
|
2月前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
4030 5
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
1月前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
48 2
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
109 1
|
20天前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
|
2月前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`&lt;p&gt;`、`&lt;body&gt;`和`&lt;html&gt;`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
2月前
|
数据采集 XML 前端开发
Jsoup在Java中:解析京东网站数据
Jsoup在Java中:解析京东网站数据

推荐镜像

更多