PostGIS介绍和安装

PostgresSQL:

PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库目前功能最强大、特性最丰富和最复杂的研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。

“关系型数据库+空间数据引擎”通常是近年来由GIS厂商研发的一种中间件解决方案。用户将自己的空间数据交给独立于数据库之外的空间数据引擎,有空间数据引擎来组织空间数据在关系型数据库中的存储; 当用户需要访问数据的时候,再通知空间数据引擎,有引擎从关系型数据库中取出数据,并转化为客户可以使用的方式。

PostGIS:

PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。PostGIS的版权被纳入到GNU的GPL中,也就是说任何人可以自由得到PostGIS的源码并对其做研究和改进。正是由于这一点,PostGIS得到了迅速的发展,越来越多的爱好者和研究机构参与到PostGIS的应用开发和完善当中。

PostGIS支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、多边形(POLYGON)、多点(MULTIPOINT)、多线(MULTILINESTRING)、多多边形(MULTIPOLYGON) 和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。

有一下几个优点:

  • PostGIS支持所有的数据存取和构造方法,如GeomFromText()AsBinary(),以及GeometryN()等。
  • PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。
  • PostGIS提供了对于元数据的支持,如GEOMETRY_COLUMNSSPATIAL_REF_SYS,同时,PostGIS也提供了相应的支持函数, 如AddGeometryColumnDropGeometryColumn
  • PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系, 同时返回布尔值来表征对象之间符合这个关系。
  • PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。 两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。

具有的几个功能:

  • 数据库坐标变换:数据库中的几何类型可以通过Transform函数从一种投影系变换到另一种投影系中。在OpenGIS中的几何类型都将SRID 作为自身结构的一部分,但不知什么原因,在OpenGISSFSQL规范中,并没有引入Transform
  • 球体长度运算: 存储在普通地理坐标系中的集合类型如果不进行坐标变换是无法进行程度运算的,OpenGIS所提供的坐标变换使得积累类型的程度计算变成可能。
  • 三维的几何类型:SFSQL规范只是针对二维集合类型。OpenGIS提供了对三维集合类型的支持,具体是利用输入的集合类型维数来决定输出的表现方式。例如,即便所有几何对象内部都以三维形式存储,纯粹的二维交叉点通常还是以二维的形式返回。此外,还提供几何对象在不同维度间转换的功能。
  • 空间聚集函数:在数据库中,聚集函数是一个执行某一属性列所有数据操作的函数。比如Sum和Average,Sum是求某一关系属性列的数据总和,Average则是求取某一关系属性列的数据平均值。与此对应,空间聚集函数也是执行相同的操作,不过操作的对象是空间数据。例如聚集函数Extent返回一系列要素中的最 大的包裹矩形框,如“SELECT EXTENT(GEOM) FROM ROADS”这条SQL语句的执行结果是返回ROADS这个数据表中所有的包裹矩形框。
  • 栅格数据类型:PostGIS通过一种新的数据类型片,提供对于大的栅格数据对象的存储。片由以下几个部分组成: 包裹矩形框、SRID、类型和一个字节序列。通过将片的大小控制在数据库页值(32×32)以下,使得快速的随即访问变成可能。一般大的图片也是通过将其切成32×32像素的片然后再存储在数据库中的。

安装

linux下直接命令行安装:

sudo apt install postgresql
sudo apt install postgis

windows下的下载地址:

https://www.postgresql.org/download/

还可以安装图形化界面pgadmin

linux下直接命令行安装:

sudo apt install pgadmin

windows下的下载地址:

https://www.pgadmin.org/download/

pgadmin

使用

首先准备一个shpfile文件。

shpfile展示

将shp文件导入数据库有两种方式:

不过首先都需要创建好数据库,添加PostGISschema(可选)

sudo -u postgres psql
create database demo;
\c demo
create extension postgis;
create schema shpdata;

方法一

pgadmin插件import直接导入:

  • 打开pgadmin点击插件import

打开pg

  • 连接数据库,首先要创建好数据据导入PostGIS: 点击connection输入用户名、密码、要使用的数据库

连接pg

  • 提示成功后点击Add file 选择想要导入的文件后缀名为.shp

选择filepg

  • 添加后可以修改schema table添加到自己想要方的位置

添加filepg

  • 设置好后点击import 如下图显示则说明导入完成。

成功filepg

方法二

使用命令行工具进行导入:

 shp2pgsql -s 3857 -I dir/xx.shp  shpdata.demo |
 psql -h localhost -p 5432 -d demo -U postgres -W
  • s SRID
  • I 文件所在地址
  • h 服务器地址
  • p 端口
  • d 数据库名称
  • U 用户名
  • W 密码
  • shpdata schema
  • | 通过管道将sql传入数据库

成功psql

发布

进入GeoServer操作页面:

  • 选择左侧工作区

新建工作区

  • 选择新建工作区

新建工作区1

  • 填写nameURI

  • 选择数据内数据存储

新建工作区

  • 添加新的数据存储

添加存储

  • 选择工作区、填写连接参数数据库、用户名密码

填写参数

  • 保存后会自动跳转 点击发布按钮

发布

  • 设置坐标参考以及边框

新建工作区

  • 保存后在左侧菜单栏内找到layer Preview

view

  • 点击后就可以找到我们要发布的图层点击Openlayers

view

  • 如下图

view

完整的URL

http://localhost:8080/geoserver.war/demo/wms?service=WMS&
version=1.1.0&request=GetMap&layers=demo%3Akaz_adm2_v079&
bbox=5175449.5%2C4946436.5%2C9719601.0%2C7446127.5&
width=768&height=422&srs=EPSG%3A3857&format=application/openlayers
  • WMS 选择的服务
  • version 版本信息
  • request 请求方式
  • style 请求图层的样式列表
  • bbox 地图范围 (minx,miny,maxx,maxy)
  • layers 图层名
  • width 窗口的宽
  • height 窗口的高
  • srs 空间坐标参考系统(namespace:identifier)
  • format 格式