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

geotools 实例 通过FactoryFinder创建实例 1.  通过FactoryFinder在文件中找到Factory的链接(.getFactory) 2.  通过Factory创建实例对象(Feature,Filters……) 3.  对实例对象进行操作 打开shapefile文件(Quickstart) public class Quickstart {       /**    阅读详情

 

 

地理信息系统中最重要的东西莫过于就是数据了,而且我接触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

 

10 Memory DataStore见

http://docs.codehaus.org/display/GEOTDOC/10+Memory+DataStore

 

Memory DataStore用来在内存中模拟一个数据源。而不是从某个输入端加载进来的(网络,Shapefile,mid/mid…)

 

例如可以创建一个数据源,加入部分需要保存的空间数据,然后整体保存到Shapefile或者mif或者其他格式。。:P

 

如果在MemoryDataStrore中添加修改删除空间数据,添加修改删除空间数据的属性,见

http://docs.codehaus.org/display/GEOTDOC/10+Memory+DataStore

 

 

 

11 Exporting to A Shapefile见http://docs.codehaus.org/display/GEOTDOC/11+Exporting+to+A+Shapefile

 

 

下面是一个完整的课运行的例子!在跑这个例子的时候出现了小插曲,就是报了一个不是初学者能解决的错误,莫名其妙的:)错误是Fail to connect to ESPG connection,我的版本是GeoTools2.5.5在网上查了下原因,也解决这个问题,在这里顺便把解决这个问题的解决方法给贴出来,在测试这些例子的时候发现GeoTools的API使用起来不是太舒服,好多类名字在不同包里有相同的名字,可能是我理解的不是太深,但是对于初学者,这个学习的阻抗还是大了点:)

package com.geoguide.snail.geotools;

 

import java.io.*;

import java.net.*;

import java.util.*;

 

import org.geotools.data.*;

import org.geotools.data.shapefile.indexed.*;

import org.geotools.feature.*;

import org.geotools.referencing.*;

import org.opengis.feature.simple.SimpleFeatureType;

import org.opengis.feature.type.FeatureType;

import org.opengis.referencing.*;

import org.opengis.referencing.crs.*;

public class NewShapefile {

 

  public static void main(String[] args) {

    FileDataStoreFactorySpi factory = new IndexedShapefileDataStoreFactory();

 

    File file = new File("C://testType.shp");

    Map map = null;

    try {

      map = Collections.singletonMap("url", file.toURI().toURL());

    }

    catch (MalformedURLException ex2) {

      ex2.printStackTrace();

    }

 

    DataStore myData = null;

    try {

      myData = factory.createNewDataStore(map);

      FeatureType featureType = null;

      try {

        featureType = DataUtilities.createType("my", "geom:Point,name:String,age:Integer,des:String");

      }

      catch (SchemaException ex) {

        ex.printStackTrace();

      }

      CoordinateReferenceSystem crs = null;

      try {

        crs = CRS.decode("EPSG:4326");

      }

      catch (NoSuchAuthorityCodeException ex3) {

        ex3.printStackTrace();

      }

      catch (FactoryException ex3) {

        ex3.printStackTrace();

      }

      if(myData instanceof IndexedShapefileDataStore){

        ((IndexedShapefileDataStore)myData).forceSchemaCRS(crs);

      }

      myData.createSchema( (SimpleFeatureType) featureType);

    }

    catch (IOException ex1) {

      ex1.printStackTrace();

    }

  }

}

 

Failed to connect the EPSG database错误

 

Shapefile Plugin

http://docs.codehaus.org/display/GEOTDOC/Shapefile+Plugin

GeoTools对 shapefile文件格式的支持是以插件的形式提供的,GeoTools的框架结构还是很有趣的,通过像TCP协议一样的分层结构来做到分离,然后在每层上提供plugin的嵌入,非常简洁优美的结构。见下图,图片来自http://docs.codehaus.org/display/GEOT/8.1+Architecture

 GeoTools的architecture patterns

 

其他对ArcSDE,WFS的支持都是类似的,在官网中没有放一个完整的操作shapefile的代码,在这里放上一个完整的demo,可以直接运行!

/*

 *    GeoTools - The Open Source Java GIS Tookit

 *    http://geotools.org

 *

 *    (C) 2006-2008, Open Source Geospatial Foundation (OSGeo)

 *

 *    This file is hereby placed into the Public Domain. This means anyone is

 *    free to do whatever they wish with this file. Use it well and enjoy!

 */

package com.geoguide.snail.geotools.demo;

 

import java.io.*;

import java.util.*;

 

import org.geotools.data.*;

import org.geotools.demo.swing.*;

import org.geotools.factory.*;

import org.geotools.feature.*;

import org.geotools.feature.collection.*;

import org.geotools.gui.swing.*;

import org.opengis.feature.Feature;

import org.opengis.feature.simple.SimpleFeature;

import org.opengis.feature.simple.SimpleFeatureType;

import com.vividsolutions.jts.geom.*;

 

/**

 * How to Read a Shapefile.

 * <p>

 * Please visit the GeoTools User Guide: <a

 * href="http://docs.codehaus.org/display/GEOTDOC/04+How+to+Read+a+Shapefile">

 *

 * @author Jody Garnett (Refractions Research)

 *

 */

public class ShapefileRead {

 

  public static void main(String[] args) throws Exception {

    System.out.println("Welcome to GeoTools:" + GeoTools.getVersion());

 

    File file;

    if (args.length == 0) {

      file = ShapeFileDialog.showOpenShapefile(null);

    }

    else {

      file = new File(args[0]);

    }

    if (file == null || !file.exists()) {

      System.exit(1);

    }

 

    Map<String, Object> connect = new HashMap<String, Object> ();

    connect.put("url", file.toURI().toURL());

 

    DataStore dataStore = DataStoreFinder.getDataStore(connect);

    String[] typeNames = dataStore.getTypeNames();

    String typeName = typeNames[0];

 

    System.out.println("Reading content " + typeName);

 

    FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = dataStore.getFeatureSource(typeName);

    FeatureCollection<SimpleFeatureType, SimpleFeature> collection = featureSource.getFeatures();

 

    class DistanceVisitor

        extends AbstractFeatureVisitor {

      int length = 0;

      double area = 0;

      public void visit(Feature feature) {

        Geometry geometry = (Geometry) feature.getDefaultGeometryProperty().getValue();

        length += geometry.getLength();

        area += geometry.getArea();

      }

    };

    DistanceVisitor distance = new DistanceVisitor();

 

    collection.accepts(distance, new ProgressWindow(null));

    System.out.println("Total length " + distance.length);

    System.out.println("Total area " + distance.area);

 

  }

}

 

 

 

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

相关推荐

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

cehui115081的专栏 4845

GEOTOOLS简介以及其中的小BUG

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

noopyce的GIS研究 1207

GeoTools:Shapefile创建

基于GeoTools创建Shapefile文件。

席木木的博客 1869

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

GeoTools 因为版本问题踩的坑

Nishkata的博客 1753

Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示

GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发。参考其quick start教程,实现集成到maven项目中并运行示例代码。

BADAO_LIUMANG_QIZHI的博客 1万+

运用AD进行stm32最小系统PCB图的绘制

运用AD进行stm32最小系统PCB图的绘制一、PCB图的绘制(1)布局(2)布线(3)覆铜(4)电气规则检查二、给PCB添加logo三、生成garber文件总结 一、PCB图的绘制 (1)布局 1.画好原理图后,新建一个PCB项目 2.在Design中选择第二项,导入器件 3.先点击右下角第一项,再点第二项导入器件 导入成功 4.导入后效果 选择紫红色方框,按电脑上的delete键把它删掉 5.在Tools选择Outside Board,自动排布器件 排布后效果如图 6.画线,确定板子范围

lucario1的博客 2149

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

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

飞羽飞の猪の博客 4541

Unity中URP下的菲涅尔效果实现(个性化修改)

在上篇文章中,我们实现了 URP 下的菲涅尔基础效果,我们在这篇文章中,对其进行自定义化修改。

楠溪泽岸的博客 2063

Spring Boot 集成 GeoTools 详解

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

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

手把手教你用UNI-MOL进行分子性质预测:从3D构象到实战结果

本文提供了使用UNI-MOL进行分子性质预测的完整实战指南。通过详细的环境搭建、3D构象生成、模型加载与微调步骤,手把手教你构建端到端的预测流水线。文章重点解析了如何利用UNI-MOL的3D分子表示学习能力,超越传统2D方法,实现对溶解度、活性等性质的更精准预测,并探讨了结果解读与模型分析方法。

weixin_29164091的博客 116

告别WSL:Ollama Windows原生部署与GPU加速实战

本文详细介绍了Ollama在Windows系统上的原生部署与GPU加速实战指南。告别WSL,通过官方原生应用直接调用NVIDIA和AMD显卡,实现更高效的本地大模型运行。文章涵盖系统准备、三步安装、模型拉取运行、GPU性能优化及高级配置,为Windows AI开发者提供一站式解决方案。

prometheus9mon的博客 532

Geotools Java API 开发gis的参考资料

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

gitblog_06764的博客 245

从科研小白到动物行为分析:我的DeepLabCut 3.0安装与初体验全记录

本文记录了从科研小白到成功安装并使用DeepLabCut 3.0进行动物行为分析的全过程。详细介绍了Anaconda环境配置、CUDA版本选择、DeepLabCut安装步骤及验证方法,并分享了初体验中的实用技巧和跨学科研究心得,为生物研究者提供了AI工具应用的实战指南。

weixin_30235225的博客 401

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万+

斯坦福大学CS224d基础1:线性代数知识

本文为斯坦福CS229的内容,也是CS224d课程的背景数学知识。概括了在机器学习和深度学习中用到的大部分线性代数知识。为了便于大家查漏补缺,这里根据英文版本整理了一个中文版本。

龙心尘 2万+

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 384

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

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

114514的博客 496

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

gitblog_00474的博客 655

老版QQ原生表情gif动态

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用GeoTools把Geojson转换成Shp文件

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

125

IMSL CNL 7.0.0 (x86-64)Crack

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

GeoTools系列(1)——关于GeoTools

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

kone666 2351

GeoTools应用:往shape文件中写GIS图层数据(5)

一、环境准备 装配GeoTools有两种方式,一种是配置maven工程的pom文件(配置方式参考官网),另一种是下载geotools的jar包到本地导入依赖。我采用的是下载jar的方式,下载路径:https://sourceforge.net/projects/geotools/files/ 二、实现功能 本章要描述的功能是如何将GIS对象数据写入shape文件。下面以Point对象为例...

Neo.Yang的专栏 1625

使用geotools和jts进行GIS数据生成

使用geotools和jts进行GIS数据生成 1,添加maven依赖,如下 org.geotools gt-geojson 17.2 org.geotools gt-data 17.2 com.vividsolutions jts 1.

dazhi_1314的专栏 1694

geotools学习

GeoTools Java 官网下载地址: http://sourceforge.net/projects/geotools/files/ 优快云资源下载地址:http://download.csdn.net/detail/mike_caoyong/4529917     geotools学习1--org.geotools.demo例子FirstProject [java

mike_caoyong的专栏 1347

GIS开发能力提升:从理论到实战的完整路径

地理信息系统(GIS)开发是结合空间思维与编程技术的交叉领域,其核心在于将地理问题转化为算法解决方案。现代GIS开发主要依赖Python和Java等技术栈,其中Python凭借GDAL、GeoPandas等强大库支持,成为数据处理和分析的首选;而Java则在WebGIS后端和高性能计算中占据优势。关键技术包括空间数据库管理(如PostGIS)、WebGIS开发(如Leaflet/OpenLayers)和三维可视化(如Cesium)。实际应用中,GIS开发广泛用于智慧城市、环境分析和时空大数据可视化等场景。通

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值