1. 概述

PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询

PostGIS官网:About PostGIS | PostGIS

PostGIS官方教程:PostGIS 简介 — Introduction to PostGIS

PostGIS相关教程:文章目录汇总 - 知乎 (zhihu.com)

本文基于官方教程描述PostGIS中的Geometry

2. 几何操作

2.1 创建一个空间表

创建空间表test

CREATE TABLE test(
id SERIAL PRIMARY KEY,
name VARCHAR(64),
geom geometry
);

设置坐标系WGS-84,代码4326

SELECT UpdateGeometrySRID('test','geom',4326);

使用SQL插入数据:

INSERT INTO test VALUES(0, 'Point', 'POINT(0 0)'),
(1, 'Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),
(2, 'Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
(3, 'PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),
(4, 'Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');

查询数据:

SELECT * FROM test;

使用几何查看器查看:

2.2 查询表属性

查询几何类型、维数、空间坐标系代码

SELECT id, name, ST_GeometryType(geom), ST_NDims(geom), ST_SRID(geom)
FROM test;

2.3 查询Point属性

查询点的X、Y坐标:

SELECT id, name, ST_X(geom), ST_Y(geom)
FROM test WHERE name = 'Point';

2.4 查询LineString属性

查询LineString属性的的函数主要有:

  • ST_Length(geometry) —— 返回线串的长度
  • ST_StartPoint(geometry) —— 将线串的第一个坐标作为点返回
  • ST_EndPoint(geometry) —— 将线串的最后一个坐标作为点返回
  • ST_NPoints(geometry) —— 返回线串的坐标数量
SELECT id, name, ST_Length(geom), ST_StartPoint(geom), ST_EndPoint(geom), ST_NPoints(geom)
FROM test WHERE ST_GeometryType(geom) = 'ST_LineString';

2.5 查询Polygon属性

查询Polygon属性的函数主要有:

  • ST_Area(geometry) —— 返回多边形的面积
  • ST_NRings(geometry) —— 返回多边形中环的数量(通常为1个,其他是孔)
  • ST_ExteriorRing(geometry) —— 以线串的形式返回多边形最外面的环
  • ST_InteriorRingN(geometry, n) —— 以线串形式返回指定的内部环
  • ST_Perimeter(geometry) —— 返回所有环的长度
SELECT id, name, ST_Area(geom), ST_NRings(geom), ST_AsText(ST_ExteriorRing(geom)),
ST_InteriorRingN(geom, 1), ST_Perimeter(geom)
FROM test WHERE ST_GeometryType(geom) = 'ST_Polygon';

2.6 查询Collection属性

Collection包含:

  • MultiPoint —— 点集合
  • MultiLineString —— 线串集合
  • MultiPolygon —— 多边形集合
  • GeometryCollection —— 由任意几何图形(包括其他GeometryCollection)组成的异构集合

查询Collection属性的函数主要有:

  • ST_NumGeometries(geometry) —— 返回集合中的组成部分的数量
  • ST_GeometryN(geometry, n) —— 返回集合中指定的组成部分
  • ST_Area(geometry) —— 返回集合中所有多边形组成部分的总面积
  • ST_Length(geometry) —— 返回所有线段组成部分的总长度
SELECT id, name, ST_NumGeometries(geom), ST_GeometryN(geom, 1), ST_Area(geom), ST_Length(geom)
FROM test WHERE ST_GeometryType(geom) = 'ST_GeometryCollection';

2.7 Geometry数据格式

2.7.1 WKT

PostGIS支持Well-known text(WKT),主要函数有:

  • ST_GeomFromText(text, srid) —— 返回geometry
  • ST_AsText(geometry) —— 返回text
  • ST_AsEWKT(geometry) —— 返回带有srid的text
SELECT ST_GeomFromText('Point(1 0)',4326), ST_AsText(geom), ST_AsEWKT(geom)
FROM test WHERE ST_GeometryType(geom) = 'ST_Point';

2.7.2 WKB

Well-known binary(WKB

  • ST_GeomFromWKB(bytea) —— 返回geometry
  • ST_AsBinary(geometry) —— 返回bytea
  • ST_AsEWKB(geometry) —— 返回bytea
SELECT ST_AsBinary(geom), ST_AsEWKB(geom), ST_GeomFromWKB(ST_AsBinary(geom))
FROM test WHERE ST_GeometryType(geom) = 'ST_Point';

2.7.3 GML、KML、GeoJSON和SVG

Geographic Mark-up Language(GML

  • ST_GeomFromGML(text) —— 返回geometry
  • ST_AsGML(geometry) —— 返回text

Keyhole Mark-up Language(KML

  • ST_GeomFromKML(text) —— 返回geometry
  • ST_AsKML(geometry) —— 返回text

GeoJson

  • ST_AsGeoJSON(geometry) —— 返回text

Scalable Vector Graphics(SVG

  • ST_AsSVG(geometry) —— 返回text
SELECT ST_AsGML(geom), ST_AsKML(geom), ST_AsGeoJson(geom), ST_AsSVG(geom)
FROM test WHERE ST_GeometryType(geom) = 'ST_Point';

3. 参考资料

[1]9. 几何(Geometries) — Introduction to PostGIS

[2]PostGIS教程六:几何图形(geometry) - 知乎 (zhihu.com)

[3]PostGIS 3.3.3dev Manual

[4]PostGIS Cheat Sheet

PostGIS之Geometry的更多相关文章

  1. PostGIS解析Geometry几何对象

    一.Geometry转WKT select st_astext(geom) where tableName; 二.PostGIS常用函数 wkt转geometry st_geomfromtext(wk ...

  2. PostGIS 操作geometry方法

    WKT定义几何对象格式: POINT(0 0) ——点 LINESTRING(0 0,1 1,1 2) ——线 POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2 ...

  3. (转)postgresql+postgis空间数据库使用总结

    转载地址:https://blog.csdn.net/qq_36588972/article/details/78902195 参考资料: pgrouting路径导航 https://www.cnbl ...

  4. postgresql,postgis,geoserver 发布地图服务,并用.net mvc openlayers3进行显示

    1.所需工具 postgres版本 9.6.1 对应的postgis geoserver 2.8.2 openlayers3 2.将postgres postgis ,geosever安装好,再用如下 ...

  5. PostGIS导入导出SHP文件常用命令

    SHP导入POSTGIS数据库 引用 直接导入数据库 shp2pgsql  -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postg ...

  6. 将PostGIS转化为GeoJSON

    #!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...

  7. Linux 平台PostGIS安装

    1.前提条件: postgresql 9.6.1 已经通过源码方式安装完成并可成功运行. 2. other OS packets OS: CentOS 6.4 X64 X64: libxml2-dev ...

  8. PostgreSQL+PostGIS的使用 函数清单

    一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...

  9. QSQL导出mapfile和mapfile中PostGIS连接的一点心得

    昨天弄QSQL导出mapfile,一直遇到下图的错误 原因是QGIS在渲染图层时候使用了新的符号,在图层上右键-属性,如下图将符号修改就OK了 然后我尝试使用QGIS连接本机PostGIS数据,结果老 ...

  10. PostgreSQL9.1 with PostGIS 2.1.4 for mapping coordinates on linux/ubuntu 已经打包成deb 可下载

    For location based service, I try to use postgresql with postgis. You can download postgis from here ...

随机推荐

  1. 【每日一题】【链表&头插法&ASCII码】【链表&迭代器】2022年1月28日-NC1 大数加法

    描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 思路:原生链表&头插法节点值 import java.util.*; public class Solution ...

  2. 学习ASP.NET Core Blazor编程系列十六——排序

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  3. MySQL单表查询(分组-筛选-过滤-去重-排序-分页-判断-正则)

    目录 一:单表查询 1.单表查询(前期准备) 2.插入记录(写入数据) 3.查询关键字 二:查询关键字之where 1.查询id大于等于3小于等于6的数据 2.查询薪资是20000或者18000或者1 ...

  4. 前端HTML不使用flash兼容IE浏览器播放视频

    前言:最近公司项目上有个需求就是在IE8上不使用flash技术来去实现视频播放 分析:IE8不支持HTML5,所以不能使用video标签,在非IE的浏览器可以使用video标签 目录 我的解决 DEM ...

  5. Salesforce LWC学习(四十) datatable的dynamic action的小坑浅谈

    本篇参考:https://developer.salesforce.com/docs/component-library/bundle/lightning-datatable/documentatio ...

  6. 【原创】linux实时应用如何printf输出不影响实时性?

    版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. @ 目录 1. 前言 2. linux终端输出 3. 常见的N ...

  7. ArcGIS实现打点、线路图、色块、自定义弹窗

    闲聊: 马上就要过年了,不知道大家过年都放几天假,小颖公司就只放8天假,就这还有一天是集体调休扣年假,就很··············还不如不放,不过庆幸最近这两周项目也做完了也没啥事,不然就静不下心 ...

  8. 通过Canal将云上MySQL数据同步到华为云ES(CSS)中

    背景: A部门想将mysql中多张表join成一个sql查询语句,然后将结果同步到es中供搜索使用 环境信息: 源端mysql在阿里云上,有公网ip 目标端es在华为云上,三节点 操作步骤与目的: 配 ...

  9. java入门与进阶P-2.3

    判断 if语句 一个基本的if语句由一个关键字if开头,跟上在括号里的表示条件的逻辑表达式, 然后是一对大括号"{}"之间的若干条语句.如果表示条件的逻辑表达式的结果为true,那 ...

  10. Node.js+Koa2+TypeScript技术概览

    最近几年一直使用Node.js作为后端服务平台,通过Koa2框架中间件快速搭建Web服务,但是使用JavaScript开发大型后端服务时会使程序变得难以维护,继而使用TypeScript语言开发,使编 ...