美文网首页hello world
geotools学习(一)IntelliJ快速入门

geotools学习(一)IntelliJ快速入门

作者: MrSwilder | 来源:发表于2019-10-28 10:27 被阅读0次

    本指南将帮助您设置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原型。按下一个。

    image

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

        GroupId: org.geotools
    
        ArtifactId: tutorial
    
        Version: 1.0-SNAPSHOT
    
    image

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

    image

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

    image

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

    image

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

    向项目中添加jar包

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

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

    image.png

    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类。


    image.png
    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.
     *
     * <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

    image.png
    3.应用程序将连接到您的shapefile,生成一个地图,并显示shapefile
    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).
         *
         * <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]);
    

    相关文章

      网友评论

        本文标题:geotools学习(一)IntelliJ快速入门

        本文链接:https://www.haomeiwen.com/subject/ahpvvctx.html