干货!使用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读取数据,并进行展示的方法。

目录
打赏
0
0
0
0
33
分享
相关文章
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
169 4
JSON数据解析实战:从嵌套结构到结构化表格
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
数据大爆炸:解析大数据的起源及其对未来的启示
数据大爆炸:解析大数据的起源及其对未来的启示
235 15
数据大爆炸:解析大数据的起源及其对未来的启示
阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
阿里云经济型e云服务器以其高性价比、稳定可靠的性能以及灵活多样的配置选项,成为了众多企业在搭建官网时的首选。那么,阿里云经济型e云服务器究竟怎么样?它是否能够满足企业官网的搭建需求?本文将从性能表现、稳定性与可靠性、成本考虑等多个方面对阿里云经济型e云服务器进行深入剖析,以供大家参考选择。
255 37
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
62 4
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。

热门文章

最新文章

推荐镜像

更多