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 shapefilesFile 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 itMapContent map = new MapContent();map.setTitle("Quickstart");Style style = SLD.createSimpleStyle(featureSource.getSchema());Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);// Now display the mapJMapFrame.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文件不要有中文名和中文路徑
?
然后點擊打開
?
?
總結
以上是生活随笔為你收集整理的Geotools简介以及quickstsrt加载shp文件并显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot整合WebSocke
- 下一篇: 信息系统项目管理师-信息化与信息系统核心