学习GeoTools的Data模块的相关内容(上)-- (学习GIS【2】)

基于geotools+geowebcache开发GIS服务平台实现wms/wmts/mvt服务的心得 自主可控GIS服务发布平台实现 基于信创要求,项目需要开发源码自主可控的GIS服务发布平台。文章重点介绍了WMS服务的实现方式,采用开源工具Geotools作为核心组件,通过Java开发实现地理数据服务发布。关键技术点包括: 使用ShapefileDataStore加载shapefile数据源 通过SLD文件实现图层样式配置 构建MapContent对象管理地图图层 基于StreamingRenderer实现地图渲染 通过Servlet接口提供标准WMS服务 该方案实现了包括WMS在内的多种OGC标准服务, 阅读详情

 

地理信息系统中最重要的东西莫过于就是数据了,而且我接触GeoTools的本意就是利用其处理众多标准的Gis格式文件的能力。所以首先从GeoTools的Data模块着手来开始学习GeoTools。

 

 Geotools_Data

 

Data模块的定义见  http://docs.codehaus.org/display/GEOTDOC/10+Data

 

The Data module is all about hoisting data (usually in the form of features) off of external services, disk files etc... into your application. This is where you can finally start putting the toolkit to work.

 

 最后一句说明了这个模块的重要性:P

 

 

 

因为Data模块的类很多,但是无外乎就是处理各种GIS文件格式(Shape,mif/mid…)。下面学习Data模块主要以处理Shapefile格式相关的部分。其他格式文件类似。

 

上面这张图来自 http://docs.codehaus.org/display/GEOTDOC/10+Data

是官方网站上学习和阐述Data模块的资料列表

 

下面就这张图的顺序记录下学习Data模块的心得。

 

Geotools_Data_List.

 

主要是下面几个类概括了整个Data模块的作用,需要特别注意:

DataStore

DataAccess

FeatureSource

FeatureStore

 

04 How to Create a DataStore or DataAccess

见http://docs.codehaus.org/display/GEOTDOC/04+How+to+Create+a+DataStore+or+DataAccess

 

 

DataStore和DataAccess这两个类非常重要,要不然也不会在第一项就开始介绍了。

 

 

如果是数据是网页的话,则DataStore就是浏览器标准,各种DataStore接口实现的具体类的话就是各种类型的浏览器。通过DataStore可以访问各种数据(Shapefiles, databases tables, etc. )

 

下面是实现了DataStrore的各种“浏览器”

 

AbstractDataStore, AbstractDataStore2, AbstractFileDataStore, ArcSDEDataStore, CollectionDataStore, ContentDataStore, DB2DataStore, 

IndexedShapefileDataStore, JDBC1DataStore,JDBC2DataStore, JDBCDataStore, MemoryDataStore, PostgisDataStore, PropertyDataStore, 

ShapefileDataStore, WFS_1_0_0_DataStore, WFS_1_1_0_DataStore

 

如果我们要访问Shapefile文件格式的话,应该能猜到只要访问SahpefileDataStore就可以了:P

 

那DataAccess又是什么?

 

首先DataAccess是接口,接口的目的无非就是规范所有子类的某个能力的标准,DataAccess就是规范所有子类访问数据信息和数据元信息的标准。

 

DataStore实现了DataAccess接口,实际访问各种Gis格式数据的类又实现了DataStore接口,那么这些访问各种格式数据的具体类的访问数据信息和访问数据元信息的能力就被规范了。换个意思说,就是可以在不用细节的情况,可以通过几个简单的方法一致的访问所有数据源。

 

这里放上一个使用ShapefileDataStore的完整能运行的例子

import java.io.*;

import java.net.*;

 

import org.geotools.data.*;

import org.geotools.data.shapefile.*;

import org.opengis.feature.type.*;

 

public class UseShapefileDataStore {

  public static void main(String[] args) {

    try {

      File file = new File("C://河流//hh_rivers_alber.shp");

      URI namespace = new URI("refractions");

      boolean useMemoryMapped = true;

      DataStore shapefile = new ShapefileDataStore(file.toURI().toURL(), namespace, useMemoryMapped);

      String[] typeName = shapefile.getTypeNames(); // should be "example"

      if (typeName != null && typeName.length >= 1) {

        FeatureType schema = shapefile.getSchema(typeName[0]); // should be "refractions.example"

        System.out.println("schema" + schema.getCoordinateReferenceSystem());

        FeatureSource contents = shapefile.getFeatureSource(typeName[0]);

        int count = contents.getCount(Query.ALL);

        System.out.println("Connected to " + file + " with " + count);

      }

    }

    catch (Exception ex) {

      ex.printStackTrace();

    }

  }

}

 

 

 

 

05 DataAccess and DataStore

见http://docs.codehaus.org/display/GEOTDOC/05+DataAccess+and+DataStore

 

这里还是讲了DataAccess和DataStore,然后列举了一些最常用的方法

interface DataAccess<T extends FeatureType, F extends Feature>{

  ServiceInfo getInfo();//返回元信息(简单的元信息)

  List<Name> getNames();//返回所有数据源的名字

  T getSchema(Name name);//Schema信息的信息

  FeatureSource<T,F> getFeatureSource(Name typeName);//下面一节会讲到FeatureSource

}

 

interface DataStore extends DataAccess<SimpleFeatureType, SimpleFeature>{

  String[] getTypeNames();

  SimpleFeatureType getSchema( String typeName );

  FeatureSource<SimpleFeatureType, SimpleFeature> getFeatureSource( String typeName );

  ...

}

 

 

 

06 FeatureSource

http://docs.codehaus.org/display/GEOTDOC/06+FeatureSource

 

FeatureSource is probably the reason you came to this party; it let's you access geospatial information as Java objects.

 

这里出现了第三个非常重要的接口FeatureSource

 

FeautreSource定义了访问具体访问空间数据的标准方法,那么DataAccess中访问空间数据的能力实际上就是DataAccess具有访问FeatureSource的能力,这样它实际上也具有了访问空间数据的能力。

 

interface FeatureSource<T extends FeatureType, F extends Feature> {

  DataAccess<T, F> getDataStore()

  Envelope getBounds()

  Envelope getBounds(Query)

  int getCount(Query)

 

  FeatureCollection<T, F> getFeatures()

  FeatureCollection<T, F> getFeatures(Filter)

  FeatureCollection<T, F> getFeatures(Query)

  T getSchema()

 

  void addFeatureListener(FeatureListener)

  void removeFeatureListener(FeatureListener)

}

 

FeautreSource具有获得空间数据的边界,获得局部空间数据的边界,获得空间数据,获得过滤后的空间数据,获得查询后的空间数据。。。。的能力,具体代码见http://docs.codehaus.org/display/GEOTDOC/06+FeatureSource

 

07 FeatureStore

http://docs.codehaus.org/display/GEOTDOC/07+FeatureStore

 

FeatureStore接口具有添加,修改,删除空间数据的能力,但是首先它得具有访问空间数据的能力,访问空间数据能力是通过实现FeatureSource接口实现的

 

下面是实现了FeatureStore接口的一些具体类

AbstractFeatureLocking, AbstractFeatureStore, ArcSdeFeatureStore, ContentFeatureStore, 

DB2FeatureLocking, DB2FeatureStore, JDBCFeatureLocking, JDBCFeatureStore,PostgisFeatureLocking,

 PostgisFeatureStore, PropertyFeatureSource, ShapefileFeatureLocking, ShapefileFeatureStore, WFSFeatureStore

 

具有编辑Shapefile数据能力的类一下子就看出了,是ShapefileFeatureStore

 

添加删除修改空间数据的代码见

http://docs.codehaus.org/display/GEOTDOC/07+FeatureStore

 

(ß--------------------------------有时间在这里添加一个完整的样例)

 

 

geotools处理shapefiles package org.geotools; import java.io.File; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureIterator; import org.ge 阅读详情

相关推荐

geodatatool:用于地理数据工具的Python包

地理数据工具 用于地理数据工具的Python包 免费软件:MIT许可证 文档: : 特征 去做 学分 该程序包是使用和项目模板创建的。

geodatatool(地图资源下载工具)小文件版本发布及pyQGIS为啥慢

调用层级是:PYTHON脚本调用PYHTON各类的第三方脚本库、然后调用python自身的脚本库、然后通过解释器解释语法,然后调用PYTHON本身的C接口库、然后调用第三方的c接口,然后调用真正的GIS处理C库(如:GDAL,proj)、GIS处理C库再去调用真正的数据驱动处理数据,说的我都晕了!所以QGIS的PYTHON 程序慢不是QGIS的问题,是PYHTON程序的结构问题。而且Python的开发模式就是各种包松散的互相堆砌,也没有一个完整的官方体系审核,其实也没法有太庞大了谁会免费维护这样的体系啊!

GIS工具 990

geoTools工具包

支持对shp文件的读写操作,以便远程通过java代码实现对ArcGIS服务或图层进行操作,同时简单易用

geodatatool(地图资源下载工具)3.9

为了方便您选择数据,工具可以根据您的需要配置选中数据的颜色,透明度,样式,标注的地图效果。工具不但可以加载第三方GIS数据,还可以对数据进行颜色,透明度,样式,标注的配置!让您能够更直观的选中数据或向领导展示您下载范围及目标!工具可以对查询选中的下载设置进行保存,方便您再次下载或与别人分享自己的数据使用过程及结果!geodatatool(地图资源下载工具)3.9发布,增加了查询下载结果保存及打开、选中下载状态的配置、数据范围缩放等功能!工具提供新功能可以让您缩放到指定的数据范围。7.软件下载更新地址。

GIS工具 620

Ubuntu 22.04 实战:为WIFI6网卡Realtek RTL8852BE手动编译驱动指南

本文详细介绍了在Ubuntu 22.04系统上为Realtek RTL8852BE WIFI6网卡手动编译驱动的完整指南。从问题诊断、环境准备到源码获取、编译安装,逐步解决驱动缺失问题,并提供常见问题排查和性能优化建议,帮助用户充分发挥WIFI6网卡性能。

weixin_30808693的博客 478

EG2134驱动芯片实战:如何用TSSOP20封装搞定三相无刷电机驱动(附电路图)

本文详细介绍了EG2134驱动芯片在三相无刷电机驱动中的应用实践,包括芯片选型、电路设计和PCB布局技巧。EG2134作为一款高性能半桥驱动芯片,采用TSSOP20封装,适合紧凑型设计。文章还提供了典型应用电路图和调试指南,帮助工程师快速实现稳定可靠的电机驱动方案。

d3e4f的博客 306

geodatatool(地图资源下载工具)3.9更新20250819

其中CSV只有数据的相关文本信息,SHP带有图形范围信息和相关文本信息,可以方便您保存或汇报、交流下载数据的相关信息!这个范围数据可以用QGIS或其它GIS软件打开,方便您对数据进行配准或分析!1.可以导出选中的下载信息!2.下载锁眼卫星数据时同时生成了锁眼卫星数据的数据范围。,做了一些更新和修复!

GIS工具 595

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用 最近在Pattern Recognition投出了一个文章,纯纯属于是第一次投稿,感觉自己写了一坨屎,事实是这确实也是一坨屎,现在是投了之后在等待一个拒稿的状态。 但是还是记录一下一些流程 1. 下载模板 在出版商Elsevier的栏目里有对于稿件的结构要求,也提供了Latex模板。同时,也给作者提供了Guides, 可以仔细阅读。下面这个连接咱们可以下载到Guides以及看到一些文章的要求。 https://ww

weixin_44153180的博客 3万+

geodatatool(地图资源工具)3.8

注意:在线地图下载与背景地图显示用的是同样的源,所以在线地图是否能下载,可以先测试主地图背景地图是否能展示。如背景地图能展示,则该在线地图也能下载!如您有其它问题及需求,也可以联系我们,我们将持续维护更新该工具,以便最大程度满足您GIS应用的需求!在线地图数据源可根据需要添加,且数据下载具有缓存功能,所有在线数据无论访问还是下载。2.高德POI数据下载功能优化了POI数据类型选择功能。3.高德数据下载功能,优化了数据下载搜索算法,使数据下载更全面更准确。1.优化在线地图多线程下载及用户体验。

GIS工具 983

gnss变形监测基础(四)

监测站的数据采样率指的是监测站在单位时间内收集数据的频率,通常以赫兹(Hz)为单位。在GNSS变形监测中,数据采样率决定了监测系统能够捕捉到的变形动态变化的详细程度和时间分辨率。例如,一个采样率为1Hz的GNSS监测站意味着它每秒钟收集一次位置数据;而一个采样率为10Hz的监测站则每秒钟收集10次位置数据。较高的采样率能够提供更细致的时间序列数据,有助于分析快速变化的动态过程,如地震活动或建筑物的振动响应。然而,较高的采样率也意味着数据量更大,可能需要更多的存储空间和更强大的数据处理能力。

我的博客 1292

QT下利用FFTW实现功率谱密度分析(周期图法)

写在前面 出于项目需求,需要在QT的msvc 2015编译环境下实现功率谱密度估计。 所以这个需求很直接的关键词就是 1. C++ 2. QT 3. 傅里叶变换 4. 功率谱密度估计 但是在网上搜索了很久,没有一个非常直接的答案。所以我觉得很有必要写一篇文章来说明,在QT msvc2015 32bit环境下如何实现功率谱密度估计。 本文并没有经过严格编辑,但代码是已经可以跑通的,如...

李时珍食疗志的博客 5223

geodatatool(地图资源下载工具)3.9更新

当然有时候也想和一些爬虫类工具做法一样,下载各类PYTHON库打包一下,甚至可以打包成EXE,这样就不用自己维护底层的代码了。感觉那样会有三个比较严峻的问题,造成后期工具的无法维护,因为我做工具是长期规划!这软件维护起来缺失工作量比较大,既要维护软件基础平台的稳定,还要应付远程接口规范的变化,确实有点累人啊!你们也一样可以说其它语言的问题,这样我们才能对我们手中的工具更了解,从而在合适的场景选择合适的语言。QGIS的C++核心非常稳定,但基于PYTHON插件系统极其脆弱,动不动就出现各类问题,甚至是崩溃!

GIS工具 708

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 267

学习GeoTools的Data模块的相关内容(下)-- (学习GIS【2】)

  地理信息系统中最重要的东西莫过于就是数据了,而且我接触GeoTools的本意就是利用其处理众多标准的Gis格式文件的能力。所以首先从GeoTools的Data模块着手来开始学习GeoTools。   Data模块的定义见  http://docs.codehaus.org/display/GEOTDOC/10+Data T

飞羽飞の猪の博客 8784

设计智能化的企业并购目标筛选多维度评估模型

企业并购是企业扩张和战略调整的重要手段,其目的在于实现资源的整合、优势互补和效率提升。评估指标单一:传统评估方法主要依赖财务指标,如净利润、市场份额等,忽视了企业其他重要的非财务指标,如品牌价值、客户满意度等。主观性较强:评估过程中,往往依赖于评估人员的经验和直觉,缺乏客观性,导致评估结果可能存在偏差。评估效率低:传统的评估方法通常需要大量的人力和时间,效率较低,难以应对大规模并购项目的需求。因此,设计一种智能化的企业并购目标筛选多维度评估模型,显得尤为必要。

SuperAGI2025 1034

【OpenClaw】Edict 三省六部制部署与启动

文章摘要 本文聚焦Edict系统的本地部署与启动,提供三种安装方式:Docker快速体验、macOS/Linux原生安装和Windows生产仿真。核心目标是让用户能够独立完成系统启动和基础问题排查,确保看板、后端服务、同步脚本和网关正常运行。文章强调环境检查的重要性,并给出具体验收标准:浏览器能访问看板页面(http://127.0.0.1:7891)和接口返回JSON数据。同时提供一键启动/停止脚本和常见问题处理建议,帮助用户快速验证部署结果。配套系列教程涵盖部署启动、使用实战、二次开发和封装版本使用等内

Mr数据杨 2901

GEOTOOLS简介以及其中的小BUG

    GEOTOOLS算是一个比较成熟的GIS中间件吧。全JAVA开发,中间也出过GEOTOOLS.NET。并且有一定的OGC背景,基本上它的整个类库,都是针对OPENGIS标准的实现。但是由于其是一个开源项目,并且项目组织上稍微有点混乱,导致了入门的学习相当的困难。    GEOTOOLS是利用MAVEN进行管理的。我们在学习GEOTOOLS的时候最好的方法就是看官方网站上面的

noopyce的GIS研究 1207

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring Boot 集成 GeoTools 详解

什么是 Spring Boot?Spring Boot 是由 Pivotal 团队开发的基于 Spring 框架的快速开发工具,它通过自动配置、起步依赖等特性简化了 Java 应用的搭建和开发过程,使开发者能够专注于业务逻辑而非配置细节。什么是 GeoTools?

深耕 Java 后端与企业级软件架构设计,专注微服务、分布式系统、大模型 AI 应用架构落地。 1249

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Geotools Java API 开发gis的参考资料

Geotools Java API 开发gis的参考资料 去发现同类优质开源项目:https://gitcode.com/ Geotools 是一个开源的Java库,用于开发GIS(地理信息系统)应用程序。本仓库提供的资源文件包含了Geotools Java API的详细参考资料,涵盖了一系列包和类,是进行地理信息处理、数据访问和渲染等操作的宝贵资料。 以下参考资料包括了Geotools库中的众多...

gitblog_06764的博客 245

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

GeoTools应用-DATA

一、Geotools The Open Source Java GIS Toolkit http://geotools.org/   Geotools官方网站 http://docs.geotools.org/latest/javadocs/  Geotools API在线文档 http://docs.codehaus.org/display/GEOTDOC/Home Geotools用

忧郁王子的专栏 1万+

GeoTools 多模块依赖最佳实践:一次 OrderedAxisAuthorityFactory 初始化失败的深度复盘

本文分析了在Spring Boot 3 + JDK 17多模块项目中引入GeoTools时出现的NoClassDefFoundError问题。核心原因是多模块"散养"依赖管理导致版本分裂、SPI冲突和JTS版本混乱。解决方案是建立独立的"GIS基础设施隔离层"(gt-spatial模块),统一管理所有GeoTools和JTS依赖,其他业务模块通过该模块间接使用GIS功能。文中给出了详细的模块分层结构、依赖关系图和POM配置示例

114514的博客 496

从零到GIS开发者:GIS Programming Roadmap完整学习指南

GIS(地理信息系统)开发是融合地理空间数据与编程技术的热门领域,本指南将带你从零基础逐步成长为专业GIS开发者。通过系统化学习路径,你将掌握从GIS基础到高级编程的核心技能,开启地理信息世界的大门。 ## 为什么选择GIS开发? GIS技术已广泛应用于城市规划、环境保护、自然资源管理、交通运输等多个领域。随着空间数据获取技术的进步和应用需求的增长,具备编程能力的GIS开发者正成为行业稀缺人才

gitblog_00474的博客 655

GeoTools 遇到的坑之 cannot access org.geotools.data.FileDataStore

GeoTools 因为版本问题踩的坑

Nishkata的博客 1753

使用GeoTools把Geojson转换成Shp文件

GeoTools在Maven的镜像中可能不存在,需要在pom.xml中加入GeoTools的仓库。这里使用的Geotools的版本为。

125

GeoTools系列(1)——关于GeoTools

Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。...

kone666 2351
上一篇: 使用GeoTools读取和绘制Shapefile格式 -- (学习GIS【1】)
下一篇: 地理坐标系与投影坐标系的区别
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值