GeoTools介绍、环境安装、读取shp文件并显示

GeoTools是一个开放源代码(LGPL)Java代码库,它提供了符合标准的方法来处理地理空间数据,例如实现地理信息系统(GIS)。GeoTools库实现了开放地理空间联盟(OGC)规范。

  • 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,matlab
  2. 支持的数据库“jdbc-ng”:db2h2mysqloraclepostgisspatialite,sqlserver
  3. 支持的矢量格式和数据访问:app-schemaarcsdecsvdxfedigeoexcel,geojson,orgpropertyshapefilewfs
  4. XML绑定。基于xml的Java数据结构和绑定提供了如下格式xsd-core (xml simple types),fes,filtergml2gml3kmlowssldwcswfswmswpsvpf。对于额外的geometrysldfilter的编码和解析可以通过domsax程序。

    支持大部分的OGC标准

  5. OGC中的sld/SE和渲染引擎;
  6. OGC一般要素模型包括简单要素支持;
  7. OGC中栅格信息的网格影像表达;
  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之家小专栏

对本专栏感兴趣的话,可以关注一波

原文地址:https://www.cnblogs.com/giserhome/p/11640737.html

时间: 2024-08-01 10:23:12

GeoTools介绍、环境安装、读取shp文件并显示的相关文章

mfc 通过 MapWinGIS 控件读取 shp 文件

记录一下这两天努力的收获,刚来这个公司一周不到,这几天一直在看GIS相关的东西. 首先调通了第一个android 通过 jni 调用 C/C++代码 然后花了两天做了一个mfc 用 MapWinGIS.ocx 控件读取shp格式文件 哎...回头看看,这么简单的东西竟然用了两天时间,简直太浪费时间了 没办法,新手上路不容易呀! 参考原文:http://blog.csdn.net/clever101/article/details/5286575 下面记录一下读取 shp文件的操作过程: MapW

纯C#,读取shp文件转json,arcgis api for js 3.x可加载

public static void FeaturesToJSON(string shpName) { int ShapeType;//shp文件类型,点1 线3 面5 double[] fileBox = new double[4]; List<int> partsArr = new List<int>();//多部分的 List<double> coorsArr = new List<double>();//坐标 fileBox[0] = double.

[计算机图形学] OpenGL读取obj文件并显示其3D效果

? 读取三维网格模型(Wavefront OBJ文件) 无法向立方体:cube.obj 有法向兔子模型:bunny.obj 有法向有纹理八字模型:Eight.obj OBJ文件的格式可参考:http://www.cnblogs.com/youthlion/archive/2013/01/21/2870451.html ? 利用OpenGL显示该模型的绘制效果(全部) 顶点显示 线条显示 面片显示 ? 核心代码说说 1.下面的点.纹理.法向量.面用于构成一个PIC的类,PIC用于存储从OBJ文件中

[PHP] 读取大文件并显示

使用PHP读取日志文件,当文件比较大的时候,会报内存不足,因此应该部分读取,读取指定的行数的数据 PHP代码: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\error.log"; const NGINX_LOG_PATH="E:\phpServer\\nginx\logs\error.log"; //显示的行数 const PAGES=50; public static f

arcgis for android 读取shp文件中文乱码解决方法

设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到”My Computer\HKEY_CURRENT_USER\Software\ESRI\Desktop 10.x' (如果是9.3.1之前的版本,定位到 'My Computer\HKEY_CURRENT_USER\Software\ESRI').3.创建项 'Common',接着创建 'Code

mfc通过MapWinGIS控件读取shp文件(不通过#import实现)

1.首先注册MapWinGIS ActiveX组件, 引入MapWinGIS.ocx产生的MapWinGIS_i.h和MapWinGIS_i.c文件,利用CoCreateInstance函数来调用 演示代码: /*在工程中加入MapWinGIS_i.c文件,该文件定义了类和接口的guid值,如果不引入的话,会发生连接错误.*/ #include "MapWinGIS_i.h" CoInitialize(NULL); IShapefile* ptr = NULL; HRESULT hr

结合C++和GDAL实现shapefile(shp)文件的读取

工具:vs2012+GDAL 2.0 数据:中国省界SHP文件bou2_4p.shp 包含头文件: #include "ogrsf_frmts.h" 代码: int main(){ GDALAllRegister(); GDALDataset *poDS; CPLSetConfigOption("SHAPE_ENCODING",""); //解决中文乱码问题 //读取shp文件 poDS = (GDALDataset*) GDALOpenEx(&

Silverlight项目笔记8:层次布局、客户端读取shp、ExecuteCountAsync、柱状图、url传参

1.层次布局 由于地图窗口和菜单栏都在一个父容器内,在浏览器缩小到一定程度点击地图弹出infoWindow时,会出现菜单栏遮挡infoWindow中间部分的现象,于是通过设置Canvas.ZIndex来设置显示层次顺序解决这种冲突. 2.客户端读取Shp文件 有一个应用场景时用户自定义一个范围进行数据统计,包括用户上传已有Shp数据来确定统计区域,如何读取shp文件呢?答案是用了开源的ShapeFileReader类,转化得到graphic,客户端再处理即可.下载地址 http://esrisl

php中读取大文件实现方法详解

php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考.需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容.实现方法:1 直接采用file函数 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考. 需求如下: 现有一个1G左右的日志文件,大约有500多万行,