GeoTools 20-SNAPSHOT教程IntelliJ快速入门
目录
IntelliJ快速入门
本指南将帮助您设置IntelliJ IDE以便与GeoTools一起使用,并按照GeoTools的其他教程进行操作。
先决条件
本指南假设如下:
- 您安装了最新的JDK(在撰写本文时已经安装了8个)。如果不是,TODO Eclipse Quickstart提供了有关如何执行此操作的说明。
- 您已安装IntelliJ。本文针对IntelliJ CE 2016; 但是,以前的版本至少可以追溯到13年应该可以正常工作。终极版本也应该正常工作。IntelliJ可以从JetBrains下载,通常在常见的操作系统上开箱即用。
创建一个新项目
首先,我们将使用Maven快速入门原型创建一个新项目。
从菜单中选择File – > New Project。在New Project对话框中选择Maven项目,确保选中Create from archetype,然后选择org.apache.maven.archetypes:maven-archetype-quickstart原型。按下一步- 下一个屏幕要求我们提供项目的基本识别信息:
- GroupId:org.geotools
- ArtifactId:教程
- 版本:1.0-SNAPSHOT
点击下一步。我们应该可以使用以下屏幕保留默认值。对于我们的目的,IntelliJ捆绑的Maven应该没问题,除非版本低于3,在这种情况下你应该考虑使用新的外部版本。
点击下一步。为项目命名(此名称仅由IntelliJ在内部使用),教程应该适用于我们的目的。您可以根据需要更改项目位置,并希望将“ 更多设置”保留为默认设置(推荐)- 点击完成,我们的新项目将被创建。IntelliJ将向我们展示我们新创建的Maven文件并进行初始Maven构建(在尝试后续步骤之前完成此操作,不应该花费很长时间)。IntelliJ还应该询问您是否要 为Maven依赖项启用自动导入。让我们为了本教程的目的,它会自动检测我们对POM文件所做的更改并自动导入它们。
IntelliJ创建了一个带有简单Hello World的空App.java !以及JUnit测试用例。您可以 通过在Project Explorer中右键单击它们并从上下文菜单中选择Run来运行App或AppTest。
将罐子添加到您的项目中
实验室
如果您正在学习本教程,则可能已提供预加载的Maven存储库。我们可以使用离线模式 来确保Maven不会尝试下载任何依赖项。
要打开离线模式:
- 打开“ 设置”。在OS X上,这是IntelliJ – >首选项,在其他操作系统上,它位于文件 – >设置下
- 选择构建,执行,部署 – >构建工具 – > Maven
- 检查脱机工作选项
pom.xml文件描述了项目的结构,配置,依赖关系和许多其他方面。我们将专注于您的项目所需的依赖项。
下载jar时,Maven使用“本地存储库”来存储副本(如果它下载的依赖项)。
平台 本地存储 Windows XP: C:\Documents andSettings\You\.m2\repository 视窗: C:\Users\You\.m2repository Linux和Mac: ~/.m2/repository
Maven从互联网上的公共存储库下载jar,其中GeoTools等项目发布他们的工作。
- 在项目的根目录下打开pom.xml文件。您可以看到我们之前通过向导输入的一些信息。
- 我们要在这个文件中添加三件事。首先,在moduleVersion之后的文件顶部,我们要添加一个属性元素,用于定义我们希望使用的GeoTools版本。这本工作簿是为20-SNAPSHOT编写的,尽管您可能希望尝试不同的版本。
对于生产,应使用20的稳定版本进行geotools.version:
<properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <geotools.version> 21-SNAPSHOT </geotools.version> </ properties>
要使用每晚构建,请将geotools.version属性设置为20-SNAPSHOT。
<properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <geotools.version> 20-SNAPSHOT </geotools.version> </ properties>
- 我们将增加对GeoTools gt-main和gt-swingjar 的依赖。请注意,我们正在使用上面定义的geotools.version。
<dependencies> <dependency> <groupId> junit </ groupId> <artifactId> junit </ artifactId> <version> 4.11 </ version> <scope> test </ scope> </ dependency> <dependency> <groupId> org。 geotools </ groupId> <artifactId> gt-shapefile </ artifactId> <version> $ {geotools.version} </ version> </ dependency> <dependency> <groupId> org.geotools </ groupId> <artifactId> gt-摆动</ artifactId> <version> $ {geotools.version} </ version> </ dependency> </ dependencies>
- 最后,我们需要列出maven可以从中下载GeoTools和其他所需jar 的外部存储库。
<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>开源地理空间基金会存储库</ name> <url> http://download.osgeo.org/webdav/geotools/ </ url > </ repository> <repository> <snapshots> <enabled> true </ enabled> </ snapshots> <id>无边的</ id> <name>无边的Maven资源库</ name> <url> http://repo.boundlessgeo.com/main </ url> </ repository> </ repositories>
注意
请注意,只有在使用每晚构建时才需要上面的快照存储库(例如20-SNAPSHOT)
- 如果您想使用Java 8语言级功能(例如lambdas),您需要告诉Maven使用1.8源级别
<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>
- 为了比较,这里是完整pom.xml的下载文件。
您可能会发现切割和粘贴比键入更容易,您可以选择代码 – >重新格式化代码来修复缩进
提示:
- 如果Maven没有因某种原因自动下载依赖项(可能是自动导入已关闭),您可以通过右键单击项目并选择Maven – > Reimport来手动下载依赖项。
- 如果您想为依赖项下载Javadoc,可以再次转到Maven上下文菜单并选择 Download Documentation
快速入门申请
现在我们已经建立了环境,我们可以组建一个简单的快速入门。此示例将在屏幕上显示shapefile。
- 让我们在org.geotools.tutorial.quickstart包中创建一个名为Quickstart的类。IntelliJ可以一次为我们创建包和类; 右键单击Project面板中的org.geootools包,在上下文菜单中选择New – > Java Class。
- 填写以下代码:
包 org.geotools.tutorial.quickstart ; import java.io.File ; 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.Layer ; import org.geotools.map.MapContent ; import org.geotools.styling.SLD ; import org.geotools.styling.Style ; import org.geotools.swing.JMapFrame ; import org.geotools.swing.data.JFileDataStoreChooser ; / ** *提示用户输入shapefile并在地图框中显示屏幕上的内容。 * * <p>这是文档和教程中使用的GeoTools Quickstart应用程序。* * / public class Quickstart { / ** * GeoTools快速入门演示应用程序。提示用户输入shapefile并 在地图框中在屏幕上 显示其*内容 * / public static void main (String [] args ) throws Exception { //显示shapefile的数据存储文件选择器对话框 文件 file = JFileDataStoreChooser 。showOpenFile (“shp” , null ); if (file == null ) { return ; } FileDataStore store = FileDataStoreFinder 。getDataStore (file ); SimpleFeatureSource featureSource = 店。getFeatureSource (); //创建地图内容并将shapefile添加到其中 MapContent map = new MapContent (); 地图。setTitle (“快速入门” ); 风格 样式 = SLD 。createSimpleStyle (featureSource 。的getSchema ()); Layer layer = new FeatureLayer (featureSource , style ); 地图。addLayer (图层); //现在显示地图 JMapFrame 。showMap (地图); } }
- 我们需要下载一些样本数据才能使用。该http://www.naturalearthdata.com/项目是由北美制图信息社会支持的伟大工程。前往下面的链接并下载一些文化载体。您可以在顶部使用“下载所有50米文化主题”。
请将上述数据解压缩到您可以轻松找到的位置,例如桌面。
运行该应用程序以打开文件选择器。从示例数据集中选择shapefile。
应用程序将连接到shapefile,生成地图内容并显示shapefile。- 有关代码示例的几点注意事项:
- shapefile不会加载到内存中 – 而是每次需要时从磁盘读取它。此方法允许您处理大于可用内存的数据集。
- 我们在这里使用一种非常基本的显示样式,只显示特征轮廓。在下面的示例中,我们将了解如何指定更复杂的样式。
要尝试的事情
每个教程都包含非常详细的步骤,然后是一系列额外的问题。如果您在任何时候遇到困难,请咨询您的导师; 或注册geotools-users电子邮件列表。
以下是您尝试的其他一些挑战:
- 尝试不同的样本数据集
- 您可以放大,缩小并显示完整范围,并使用选择工具检查示例countries.shp文件中的各个国家/地区
- 下载您可以找到的最大shapefile,并查看它的渲染速度。您应该发现第一次生成空间索引需要一段时间。在放大后,表现应该非常好。
- 性能:我们知道人们选择空间库的方式之一是基于速度。根据设计,GeoTools不会将上述shapefile加载到内存中(而是每次使用空间索引绘制时将其从磁盘中流出,仅显示显示所需的内容)。
如果您想要求GeoTools在内存中缓存shapefile,请尝试以下代码:
/ ** *此方法演示如何使用基于内存的缓存来加速显示(例如, *放大和缩小时)。 * * <p>与main方法相比,只有一行,我们创建了一个 * CachingFeatureStore 实例。 * / public static void main (String [] args ) throws Exception { //显示shapefile的数据存储文件选择器对话框 File file = JFileDataStoreChooser 。showOpenFile (“shp” , null ); 如果 (file == null ) { return ; } FileDataStore store = FileDataStoreFinder 。getDataStore (file ); SimpleFeatureSource featureSource = 店。getFeatureSource (); // CachingFeatureSource已弃用作为实验(尚未生产就绪) CachingFeatureSource 缓存 = 新 CachingFeatureSource (featureSource ); //创建地图内容并将shapefile添加到其中 MapContent map = new MapContent (); 地图。setTitle (“使用缓存的功能” ); 风格 样式 = SLD 。createSimpleStyle (featureSource 。的getSchema ()); Layer layer = new FeatureLayer (缓存, 样式); 地图。addLayer (图层); //现在显示地图 JMapFrame 。showMap (地图); }
此代码最初不会编译,因为我们缺少导入。IntelliJ应立即提示导入缺少的类。按Alt-Enter(^ – 在OS X上输入)以显示一个对话框以导入缺少的类。它将引入以下导入:
import org.geotools.data.CachingFeatureSource ;注意
构建时,您可能会看到一条消息,即不推荐使用CachingFeatureSource。可以忽略它,这只是一个警告。该课程仍在测试中,但可以使用。
- 尝试并弄清楚所有不同的“侧车”文件是什么 – 以及它们的用途。样本数据集包括“shp”,“dbf”和“shx”。有多少其他侧车档?
- 高级:使用FileDataStoreFinder可以让我们轻松处理文件。另一种方法是使用连接参数的映射。这种技术使我们能够更好地控制我们如何使用shapefile,并允许我们连接到数据库和Web功能服务器。
文件 文件 = JFileDataStoreChooser 。showOpenFile (“shp” , null ); Map < String , Object > params = new HashMap <>(); 参数。把(“URL” , 文件。toURI ()的toURL ()); 参数。put (“创建空间索引” , false ); 参数。put (“内存映射缓冲区” , false ); 参数。put (“charset” , “ISO-8859-1” ); DataStore store = DataStoreFinder 。getDataStore (params ); SimpleFeatureSource featureSource = 店。getFeatureSource (商店。getTypeNames ()[ 0 ]);
- 重要提示:GeoTools是一个活跃的开源项目 – 您可以通过更改pom.xml文件以使用“SNAPSHOT”版本快速使用maven来尝试最新的每晚构建。
在撰写本文时,20-SNAPSHOT正在积极开发中。
<properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <geotools.version> 20-SNAPSHOT </geotools.version> </ properties>
您还需要更改pom.xml文件以包含以下快照存储库:
<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>开源地理空间基金会存储库</ name> <url> http://download.osgeo.org/webdav/geotools/ </ url > </ repository> <repository> <snapshots> <enabled> true </ enabled> </ snapshots> <id>无边的</ id> <name>无边的Maven资源库</ 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>