geotools学习(一)IntelliJ快速入门


title: ‘geotools学习(一)IntelliJ快速入门’
date: 2021-04-29 14:08:52
tags: []
published: true
hideInList: false
feature:
isTop: false


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

geotools学习(一)IntelliJ快速入门

预备知识

本指南假设如下:

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快速入门

image

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

    GroupId: org.geotools

    ArtifactId: tutorial

    Version: 1.0-SNAPSHOT

geotools学习(一)IntelliJ快速入门

image

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

geotools学习(一)IntelliJ快速入门

image

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

geotools学习(一)IntelliJ快速入门

image

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

geotools学习(一)IntelliJ快速入门

image

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

向项目中添加jar包

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

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

geotools学习(一)IntelliJ快速入门

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

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

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

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

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <geotools.version>23-SNAPSHOT</geotools.version>
 </properties>

3.添加一个geotools的gt-main和gt-swing的jar包依赖,用上面定义的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-swing</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>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>

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>

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快速入门

geotools学习(一)IntelliJ快速入门

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.
 *
 * <p>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快速入门

3.应用程序将连接到您的shapefile,生成一个地图,并显示shapefile

geotools学习(一)IntelliJ快速入门

代码示例注意事项

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).
     *
     * <p>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<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]);

作者:MrSwilder
链接:https://www.jianshu.com/p/b18cbee5af21
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇:OpenGIS


下一篇:AWS使用JAVA从s3对象创建新文件获取错误