GeoTools Eclipse 快速入门04

2024-02-24 18:32

本文主要是介绍GeoTools Eclipse 快速入门04,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们继续翻译GeoTools官网教程,这节是关于稍微复杂一些的图形操作。

Things to Try


Each tutorial consists of very detailed steps followed by a series of extra questions. If you get stuck at any point please ask your instructor; or sign up to the geotools-users email list.

Here are some additional challenges for you to try:

  • Try out the different sample data sets

  • You can zoom in, zoom out and show the full extents and Use the select tool to examine individual countries in the sample countries.shp file

  • Download the largest shapefile you can find and see how quickly it can be rendered. You should find that the very first time it will take a while as a spatial index is generated. After that performance should be very good when zoomed in.

  • Performance: We know that one of the ways people select a spatial library is based on speed. By design GeoTools does not load the above shapefile into memory (instead it streams it off of disk each time it is drawn using a spatial index to only bring the content required for display).

if you would like to ask GeoTools to cache the shapefile in memory try the following code:

    /**
     * This method demonstrates using a memory-based cache to speed up the display (e.g. when
     * zooming in and out).
     * 
     * There is just one line extra compared to the main method, where we create an instance of
     * CachingFeatureStore.
     */public static void main(String[] args) throws Exception {// display a data store file chooser dialog for shapefilesFile file = JFileDataStoreChooser.showOpenFile("shp", null);if (file == null) {return;}FileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();// CachingFeatureSource is deprecated as experimental (not yet production ready)CachingFeatureSource cache = new CachingFeatureSource(featureSource);// Create a map content and add our shapefile to itMapContent map = new MapContent();map.setTitle("Using cached features");Style style = SLD.createSimpleStyle(featureSource.getSchema());Layer layer = new FeatureLayer(cache, style);map.addLayer(layer);// Now display the mapJMapFrame.showMap(map);}
For the above example to compile hit Control-Shift-O to organise imports; it will pull in the following import:

import org.geotools.data.CachingFeatureSource;

Note

When building you may see a message that CachingFeatureSource is deprecated. It’s ok to ignore it, it’s just a warning. The class is still under test but usable.

  • Try and sort out what all the different “side car” files are - and what they are for. The sample data set includes “shp”, “dbf” and “shx”. How many other side car files are there?
  • Advanced: The use of FileDataStoreFinder allows us to work easily with files. The other way to do things is with a map of connection parameters. This techniques gives us a little more control over how we work with a shapefile and also allows us to connect to databases and web feature servers.
        File file = JFileDataStoreChooser.showOpenFile("shp", null);Map<String,Object> params = new HashMap<>();params.put( "url", file.toURI().toURL() );params.put( "create spatial index", false );params.put( "memory mapped buffer", false );params.put( "charset", "ISO-8859-1" );DataStore store = DataStoreFinder.getDataStore( params );SimpleFeatureSource featureSource = store.getFeatureSource( store.getTypeNames()[0] );

  • Important: GeoTools is an active open source project - you can quickly use maven to try out the latest nightly build by changing your pom.xml file to use a “SNAPSHOT” release.
At the time of writing 17-SNAPSHOT is under active devilopment.

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- use the latest snapshot --><geotools.version>17-SNAPSHOT</geotools.version></properties>
You will also need to change your pom.xml file to include the following snapshot repository:

    <repositories><repository><id>maven2-repository.dev.java.net</id><name>Java.net repository</name><url>http://download.java.net/maven/2</url></repository><repository><id>osgeo</id><name>Open Source Geospatial Foundation Repository</name><url>http://download.osgeo.org/webdav/geotools/</url></repository><repository><snapshots><enabled>true</enabled></snapshots><id>boundless</id><name>Boundless Maven Repository</name><url>http://repo.boundlessgeo.com/main</url></repository></repositories><build><plugins><plugin><inherited>true</inherited><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
  • So what jars did maven actually use for the Quickstart application? Open up your pom.xml and switch to the dependency heirarchy or dependency graph tabs to see what is going on.

we will be making use of some of the project in greater depth in the remaining tutorials.


试着做点东西


每个教程都包含了非常详细的步骤,其后是一系列额外的问题。如果您在任何地方遇到瓶颈,请询问您的指导员或者到 geotools 的用户列表去注册。

下面有一些额外的挑战供您尝试:

  • 尝试不同的样例数据集

  • 您可以放大、缩小并对完整范围进行全图显示,还可以使用选择工具来检查示例文件countries.shp中的各个国家/地区

  • 下载您能找到的最大的shape文件来测试一下它的渲染速度。您会发现,最开始的时候它需要一段时间来创建空间索引,等之后再进行放大就好了。

  • 性能:我们知道,人们选择一种空间库要考虑的因素之一就是它的速度。GeoTools在设计的时候并没有让上面的shape图形加载到内存中(它采取的方式是:利用一个空间索引,在每次绘制图形的时候只把需要的部分从硬盘中调取出来。)

如果您想让GeoTools 将 shapefile 文件放到内存中去缓存,可以尝试如下代码:
    /**
     * This method demonstrates using a memory-based cache to speed up the display (e.g. when
     * zooming in and out).
     * 
     * There is just one line extra compared to the main method, where we create an instance of
     * CachingFeatureStore.
     */public static void main(String[] args) throws Exception {// display a data store file chooser dialog for shapefilesFile file = JFileDataStoreChooser.showOpenFile("shp", null);if (file == null) {return;}FileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource featureSource = store.getFeatureSource();// CachingFeatureSource is deprecated as experimental (not yet production ready)CachingFeatureSource cache = new CachingFeatureSource(featureSource);// Create a map content and add our shapefile to itMapContent map = new MapContent();map.setTitle("Using cached features");Style style = SLD.createSimpleStyle(featureSource.getSchema());Layer layer = new FeatureLayer(cache, style);map.addLayer(layer);// Now display the mapJMapFrame.showMap(map);}

对于上面的例子,编译命令 Control-Shift-O 来组织导入的内容;如下提到的内容就会被导入:

import org.geotools.data.CachingFeatureSource;

Note

在创建过程中,您可能会看到一个 CachingFeatureSource is deprecated (不推荐使用缓存数据源) 的警告,可以忽略它,这只是个警告而已,这个类仍在测试中,但却可以正常使用。

  • 尝试弄清楚所有的“side car”文件应该归为哪类,它们都是用来做什么的。示例数据集中包含“shp”,"dbf","shx"等文件,想想还有没其他类型的“side car”文件呢?

  • 高级:使用 文件数据存储查找器 FileDataStoreFinder 能让我们的文件操作更加简单。另一种方式是使用一个连接参数的映射。通过这种技术,我们可以更好的操控 shapefile ,也可以去连接数据库或 Web要素服务器。

        File file = JFileDataStoreChooser.showOpenFile("shp", null);Map<String,Object> params = new HashMap<>();params.put( "url", file.toURI().toURL() );params.put( "create spatial index", false );params.put( "memory mapped buffer", false );params.put( "charset", "ISO-8859-1" );DataStore store = DataStoreFinder.getDataStore( params );SimpleFeatureSource featureSource = store.getFeatureSource( store.getTypeNames()[0] );
  • 重要提示:GeoTools是一个活跃的开源项目 - 您可以使用 maven 更改 pom.xml 文件来尝试使用最新的 maven“SNAPSHOT”发行库。
截止本网页编辑的时刻,快照版本 “17-SNASHOT” 正在积极构建中。

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- use the latest snapshot --><geotools.version>17-SNAPSHOT</geotools.version></properties>
您还需要修改您的 pom.xml 文件以使其包含 快照库 snapshot repository 的内容。

    <repositories><repository><id>maven2-repository.dev.java.net</id><name>Java.net repository</name><url>http://download.java.net/maven/2</url></repository><repository><id>osgeo</id><name>Open Source Geospatial Foundation Repository</name><url>http://download.osgeo.org/webdav/geotools/</url></repository><repository><snapshots><enabled>true</enabled></snapshots><id>boundless</id><name>Boundless Maven Repository</name><url>http://repo.boundlessgeo.com/main</url></repository></repositories><build><plugins><plugin><inherited>true</inherited><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
  • 本快速入门教程的应用程序中都使用到了哪些jar包呢?打开您的 pom.xml 文件并切换到 依赖关系树 dependency heirarchy 或 依赖关系图 deendency graph tabs 来看看是怎么回事吧。

在剩下的教程中,我们将更加深入的利用一些项目来进行学习。

这篇关于GeoTools Eclipse 快速入门04的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742980

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个