Geo_tools—–Eclipse快速入门 显示shp地图
目录
Eclipse快速入门
欢迎Eclipse开发人员
欢迎来到Geospatial for Java。本工作手册面向那些刚接触地理空间并希望入门的Java开发人员。
我们将从设置Eclipse IDE所需的步骤开始。此工作簿也可用于NetBeans或Maven命令行。如果您对构建工具Maven感到满意,那么它是我们下载和管理jar的首选方法,但我们也会记录如何手动设置。
这些是可视化教程,可让您在学习过程中查看自己正在使用的内容。这些例子使用了Swing; 请放心,这只是为了使示例简单易用。这些会话适用于服务器端和客户端开发。
Java安装
实验室
如果您在实验室设置中关注此工作簿,则可以在DVD上找到安装程序。
我们将使用Java,所以如果你现在没有安装Java Development Kit,那么就是时候了。即使您已安装Java,也请查看可选的Java Advanced Imaging和Java Image IO部分。
-
从Oracle网站下载最新的Java Development Kit(JDK):
-
在撰写本文时,最新版本是JDK 8.为您的平台选择下载,例如:
JDK-8u66-Windows的i586.exe
适用于Windows 32位平台。
-
单击安装程序。您需要接受许可协议,选择目录等。
默认情况下,这将安装到:
C:\ Program Files \ Java \ jdk1.8.0 \
-
可选:GeoTools使用Java Advanced Imaging进行栅格支持。如果安装JAI 1.1.3,性能将得到改善:
http://www.oracle.com/technetwork/java/javase/tech/jai-142803.html
JDK和JRE安装程序都可用:
- JAI-1_1_3-lib的窗口-i586的-jdk.exe
- JAI-1_1_3-lib的窗口-i586的-jre.exe
-
可选:ImageIO用于读取和写入光栅文件。GeoTools使用ImageIO库的版本1_1:
https://docs.oracle.com/javase/6/docs/technotes/guides/imageio/index.html
JDK和JRE安装程序都可用:
- jai_imageio-1_1-LIB-Windows的i586系统,jdk.exe
- jai_imageio-1_1-LIB-Windows的i586系统,jre.exe
有关如何安装这些软件包的更多详细信息,请参阅此页面
蚀
实验室
在实验室设置中,您的教师将为您下载这些文件,并且通常已准备好将Eclipse压缩并准备好使用。
Eclipse是一种流行的集成开发环境,最常用于各种Java开发。在本教程中,我们使用最小的可用下载直接进行Java编程 – 如果您已经有Eclipse下载,请继续使用它并切换到“Java Perspective”。
-
访问Eclipse下载页面(http://www.eclipse.org/downloads/eclipse-packages/)并下载“Eclipse IDE for Java developers”。
-
Eclipse现在提供安装程序; 但是本教程的目标是您简单地提取和运行的二进制包。
-
首先创建文件夹C:\ java,以便将我们所有的Java开发保存在一个位置。
-
将下载的eclipse-java-mars-R-win32.zip文件解压缩到C:\ java目录 – 将创建文件夹C:\ java \ eclipse。
-
导航到C:\ java \ eclipse并右键单击eclipse.exe文件,然后选择Send To – > Desktop(创建快捷方式)。
-
打开eclipse.ini文件。
- 通过提供-vm参数直接使用我们的JDK
-
双击桌面快捷方式启动eclipse。
-
当你第一次启动eclipse时它会提示你一个工作区。为了让我们的java工作在一个位置你可以输入:
C:\ java的\工作区
-
在欢迎视图中,按右侧的Workbench,我们就可以开始了
M2E
Maven是Java的构建系统,非常擅长管理依赖项。GeoTools库是基于插件的,您可以选择应用程序所需的功能。虽然这在确定交付所需的内容时很有用 – 但手动管理可能会很麻烦,因此我们鼓励使用maven等工具。
在前几年,我们在使用maven时使用了命令行(gasp!)。今年我们将使用Sonyatype的M2E插件。
自Eclipse 3.7以来,默认包含M2E插件。
快速开始
对于本快速入门,我们将生成一个简单的maven项目,将其连接到GeoTools,然后显示shapefile。
本教程非常关注您的开发环境,并确保您已准备好GeoTools。我们将介绍shapefile是什么以及如何快速显示地图。
创建一个简单的Maven项目
Maven的工作原理是要求您描述项目,名称,版本号,源代码的位置,打包方式以及使用的库。根据描述,它可以找出大多数事情:如何编译代码,创建javadoc,甚至为您下载库jar。
要使用M2E插件创建一个新的maven项目:
-
菜单栏中的文件>新建>其他
-
选择Maven> Maven Project向导,然后按Next打开New Maven Project向导
-
在新的Maven项目页面默认的罚款,按下一步
-
默认的maven-archtype-quickstart很好,按Next
-
archtype使用我们提供的参数来创建项目。
- Group Id:org.geotools
- 工件ID:教程
- 版本:0.0.1-SNAPSHOT(默认)
- 包:org.geotools.tutorial
-
按Finish以创建新项目。
-
您可以看到已创建应用程序; 完成App.java和JUnit测试用例
-
打开src / main / java并选择org.geotools.tutorial.App并按工具栏中的Run按钮:
你好,世界!
-
您也可以打开src / main / test并运行org.geotools.tutorial.AppTest作为JUnit测试。
将Jars添加到您的项目中
实验室
我们要作弊以节省时间; 本地maven存储库已经填充了最新的geotool副本,允许我们使用离线模式。
要打开离线模式:
- 打开Windows‣首选项
- 选择Maven首选项页面
- 确保选中离线
一旦下载完所有内容后想要快速工作,此设置非常有用。
该pom.xml的文件是用来描述你的Maven项目的照顾和喂养; 我们将专注于您的项目所需的依赖项
下载jar时,maven使用“本地存储库”来存储jar。
平台 本地存储 Windows XP: C:\Documents andSettings\You\.m2\repository
视窗: C:\Users\You\.m2repository
Linux和Mac: ~/.m2/repository
要下载jars maven,可以使用互联网上的公共maven存储库,GeoTools等项目可以发布他们的工作。
-
pom.xml
在新项目中打开。您可以看到我们之前输入的一些信息。 -
这个编辑器允许你描述各种事物; 为了节省时间,我们将跳过冗长的解释并要求您单击pom.xml选项卡。
-
为了使用GeoTools,我们将向这个pom.xml文件添加三个东西。
-
在moduleVersion之后的顶部添加一个属性元素,定义我们想要使用的GeoTools版本。这本工作簿是为20-SNAPSHOT编写的,尽管您可能希望尝试不同的版本。
对于生产,应使用20的稳定版本进行geotools.version:
<properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <geotools.version> 20-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-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-摆动</ 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)
-
GeoTools现在需要Java 8语言级功能(例如lambda) – 你需要告诉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在下载任何罐子时遇到问题; 您可以通过选择Project‣UpdateAll Maven Dependencies再试一次 。
- 如果依赖项未自动更新,请使用Project‣Clean
快速入门申请
现在您的环境已经设置好,我们可以组合一个简单的快速入门。此示例将在屏幕上显示shapefile。
-
org.geotools.tutorial.quickstart
使用IDE 创建包。 -
使用IDE创建org.geotools.tutorial.quickstart.Quickstart类。
-
填写以下代码:
包 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 (地图); }
对于上面的例子来编译命中
Control-Shift-O
来组织导入; 它会引入以下导入: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>
-
那么maven实际上用于Quickstart应用程序的jar是什么?打开
pom.xml
并切换到依赖关系层次结构或依赖关系图标签,看看发生了什么。我们将在剩下的教程中更深入地利用一些项目。
M2Eclipse的替代品
使用M2Eclipse插件有两种选择; 您可能会发现这些更适合您组织的需求。
Maven插件
将maven放入eclipse的第一个选择是将eclipse放入maven。
maven构建工具也可以直接在命令行上运行; 并包含一个用于生成eclipse .project
和.classpath
文件的插件。
-
从http://maven.apache.org/download.html下载Maven
我们测试的最后一个版本是:Maven 3.3.3
-
将文件apache-maven-2.2.1-bin.zip解压缩到C:javaapache-maven-3.3.3
-
您需要为maven设置几个环境变量才能工作。使用 控制面板‣系统‣高级‣环境变量设置以下系统变量:
添加以下系统变量:
- JAVA_HOME =
C:\Program Files (x86)\Java\jdk1.8.0_66
- M2_HOME =
C:\java\apache-maven-3.2.3
并将以下内容添加到PATH中:
- 路径=
%JAVA_HOME%\bin;%M2_HOME%\bin
- JAVA_HOME =
-
打开命令提示符附件‣命令提示符
-
键入以下命令以确认您已正确设置:
C : \\ java > mvn - 版本
如果未找到mvn命令,请使用以下命令检查路径:
C : \\ java > echo %PATH %
-
这应该产生以下输出
-
我们现在可以从maven-archetype-quickstart生成我们的项目:
C :> cd C : \ java C :java > mvn archetype :generate - DgroupId = org 。geotools - DartifactId = 教程 - Dversion = 1.0 - 快照 - DarchetypeGroupId = 组织。阿帕奇。maven 。archetypes - DarchetypeArtifactId = maven - archetype - quickstart
-
并要求为eclipse设置我们的项目:
C :java > cd tutorial C :java \ tutorial > mvn eclipse :eclipse
-
您现在可以向Eclipse提供与“maven存储库”对话所需的背景信息(maven为您下载了30个罐子)
-
回到Eclipse
-
使用Windows‣“首选项”打开“首选项”对话框。使用左侧的树导航到Java> Build path> Classpath Variables首选项页面。
-
添加指向“本地存储库” 的M2_REPO类路径变量
平台 本地存储 Windows XP: C:\Documents andSettings\Jody\.m2\repository
视窗: C:\Users\Jody.m2\repository
Linux和Mac: ~/.m2/repository
-
我们现在可以使用File‣Import将您的新项目导入eclipse
-
从列表中选择Existing Projects into Workspace,然后按Next
-
选择您创建的项目:
C:javatutorial
-
按Finish完成导入项目
-
导航到pom.xml文件并双击打开它。
-
我们将首先定义我们希望使用的GeoTools的版本号。此工作簿是为20-SNAPSHOT编写的,尽管您可能希望尝试更新版本,或使用15-SNAPSHOT来使用每晚构建。
<properties>
<project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding>
<geotools.version> 20-SNAPSHOT </geotools.version>
</ properties>
- 以下依赖项:
<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>
- 最后从以下几个存储库下载:
<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>
-
您可能会发现剪切和粘贴到现有文件中更容易; 或 直接。
download pom.xml
使用标记获取键入错误的简单方法是使用Eclipse格式化xml文件。
-
返回命令行和maven下载所需的jar并告诉eclipse:
C : \ java \ example > mvn eclipse :eclipse
-
返回eclipse并选择项目文件夹。使用上下文菜单或按下刷新项目
F5
。如果打开引用的库,您将看到列出所需的jar。 -
使用这种运行mvn eclipse的技术:在Eclipse中进行eclipse和刷新,你可以继续学习所有的教程示例。
下载GeoTools
警告
这个过程很棘手,经常会导致丢失罐子或罐子太多的问题。GeoTools实在是太大而且太复杂,不考虑使用maven进行构建。在继续此过程之前,请重新考虑。
我们还可以从source forge下载GeoTools项目包并设置我们的项目以使用它们。请仔细按照这些步骤操作,因为并非所有GeoTools罐都可以同时使用。
-
从http://sourceforge.net/projects/geotools/files下载GeoTools二进制版本
-
我们现在要为所需的罐子做一个项目。通过将罐放入自己的项目中,可以更轻松地升级GeoTools。
选择File> New> Java Project以打开New Java Project向导
-
键入“GeoTools Download”作为项目名称,然后按“完成”。
-
选择“文件”>“导入”以打开“导入向导”
-
选择常规>存档文件,然后按下一步
-
导航到geotools-bin.zip下载并将内容导入项目。
-
GeoTools包含“EPSG”数据库的副本; 但也允许您将自己的EPSG数据库副本作为选项连接。
但是,一次只能使用一个副本,因此我们需要从库管理器中删除以下jar:
- GT-EPSG-HSQL
- GT-EPSG-预言
- GT-EPSG-的PostgreSQL
- GT-EPSG-WKT
-
GeoTools允许您使用许多不同的数据库; 但要使它们工作,您需要从制造商处下载jdbc驱动程序。
现在,从库管理器定义中删除以下插件:
- GT-的ArcSDE
- GT-ArcSDE的共用
- GT-JDBC-DB2
- GT-JDBC-预言
-
接下来,我们更新我们的java构建路径以包含剩余的jar。从菜单栏中选择“项目”>“属性”
-
选择Java Build Path属性页面; 并切换到库选项卡。
-
按Add JARs按钮并添加所有罐子
-
切换到“订购和导出”选项卡,然后按“全选”
-
我们现在可以创建一个新的Example项目来开始我们的示例。
-
在新的Example项目上使用Project> Properties打开Java Build Path页面。
-
切换到Projects选项卡并使用Add ..按钮将GeoTools Downloads添加到构建路径。
-
我们的示例项目现在可以使用所有GeoTools jar。
-
请继续阅读快速入门。
转载自:https://blog.csdn.net/qq_36178899/article/details/81482651