GeoTools 20-SNAPSHOT教程IntelliJ快速入门

 

IntelliJ快速入门

本指南将帮助您设置IntelliJ IDE以便与GeoTools一起使用,并按照GeoTools的其他教程进行操作。

先决条件

本指南假设如下:

  • 您安装了最新的JDK(在撰写本文时已经安装了8个)。如果不是,TODO Eclipse Quickstart提供了有关如何执行此操作的说明。
  • 您已安装IntelliJ。本文针对IntelliJ CE 2016; 但是,以前的版本至少可以追溯到13年应该可以正常工作。终极版本也应该正常工作。IntelliJ可以从JetBrains下载,通常在常见的操作系统上开箱即用。

创建一个新项目

首先,我们将使用Maven快速入门原型创建一个新项目。


  1. 从菜单中选择File – > New Project。在New Project对话框中选择Maven项目,确保选中Create from archetype,然后选择org.apache.maven.archetypes:maven-archetype-quickstart原型。按下一步
  2. 下一个屏幕要求我们提供项目的基本识别信息:

    • GroupId:org.geotools
    • ArtifactId:教程
    • 版本:1.0-SNAPSHOT

  3. 点击下一步。我们应该可以使用以下屏幕保留默认值。对于我们的目的,IntelliJ捆绑的Maven应该没问题,除非版本低于3,在这种情况下你应该考虑使用新的外部版本。

  4. 点击下一步。为项目命名(此名称仅由IntelliJ在内部使用),教程应该适用于我们的目的。您可以根据需要更改项目位置,并希望将“ 更多设置”保留为默认设置(推荐)
  5. 点击完成,我们的新项目将被创建。IntelliJ将向我们展示我们新创建的Maven文件并进行初始Maven构建(在尝试后续步骤之前完成此操作,不应该花费很长时间)。IntelliJ还应该询问您是否要 为Maven依赖项启用自动导入。让我们为了本教程的目的,它会自动检测我们对POM文件所做的更改并自动导入它们。

IntelliJ创建了一个带有简单Hello World的空App.java !以及JUnit测试用例。您可以 通过在Project Explorer中右键单击它们并从上下文菜单中选择Run来运行App或AppTest。

将罐子添加到您的项目中

实验室

如果您正在学习本教程,则可能已提供预加载的Maven存储库。我们可以使用离线模式 来确保Maven不会尝试下载任何依赖项。

要打开离线模式:

  1. 打开“ 设置”。在OS X上,这是IntelliJ – >首选项,在其他操作系统上,它位于文件 – >设置下
  2. 选择构建,执行,部署 – >构建工具 – > Maven
  3. 检查脱机工作选项

pom.xml文件描述了项目的结构,配置,依赖关系和许多其他方面。我们将专注于您的项目所需的依赖项。

下载jar时,Maven使用“本地存储库”来存储副本(如果它下载的依赖项)。

平台 本地存储
Windows XP: C:\Documents andSettings\You\.m2\repository
视窗: C:\Users\You\.m2repository
Linux和Mac: ~/.m2/repository

Maven从互联网上的公共存储库下载jar,其中GeoTools等项目发布他们的工作。

  1. 在项目的根目录下打开pom.xml文件。您可以看到我们之前通过向导输入的一些信息。
  2. 我们要在这个文件中添加三件事。首先,在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>
    
  3. 我们将增加对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>
    
  4. 最后,我们需要列出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)

  5. 如果您想使用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>
    
  1. 为了比较,这里是完整pom.xml的下载文件。

    您可能会发现切割和粘贴比键入更容易,您可以选择代码 – >重新格式化代码来修复缩进

提示:

  • 如果Maven没有因某种原因自动下载依赖项(可能是自动导入已关闭),您可以通过右键单击项目并选择Maven – > Reimport来手动下载依赖项。
  • 如果您想为依赖项下载Javadoc,可以再次转到Maven上下文菜单并选择 Download Documentation

快速入门申请

现在我们已经建立了环境,我们可以组建一个简单的快速入门。此示例将在屏幕上显示shapefile。

  1. 让我们在org.geotools.tutorial.quickstart包中创建一个名为Quickstart的类。IntelliJ可以一次为我们创建包和类; 右键单击Project面板中的org.geootools包,在上下文菜单中选择New – > Java Class。

  2. 填写以下代码:
包 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 (地图); 
    } 
}
  1. 我们需要下载一些样本数据才能使用。该http://www.naturalearthdata.com/项目是由北美制图信息社会支持的伟大工程。前往下面的链接并下载一些文化载体。您可以在顶部使用“下载所有50米文化主题”。

    请将上述数据解压缩到您可以轻松找到的位置,例如桌面。


  2. 运行该应用程序以打开文件选择器。从示例数据集中选择shapefile。

  3. 应用程序将连接到shapefile,生成地图内容并显示shapefile。
  4. 有关代码示例的几点注意事项:
    • 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>

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...