Geotools处理shape文件

这篇具有很好参考价值的文章主要介绍了Geotools处理shape文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

shape文件结构

  • filename.shp: shapes
  • filename.shx: 索引文件
  • filename.dbf: 结构化数据文件
  • filename.qix: 空间索引文件
  • filename.fix: fid索引文件
  • filename.sld: 样式文件

依赖

<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-main</artifactId>
    <version>27.2</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-shapefile</artifactId>
    <version>27.2</version>
</dependency>

创建连接

连接参数
Parameter required Description
url true .shp文件的url
namespace false FeatureType的URI
create spatial index false 是否创建空间索引,默认true
charset false 解码DBF文件的编码,默认ISO_8859_1
timezone false 解析DBF文件时间的时区
memory mapped buffer false 内存映射,默认false
cache and reuse memory maps false 使用内存映射时,缓存并重用,默认true
enable spatial index false 是否使用空间索引,默认true

代码示例

/**
 * 
 * 创建shape文件
 * 
 * */

FileDataStoreFactorySpi factory = new ShapefileDataStoreFactory();

//新建文件
File file = new File("my.shp");
//datastore
Map<String, Object> params = new HashMap<>();
params.put("url", file.toURI().toURL());
params.put("create spatial index", Boolean.TRUE);
DataStore dataStore = factory.createNewDataStore(params);


//Feature数据定义
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
//图层名
typeBuilder.setName("myLayer");
//空间坐标
typeBuilder.setCRS(CRS.decode("EPSG:4490"));
typeBuilder.add("the_geom", Point.class);
//普通属性字段
typeBuilder.add("id", String.class);
typeBuilder.length(10).add("name", String.class);//字段长度
typeBuilder.add("number",Integer.class);
typeBuilder.add("double",Double.class);
typeBuilder.add("time",Date.class);
SimpleFeatureType featureType = typeBuilder.buildFeatureType();
//创建feature定义到shape
dataStore.createSchema(featureType);

/**
 * 写数据到shape文件
 * 
 * */


//shape中feature定义
Map<String, Object> params = new HashMap<>();
params.put("url", file.toURI().toURL());
DataStore dataStore2 = DataStoreFinder.getDataStore(params);
String typeName = dataStore2.getTypeNames()[0];
SimpleFeatureSource featureSource = dataStore2.getFeatureSource(typeName);
SimpleFeatureType schema = featureSource.getSchema();

//事务处理
Transaction transaction = new DefaultTransaction("create");

if (featureSource instanceof SimpleFeatureStore) {
    SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;

    //创建一条数据 feature
    List<SimpleFeature> features = new ArrayList<>();
    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(schema);
    Point point = geometryFactory.createPoint(new Coordinate(106.69563874,29.563694210810283));
    featureBuilder.set("the_geom",point);
    featureBuilder.set("id","id1");
    featureBuilder.set("name","name1");
    featureBuilder.set("number1",100);
    featureBuilder.set("number2",66.0);
    featureBuilder.set("time",new Date());
    SimpleFeature feature = featureBuilder.buildFeature(null);
    features.add(feature);

    SimpleFeatureCollection collection = new ListFeatureCollection(schema, features);
    featureStore.setTransaction(transaction);
    try {
        //写入shape中
        featureStore.addFeatures(collection);
        transaction.commit();
    } catch (Exception e) {
        e.printStackTrace();
        transaction.rollback();
    } finally {
        transaction.close();
    }
} else {
    System.out.println("写入失败");
}


/**
 * 读取shape文件数据
 * 
 * */
DataStore dataStore3 = new ShapefileDataStore(file.toURI().toURL());

String typeName = dataStore3.getTypeNames()[0];
FeatureSource<SimpleFeatureType, SimpleFeature> source =dataStore3.getFeatureSource(typeName);
Filter filter = Filter.INCLUDE;

FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures(filter);
try (FeatureIterator<SimpleFeature> features = collection.features()) {
    //features必须关闭,否则会造成内存泄漏
    while (features.hasNext()) {
        SimpleFeature feature = features.next();
        feature.getProperties().stream().peek(e-> System.out.println(e.getName().getLocalPart() + " = " + e.getValue()));
    }
}

文章来源地址https://www.toymoban.com/news/detail-482356.html

到了这里,关于Geotools处理shape文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI绘画(sd webui)报错mat1 and mat2 shapes cannot be multiplied的处理

    问题描述 在用webui转换游戏图标的风格时,使用controlnet固定图标样式,运行报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (154x1024 and 768x320),报错说的是pytorch在进行矩阵乘法运算时,第一个矩阵的行数与第二矩阵的列数不相等,无法作乘法。 解决方法 一头雾水,查了gi

    2024年02月11日
    浏览(35)
  • geotools读取shp数据

    pom依赖 读取shp将几何要素转换为wkt

    2024年02月16日
    浏览(42)
  • Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API

    Java 是一种由 Sun Microsystems 于 1995 年首次发布的编程语言和计算平台。Java 是一种通用的、基于类的、面向对象的编程语言,旨在减少实现依赖性。它是一个应用程序开发的计算平台。Java 快速、安全、可靠,因此在笔记本电脑、数据中心、游戏机、科学超级计算机、手机等领

    2024年03月24日
    浏览(91)
  • Geotools对geojson的解析

    在 GeoTools 中,对 GeoJSON 的支持是通过一个插件来完成的,用户同样可以在 Maven 的 pom.xml 配置文件中添加下述的依赖。 有关插件导进来以后,就可以根据相关的接口对Geojson进行解析

    2024年02月09日
    浏览(52)
  • Geotools基本增删改查Feature

    通过Geotools实现对Feature的增删改查 postgis依赖 JDBCDataStore连接参数 Parameter Description dbtype Must be the string postgis host Machine name or IP address to connect to port Port number to connect to, default 5432 schema The database schema to access database The database to connect to user User name passwd Password loose bbox Flag control

    2023年04月23日
    浏览(34)
  • python:基础知识—流程控制—函数与模块—数据结构—类与GUI和Turtle—异常处理与文件,概括全书(上万字最详细版)

    这里是一张夜景,给大家放松一下。 !!无锡南长街 python是一门同时支持 面向过程 与 面向对象 的高级语言,由于开放源码的特性,具有 移植性好,可跨平台,具有丰富的第三方库 。扩展名名为 .py 。 python中常见的数字有三种类型·:整数( integer ),浮点数( float ),与

    2024年02月09日
    浏览(57)
  • UNIX基础知识:UNIX体系结构、登录、文件和目录、输入和输出、程序和进程、出错处理、用户标识、信号、时间值、系统调用和库函数

            所有的操作系统都为运行在其上的程序提供服务,比如:执行新程序、打开文件、读写文件、分配存储区、获得系统当前时间等等         从严格意义上来说,操作系统可被定义为一种软件,它控制计算机硬件资源,提供程序运行的环境。我们通常将这种软件称为

    2024年02月13日
    浏览(54)
  • Geotools-PG空间库(Crud,属性查询,空间查询)

    建立连接 经过测试,这套连接逻辑除了支持纯PG以外,也支持人大金仓,凡是套壳PG的都可以尝试一下。我这里的测试环境是Geosence创建的pg SDE,数据库选用的是人大金仓。 查询 查询所有的表格 属性查询空间查询通用 属性筛选查询 用数据库查: 用代码查: 空间筛选 如果不

    2024年01月21日
    浏览(45)
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换

    Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示: Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示_霸道流氓气质的博客-CSDN博客 在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。 比如说将EPSG:4524的坐标系转换成EPSG:2

    2023年04月25日
    浏览(37)
  • Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.805695 深圳同泰万怡酒店 22.716473 113.826391 深圳宝安中天美景华美达酒店 各种计算方式 计算方式 距离 Elasticsearch:7.12.1 4715.088099751495 自定义公式计算 4720.367727793572 org.gavaghan/geodesy 4715.085736444097 org.geotools/gt-referencing 4701.260

    2024年02月02日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包