Geotools


Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现。

而OGC是国际标准,所以geotools将来必定会成为开源空间数据处理的主要工具,目前的大部分开源软件,如udig,geoserver等,


对空间数据的处理都是由geotools来做支撑。而其他很多的web服务,命令行工具和桌面程序都可以由geotools来实现。


geotools官方网站:


https://geotools.org/


其官网有快速开始的指南。

Geotoos简介以及quickstsrt加载shp文件并显示_java

点击Quickstart,然后选择Intellij Quickstart


 

Geotoos简介以及quickstsrt加载shp文件并显示_java_02

然后就可以按照其官方指南快速开始。


这里新建项目的方式,没有使用官方文档中的Maven的quick start。而是选择新建项目时选择SpingInitializr快速新建项目


 

然后添加最基本的web依赖


 

然后打开新建项目后的pom.xml


首先添加geotools的版本属性






    <properties>        <java.version>1.8</java.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <geotools.version>26-SNAPSHOT</geotools.version>    </properties>

这里使用的版本是26


然后在denpendencies中添加geotools相关的依赖


        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.13.1</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>

添加完依赖之后,此时Maven会提示无法下载依赖,需要再添加repository,以供Maven去下载相关依赖



    <repositories>        <repository>            <id>osgeo</id>            <name>OSGeo Release Repository</name>            <url>https://repo.osgeo.org/repository/release/</url>            <snapshots><enabled>false</enabled></snapshots>            <releases><enabled>true</enabled></releases>        </repository>        <repository>            <id>osgeo-snapshot</id>            <name>OSGeo Snapshot Repository</name>            <url>https://repo.osgeo.org/repository/snapshot/</url>            <snapshots><enabled>true</enabled></snapshots>            <releases><enabled>false</enabled></releases>        </repository>    </repositories>

完整的pom文件代码



<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.4.3</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.badao</groupId>    <artifactId>geotoolsdemo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>geotoolsdemo</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <geotools.version>26-SNAPSHOT</geotools.version>    </properties>    <repositories>        <repository>            <id>osgeo</id>            <name>OSGeo Release Repository</name>            <url>https://repo.osgeo.org/repository/release/</url>            <snapshots><enabled>false</enabled></snapshots>            <releases><enabled>true</enabled></releases>        </repository>        <repository>            <id>osgeo-snapshot</id>            <name>OSGeo Snapshot Repository</name>            <url>https://repo.osgeo.org/repository/snapshot/</url>            <snapshots><enabled>true</enabled></snapshots>            <releases><enabled>false</enabled></releases>        </repository>    </repositories>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>         <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.13.1</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>     <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build> </project>

然后就是等待Maven去下载相关依赖


下载完成后就可以在项目依赖中看到


 

然后在包下新建一个java类叫quickstart

此类的示例代码为


package com.badao.geotoolsdemo;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;public class Quickstart {    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);    }}

然后运行此类的main方法

Geotoos简介以及quickstsrt加载shp文件并显示_java_03

会弹出选择shp文件的选择框


Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。


其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件


.shp— 图形格式,用于保存元素的几何实体。

.shx— 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。

.dbf— 属性数据格式,以dBase IV的数据表格式存储每个几何形状的属性数据。


首先你要有一个shp文件,这里提供一个中国省级行政区划_shp地图数据文件:


https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15785012


注意选择的shp文件不要有中文名和中文路径

Geotoos简介以及quickstsrt加载shp文件并显示_java_04


然后点击打开

Geotoos简介以及quickstsrt加载shp文件并显示_java_05