GeoTools介紹、環境安裝、讀取shp文件並顯示

GeoTools是一個開放源代碼(LGPL)Java代碼庫,它提供了符合標準的方法來處理地理空間數據,例如實現地理信息系統(GIS)。GeoTools庫實現了開放地理空間聯盟(OGC)規範。html

  • Geotools主要提供各類GIS算法,實現各類數據格式的讀寫和顯示。
  • 在顯示方面要差一些,只是用Swing實現了地圖的簡單查看和操做。
  • 用戶能夠根據Geotools提供的算法本身實現地圖的可視化。OpenJump和udig就是基於Geotools的。
  • 目前的大部分開源軟件,如udig,geoserver等,對空間數據的處理都是由geotools來作支撐。
  • web服務,命令行工具和桌面程序均可以由geotools來實現。
  • 是構建在OGC標準之上的,是OGC思想的一種實現。而OGC是國際標準,因此geotools未來一定會成爲開源空間數據處理的主要工具,
  • Geotools用到的兩個較重要的開源GIS工具包是JTS和GeoAPI。前者主要是實現各類GIS拓撲算法,也是基於GeoAPI的。
  • Geotools如今還只是基於2D圖形的,缺少對 3D空間數據算法和顯示的支持。

Geotools支持的數據格式

  1. arcsdearcgridgeotiffgrassrastergtopo30image(JPEGTIFFGIFPNG),imageio-ext-gdalimagemoasaicimagepyramidJP2K,matlabjava

  2. 支持的數據庫「jdbc-ng」:db2h2mysqloraclepostgisspatialite,sqlservermysql

  3. 支持的矢量格式和數據訪問:app-schemaarcsdecsvdxfedigeoexcel,geojson,orgpropertyshapefilewfsgit

  4. XML綁定。基於xml的Java數據結構和綁定提供了以下格式xsd-core (xml simple types),fes,filtergml2gml3kmlowssldwcswfswmswpsvpf。對於額外的geometrysldfilter的編碼和解析能夠經過domsax程序。github

     

    支持大部分的OGC標準web

  5. OGC中的sld/SE和渲染引擎;redis

  6. OGC通常要素模型包括簡單要素支持;算法

  7. OGC中柵格信息的網格影像表達;sql

  8. OGC中WFS,WMS和額外的WPS;數據庫

  9. ISO 19107 geometry規範;

Geotools依賴的開源項目

  1. JTS:JTS是加拿大的 Vivid Solutions 作的一套開放源碼的 Java API。它提供了一套空間數據操做的核心算法,爲在兼容OGC標準的空間對象模型中進行基礎的幾何操做提供2D空間謂詞API。
  2. GeoAPI:GeoAPI爲OpenGIS規範提供一組Java接口。

環境搭建

在本文最後的github項目中有安裝介紹和遇到的坑。

第一個demo

其實就是官網的入門案例。查看本文下面的 github中的源碼也能夠。

package com.tutorial.quickstart;
 
/*
* 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.
*
*/
 
 
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;
 
import java.io.File;
import java.io.IOException;
 
/**
* 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) {
// display a data store file chooser dialog for shapefiles
File file = JFileDataStoreChooser.showOpenFile("shp", null);
if (file == null) {
return;
}
 
// "data/CHN_adm_shp/CHN_adm0.shp"
// String path = "data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp";
 
// File file = new File(path);
 
// FileDataStoreFinder
// 可使咱們輕鬆處理文件。另外一種處理方法是使用鏈接參數映射。這種技術使咱們對使用shapefile的方式有了更多的控制,
// 還使咱們能夠鏈接到數據庫和Web功能服務器。
FileDataStore store = null;
try {
store = FileDataStoreFinder.getDataStore(file);
} catch (IOException e) {
e.printStackTrace();
}
SimpleFeatureSource featureSource = null;
try {
featureSource = store.getFeatureSource();
} catch (IOException e) {
e.printStackTrace();
}
 
// 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);
}
 
 
}

關注geotools-book查看源碼和介紹。

本文參考

原文連接GIS之家小專欄

對本專欄感興趣的話,能夠關注一波

相關文章
相關標籤/搜索