zoukankan      html  css  js  c++  java
  • Geotools简介以及quickstsrt加载shp文件并显示

    场景

    Geotools

    Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现。
    而OGC是国际标准,所以geotools将来必定会成为开源空间数据处理的主要工具,目前的大部分开源软件,如udig,geoserver等,

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

    geotools官方网站:

    https://geotools.org/

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

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    点击Quickstart,然后选择Intellij Quickstart

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

    这里新建项目的方式,没有使用官方文档中的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方法

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

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

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

    .shp— 图形格式,用于保存元素的几何实体。
    .shx— 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。
    .dbf— 属性数据格式,以dBase IV的数据表格式存储每个几何形状的属性数据。

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

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

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

     

    然后点击打开

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    django 自定义用户身份验证
    登录验证算法
    Scrapy
    爬虫性能相关
    Beautifulsoup模块
    selenium模块
    Cookie&Session
    Django Admin 本质
    JavaScript自执行函数和jquery扩展方法
    JS作用域与词法分析
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/14543212.html
Copyright © 2011-2022 走看看