文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG库以及发布至geoserver。本方法是以geotools为开发工具实现入库,以geoserver manager来实现服务的自动发布。这里着重描述geotools编写SHP入库的方法。

2.Geotools介绍

2.1总体介绍

Geotools是Java语言编写的开源GIS工具包,其功能涵盖了地理信息数据读写、处理、坐标转换、查询分析、格式化输出等多个方面。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。
    Geotools用到的两个较重要的开源GIS工具包是JTS和GeoAPI。前者主要是实现各种GIS拓扑算法,也是基于GeoAPI的。但是由于两个工具包的GeoAPI分别采用不同的Java代码实现,所以在使用时需要相互转化。Geotools又根据两者定义了部分自己的GeoAPI,所以代码显得臃肿,有时容易混淆。由于GeoAPI进展缓慢,Geotools自己对其进行了扩充。另外,Geotools现在还只是基于2D图形的,缺乏对3D空间数据算法和显示的支持。

Geotools The Open Source JavaGIS
Toolkit的相关学习网站如下:

http://geotools.org/   Geotools官方网站
http://docs.geotools.org/latest/javadocs
        Geotools API在线文档
http://docs.codehaus.org/display/GEOTDOC/Home Geotools用户指南
http://repo.opengeo.org                              Geotools的maven仓库
http://download.osgeo.org/webdav/geotools/    
  maven仓库地址

2.2整体架构

org.geotools.data包负责地理数据的读写(如:ShapefileReader用于读取shpfile数据)。

org.geotools.geometry包负责提供对JTS的调用接口,以将地理数据封装成JTS中定义的几何对象(Geometry)。

org.geotools.feature包负责封装空间几何要素对象(Feature),对应于地图中一个实体,包含:空间数据(Geometry)、属性数据(Aitribute)、参考坐标系(Refereneedsystem)、最小外包矩形(EnveloPe)等属性,是GlS操作的核心数据模型。

2.3geotools中的核心Jar说明

a.GT核心库

其中红色的包含了要素定义、SHP读取、EPSG获取等相关方法的jar。

b.hsqldb

需要配合gt-epsg-hsql来使用,可以查询对应的epsg编码。

c. Image I/O-Ext

支持跟GIS有关的图片格式。

d.jts

JTS提供了这些空间数据类Point、MultiPointLineString、LinearRing(封闭的线条)、MultiLineString (多条线)、PolygonMultiPolygon 、 GeometryCollection(包括点,线,面)。JTS包结构为计算交点(noding包)、几何图形操作(operation包)、平面图(planargraph包)、多边形化(polygnize包)、精度(precision)、工具(util包)。

e.jsr、vecmath

做投影相关运算时需要这两个jar: jsr-275-1.0-beta-2.jar和vecmath-1.3.1.jar。

f. opengis库

h.其他各类jar

包含数据库驱动的jar,log4j,XML解析的jar等等。可以实现读取不同数据库的数据,对xml格式的文件比如SLD的解析等等。

3.SHP各文件的简介

shape文件由ESRI开发,一个ESRI(Environmental Systems Research Institute)的shape文件包括一个主文件,一个索引文件,和一个dBASE表,其中主文件的后缀就是.shp。

主文件是一个直接存取,变量记录长度文件,其中每个记录描述一个有它自己的vertices列表的shape。

索引文件中,每个记录包含对应主文件记录离主文件头开始的偏移。

dBASE表包含记录的feature的特征。几何和属性间的一一对应关系是基于记录数目的。在dBASE文件中的属性记录必须和主文件中的记录是相同顺序的。

4.ST_Geometry函数

ST_Geometry SQL 数据类型用于存储在 DB2、Informix、Oracle 和 PostgreSQL 的地理数据库中。此数据类型可在地理数据库中使用,另外还可通过 SQL 访问第三方应用程序的简单要素类几何。ST_Geometry 执行空间的 OGC 和 ISO SQL 多媒体规范。

Oracle中安装了SDE后,能支持ST_Geometry函数。Oracle Spatial版本则有其自带的SDO_Geometry相关函数。这里,我们在PostgreSQL上安装了PostGIS,使其支持ST_Geometry函数。对于空间数据的描述,PG中支持标准的OpenGIS的两种空间数据组织格式:Well-Known Text (WKT) 和 Well-Known Binary (WKB) 。

PostGIS在线文档:http://postgis.net/docs/manual-1.4/

空间函数文档:http://postgis.net/docs/manual-1.4/ch04.html

5.具体实现

5.1读取所有格式SHP并入库

5.2读取SHP的DBF文件

                  -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                 

简析服务端通过geotools导入SHP至PG的方法的更多相关文章

  1. 简析服务端通过GT导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  2. geotools导入shp文件到Oracle数据库时表名带下划线的问题解决

    问题: 最近在做利用geotools导入shp文件到Oracle表中,发现一个问题Oracle表名带下划线时导入失败,问题代码行: dsOracle.getFeatureWriterAppend(or ...

  3. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

  4. C++ Thrift服务端记录调用者IP和被调接口方法

    Apache开源的Thrift(http://thrift.apache.org)有着广泛的使用,有时候需要知道谁调用了指定的函数,比如在下线一起老的接口之前,需要确保对这些老接口的访问已全部迁移到新 ...

  5. C#服务端判断客户端socket是否已断开的方法

    刚开始,用Socket类的Connected属性来实现,却发现行不通,connected只表示  是在上次 还是 操作时连接到远程主机.如果在这之后[连接的另一方]断开了,它还一直返回true, 除非 ...

  6. 【试水CAS-4.0.3】第01节_CAS服务端搭建及导入源代码到MyEclipse

    完整版见https://jadyer.github.io/2015/07/16/sso-cas-server-demo/ /** * @see ---------------------------- ...

  7. 服务端事件EventSource揭秘

    服务端推 服务端推,指的是由服务器主动的向客户端发送消息(响应).在应用层的HTTP协议实现中,"请求-响应"是一个round trip,它的起点来自客户端,因此在应用层之上无法实 ...

  8. Android ListView分页载入(服务端+android端)Demo

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

  9. 微服务项目开发学成在线_day01_CMS服务端开发

    05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的C ...

随机推荐

  1. Kali学习笔记38:文件上传漏洞

    早些年,提到Web渗透,或者搜索一些黑客教程 基本都会看到文件上传漏洞. 它是一个很经典的漏洞 但它本质其实不是一个漏洞,而是网站本身的上传文件功能 不过如果我们上传了Webshell,那么就成为了文 ...

  2. C#不同窗体间数据传递

    在做项目中经常会使用不同窗体之间的值,所以就有了传值的概念.最常见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道. 1.       如果很多窗体都需要用到某一窗体的东西,比如登录窗体记 ...

  3. odoo开发笔记--from视图隐藏顶部&tree视图保留

    场景描述: 开发过程中,有时候我们需要去除odoo自带的一些样式, 比如,form视图,要集成自定义的界面时,就希望把顶部的服务动作 和 分页按钮 隐藏掉. 处理方式: 分两种情况: 1. 保留顶部区 ...

  4. linux运维工程师面试题收集

    面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...

  5. list源码4(参考STL源码--侯捷):transfer、splice、merge、reverse、sort

    list源码1(参考STL源码--侯捷):list节点.迭代器.数据结构 list源码2(参考STL源码--侯捷):constructor.push_back.insert list源码3(参考STL ...

  6. Android切换横竖屏不销毁前台Activity,也不影响后台Activity

    在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候我们不希望如此,就需要做些额外的设置了: 1.在AndroidMainifest.xml中对应的Activity标签 ...

  7. DotNetCore深入了解之一Startup类

    一个典型的ASP.NET Core应用程序会包含Program与Startup两个文件.Program类中有应用程序的入口方法Main,其中的处理逻辑通常是创建一个WebHostBuilder,再生成 ...

  8. SpringMVC学习(二)———— 参数绑定

    一.参数绑定 1.1.什么是参数绑定? 客户在浏览器端会提交一些参数到服务器端,比如用户的登录等,就会传username 和 password过来,springmvc则通过参数绑定组件将请求参数的内容 ...

  9. IE的浏览器模式、文本模式

    最近在部署网页的时候,发现IE下的布局完成混乱. 在改变IE的文本模式后,显示就正常了. IE的浏览器模式,用于切换IE针对该网页的默认文本模式.对不同版本浏览器的条件注释解析.决定请求头里userA ...

  10. 多选穿梭框总结 (vue + element)

    博客地址:https://ainyi.com/23 示例 介绍 实现省市区三级多选联动,可任选一个省级.市级.区级,加入已选框,也可以在已选框中删除对应的区域. 选择对应仓库,自动勾选仓库对应的省,取 ...