`
lucky2touch
  • 浏览: 13870 次
文章分类
社区版块
存档分类
最新评论

Geotools快速入坑教程

阅读更多

接手一个监控类项目,里面用了geotools为地理信息处理核心工具,官方文档及例子还是比较完善,但是作为快速入坑,暂时只关注几个核心问题。
官网 http://www.geotools.org/
github https://github.com/geotools/geotools
使用版本:13.x 官网介绍为13.x为development版本,12.x为stable,但是开发里面最新为14.x 个人来说一般新的工程一般都选stable,或者正在构建的版本的前一个版本,教程标注版本我认为很重要,因为有些项目版本不一样,使用的方法或者api都有相应变化。

对于监控类项目疑似的坑:看描述框架的发展描述以后抛弃UI方面的发展,专注于地理数据的各种处理转换,也就是说UI方面的参考资料会很少。
框架解决geo通用问题,也就是解决地理数据内存优化的问题,没有详细看过代码,但是机制类似按需加载,需要的时候才从文件中读取,但是对于监控类比较快速的需求,地理数据对象本来就不多,就对内存优化就没那么高了,需要一次加载到内存中进行处理。

基本用法:
数据文件的加载

File file = new File("path of .shp file");
ShapefileDataStore shapefile = new ShapefileDataStore(file.toURI().toURL());
SimpleFeatureSource featureSource = shapefile.getFeatureSource();

样式文件的加载

StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory();
File file = new File("path of .sld file");
SLDParser stylereader = new SLDParser(styleFactory, file.toURI().toURL());
Style[] stylearray = stylereader.readXML();
Style style = stylearray[0];

承载数据文件及样式文件的Layer

FeatureLayer tempLayer = new FeatureLayer(featureSource, style);

承载各个Layer的Context

MapContent context = new MapContent();
context.addLayers(tempLayer);

绘制图形的render类

StreamingRenderer renderer = new StreamingRenderer();
renderer.setMapContent(this.content);

geotools提供了一个基本的UI类但是都是在unsupported里面,也就是不支持了对于Java有Swing和SWT,由于项目基于Eclipse的RCP,所以用的SWT的类叫SwtMapPane

SwtMapPane mapPane = new SwtMapPane(mainComposite, SWT.BORDER | SWT.NO_BACKGROUND);
mapPane.setMapContent(context);   mapPane.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
StreamingRenderer renderer = new StreamingRenderer();
mapPane.setRenderer(renderer);

SwtMapPane提供了一些基本工具

mapPane.setCursorTool(new PanTool());

还有一些其他工具,主要有重置,放大,缩小。

如何旋转地图:
官网上虽然有写原理,但是不够直接,自己google了半天才找到。

CoordinateReferenceSystem currentCRS=mapPane.getMapContent()
        .getCoordinateReferenceSystem();
CoordinateReferenceSystem transformedCRS = currentCRS;
// Create the rotation transform
AffineTransform rotation = new AffineTransform();
rotation.rotate(Math.PI/36);
// Creates the math transform
MathTransform transform = ProjectiveTransform.create(rotation);
// Rotates the CRS
transformedCRS = new DefaultDerivedCRS("rotate", currentCRS, transform,
        currentCRS.getCoordinateSystem());
mapPane.getMapContent().getViewport().setCoordinateReferenceSystem(transformedCRS);

基本上还是利用CoordinateReferenceSystem,放大,缩小,平移的原理可以看提供的Tools的源代码。

坐标转换:
SwtMapPane中一看有一个WorldToScreen以及ScreenToWorld,就知道换转肯定要用这两个类,但是我捣鼓了半天发现没有获得到有用的转换,后面才发现了原因,为了不让后面的人为了这个坑,大致讲解下原理。
地理图形有各种坐标系,即使是同一个坐标系也有多种表达方法,之前从MIF文件转换为shp文件后在界面上显示的文件就有问题,后面通过udig进行了格式转换,转换为了WGS84坐标后显示才正常,由于有自定义层,我也采用了WGS84坐标,综合显示看起来一切正常,但是坐标转换的时候就出问题了,原因就是坐标系的不同。
解决原理:

mapPane.getMapContent().getCoordinateReferenceSystem()

这个获得的坐标系系统是一个通用的,具体代码没有详细看,总之如果你的数据文件中有多个坐标系,这个方法获得的是其中一个坐标系。如果你要获得屏幕到你目标坐标系的位置就需要先将屏幕坐标转换到MapContent的坐标,代码可以看提供的Tools工具的源码,然后将这个坐标与你的目标坐标系进行转换,才得到的你希望的的坐标,反之亦然。

暂时写到这,第一次写技术心得,内容带有自己的主观臆断。入坑需谨慎。

 

分享到:
评论

相关推荐

    Geotools Java API 开发gis的参考资料

    org.geotools org.geotools.arcsde org.geotools.arcsde.data org.geotools.arcsde.data.versioning org.geotools.arcsde.data.view org.geotools.arcsde.filter org.geotools.arcsde.gce org.geotools....

    geotools汉语版资料

    "MyGeoTools.mht"和"介绍.mht"可能包含了关于GeoTools的基本介绍和使用教程,便于离线阅读和保存。 4. **参考技术文档** “参考技术文档”目录下可能包含了GeoTools的官方API文档或其他技术指南,这对于深入理解...

    geotools学习(一)IntelliJ IDEA搭建快速入门示例.pdf

    ### GeoTools 学习系列(一):IntelliJ IDEA 搭建快速入门示例 #### 一、概述 GeoTools 是一个开源 Java 库,用于地理空间数据的处理和展示,支持多种地理空间数据格式。对于初学者来说,熟悉如何在开发环境中...

    GeoTools API

    org.geotools org.geotools.arcsde org.geotools.arcsde.data org.geotools.arcsde.data.view org.geotools.arcsde.filter org.geotools.arcsde.jndi org.geotools.arcsde.logging org.geotools.arcsde....

    geotools所需jar包合集

    标题"geotools所需jar包合集"表明这是一个包含GeoTools库关键组件的集合,可能包含了GeoTools的主要模块,使得开发者能够快速引入并使用该库。描述中提到的"内含4个geotools的jar包",意味着这个压缩包提供了四个...

    geotools学习指南

    GeoTools是一款功能强大的开源GIS(Geographic Information System)工具包,提供了丰富的API和插件,帮助开发者快速构建GIS应用程序。在本指南中,我们将详细介绍GeoTools的基本概念、库函数、插件、扩展模块、下载...

    geotools对wms的实现支持

    GeoTools 对 WMS 的实现支持 GeoTools 是一个遵循 OGC 规范的开源 GIS 工具包,提供了地理信息数据读写、处理、坐标转换、查询分析、格式化输出等多个方面的功能。在 GeoTools 的基础上,我们可以实现一个简单的 ...

    geoTools所需jar包

    7. **社区支持**:作为开源项目,GeoTools有一个活跃的开发者社区,提供文档、教程和论坛支持。遇到问题时,可以通过查阅官方文档或者在社区提问来寻求帮助。 8. **最佳实践**:为了保证项目的可维护性和可扩展性,...

    geotools18.1依赖jar包

    同时,GeoTools提供了丰富的API文档和示例代码,帮助开发者快速理解和使用这个库。 总的来说,GeoTools18.1是Java开发GIS应用的重要资源,无论你是构建地图服务、进行空间分析还是开发与地理空间数据相关的应用,它...

    geotools稳定版本geotools-19.4-bin.zip

    import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.map.FeatureLayer; import org.geotools.map...

    Geotools API 手册

    - 参考官方文档和教程,逐步掌握Geotools的使用。 - 实践项目,如读取和显示GIS数据,进行空间查询,实现地图交互功能等,以加深理解。 总之,Geotools API是GIS开发者的重要工具,它提供了一个强大而灵活的框架,...

    geotools中文资料,我学习时候,整理的资料,

    - **介绍.mht**:这份文件很可能提供了GeoTools的基本介绍和入门指南,帮助初学者快速了解GeoTools的用途和基本用法。 - **中文简陋的翻译**:这是对GeoTools官方文档或相关资料的中文翻译,尽管可能不够完善,但...

    geotools依赖包

    GeoTools是一个开源的Java库,专门用于处理地理空间数据。这个“geotools依赖包”包含了一组模块,用于支持各种地理信息系统(GIS)的功能,如读取、写入和操作地理空间数据。GeoTools库遵循Java Community Process ...

    geotools相关jar包

    7. 社区支持:作为一个开源项目,GeoTools有一个活跃的开发者社区,提供了许多示例代码、文档和问题解答,帮助开发者快速上手和解决遇到的问题。 在使用这个geotools-18.4压缩包时,首先需要将其解压,然后在项目中...

    geotools18.4开发离线jar包

    熟悉GeoTools的错误日志和调试工具,能帮助快速定位和解决问题。 总的来说,GeoTools 18.4离线JAR包为开发者提供了一个完整的GIS开发环境,无论你是想创建地图应用、进行空间分析还是构建GIS服务,都能从中受益。在...

    geotools依赖.rar

    《GeoTools源码构建的关键依赖解析》 GeoTools是一个开源的Java库,专门用于地理信息系统(GIS)开发,它提供了一系列API和工具,使得开发者能够处理地理数据、地图以及空间操作。在构建GeoTools源码时,由于网络...

    geotools-18.4-userguide.zip_Geotools_mile8ai

    《GeoTools 18.4 用户指南:Java地理信息系统开发的宝典》 GeoTools是开源社区中的一个强大工具,专为Java开发者提供地理信息系统(GIS)的功能支持。这个18.4版本的用户指南是Java Geotools进行可视化开发的重要...

    geotools相关jar包集合

    这个压缩包文件“geotools-18.4”包含了`geotools`库的一个特定版本,即18.4,这将对那些需要在项目中使用`geotools`功能的开发者非常有用。 `geotools`库的核心目标是实现OGC(开放地理空间联盟)标准,这些标准...

Global site tag (gtag.js) - Google Analytics