java使用geotools导出shp文件

SHP格式是一种矢量数据格式,用于存储地理信息系统(GIS)数据。
SHP文件由一系列有序的文件组成,我们导出的shp文件包括.shp、.shx、.dbf、.prj以及.fix文件。

  1. .shp(shape)文件:存储矢量地图数据,记录了每个要素的空间位置信息。
  2. .shx(shape index)文件:是索引文件,用于存储.shp文件中要素的位置,加快数据访问速度。
  3. .dbf(dBase)文件:存储矢量数据的属性信息,例如地图上每个点的名称、类型等信息。
  4. .prj(projection)文件:是地图坐标系文件,其中包含地图投影的信息。
  5. .fix文件:fid索引文件

导出shp文件代码实现如下:

	<properties><geotools-version>28.2</geotools-version></properties><dependencies><!-- geotools--><dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools-version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>${geotools-version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-metadata</artifactId><version>${geotools-version}</version></dependency></dependencies><!-- geotools仓库--><repositories><repository><id>osgeo</id><name>Open Source Geospatial Foundation Repository</name><url>https://repo.osgeo.org/repository/release/</url></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url></repository></repositories></project>
public class ExportShp {/*** 导出shp文件** @param dataPropertiesList 属性列表{属性名:属性值}* @param fileName           导出shp文件名* @param geomType           geometry类型*/private static void exportShp(List<Map<String, Object>> dataPropertiesList, String fileName, String geomType) {//创建保存shp文件夹String saveFolder = "D:/workspace/vector/vector/exportShp/";File dir = new File(saveFolder);if (!dir.exists()) {FileUtil.mkdir(dir);}//shp文件路径String shpFileName = fileName + ".shp";String fileUrl = saveFolder + shpFileName;File file = new File(fileUrl);FeatureWriter<SimpleFeatureType, SimpleFeature> writer = null;ShapefileDataStore ds = null;try {Map<String, Serializable> params = new HashMap<>();params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);//定义图形信息和属性信息SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();//设置坐标系CoordinateReferenceSystem crs84 = CRS.decode("EPSG:4326", true);tb.setCRS(crs84);//设置文件名tb.setName(fileName);//定义导出shp文件地块属性名称String geomProperty = "the_geom";String idProperty = "ID";String nameProperty = "name";String descriptionProperty = "desc";//设置图形类型if ("Polygon".equals(geomType)) {tb.add(geomProperty, Polygon.class);} else if ("MultiPolygon".equals(geomType)) {tb.add(geomProperty, MultiPolygon.class);} else if ("Point".equals(geomType)) {tb.add(geomProperty, Point.class);} else if ("MultiPoint".equals(geomType)) {tb.add(geomProperty, MultiPoint.class);} else if ("LineString".equals(geomType)) {tb.add(geomProperty, LineString.class);} else if ("MultiLineString".equals(geomType)) {tb.add(geomProperty, MultiLineString.class);} else {throw new BizIllegalArgumentException("Geometry中没有该类型:" + geomType);}//设置对应属性类型tb.add(idProperty, String.class);tb.add(nameProperty, String.class);tb.add(descriptionProperty, String.class);//设置默认geometrytb.setDefaultGeometry(geomProperty);//创建ds.createSchema(tb.buildFeatureType());ds.setCharset(StandardCharsets.UTF_8);//设置Writerwriter = ds.getFeatureWriter(ds.getTypeNames()[0],Transaction.AUTO_COMMIT);SimpleFeature feature;for (Map<String, Object> map : dataPropertiesList) {feature = writer.next();//属性赋值  geometry要赋值wkt格式的feature.setAttribute(geomProperty, new WKTReader().read((MapUtil.getStr(map, "geometry"))));feature.setAttribute(idProperty, MapUtil.getStr(map, idProperty));feature.setAttribute(nameProperty, MapUtil.getStr(map, "名称"));String description = MapUtil.getStr(map, "描述");if (CharSequenceUtil.isNotBlank(description)) {feature.setAttribute(descriptionProperty, description);}}writer.write();} catch (IOException | FactoryException | ParseException e) {e.printStackTrace();} finally {//关闭相关流try {if (writer != null) {writer.close();}} catch (IOException e) {e.printStackTrace();}if (ds != null) {ds.dispose();}}}public static void main(String[] args) {List<Map<String,Object>> propertyList = new ArrayList<>();for (int i = 0; i < 3; i++) {Map<String,Object> map = new HashMap<>();map.put("ID", i);map.put("名称", "test" + i);map.put("描述", "测试shp导出" + i);map.put("geometry", "MULTILINESTRING ((114.0888763800001 22.549298400000055, 114.0897166200001 22.54931240800005, 114.09006708000004 22.549318250000056, 114.09104754000009 22.549328150000065))");propertyList.add(map);}exportShp(propertyList, "test", "MultiLineString");}
}

导出后文件如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174871.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-事务

什么是事务 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的特性 (ACID) 原子性(Atomicity)&#xff1a;事务是不…

外汇天眼:你的交易技术分析,为什么不赚钱?

众所周知&#xff0c;交易圈分为两个派别&#xff0c;一个是基本面分析派&#xff0c;另外一个就是技术分析派。 无论哪个派别都有成功的案例。 今天我们主要来说一下技术分析&#xff0c;市场中&#xff0c;用技术分析来做交易的人有很多&#xff0c;但并不是人人都赚钱&#…

Postgresql 常用整理

文章目录 1. 查询1.1数据库表1.1.1 获取指定数据库表1.1.2 获取指定数据库表所有列名 1.2 别名1.2.1 子表指定别名1.2.2 查询结果指定别名 1.3 临时表1.3.1 定义临时表1.3.2 使用临时表 1.4 子表1.5 分组1.5.1 group by1.5.2 partition by 1.6 分组后合并指定列字段&#xff1a…

【OpenVINO】基于 OpenVINO C# API 部署 RT-DETR 模型

基于 OpenVINO C# API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置4. 模型下载与转换5. C#代码实现5.1 模型推理类实现1. 模型推理类初始化2. 图片预测API 5.2 模型数据处理类RTDETRProcess1. 定义RTDETRProcess2. 输入数据处理方法3. 预测结果数据处理方法 6. 预测结…

Opencv!!在树莓派上安装Opencv!

一、更新树莓派系统 sudo apt-get update sudo apt-get upgrade二、安装python-opencv sudo apt-get install libopencv-dev sudo apt-get install python3-opencv三、查看是否安装成功 按以下命令顺序执行&#xff1a; python import cv2 cv2.__version__如果出现版本号&a…

Netty入门指南之NIO 粘包与半包

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题产…

酷柚易汛ERP - 其他入库单操作指南

1、应用场景 处理其他非采购类型的入库单据&#xff0c;比如赠品、获赔商品、以货抵债、借入、接受捐赠等不参与采购管理的入库类业务。 2、主要操作 2.1 新增其他入库单 打开【仓库】-【其他入库单】&#xff0c;选择商品后&#xff0c;根据存货核算方法自动计算出单位成本…

Java jdbc连接Oracle时出现ORA-28040: No matching authentication protocol报错

一、问题描述 升级了oracle数据库版本后&#xff0c;同时也更新了oracle的驱动为ojdbc8.jar&#xff0c;Java重新通过jdbc连接Oracle时出现ORA-28040: No matching authentication protocol报错。 完整报错信息 java.sql.SQLException: ORA-28040: No matching authenticati…

ARM Linux 基础学习 / 系统相关,文件系统,文件属性

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料&#xff08;如 百问网的《嵌入式Linux应用开发完全手册》&#xff0c;在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO&#xff1a;开发板资料》或《2.2 全系列Linux教程&#xf…

我的前端笔记JS

软件 js介绍 js是编程语音&#xff0c;之前学的html和css是标记语言 百度搜索mdn官网就可以 语法 输出、对话框、控制台日志、输入对话框 字面量 简单理解就是看到的内容是属于什么类型&#xff0c;例如1232&#xff0c;这个是属于数字字面量 变量 输入并保存数据 交互两个变…

2023nacos源码解读第3集——nacos-client核心功能之微服务调用和配置管理测试

文章目录 1、测试项目2、项目注意事项3、 测试核心功能3.1 测试服务调用与负载均衡3.2 测试配置监听 4、参考文档 1、测试项目 项目地址 nacos-service-a nacos-service-b 2、项目注意事项 项目初始化可以使用aliyun spring initializer ,以更方便的使用springcloud alibaba…

iceoryx(冰羚)-Service Discovery

Service Discovery Summary and problem description IPC通道&#xff08;例如消息队列或UNIX域套接字&#xff09;上的服务发现是不可执行的&#xff0c;因为传输的数据较大&#xff0c;这可能会导致多个帧的传输。如果发现大量高频服务&#xff0c;例如在启动时&#xff0c…