geotools学习(一)IntelliJ快速入门

本指南将帮助您设置IntelliJ IDE,以便使用GeoTools并遵循GeoTools教程的其余部分。

预备知识

本指南假设如下:

1.您已经安装了最新的JDK(在撰写本文时为8)。如果没有,Eclipse Quickstart提供了关于如何实现这一点的说明。

2.你已经安装了IntelliJ。本文的目标是IntelliJ CE 2016;然而,至少早在13年前的版本应该可以正常工作。最终版本也应该工作良好。IntelliJ可以从JetBrains上下载,通常在普通的操作系统上可以开箱即用。

创建一个新项目

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

1.从菜单中选择File -> New Project。在新建项目对话框中选择Maven项目,确保选择了Create from prototype,并选择org.apache.maven:maven-archetype-quickstart原型。按下一个。

geotools学习(一)IntelliJ快速入门_第1张图片
image

2.下一步会询问我们项目的基本标识信息:

    GroupId: org.geotools

    ArtifactId: tutorial

    Version: 1.0-SNAPSHOT
geotools学习(一)IntelliJ快速入门_第2张图片
image

3.点击下一步。下面的屏幕应该可以保留默认设置。就我们的目的而言,IntelliJ的绑定Maven应该没问题,除非版本小于3,在这种情况下,你应该考虑使用一个新的外部版本。

geotools学习(一)IntelliJ快速入门_第3张图片
image

4.点击下一步。给这个项目起个名字(这个名字只在IntelliJ内部使用),教程就能达到我们的目的。您可以根据需要更改项目位置,并希望保留更多的默认设置(推荐)

geotools学习(一)IntelliJ快速入门_第4张图片
image

5.点击完成,我们的新项目将被创建。IntelliJ将向我们展示我们新创建的Maven文件,并进行一个初始的Maven构建(在尝试下一步之前先完成这个构建,它应该不会花很长时间)。IntelliJ还应该询问您是否希望为Maven依赖项启用自动导入。在本教程中,它将自动检测我们对POM文件所做的更改并自动导入这些更改。

geotools学习(一)IntelliJ快速入门_第5张图片
image

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

向项目中添加jar包

pom.xml文件描述了项目的结构、配置、依赖关系和许多其他方面。我们将重点讨论项目所需的依赖项。

下载jar Maven时,如果它下载的依赖项存在,那么Maven利用“本地存储库”来存储副本。

geotools学习(一)IntelliJ快速入门_第6张图片
image.png

Maven从internet上的公共存储库下载jar, GeoTools等项目在internet上发布其工作。

1.在项目的根目录下打开pom.xml文件。您可以看到我们之前通过向导输入的一些信息。

2.我们将向这个文件添加三样东西。首先,在模块转换后的文件顶部,我们想要添加一个属性元素来定义我们想要使用的地理工具的版本。虽然您可能希望尝试不同的版本,但这本工作簿是为23-SNAPSHOT编写的。

对于产品来说,23的稳定版本应该用于geotools.version:


        UTF-8
        23-SNAPSHOT
 

3.添加一个geotools的gt-main和gt-swing的jar包依赖,用上面定义的geotools.version代替版本号

 
        
            junit
            junit
            4.11
            test
        
        
            org.geotools
            gt-shapefile
            ${geotools.version}
        
        
            org.geotools
            gt-swing
            ${geotools.version}
        
    

4.最后,我们需要列出maven可以从其中下载GeoTools和其他所需jar的外部存储库。

 
        
            maven2-repository.dev.java.net
            Java.net repository
            http://download.java.net/maven/2
        
        
            osgeo
            Open Source Geospatial Foundation Repository
            http://download.osgeo.org/webdav/geotools/
        
        
          
            true
          
          boundless
          Boundless Maven Repository
          http://repo.boundlessgeo.com/main
        
    

5.如果希望使用Java 8语言级别的特性(例如lambdas),需要告诉Maven使用1.8源代码级别


        
            
                true
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                
            
        
    

6.为了简单 ,你可以在pom.xml 下载文件

你或许会发现剪切粘贴会比写简单的多

注意

  1.如果Maven由于某些原因没有自动下载依赖项(可能关闭了自动导入),
        您可以通过右键单击项目并选择Maven -> Reimport来手动下载依赖项。
  2.如果您想为您的依赖项下载Javadoc,您可以再次转到Maven上下文菜单并选择download Documentation

快速入门应用程序

现在我们的环境已经设置好了,我们可以创建一个简单的快速启动。本例将在屏幕上显示一个shapefile。
1.让我们在org.geotools.tutorial.quickstart包中创建一个名为Quickstart的类。IntelliJ可以一次性为我们创建包和类;右键点击 org.geootools包在项目面板和上下文菜单中选择新的-> Java类。


geotools学习(一)IntelliJ快速入门_第7张图片
image.png

geotools学习(一)IntelliJ快速入门_第8张图片
image.png

2.加入下面的代码

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2019, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 */

package 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;

/**
 * Prompts the user for a shapefile and displays the contents on the screen in a map frame.
 *
 * 

This is the GeoTools Quickstart application used in documentationa and tutorials. * */ public class Quickstart { /** * GeoTools Quickstart demo application. Prompts the user for a shapefile and displays its * contents on the screen in a map frame */ public static void main(String[] args) throws Exception { // display a data store file chooser dialog for shapefiles File file = JFileDataStoreChooser.showOpenFile("shp", null); if (file == null) { return; } FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource(); // Create a map content and add our shapefile to it MapContent map = new MapContent(); map.setTitle("Quickstart"); Style style = SLD.createSimpleStyle(featureSource.getSchema()); Layer layer = new FeatureLayer(featureSource, style); map.addLayer(layer); // Now display the map JMapFrame.showMap(map); } }

1.我们需要下载一些示例数据来使用。http://www.naturalearthdata.com/项目是一个由北美制图信 息协会支持的伟大项目。到下面的链接下载一些文化载体。你可以使用顶部的“Download all 50m cultural themes”。
1:50m文化载体
请将上述数据解压到您可以轻松找到的位置,如桌面。
1:50m Cultural Vectors
解压到一个容易找到的地方
2.运行应用程序以打开文件选择器。从示例数据集中选择一个shapefile

geotools学习(一)IntelliJ快速入门_第9张图片
image.png

3.应用程序将连接到您的shapefile,生成一个地图,并显示shapefile
geotools学习(一)IntelliJ快速入门_第10张图片
image.png

关于代码示例,有几点需要注意:

    1.shapefile不会加载到内存中——而是在每次需要时从磁盘读取它,这种方法允许您处理比可用内存大的数据集。
    2.我们在这里使用的是一种非常基本的显示样式,它只显示功能概述。在下面的示例中,我们将看到如何指定更复杂的样式

尝试的东西

    1.尝试不同的样本数据集
    2.您可以放大、缩小和显示整个范围,并使用select工具检查样本国家中的各个国家。shp文件
    3.下载你能找到的最大的shapefile,看看它能多快被渲染。您应该会发现,
      在第一次生成空间索引时需要一些时间。之后的表现应该很好,当放大时。
    4.一般来讲,不会讲shapefile加载到内存中,而是放在磁盘中创建控件索引,按需加载

如果你想要求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 shapefiles File file = JFileDataStoreChooser.showOpenFile("shp", null); if (file == null) { return; } FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource(); SimpleFeatureSource cachedSource = DataUtilities.source( new SpatialIndexFeatureCollection(featureSource.getFeatures())); // Create a map content and add our shapefile to it MapContent map = new MapContent(); map.setTitle("Using cached features"); Style style = SLD.createSimpleStyle(featureSource.getSchema()); Layer layer = new FeatureLayer(cachedSource, style); map.addLayer(layer); // Now display the map JMapFrame.showMap(map); }

这段代码最初无法编译,因为我们缺少一个导入。IntelliJ应该立即提示导入丢失的类。按Alt-Enter(在OS X上的^-Enter)打开一个对话框来导入缺少的类。

使用FileDataStoreFinder可以轻松地处理文件。另一种方法是使用连接参数映射。这种技术为我们提供了对如何使用shapefile的更多控制,并允许我们连接到数据库和web功能服务器。
File file = JFileDataStoreChooser.showOpenFile("shp", null);

        Map 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学习(一)IntelliJ快速入门)