PostGIS 3.3.0dev 手册

邮政地理信息系统开发小组

Abstract

PostGIS是对 PostgreSQL 对象关系数据库系统,允许将GIS(地理信息系统)对象存储在数据库中。PostGIS包括对基于GIST的R-Tree空间索引的支持,以及用于分析和处理GIS对象的函数。

这是版本手册 3.3.0dev

这项工作是根据 知识共享署名-类似共享3.0许可证 。您可以随意使用此材料,但我们要求您将功劳归功于PostGIS项目,并尽可能提供指向 http://postgis.net


Table of Contents
1. 引言
1.1. 项目指导委员会
1.2. 出席的核心贡献者
1.3. 核心贡献者过去
1.4. 其他贡献者
2. PostGIS安装
2.1. 简略版
2.2. 从源代码编译和安装
2.2.1. 获取来源
2.2.2. 安装要求
2.2.3. 生成配置
2.2.4. 大楼
2.2.5. 构建和部署PostGIS扩展模块
2.2.6. 测试
2.2.7. 安装
2.3. 安装和使用地址标准化程序
2.3.1. 安装Regex::Assetble
2.4. 安装、升级Tiger地理编码器并加载数据
2.4.1. 启用PostGIS数据库的Tiger地理编码器:使用扩展模块
2.4.2. 启用您的PostGIS数据库的Tiger地理编码器:不使用扩展模块
2.4.3. 将地址标准化扩展与Tiger地理编码器结合使用
2.4.4. 正在加载TIGER数据
2.4.5. 升级您的Tiger地理编码器安装
2.5. 安装过程中的常见问题
3. 邮政地理信息系统管理
3.1. 性能调整
3.1.1. 启动
3.1.2. 运行时
3.2. 配置栅格支持
3.3. 创建空间数据库
3.3.1. 使用扩展在空间上启用数据库
3.3.2. 在不使用扩展的情况下在空间上启用数据库(不鼓励)
3.3.3. 从模板创建支持空间的数据库
3.4. 升级空间数据库
3.4.1. 软升级
3.4.2. 硬升级
4. 数据管理
4.1. 空间数据模型
4.1.1. OGC几何图形
4.1.2. SQL/MM第3部分-曲线
4.1.3. WKT和WKB
4.2. 几何数据类型
4.2.1. PostGIS EWKB和EWKT
4.3. 地理数据类型
4.3.1. 创建地理表
4.3.2. 使用地理表
4.3.3. 何时使用地理数据类型
4.3.4. 地理高级常见问题解答
4.4. 几何图形验证
4.4.1. 简单几何图形
4.4.2. 有效的几何图形
4.4.3. 管理效度
4.5. 空间参考系
4.5.1. SPATIAL_REF_SYS表
4.5.2. 用户定义的空间参考系统
4.6. 空间表
4.6.1. 创建空间表
4.6.2. 几何图形_列视图
4.6.3. 手动注册几何图形列
4.7. 加载空间数据
4.7.1. 使用SQL加载数据
4.7.2. 使用Shapefile加载器
4.8. 提取空间数据
4.8.1. 使用SQL提取数据
4.8.2. 使用Shapefile Dumper
4.9. 空间索引
4.9.1. 主旨指数
4.9.2. Brin指数
4.9.3. SP-GIST指数
4.9.4. 调整索引使用率
5. 空间查询
5.1. 确定空间关系
5.1.1. 量纲扩展的9交点模型
5.1.2. 命名空间关系
5.1.3. 一般空间关系
5.2. 使用空间索引
5.3. 空间SQL示例
6. 性能提示
6.1. 大几何形状的小桌子
6.1.1. 问题描述
6.1.2. 变通办法
6.2. 基于几何指数的聚类
6.3. 避免维度转换
7. 构建应用程序
7.1. 使用MapServer
7.1.1. 基本用法
7.1.2. 常见问题解答
7.1.3. 高级用法
7.1.4. 示例
7.2. Java客户端(JDBC)
7.3. C客户端(Libpq)
7.3.1. 文本光标
7.3.2. 二进制游标
8. PostGIS参考资料
8.1. PostGIS几何/地理/方框数据类型
8.2. 表管理功能
8.3. 几何构造器
8.4. 几何体访问器
8.5. 几何图形编辑器
8.6. 几何图形验证
8.7. 空间参考系功能
8.8. 几何体输入
8.8.1. 熟知文本(WKT)
8.8.2. 熟知二进制(WKB)
8.8.3. 其他格式
8.9. 几何体输出
8.9.1. 熟知文本(WKT)
8.9.2. 熟知二进制(WKB)
8.9.3. 其他格式
8.10. 运营者
8.10.1. 边界框运算符
8.10.2. 距离运算符
8.11. 空间关系
8.11.1. 拓扑关系
8.11.2. 距离关系
8.12. 测量函数
8.13. 覆盖功能
8.14. 几何处理
8.15. 仿射变换
8.16. 聚类函数
8.17. 边界框函数
8.18. 线性参考
8.19. 轨迹函数
8.20. SFCGAL函数
8.21. 长事务支持
8.22. 版本函数
8.23. 大统一自定义变量(GUC)
8.24. 故障排除功能
9. PostGIS常见问题解答
10. 拓扑学
10.1. 拓扑类型
10.2. 拓扑域
10.3. 拓扑和拓扑几何管理
10.4. 拓扑统计信息管理
10.5. 拓扑构造器
10.6. 拓扑编辑器
10.7. 拓扑访问器
10.8. 拓扑处理
10.9. 拓扑几何构造器
10.10. 拓扑几何图形编辑器
10.11. Topo几何访问器
10.12. 拓扑几何图形输出
10.13. 拓扑空间关系
11. 栅格数据管理、查询和应用程序
11.1. 加载和创建栅格
11.1.1. 使用raster2pgsql加载栅格
11.1.2. 使用PostGIS栅格函数创建栅格
11.1.3. 使用“out db”云栅格
11.2. 栅格目录
11.2.1. 栅格列目录
11.2.2. 栅格概视图
11.3. 使用PostGIS栅格构建自定义应用程序
11.3.1. 结合使用ST_AsPNG和其他栅格函数的PHP输出示例
11.3.2. 结合使用ST_AsPNG和其他栅格函数的ASP.NET C#输出示例
11.3.3. 将栅格查询输出为图像文件的Java控制台应用程序
11.3.4. 使用PLPython通过SQL转储图像
11.3.5. 使用PSQL输出栅格
12. 栅格参考
12.1. 栅格支持的数据类型
12.2. 栅格管理
12.3. 栅格构造器
12.4. 栅格存取器
12.5. 栅格波段访问器
12.6. 栅格像素访问器和设置器
12.7. 栅格编辑器
12.8. 栅格波段编辑器
12.9. 栅格波段统计和分析
12.10. 栅格输入
12.11. 栅格输出
12.12. 栅格处理:地图代数
12.13. 内置地图代数回调函数
12.14. 栅格处理:DEM(高程)
12.15. 栅格处理:栅格到几何图形
12.16. 栅格运算符
12.17. 栅格和栅格波段空间关系
12.18. 栅格提示
12.18.1. Out-DB栅格
13. PostGIS栅格常见问题解答
14. PostGIS Extras
14.1. 地址标准器
14.1.1. 解析器的工作原理
14.1.2. 地址标准器类型
14.1.3. 地址标准化器表
14.1.4. 地址标准化函数
14.2. TIGER地理编码器
15. PostGIS Special Functions Index
15.1. PostGIS Aggregate Functions
15.2. PostGIS Window Functions
15.3. PostGIS SQL-MM Compliant Functions
15.4. PostGIS Geography Support Functions
15.5. PostGIS Raster Support Functions
15.6. PostGIS Geometry / Geography / Raster Dump Functions
15.7. PostGIS Box Functions
15.8. PostGIS Functions that support 3D
15.9. PostGIS Curved Geometry Support Functions
15.10. PostGIS Polyhedral Surface Support Functions
15.11. PostGIS Function Support Matrix
15.12. New, Enhanced or changed PostGIS Functions
15.12.1. PostGIS Functions new or enhanced in 3.3
15.12.2. PostGIS Functions new or enhanced in 3.2
15.12.3. PostGIS Functions new or enhanced in 3.1
15.12.4. PostGIS Functions new or enhanced in 3.0
15.12.5. PostGIS Functions new or enhanced in 2.5
15.12.6. PostGIS Functions new or enhanced in 2.4
15.12.7. PostGIS Functions new or enhanced in 2.3
15.12.8. PostGIS Functions new or enhanced in 2.2
15.12.9. PostGIS Functions new or enhanced in 2.1
15.12.10. PostGIS Functions new, behavior changed, or enhanced in 2.0
15.12.11. PostGIS Functions changed behavior in 2.0
15.12.12. PostGIS Functions new, behavior changed, or enhanced in 1.5
15.12.13. PostGIS Functions new, behavior changed, or enhanced in 1.4
15.12.14. PostGIS Functions new in 1.3
16. 报告问题
16.1. 报告软件错误
16.2. 报告文档问题
A. 附录
A.1. PostGIS 3.2.0(Olivier Courtin Edition)
A.2. PostGIS 3.2.0测试版3
A.3. 版本3.2.0 Beta2
A.4. 版本3.2.0Beta1
A.5. 版本3.2.0 Alpha1
A.6. 版本3.1.0Beta1
A.7. 版本3.1.0 Alpha3
A.8. 版本3.1.0 Alpha2
A.9. 版本3.1.0Alpha1
A.10. 版本3.0.0
A.11. 版本3.0.0rc2
A.12. 版本3.0.0rc1
A.13. 版本3.0.0Beta1
A.14. 版本3.0.0Alpha4
A.15. 版本3.0.0Alpha3
A.16. 版本3.0.0Alpha2
A.17. 版本3.0.0Alpha1
A.18. 版本2.5.0
A.19. 版本2.4.5
A.20. 版本2.4.4
A.21. 版本2.4.3
A.22. 版本2.4.2
A.23. 版本2.4.1
A.24. 版本2.4.0
A.25. 版本2.3.3
A.26. 版本2.3.2
A.27. 版本2.3.1
A.28. 版本2.3.0
A.29. 版本2.2.2
A.30. 版本2.2.1
A.31. 版本2.2.0
A.32. 版本2.1.8
A.33. 版本2.1.7
A.34. 版本2.1.6
A.35. 版本2.1.5
A.36. 版本2.1.4
A.37. 版本2.1.3
A.38. 版本2.1.2
A.39. 版本2.1.1
A.40. 版本2.1.0
A.41. 版本2.0.5
A.42. 版本2.0.4
A.43. 版本2.0.3
A.44. 版本2.0.2
A.45. 版本2.0.1
A.46. 版本2.0.0
A.47. 版本1.5.4
A.48. 版本1.5.3
A.49. 版本1.5.2
A.50. 版本1.5.1
A.51. 版本1.5.0
A.52. 版本1.4.0
A.53. 版本1.3.6
A.54. 版本1.3.5
A.55. 版本1.3.4
A.56. 版本1.3.3
A.57. 版本1.3.2
A.58. 版本1.3.1
A.59. 版本1.3.0
A.60. 版本1.2.1
A.61. 版本1.2.0
A.62. 版本1.1.6
A.63. 版本1.1.5
A.64. 版本1.1.4
A.65. 版本1.1.3
A.66. 版本1.1.2
A.67. 版本1.1.1
A.68. 版本1.1.0
A.69. 版本1.0.6
A.70. 版本1.0.5
A.71. 版本1.0.4
A.72. 版本1.0.3
A.73. 版本1.0.2
A.74. 版本1.0.1
A.75. 版本1.0.0
A.76. 版本1.0.0RC6
A.77. 版本1.0.0RC5
A.78. 版本1.0.0RC4
A.79. 版本1.0.0RC3
A.80. 版本1.0.0RC2
A.81. 版本1.0.0RC1

Chapter 1. 引言

PostGIS是由Refrtions Research Inc.创建的PostgreSQL关系数据库的空间扩展,是一个空间数据库技术研究项目。Refltions是一家位于加拿大不列颠哥伦比亚省维多利亚市的地理信息系统和数据库咨询公司,专门从事数据集成和定制软件开发。

PostGIS现在是OSGeo基金会的一个项目,由世界各地的许多FOSS4G开发人员和组织开发和资助,他们从它的功能和多功能性中获得了巨大的好处。

PostGIS项目开发小组计划支持和增强PostGIS,以更好地支持OGC和SQL/MM空间标准、高级拓扑结构(覆盖面、表面、网络)、桌面用户界面工具的数据源、查看和编辑地理信息系统数据的工具以及基于网络的访问工具等领域的一系列重要的地理信息系统功能。

1.1. 项目指导委员会

邮政地理信息系统项目指导委员会(PSC)负责协调邮政地理信息系统项目的总体方向、发布周期、文件编制和推广工作。此外,PSC还提供一般用户支持,接受和批准来自一般PostGIS社区的补丁,并就涉及PostGIS的其他问题进行投票,例如开发人员提交访问权限、新的PSC成员或重大API更改。

劳尔·马林·罗德里格斯

MVT支持、错误修复、性能和稳定性改进、GitHub管理、使PostGIS与PostgreSQL版本保持一致

瑞金娜·奥比

Buildbot维护、Windows生产和实验版本、文档、PostGIS与PostgreSQL版本的一致性、X3D支持、Tiger地理编码器支持、管理功能。

达拉菲·普拉亚斯库斯基

索引改进、错误修复和几何/地理功能改进、SFCGAL、栅格、GitHub管理和机器人维护。

保罗·拉姆齐(主席)

邮政地理信息系统项目的联合创始人。一般错误修复、地理支持、地理和几何索引支持(2D、3D、ND索引和任何空间索引)、底层几何内部结构、GEOS功能集成和与GEOS版本的对齐、PostGIS与PostgreSQL版本的对齐、加载器/转储程序和Shapefile图形用户界面加载器。

桑德罗·桑蒂利

Bug修复和维护、Buildbot维护、Git镜像管理、管理功能、新GEOS功能的集成以及与GEOS版本的协调、拓扑支持、栅格框架和低级API函数。

1.2. 出席的核心贡献者

尼克拉斯大道

距离函数增强功能(包括3D距离和关系函数)和附加功能、微型WKB(TWKB)输出格式和常规用户支持

丹·巴斯顿

几何聚类功能添加、其他几何算法增强、GEOS增强和常规用户支持

马丁·戴维斯

GEOS增强功能和文档

比约恩·哈特尔

Mapbox向量平铺和GeoBuf函数。Gogs测试和GitLab实验。

阿利亚克桑德尔·卡列尼克

几何处理、PostgreSQL要点、常规错误修复

1.3. 核心贡献者过去

博博里公园

前PSC成员。栅格开发、与GDAL的集成、栅格加载器、用户支持、常规错误修复、在各种操作系统(Slackware、Mac、Windows等)上的测试

马克·凯夫-艾兰德

前PSC成员。协调的错误修复和维护工作、空间索引选择性和绑定、加载器/转储程序和Shapefile图形用户界面加载器,集成了新的和新的功能增强。

豪尔赫·阿雷瓦洛

栅格开发、GDAL驱动程序支持、加载器

奥利维尔·库廷

(荣休)输入/输出XML(KML、GML)/GeoJSON函数、3D支持和错误修复。

克里斯·霍奇森

前PSC成员。一般开发、场地和建筑机器人维护、OSGeo孵化管理

Mateusz Loskot

CMake支持PostGIS,构建了原始的Python栅格加载器和低级栅格API函数

凯文·纽菲尔德

前PSC成员。文档和文档支持工具、构建机器人维护、对PostGIS新闻组的高级用户支持以及对PostGIS维护功能的增强。

戴夫·布莱斯比

PostGIS的原始开发者/联合创始人。Dave编写了服务器端对象、索引绑定和许多服务器端分析函数。

杰夫·朗斯伯里

Shapefile加载器/翻车机的原始开发。

马克·莱斯利

持续维护和发展核心职能。增强的曲线支持。Shapefile图形用户界面加载器。

皮埃尔·拉辛

PostGIS栅格实施的架构师。栅格整体架构、原型、编程支持

大卫·兹瓦格

栅格开发(主要是地图代数解析函数)

1.4. 其他贡献者

个人贡献者

亚历克斯·博德纳鲁格雷格·特罗克塞尔马特·布雷尔
亚历克斯·梅罗费尔纪尧姆·拉尔日马提亚斯湾
安德里亚·佩里朱塞佩·布罗科洛马克西姆·吉洛
安德烈亚斯·托勒夫森韩旺马克西姆·范·诺本
安德烈亚斯·诺伊曼Haribabu Kommi迈克尔·福尔
安德鲁·吉尔斯Havard Tveite迈克·图伊斯
安妮·吉斯拉饭田哲司内森·瓦格纳
安托万·巴约莱特英格维尔德·尼斯图恩纳撒尼尔·克莱
亚瑟·莱苏伊斯冷成龙尼基塔·舒尔加
阿图尔·扎基罗夫詹姆斯·马卡诺曼·维恩
芭芭拉·菲利波特简·卡廷斯帕特里夏·托泽
本·朱布杰森·史密斯拉法尔·马格达
伯恩哈德·赖特杰夫·亚当斯拉尔夫·梅森
比约恩·埃塞尔吉姆·琼斯雷米·库拉
布莱恩·哈姆林乔·康威理查德·格林伍德
布鲁斯·林达尔乔恩·萨沃莱宁罗杰船员
布鲁诺·沃尔夫三世何塞·卡洛斯·马丁内斯·拉利罗恩·梅耶尔
布莱斯·L·诺德格伦约尔格·哈伯尼赫特Sebastiaan Couwenberg
卡尔·安德森朱利安·鲁豪德谢尔盖·舒尔巴科夫
查理·萨维奇卡希夫·拉苏尔谢尔盖·费多塞夫
克里斯托夫·伯格克劳斯·福斯特杉山真一
克里斯托夫·莫奇-泰格德克里斯·尤尔卡Shoaib Burq
Dane Springmeyer劳伦茨·阿尔贝西尔维奥·格罗索
戴夫·富里拉尔斯·罗斯西格斯特凡·科尼利乌·佩特里亚
大卫·加尼耶徐利奥斯特芬·麦克
大卫·斯基亚洛伊克·巴托莱蒂斯捷潘·库兹明
大卫·特谢尔Loic Dachary斯蒂芬·弗罗斯特
德米特里·瓦西里耶夫卢卡·S·珀西奇史蒂文·奥滕斯
埃杜因·卡里洛卢卡斯·C·比利亚·雷亚尔塔尔哈·里兹万
尤金·安蒂米罗夫玛丽亚·阿里亚斯·德·雷纳汤姆·格兰西
甚至连鲁奥特马克·杜科布汤姆·范·蒂尔伯格
弗兰克·沃默达姆马克·桑德海姆文森特·莫拉
乔治·席尔瓦马库斯·沙伯文森特·皮卡韦
杰拉尔德·费诺伊马库斯·万纳Volf Tomáš
吉诺·卢克雷齐马特·阿莫斯 

企业赞助商

这些是为PostGIS项目贡献开发人员时间、托管或直接货币资金的公司实体。按字母顺序排列:

众筹活动

众筹活动是我们开展的活动,目的是为能够服务于大量人的急需的功能提供资金。每个活动都特别关注一个或一组特定的功能。每个赞助商只需投入所需资金的一小部分,而且有足够的人/组织捐款,我们就有资金支付将帮助许多人的工作。如果你有一个功能的想法,你认为许多其他人会愿意共同出资,请张贴到 PostGIS新闻组 你的想法和我们的共同努力可以让它成为现实。

PostGIS2.0.0是我们尝试这一策略的第一个版本。我们用了 PledgeBank 我们从中获得了两次成功的竞选活动。

后牙周学 -10个以上的赞助商每人出资250美元来构建toTopGeometry函数并在2.0.0中增强对拓扑的支持。事情发生了。

Postgis64windows -20多个赞助商每人捐赠了100美元,用于支付在Windows上解决PostGIS 64位问题所需的工作。事情发生了。

重要支持库

这个 GEOS 几何运算库

这个 GDAL 地理空间数据抽象库用于增强PostGIS2中引入的大部分栅格功能。同样,GDAL中支持PostGIS所需的改进也将回馈给GDAL项目。

这个 PROJ 地图投影库

最后但并非最不重要, PostgreSQL ,邮政地理信息系统赖以生存的巨人。如果没有PostgreSQL提供的可扩展性、强大的查询规划器、GIST索引和大量的SQL特性,PostGIS的大部分速度和灵活性都是不可能的。

Chapter 2. PostGIS安装

本章详细介绍安装PostGIS所需的步骤。

2.1. 简略版

要在假设搜索路径中具有所有依赖项的情况下进行编译,请执行以下操作:

tar -xvfz postgis-3.3.0dev.tar.gz
cd postgis-3.3.0dev
./configure
make
make install

安装PostGIS后,需要启用它( Section 3.3, “创建空间数据库” )或升级( Section 3.4, “升级空间数据库” )在要在其中使用它的每个单独数据库中。

2.2. 从源代码编译和安装

[Note]

许多操作系统现在都包含针对PostgreSQL/PostGIS的预建程序包。在许多情况下,只有当您想要最先进的版本或您是包的维护者时,编译才是必要的。

本节包括一般编译说明,如果您正在为Windows ETC或其他操作系统编译,您可以在以下位置找到更多更详细的帮助 PostGIS用户贡献的编译指南 PostGIS开发人员维基

中列出了针对各种操作系统的预建程序包 PostGIS预建程序包

如果您是Windows用户,则可以通过StackBuilder或 PostGIS Windows下载站点 我们也有 非常尖端的Windows试验性构建 通常每周建造一到两次,或者每当有令人兴奋的事情发生时。您可以使用这些工具来体验正在进行的PostGIS版本

The PostGIS module is an extension to the PostgreSQL backend server. As such, PostGIS 3.3.0dev requires full PostgreSQL server headers access in order to compile. It can be built against PostgreSQL versions 11 or higher. Earlier versions of PostgreSQL are not supported.

如果您尚未安装PostgreSQL,请参阅PostgreSQL安装指南。 http://www.postgresql.org

[Note]

对于GEOS功能,在安装PostgresSQL时,可能需要将PostgreSQL显式链接到标准C++库:

LDFLAGS=-lstdc++./在此处配置[您的选项]

这是一种针对伪C++异常与旧开发工具交互的变通方法。如果您遇到奇怪的问题(后端意外关闭或类似的事情),请尝试此技巧。当然,这需要从头开始重新编译您的PostgreSQL。

以下步骤概述了PostGIS源代码的配置和编译。它们是为Linux用户编写的,不能在Windows或Mac上运行。

2.2.1. 获取来源

Retrieve the PostGIS source archive from the downloads website http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

wget http://postgis.net/stuff/postgis-3.3.0dev.tar.gz
tar -xvzf postgis-3.3.0dev.tar.gz

这将创建一个名为 邮局- 3.3.0dev 在当前工作目录中。

或者,从 吉特 存储库 https://git.osgeo.org/gitea/postgis/postgis/

Git克隆https://git.osgeo.org/gitea/postgis/postgis.git Postgis

更改为新创建的 PostGIS 目录以继续安装。

2.2.2. 安装要求

PostGIS对构建和使用有以下要求:

必填项

  • PostgreSQL 11 或者更高。需要完整安装PostgreSQL(包括服务器标头)。可从以下网址获得PostgreSQL http://www.postgresql.org

    有关完整的PostgreSQL/PostGIS支持列表和PostGIS/GEOS支持列表,请参阅 http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • GNU C编译器( GCC )。其他一些ANSI C编译器可用于编译PostGIS,但我们在使用编译时发现问题要少得多 GCC

  • GNU Make( GMake 制作 )。对于许多系统,GNU 制作 是Make的默认版本。通过调用以下命令检查版本 Make-V 。其他版本的 制作 可能不会处理PostGIS 生成文件 恰到好处。

  • 项目重投影库。要求项目4.9或以上。Proj库用于在PostGIS中提供坐标重投影支持。可从以下地址下载项目 https://proj.org/

  • GEOS几何库,3.6版或更高版本,但需要GEOS 3.9+才能充分利用所有新功能和特性。可从以下地址下载GEOS http://trac.osgeo.org/geos/

  • LibXML2,2.5.x版或更高版本。LibXML2目前用于一些导入函数(ST_GeomFromGML和ST_GeomFromKML)。LibXML2可从以下地址下载 http://xmlsoft.org/downloads.html

  • JSON-C,0.9版或更高版本。JSON-C目前用于通过函数ST_GeomFromGeoJson导入GeoJSON。JSON-C可从以下地址下载 https://github.com/json-c/json-c/releases/

  • 需要GDAL版本2+,最好是3+版本。这是栅格支持所必需的。 http://trac.osgeo.org/gdal/wiki/DownloadSource

  • 如果使用PostgreSQL+JIT编译,则为LLVM版本 > =6是必填项 https://trac.osgeo.org/postgis/ticket/4125

可选

  • GDAL(伪可选)只有当您不想要栅格时,才可以省略它。此外,请确保启用要使用的驱动程序,如中所述 Section 3.2, “配置栅格支持”

  • Gtk(需要gtk+2.0、2.8+)来编译shp2pgsql-gui图形文件加载器。 http://www.gtk.org/

  • 建议使用SFCGAL 1.3.1(或更高版本)、1.4.0或更高版本。SFCGAL可用于为PostGIS cf提供额外的2D和3D高级分析功能 Section 8.20, “SFCGAL函数” 。还允许将SFCGAL而不是GEOS用于由两个后端提供的一些2D函数(例如,ST_Interaction或ST_Area)。一个PostgreSQL配置变量 postgis.backend 如果安装了SFCGAL(默认情况下是GEOS),允许最终用户控制他想要使用的后端。注意:SFCGAL 1.2至少需要CGAL 4.3和Boost 1.54(参见: https://oslandia.gitlab.io/SFCGAL/dev.html ) https://gitlab.com/Oslandia/SFCGAL/

  • 为了建造 Section 14.1, “地址标准器” 您还需要PCRE http://www.pcre.org (它通常已经安装在NIX系统上)。 正则表达式::装配 Perl CPAN包仅在您想要重建在 Parseaddress-stcities.h Section 14.1, “地址标准器” 如果它检测到PCRE库,或者您传入了有效的 --with-pcre-dir=/Path/to/pcre 在配置过程中。

  • 要启用ST_AsMVT Protobuf-c库1.1.0或更高版本(用于使用)和proc-c编译器(用于构建)。此外,需要使用pkg-config来验证正确的最低版本的probuf-c。看见 Protobuf-c 。默认情况下,Postgis将使用Wagyu更快地验证MVT多边形,这需要C++11编译器。它将使用CXXFLAGS和与PostgreSQL安装相同的编译器。要禁用此功能并改用GEOS,请使用 --无和酒 在配置步骤期间。

  • CUnit( CUnit )。这是回归测试所必需的。 http://cunit.sourceforge.net/

  • DocBook( Xsltproc )是构建文档所必需的。Docbook可从 http://www.docbook.org/

  • DBLatex( Dblatex )是构建PDF格式文档所必需的。DBLatex可从以下网址获得 http://dblatex.sourceforge.net/

  • ImageMagick( 转换 )才能生成文档中使用的图像。ImageMagick可从 http://www.imagemagick.org/

2.2.3. 生成配置

与大多数Linux安装一样,第一步是生成将用于构建源代码的Makefile。这是通过运行外壳脚本来完成的

./configure

在没有附加参数的情况下,该命令将尝试自动定位在您的系统上构建PostGIS源代码所需的组件和库。尽管这是最常见的 ./配置 对于那些在非标准位置拥有所需的库和程序的用户,该脚本接受几个参数。

以下列表仅显示最常用的参数。有关完整列表,请使用 --救命 --帮助=简短 参数。

--with-library-minor-version

从PostGIS 3.0开始,默认生成的库文件将不再将次要版本作为文件名的一部分。这意味着所有的PostGIS 3库都将以 Postgis-3 。这样做是为了使PG_Upgrade更容易,缺点是您只能在服务器上安装一个版本的PostGIS3系列。要获取包括次要版本的文件的旧行为:例如 Postgis-3.0 将此开关添加到您的配置语句中。

--prefix=PREFIX

这是将安装PostGIS加载器可执行文件和共享库的位置。默认情况下,此位置与检测到的PostgreSQL安装位置相同。

[Caution]

此参数当前无效,因为该程序包将仅安装到PostgreSQL安装目录中。参观 http://trac.osgeo.org/postgis/ticket/635 来追踪这个窃听器。

--with-pgconfig=FILE

PostgreSQL提供了一个名为 pg_config 以使像PostGIS这样的扩展能够找到PostgreSQL安装目录。使用此参数( --with-pgCONFIG=/路径/至/PG_CONFIG )以手动指定特定的PostgreSQL安装,PostGIS将基于该安装进行构建。

--with-gdalconfig=FILE

GDAL是必需库,提供栅格支持所需的功能 Gdal-配置 以使软件安装能够找到GDAL安装目录。使用此参数( --with-gdalconfig=/路径/至/gdal-config 手动指定一个特定的GDAL安装,PostGIS将基于该安装进行构建。

--with-geosconfig=FILE

GEOS是必需的几何库,它提供了一个名为的实用程序 GEOS-配置 以使软件安装能够找到GEOS安装目录。使用此参数( --with-geosconfig=/路径/至/geos-config 手动指定特定的GEOS安装,PostGIS将基于该安装进行构建。

--with-xml2config=FILE

LibXML是执行GeomFromKML/GML过程所需的库。如果您已安装libxml,则通常会找到它,但如果未安装或想要使用特定版本,则需要将PostGIS指向特定的 XML2-配置 配置文件,使软件安装能够找到LibXML安装目录。使用此参数( >--with-xml2config=/Path/to/xml2-config 手动指定特定的LibXML安装,PostGIS将基于该安装进行构建。

--with-projdir=DIR

Proj是PostGIS所需的重投影库。使用此参数( --with-projdir=/路径/至/projdir )手动指定特定的项目安装目录,PostGIS将根据该目录进行构建。

--with-libiconv=DIR

安装图标v的目录。

--with-jsondir=DIR

JSON-C 是PostGIS ST_GeomFromJSON支持所需的麻省理工学院许可的JSON库。使用此参数( --with-jsondir=/Path/to/jsondir )来手动指定特定的JSON-C安装目录,PostGIS将根据该目录进行构建。

--with-pcredir=DIR

PCRE 是ADDRESS_STANDAREZER扩展所需的BSD许可的Perl兼容正则表达式库。使用此参数( --with-pcredir=/路径/至/pcredir )手动指定特定的PCRE安装目录,PostGIS将根据该目录进行构建。

--with-gui

编译数据导入图形用户界面(需要GTK+2.0)。这将创建shp2pgsql-gui到shp2pgsql的图形界面。

--without-raster

在没有栅格支持的情况下编译。

--without-topology

禁用拓扑支持。没有相应的库,因为拓扑所需的所有逻辑都在postgis中- 3.3.0dev 类库。

--with-gettext=no

默认情况下,PostGIS将尝试检测GetText支持并使用它进行编译,但是如果遇到导致加载程序损坏的不兼容问题,可以使用此命令完全禁用它。请参阅票证 http://trac.osgeo.org/postgis/ticket/748 对于通过使用此配置解决的问题的示例。注意:关闭此功能不会错过太多内容。它用于对图形用户界面加载器的国际帮助/标签支持,该加载器尚未形成文档,仍处于实验阶段。

--with-sfcgal=PATH

默认情况下,如果没有此开关,PostGIS将不会安装sfcga支持。 PATH 是一个可选参数,它允许指定sfcga-config的替代路径。

--without-phony-revision

禁用更新postgis_revision.h以匹配git存储库的当前头。

[Note]

如果您是从 代码库 ,第一步是真正运行脚本

./autogen.sh

此脚本将生成 配置 脚本,而该脚本又用于定制PostGIS的安装。

如果您以tarball的形式获取了PostGIS,运行 ./Autogen.sh 不是必需的,因为 配置 已经生成了。

2.2.4. 大楼

生成Makefile后,构建PostGIS就像运行

make

输出的最后一行应该是“ 邮政地理信息系统建设成功。已准备好安装。

从PostGISv1.4.0开始,所有函数都有从文档生成的注释。如果您希望稍后将这些注释安装到空间数据库中,请运行需要docbook的命令。Postgis_Comments.sql和其他包注释文件raster_Comments.sql、topology_Comments.sql也打包在文档文件夹中的tar.gz分发包中,因此如果从tar ball安装,则不需要做任何注释。注释也是创建扩展安装的一部分。

发表评论

在PostGIS 2.0中引入。这将生成适合快速参考或学生讲义的html作弊单。这需要xsltproc来构建,并将在文档文件夹中生成4个文件 topology_cheatsheet.html tiger_geocoder_cheatsheet.html raster_cheatsheet.html postgis_cheatsheet.html

您可以从以下地址下载一些预构建的文档:html和pdf PostGIS/PostgreSQL学习指南

制作小抄

2.2.5. 构建和部署PostGIS扩展模块

如果您使用的是PostgreSQL 9.1+,则会自动构建和安装PostGIS扩展。

如果您是从源代码库构建,则需要首先构建函数描述。如果您安装了Docbook,就会构建这些文档。您还可以使用以下语句手动构建:

发表评论

如果您是从发布焦油球构建的,那么构建注释是不必要的,因为它们已经与tar球一起打包好了。

这些扩展应该作为Make Install过程的一部分自动构建。如果需要,您可以从扩展文件夹进行构建,或者在不同的服务器上复制需要的文件。

cd extensions
cd postgis
make clean
make
export PGUSER=postgres #overwrite psql variables
make check #to test before install
make install
# to test extensions
make check RUNTESTFLAGS=--extension
[Note]

勾选 使用psql运行测试,因此可以使用psql环境变量。可用于覆盖的常见类型有 PGUSER PGPORT ,以及 PGHOST 。请参阅 PSQL环境变量

无论操作系统如何,相同版本的PostGIS和PostgreSQL的扩展文件总是相同的,所以只要您的服务器上已经安装了PostGIS二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。

如果要在不同于开发的单独服务器上手动安装扩展模块,则需要将以下文件从扩展文件夹复制到 PostgreSQL/共享/扩展 您的PostgreSQL安装的文件夹,以及常规PostGIS所需的二进制文件(如果服务器上还没有它们的话)。

  • 这些是控制文件,表示要安装的扩展的版本等信息(如果未指定)。 Postgis.control、postgis_topology.control

  • 每个扩展名的/SQL文件夹中的所有文件。请注意,需要将这些文件复制到PostgreSQL共享/扩展文件夹的根目录 extensions/postgis/sql/*.sql extensions/postgis_topology/sql/*.sql

一旦你这样做了,你应该会看到 PostGIS postgis_topology 作为PgAdmin->扩展中的可用扩展。

如果您使用的是psql,则可以通过运行以下查询来验证是否安装了扩展:

SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 3.3.0dev         | 3.3.0dev
 address_standardizer_data_us | 3.3.0dev         | 3.3.0dev
 postgis                      | 3.3.0dev         | 3.3.0dev
 postgis_raster               | 3.3.0dev         | 3.3.0dev
 postgis_sfcgal               | 3.3.0dev         |
 postgis_tiger_geocoder       | 3.3.0dev         | 3.3.0dev
 postgis_topology             | 3.3.0dev         |
(6 rows)

如果您在要查询的数据库中安装了扩展,您将在 installed_version 纵队。如果你没有收到任何记录,那就意味着你根本没有在服务器上安装Postgis扩展。PgAdmin III 1.14+也将在 扩展部分 部分,甚至可以通过右击进行升级或卸载。

如果您有可用的扩展,则可以通过使用pgAdmin扩展接口或运行以下SQL命令在您选择的数据库中安装Postgis扩展:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

在psql中,您可以使用查看您已经安装了哪些版本,以及它们安装了什么模式。

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.3.0dev
Schema      | public
Description | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
Name        | postgis_raster
Version     | 3.0.0dev
Schema      | public
Description | PostGIS raster types and functions
-[ RECORD 3 ]-------------------------------------------------
Name        | postgis_tiger_geocoder
Version     | 3.3.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.3.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

扩展表 spatial_ref_sys 图层 拓扑学 无法显式备份。它们只能在以下情况下备份 PostGIS postgis_topology 扩展是备份的,这似乎只有在备份整个数据库时才会发生。从PostGIS 2.0.1开始,在备份数据库时,只备份未与PostGIS打包的SRID记录,因此不要到处更改我们打包的SRID,并期望您的更改会在那里生效。如果你发现问题,就开罚单。扩展表的结构从未备份过,因为它们是使用创建的 创建扩展名 并且假定对于给定版本的扩展是相同的。这些行为都内置于当前的PostgreSQL扩展模型中,因此我们对此无能为力。

如果您安装了 3.3.0dev ,在不使用我们出色的扩展系统的情况下,您可以通过运行以下命令将函数打包到各自的扩展中,从而将其更改为基于扩展的。安装使用 `unpackaged` 已在PostgreSQL 13中删除,因此建议您在升级到PostgreSQL 13之前切换到扩展版本。

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.2.6. 测试

如果要测试PostGIS构建,请运行

勾选

上面的命令将使用生成的库对实际的PostgreSQL数据库运行各种检查和回归测试。

[Note]

如果使用非标准的PostgreSQL、GEOS或Proj位置配置了PostGIS,则可能需要将它们的库位置添加到 LD_LIBRARY_PATH 环境变量。

[Caution]

目前, 勾选 依赖于 PATH PGPORT 执行检查时的环境变量-它确实如此 使用可能已使用配置参数指定的PostgreSQL版本 --with-pgconfig 。因此,确保在配置期间修改路径以匹配检测到的PostgreSQL安装,或者做好应对即将到来的令人头疼的事情的准备。

如果成功,Make Check将产生近500个测试的输出。结果将类似于以下内容(下面省略了许多行):

CUnit - A unit testing framework for C - Version 2.1-3
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     44     44    n/a      0        0
               tests    300    300    300      0        0
             asserts   4215   4215   4215      0      n/a
Elapsed time =    0.229 seconds

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 134
Failed: 0


-- if you build with SFCGAL

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 13
Failed: 0

-- if you built with raster support

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     12     12    n/a      0        0
               tests     65     65     65      0        0
             asserts  45896  45896  45896      0      n/a


        .
        .
        .

Running tests

        .
        .
        .

Run tests: 101
Failed: 0

-- topology regress

.
.
.

Running tests

        .
        .
        .

Run tests: 51
Failed: 0

-- if you built --with-gui, you should see this too

     CUnit - A unit testing framework for C - Version 2.1-2
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites      2      2    n/a      0        0
               tests      4      4      4      0        0
             asserts      4      4      4      0      n/a

这个 postgis_tiger_geocoder address_standardizer 扩展,目前只支持标准的PostgreSQL安装检查。要测试这些功能,请使用以下代码。注意:如果您已经在PostGIS代码文件夹的根目录下进行了安装,则不需要进行Make Install。

对于ADDRESS_STANDIZER:

cd extensions/address_standardizer
make install
make installcheck
          

输出应如下所示:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

对于Tiger地理编码器,请确保在您的PostgreSQL实例中有postgis和fuzzystrMatch扩展。如果您构建的postgis支持ADDRESS_STANDIZER,则ADDRESS_STANDAREZER测试也会生效:

cd extensions/postgis_tiger_geocoder
make install
make installcheck
          

输出应如下所示:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

=====================
All 2 tests passed.
=====================

2.2.7. 安装

要安装PostGIS,请输入

制造安装

这会将PostGIS安装文件复制到由指定的相应子目录中 --前缀 配置参数。特别是:

  • 加载器和转储程序二进制文件安装在 [前缀]/bin

  • SQL文件,如 postgis.sql 、安装在 [前缀]/Share/Conrib

  • PostGIS库安装在 [前缀]/lib

如果您以前运行过 发表评论 命令来生成 postgis_comments.sql raster_comments.sql 文件中,通过运行以下命令安装SQL文件

发表评论-安装

[Note]

postgis_comments.sql raster_comments.sql topology_comments.sql 从典型的构建和安装目标中分离出来,因为随之而来的是对 Xsltproc

2.3. 安装和使用地址标准化程序

这个 address_standardizer 扩展曾经是一个单独的包,需要单独下载。从PostGIS2.2开始,它现在被捆绑在一起。有关ADDRESS_STANDARIZE、它的作用以及如何根据您的需要进行配置的详细信息,请参阅 Section 14.1, “地址标准器”

此标准化程序可与PostGIS打包的Tiger地理编码器扩展模块配合使用,以替代 Normalize_Address 讨论过。要用作替代,请参阅 Section 2.4.3, “将地址标准化扩展与Tiger地理编码器结合使用” 。您还可以使用它作为您自己的地理编码器的构建块,或者使用它来标准化您的地址,以便更容易地比较地址。

地址标准化程序依赖于PCRE,它通常已经安装在许多NIX系统上,但您可以在以下位置下载最新版本: http://www.pcre.org 。如果在此期间 Section 2.2.3, “生成配置” ,则将自动构建地址标准化扩展。如果您有想要使用的自定义PCRE安装,请转到配置 --with-pcredir=/PATH/TO/PCRE 哪里 /Path/to/pcre 是您的PCRE Include和lib目录的根文件夹。

对于Windows用户,PostGIS 2.1+捆绑包已打包为ADDRESS_STANDAREZER,因此无需编译即可直接转到 创建扩展名 一步。

安装后,您可以连接到数据库并运行SQL:

创建扩展地址_标准化器;

以下测试不需要规则、GAZ或lex表

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

输出应为

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.3.1. 安装Regex::Assetble

Perl Regex:编译ADDRESS_STANDAREZER扩展不再需要ASSEMBLE,因为它生成的文件是源代码树的一部分。但是,如果您需要编辑 Usps-st-city-orig.txt Usps-st-City-Orig.txt usps-st-City-adds.tx ,你需要重建 Parseaddress-stcities.h 这确实需要Regex:组装。

CPAN Regexp::汇编

或者,如果您使用的是Ubuntu/Debian,您可能需要这样做

Sudo Perl-MCPAN-e“Install Regexp::ASSEMBLE”

2.4. 安装、升级Tiger地理编码器并加载数据

在您的PostGIS发行版中可能不会打包额外的组件,如Tiger GeoCoder。如果您缺少Tiger地理编码器扩展模块,或者想要一个比您安装的版本更新的版本,请使用 share/extension/postgis_tiger_geocoder.* 中的包中的文件 Windows未发布版本 部分,用于您的PostgreSQL版本。虽然这些包是针对Windows的,但是postgis_Tiger_Geocoder扩展文件可以在任何操作系统上运行,因为该扩展只是一个SQL/plpgsql扩展。

2.4.1. 启用PostGIS数据库的Tiger地理编码器:使用扩展模块

如果您使用的是PostgreSQL9.1+和PostGIS2.1+,您可以利用新的扩展模型来安装Tiger Geocoder。要执行此操作,请执行以下操作:

  1. 首先获取用于PostGIS2.1+的二进制文件,或者像往常一样编译和安装。这应该也会为Tiger地理编码器安装必要的扩展文件。

  2. 通过psql或pgAdmin或其他工具连接到您的数据库,并运行以下SQL命令。请注意,如果您要在已安装了postgis的数据库中进行安装,则不需要执行第一步。如果你有 模糊匹配 扩展已经安装,您也不需要执行第二步。

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    如果您已经安装了postgis_Tiger_Geocoder扩展,并且只想更新到最新运行:

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    如果您对以下项进行了自定义条目或更改 tiger.loader_platform tiger.loader_variables 您可能需要更新这些内容。

  3. 要确认安装工作正常,请在数据库中运行以下SQL:

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
            FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    哪一项应该输出

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
               1 | Devonshire | Pl               | 02109
  4. 在中创建新记录 tiger.loader_platform 表中包含可执行文件和服务器的路径。

    例如,要创建一个名为Debbie的配置文件,如下所示 SH 这是惯例。您会这样做:

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
                       loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
               loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    ,然后在 declare_sect 列到适合Debbie的pg、解压缩、shp2pgsql、psql等路径位置的位置。

    如果你不编辑这个 loader_platform 表中,它将只包含项目的常见案例位置,并且您必须在生成脚本后编辑生成的脚本。

  5. 从PostGIS 2.4.1开始,邮政编码-5位数字制表区域 Zcta5 已修改加载步骤以加载当前的zcta5数据,该步骤是 Loader_Generate_Nation_Script 启用时。默认情况下,它被关闭,因为它需要相当长的加载时间(20到60分钟),占用相当多的磁盘空间,并且不经常使用。

    要启用它,请执行以下操作:

    UPDATE tiger.loader_lookupables set Load=true where table_name=‘zcta510’;

    如果存在,则 地理编码 函数可以使用它,如果添加了边界过滤器以将其限制为仅在该边界内压缩。这个 Reverse_Geocode 如果返回的地址缺少邮政编码,函数会使用它,这在高速公路反向地理编码中经常发生。

  6. 创建一个名为 地理数据 在服务器的根目录或您的本地PC上(如果您有到服务器的快速网络连接)。该文件夹是Tiger文件下载和处理的位置。如果您不满意将文件夹放在服务器的根目录下,或者只是想切换到其他文件夹进行转移,请编辑该字段 staging_fold tiger.loader_variables 桌子。

  7. 在中创建一个名为Temp的文件夹 地理数据 文件夹或您指定的 staging_fold 成为。这将是加载器提取下载的Tiger数据的文件夹。

  8. 然后运行 Loader_Generate_Nation_Script SQL函数确保使用您的自定义配置文件的名称,并将脚本复制到.sh或.bat文件。因此,举例来说,要建立国家负载:

    Psql-c“SELECT Loader_GENERATE_Nation_SCRIPT(‘Debbie’)”-d地理编码器-Ta
    >/gisdata/National_SCRIPT_load.sh
  9. 运行生成的National Load命令行脚本。

    cd /gisdata
    sh nation_script_load.sh
  10. 在完成国家脚本的运行之后,您的 tiger_data 架构,并且它们应该用数据填充。通过从psql或pgAdmin执行以下查询来确认

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3233
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    
  11. 默认情况下,与 BG 选项卡块 都没有装填。这些表不被地理编码员使用,但被人们用于人口统计。如果希望将它们作为状态加载的一部分进行加载,请运行以下语句以启用它们。

    UPDATE tiger.loader_lookupables set LOAD=TRUE WHERE LOAD=FALSE AND LOOKUP_NAME IN(‘TRACE’,‘BG’,‘TABBLOCK’);

    或者,也可以在加载状态数据后使用 Loader_Generate_Census_Script

  12. 对于要加载数据的每个州,生成一个状态脚本 Loader_Generate_Script

    [Warning]

    在加载国家数据之前,不要生成州脚本,因为州脚本使用由国家脚本加载的县列表。

  13. Psql-c“选择加载器生成脚本(数组[‘MA’],‘Debbie’)”-d地理编码器-Ta
    >/gisdata/ma_load.sh
  14. 运行生成的命令行脚本。

    cd /gisdata
    sh ma_load.sh
  15. 在加载完所有数据或在停止点之后,分析所有Tiger表以更新统计信息(包括继承的统计信息)是一个好主意

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.4.1.1. 将Tiger地理编码器常规安装转换为扩展模型

如果您安装了Tiger地理编码器而不使用扩展模型,则可以按如下方式转换为扩展模型:

  1. 按照中的说明操作 Section 2.4.5, “升级您的Tiger地理编码器安装” 用于非扩展型号升级。

  2. 使用psql或pgAdmin连接到您的数据库,并运行以下命令:

    从解包创建扩展postgis_Tiger_Geocoder;

2.4.2. 启用您的PostGIS数据库的Tiger地理编码器:不使用扩展模块

首先按照前面的说明安装PostGIS。

如果您没有附加文件夹,请下载 http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

TAR xvfz postgis- 3.3.0dev .tar.gz

CD Postgis- 3.3.0dev /extras/tiger_geocoder

编辑 tiger_loader_2015.sql (或您找到的最新加载程序文件,除非您想加载不同的年份)到您的可执行文件服务器的路径等,或者您也可以更新 loader_platform 表一旦安装。如果您不编辑此文件或 loader_platform 表中,它将只包含项的常见用例位置,并且您必须在运行 Loader_Generate_Nation_ScriptLoader_Generate_Script SQL函数。

如果您是第一次安装Tiger Geocoder,请编辑 create_geocode.bat 如果您使用的是Windows或 create_geocode.sh 如果您在Linux/Unix/Mac OSX上使用您的PostgreSQL特定设置,并从命令行运行相应的脚本。

验证您现在是否拥有 老虎 模式,并且它是数据库Search_PATH的一部分。如果不是,则使用以下行的命令添加它:

ALTER DATABASE geocoder SET search_path=public, tiger;

标准化地址功能或多或少地在没有任何数据的情况下工作,除了棘手的地址。运行此测试并验证情况如下:

SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;
pretty_address
---------------------------------------
202 E Fremont St, Las Vegas, NV 89101
                        

2.4.3. 将地址标准化扩展与Tiger地理编码器结合使用

人们抱怨的众多问题之一是地址归一化功能 Normalize_Address 在进行地理编码之前对地址进行标准化以进行准备的功能。规格化器远不是完美的,试图修补其不完美需要大量的资源。因此,我们已经与另一个具有更好的地址标准化引擎的项目进行了集成。要使用这个新的ADDRESS_STANDAREZER,请按照中所述编译扩展 Section 2.3, “安装和使用地址标准化程序” 并作为扩展安装在您的数据库中。

在已安装的数据库中安装此扩展模块后 postgis_tiger_geocoder ,然后 Pagc_Normalize_Address 可以用来代替 Normalize_Address 。该扩展与Tiger无关,因此可以与其他数据源一起使用,例如国际地址。Tiger地理编码器扩展模块与其自己的自定义版本打包在一起 规则表 ( tiger.pagc_rules )、 GAZ表 ( tiger.pagc_gaz ),以及 Lex表 ( tiger.pagc_lex )。您可以添加和更新这些,以改善您的标准化体验,以满足您自己的需求。

2.4.4. 正在加载TIGER数据

加载数据的说明以更详细的形式在 extras/tiger_geocoder/tiger_2011/README 。这只包括一般步骤。

加载过程从人口普查网站下载所请求的各个国家文件、州的数据,提取文件,然后将每个州加载到其自己的一组单独的州表中。每个状态表继承自中定义的表 老虎 模式,因此只需查询这些表即可访问所有数据,并在任何时候使用 Drop_State_Tables_Generate_Script 如果您需要重新加载状态,或者只是不再需要状态。

为了能够加载数据,您需要以下工具:

  • 一个从人口普查网站解压压缩文件的工具。

    对于类Unix系统: 解压缩 通常已经安装在大多数类Unix平台上的可执行文件。

    Windows 7-Zip,这是一个免费的压缩/解压缩工具,您可以从 http://www.7-zip.org/

  • shp2pgsql 默认情况下在安装PostGIS时安装的命令行。

  • WGET 这是一种通常安装在大多数Unix/Linux系统上的网络抓取工具。

    如果您使用的是Windows,则可以从 http://gnuwin32.sourceforge.net/packages/wget.htm

如果要从Tiger_2010升级,则需要首先生成并运行 Drop_Nation_Tables_Generate_Script 。在加载任何州数据之前,您需要加载全国范围的数据 Loader_Generate_Nation_Script 。它将为您生成一个加载器脚本。 Loader_Generate_Nation_Script 这是升级(从2010年起)和新安装时应该完成的一次性步骤。

要加载状态数据,请参阅 Loader_Generate_Script 为您的平台生成所需状态的数据加载脚本。请注意,您可以逐个安装这些组件。您不必一次加载您想要的所有状态。您可以在需要时加载它们。

加载所需的状态后,请确保运行:

 选择INSTALL_MISSING_INDEX(); 

如中所述 Install_Missing_Indexes

要测试是否正常运行,请尝试使用以下命令对您所在州的地址运行地理编码 地理编码

2.4.5. 升级您的Tiger地理编码器安装

如果你已经安装了2.0+的Tiger Geocode包,你可以在任何时候升级功能,即使是从临时的焦油球,如果有你迫切需要的修复程序。这将仅适用于未安装扩展的Tiger Geocoder。

如果您没有附加文件夹,请下载 http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

TAR xvfz postgis- 3.3.0dev .tar.gz

CD Postgis- 3.3.0dev /extras/tiger_geocoder/tiger_2011

找到 upgrade_geocoder.bat 如果您使用的是Windows或 upgrade_geocoder.sh 如果您使用的是Linux/Unix/Mac OSX。编辑该文件以拥有您的Postgis数据库凭据。

如果要从2010或2011升级,请确保取消对加载器脚本行的注释,以便获得用于加载2012年数据的最新脚本。

然后从命令行运行相应的脚本。

接下来,删除所有的国家表并加载新的表。使用此SQL语句生成删除脚本,详细信息请参见 Drop_Nation_Tables_Generate_Script

SELECT drop_nation_tables_generate_script();

运行生成的DROP SQL语句。

使用此SELECT语句生成国家加载脚本,详细信息请参见 Loader_Generate_Nation_Script

对于Windows

SELECT loader_generate_nation_script('windows'); 

适用于Unix/Linux

SELECT loader_generate_nation_script('sh');

请参阅 Section 2.4.4, “正在加载TIGER数据” 以获取有关如何运行生成脚本的说明。这只需要做一次。

[Note]

您可以混合使用2010/2011州表,并且可以分别升级每个州。在将一个州升级到2011年之前,首先需要使用以下命令删除该州的2010个表 Drop_State_Tables_Generate_Script

2.5. 安装过程中的常见问题

当您的安装或升级没有按照预期进行时,有几点需要检查。

  1. 检查您是否已安装PostgreSQL 11 或更高版本,并且您正在使用与正在运行的PostgreSQL版本相同的PostgreSQL源代码版本进行编译。当您的(Linux)发行版已经安装了PostgreSQL,或者您以前安装了PostgreSQL但忘记了它时,可能会发生混淆。PostGIS将仅与PostgreSQL配合使用 11 或者,如果您使用较旧的版本,则会出现更新的、奇怪的、意外的错误消息。要检查正在运行的PostgreSQL的版本,请使用psql连接到数据库并运行以下查询:

    SELECT version();

    如果您运行的是基于RPM的发行版,则可以使用 转速 命令如下: Rpm-qa|grep PostgreSQL

  2. 如果升级失败,请确保正在还原到已安装了PostGIS的数据库。

    SELECT postgis_full_version();

还要检查Configure是否正确检测到了PostgreSQL、Proj库和GEOS库的位置和版本。

  1. CONFigure的输出用于生成 postgis_config.h 文件。检查是否有 POSTGIS_PGSQL_VERSION POSTGIS_PROJ_VERSION POSTGIS_GEOS_VERSION 变量已正确设置。

Chapter 3. 邮政地理信息系统管理

3.1. 性能调整

针对PostGIS性能进行的调优与针对任何PostgreSQL工作负载进行的调优非常相似。唯一需要注意的是,几何图形和栅格通常都很大,因此与内存相关的优化通常比其他类型的PostgreSQL查询对PostGIS的影响更大。

有关优化PostgreSQL的一般详细信息,请参阅 调整您的PostgreSQL服务器

对于PostgreSQL 9.4+,无需接触即可在服务器级别设置配置 postgresql.conf postgresql.auto.conf 通过使用 更改系统 指挥部。

ALTER SYSTEM SET work_mem = '256MB';
-- this forces non-startup configs to take effect for new connections
SELECT pg_reload_conf();
-- show current setting value
-- use SHOW ALL to see all settings
SHOW work_mem;

除Postgres设置外,PostGIS还具有中列出的一些自定义设置 Section 8.23, “大统一自定义变量(GUC)”

3.1.1. 启动

这些设置在中配置 postgresql.conf

constraint_exclusion

  • 默认:分区

  • 这通常用于表分区。默认设置为“PARTITION”,这对于PostgreSQL 8.4和更高版本来说非常理想,因为它将强制规划者只分析处于继承层次结构中的表的约束考虑,否则不会支付规划者的惩罚。

shared_buffers

  • 默认:在PostgreSQL 9.6中为~128MB

  • 设置为可用RAM的约25%到40%。在Windows上,您可能无法将其设置为高。

max_worker_processes 此设置仅适用于PostgreSQL 9.4+。对于PostgreSQL 9.6+,此设置具有额外的重要性,因为它控制您可以拥有的并行查询的最大进程数。

  • 默认:8

  • 设置系统可以支持的最大后台进程数。此参数只能在服务器启动时设置。

3.1.2. 运行时

work_mem -设置用于排序操作和复杂查询的内存大小

  • 默认:1-4MB

  • 针对大型数据库、复杂查询、大量RAM进行调整

  • 向下调整以适应并发用户较多或RAM较低的情况。

  • 如果您有大量的RAM,但开发人员很少:

    将work_mem设置为‘256MB’;

maintenance_work_mem -真空、创建索引等使用的内存大小。

  • 默认:16-64MB

  • 通常过低-占用I/O,在交换内存时锁定对象

  • 建议在具有大量RAM的生产服务器上使用32MB到1 GB,但这取决于并发用户数。如果您有大量的RAM,但开发人员很少:

    将Maintenance_Work_mem设置为‘1 GB’;

max_parallel_workers_per_gather

此设置仅适用于PostgreSQL 9.6+,并且只会影响PostGIS 2.3+,因为只有PostGIS 2.3+支持并行查询。如果设置为大于0,则某些查询(如涉及关系函数的查询)如下 ST_Intersects 可以使用多个进程,并且运行速度是多个进程的两倍以上。如果您有很多处理器可供备用,则应该将此值更改为您所拥有的处理器数量。也要确保你的身体健康 max_worker_processes 至少和这个数字一样高。

  • 默认值:0

  • 设置一台计算机可以启动的最大工作进程数 聚集在一起 节点。并行工作进程是从 max_worker_processes 。请注意,所请求的工作进程数在运行时可能实际上不可用。如果发生这种情况,该计划运行时的员工人数将少于预期,这可能会降低效率。将此值设置为0(默认值)将禁用并行查询执行。

3.2. 配置栅格支持

如果您启用了栅格支持,您可能希望阅读下面的如何正确配置它。

从PostGIS 2.1.3开始,默认情况下禁用数据库外栅格和所有栅格驱动程序。要重新启用这些环境变量,您需要设置以下环境变量 POSTGIS_GDAL_ENABLED_DRIVERS POSTGIS_ENABLE_OUTDB_RASTERS 在服务器环境中。对于PostGIS 2.2,您可以使用更具跨平台的方法来设置相应的 Section 8.23, “大统一自定义变量(GUC)”

如果要启用脱机栅格,请执行以下操作:

POSTGIS_ENABLE_OUTDB_RASTERS=1

任何其他设置或根本没有设置都将禁用数据库栅格。

要启用GDAL安装中可用的所有GDAL驱动程序,请按如下方式设置此环境变量

POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

如果只想启用特定驱动程序,请按如下方式设置环境变量:

POSTGIS_GDAL_ENABLED_DRIVERS=“GTiff PNG JPEG GIF XYZ”
[Note]

如果您使用的是Windows,请不要引用驱动程序列表

环境变量的设置因操作系统而异。对于通过apt-postgreSQL安装在Ubuntu或Debian上的PostgreSQL,首选方式是编辑 /ETC/PostgreSQL/ 10 / 主干道 /环境 其中,10表示PostgreSQL的版本,main表示集群。

在Windows上,如果你是作为一项服务运行的,你可以通过系统变量来设置在Windows 7中,你可以通过右击Computer- > 属性高级系统设置或在资源管理器中导航到 控制面板\所有控制面板项目\系统 。然后点击 高级系统设置- > 高级->环境变量 以及添加新的系统变量。

设置环境变量后,需要重新启动PostgreSQL服务才能使更改生效。

3.3. 创建空间数据库

3.3.1. 使用扩展在空间上启用数据库

如果您使用的是PostgreSQL9.1+,并且已经编译和安装了扩展/postgis模块,则可以使用扩展机制将数据库转换为空间数据库。

核心的Postgis扩展包括几何、地理、空间参考系统以及所有的函数和注释。栅格和拓扑被打包为单独的扩展。

在要在空间上启用的数据库中运行以下SQL代码片段:

CREATE EXTENSION IF NOT EXISTS plpgsql;
      CREATE EXTENSION postgis;
      CREATE EXTENSION postgis_raster; -- OPTIONAL
      CREATE EXTENSION postgis_topology; -- OPTIONAL

3.3.2. 在不使用扩展的情况下在空间上启用数据库(不鼓励)

[Note]

通常只有当您不能或不想在PostgreSQL扩展目录中安装PostGIS时(例如,在测试、开发期间或在受限环境中),才需要这样做。

将PostGIS对象和函数定义添加到数据库中的方法是加载位于 [前缀]/Share/Conrib 如在构建阶段指定的。

核心PostGIS对象(几何和地理类型及其支持函数)位于 postgis.sql 剧本。栅格对象位于 rtpostgis.sql 剧本。拓扑对象位于 topology.sql 剧本。

对于一组完整的EPSG坐标系定义标识符,还可以将 spatial_ref_sys.sql 定义文件并填充 spatial_ref_sys 桌子。这将允许您对几何体执行ST_Transform()操作。

如果您想要向PostGIS函数添加注释,可以在 postgis_comments.sql 剧本。只需输入以下内容即可查看评论 \DD[函数名] 从一个 PSQL 终端窗口。

在您的终端中运行以下外壳命令:

DB=[yourdatabase]
    SCRIPTSDIR=`pg_config --sharedir`/contrib/postgis-3.2/

    # Core objects
    psql -d ${DB} -f ${SCRIPTSDIR}/postgis.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/spatial_ref_sys.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/postgis_comments.sql # OPTIONAL

    # Raster support (OPTIONAL)
    psql -d ${DB} -f ${SCRIPTSDIR}/rtpostgis.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/raster_comments.sql # OPTIONAL

    # Topology support (OPTIONAL)
    psql -d ${DB} -f ${SCRIPTSDIR}/topology.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/topology_comments.sql # OPTIONAL

3.3.3. 从模板创建支持空间的数据库

一些打包的PostGIS发行版(特别是用于PostGIS的Win32安装程序 > =1.1.5)将PostGIS函数加载到名为 template_postgis 。如果 template_postgis 数据库存在于您的PostgreSQL安装中,则用户和/或应用程序可以使用单个命令创建空间启用的数据库。请注意,在这两种情况下,数据库用户都必须被授予创建新数据库的权限。

从外壳中:

#createdb-T模板_postgis我的空间数据库

来自SQL:

Postgres=#CREATE DATABASE MY_SPATIAL_DBTEMPLATE=TEMPLATE_POSTGIS

3.4. 升级空间数据库

升级现有的空间数据库可能很棘手,因为它需要替换或引入新的PostGIS对象定义。

遗憾的是,并不是所有的定义都可以在实时数据库中轻松替换,所以有时您最好的选择是转储/重新加载过程。

PostGIS为次要或错误修复版本提供了软升级过程,为主要版本提供了硬升级过程。

在尝试升级PostGIS之前,备份您的数据总是值得的。如果您使用-fc标志来pg_ump,您将始终能够通过硬升级恢复转储。

3.4.1. 软升级

如果您使用扩展安装数据库,则还需要使用扩展模型进行升级。如果您使用旧的SQL脚本方式安装,建议您将安装切换到扩展,因为脚本方式不再受支持。

3.4.1.1. 使用扩展的软件升级9.1+

如果您最初安装的是带有扩展的PostGIS,那么您也需要使用扩展进行升级。用扩展进行一个小的升级是相当容易的。

如果您运行的是PostGIS3或更高版本,则应使用 PostGIS_Extensions_Upgrade 功能可升级到您已安装的最新版本。

SELECT postgis_extensions_upgrade();

如果您运行的是PostGIS 2.5或更低版本,请执行以下操作:

ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();
-- This second call is needed to rebundle postgis_raster extension
SELECT postgis_extensions_upgrade();

如果您安装了多个版本的PostGIS,并且不想升级到最新版本,则可以按如下方式明确指定版本:

ALTER EXTENSION postgis UPDATE TO "3.3.0dev";
ALTER EXTENSION postgis_topology UPDATE TO "3.3.0dev";

如果收到类似以下内容的错误通知:

没有为…定义迁移路径至 3.3.0dev

然后,您需要备份数据库,创建一个新的数据库,如中所述 Section 3.3.1, “使用扩展在空间上启用数据库” 然后在这个新数据库上恢复备份。

如果您收到如下通知消息:

版本“ 3.3.0dev 已安装扩展模块“postgis”的

那么一切都已经是最新的,您可以放心地忽略它。 UNLESS 您正在尝试从开发版本升级到下一个版本(没有获得新的版本号);在这种情况下,您可以在版本字符串后附加“Next”,下一次您将需要再次删除“Next”后缀:

ALTER EXTENSION postgis UPDATE TO "3.3.0devnext";
ALTER EXTENSION postgis_topology UPDATE TO "3.3.0devnext";
[Note]

如果最初安装的PostGIS没有指定版本,则在恢复之前通常可以跳过重新安装postgis扩展模块,因为备份刚刚 创建扩展邮政编码 从而在恢复期间获取最新的最新版本。

[Note]

如果要从3.0.0之前的版本升级PostGIS扩展模块,您将拥有一个新的扩展模块 postgis_raster 如果您不需要栅格支持,则可以安全地将其删除。您可以按如下方式删除:

删除扩展postgis_raster;

3.4.1.2. 9.1+版或无扩展版的软件升级

本节仅适用于安装了未使用扩展的PostGIS的用户。如果您有扩展并尝试使用此方法进行升级,您将收到如下消息:

无法丢弃…因为postgis扩展依赖于它。

注意:如果要从PostGIS 1.*迁移到PostGIS 2.*或从PostGIS 2.*迁移到r7409之前的版本,则不能使用此过程,而是需要执行 硬升级

在编译和安装(Make Install)之后,您应该会找到一组 *_upgrade.sql 安装文件夹中的文件。您可以使用以下命令将它们全部列出:

LS `pg_config --sharedir` /conrib/postgis- 3.3.0dev /*_upgrade.sql

依次加载它们,从 postgis_upgrade.sql

Psql-f postgis_upgrade.sql-d您的空间数据库

同样的过程也适用于栅格、拓扑和sfcga扩展模块,升级文件的名称为 rtpostgis_upgrade.sql topology_upgrade.sql sfcgal_upgrade.sql 分别为。如果需要,请执行以下操作:

Psql-f rtpostgis_upgrade.sql-d您的空间数据库
Psql-f topology_upgrade.sql-d您的空间数据库
Psql-f sfcga_upgrade.sql-d您的空间数据库

建议您通过运行以下命令切换到基于扩展的安装

Psql-c“选择postgis_扩展_升级();”
[Note]

如果您找不到 postgis_upgrade.sql 特定于升级您的版本您正在使用的版本对于软升级来说太早了,并且需要执行 硬升级

这个 PostGIS_Full_Version 函数应使用“PROCS Need Upgrade”消息通知您是否需要运行此类升级。

3.4.2. 硬升级

我们所说的硬升级是指完全转储/重新加载启用了postgis的数据库。当PostGIS对象的内部存储发生变化或无法进行软升级时,您需要进行硬升级。这个 发行说明 附录报告了每个版本是否需要转储/重新加载(硬升级)才能升级。

转储/重新加载过程得到postgis_Restore.pl脚本的帮助,该脚本负责从转储跳过属于PostGIS(包括旧定义)的所有定义,允许您将模式和数据恢复到安装了PostGIS的数据库中,而不会出现重复的符号错误或转发不推荐使用的对象。

有关Windows用户的补充说明,请访问 Windows硬件升级

具体步骤如下:

  1. 为您想要升级的数据库创建一个“定制格式”的转储文件(我们称之为 老古董 )包括二进制斑点(-b)和详细(-v)输出。用户可以是数据库的所有者,不需要是postgres超级帐户。

    Pg_ump-h本地主机-p 5432-U postgres-fc-b-v-f“/Somepath/olddb.backup”olddb
  2. 在新数据库中全新安装PostGIS--我们将该数据库称为 Newdb 。请参阅 Section 3.3.2, “在不使用扩展的情况下在空间上启用数据库(不鼓励)”Section 3.3.1, “使用扩展在空间上启用数据库” 获取有关如何执行此操作的说明。

    将恢复在转储中找到的SPATIAL_REF_SYS条目,但不会覆盖SPATIAL_REF_SYS中的现有条目。这是为了确保官方集中的修复将被正确地传播到恢复的数据库。如果出于任何原因,您确实希望覆盖自己的标准条目,那么在创建新的数据库时,不要加载spatial_ref_sys.sql文件。

    如果您的数据库真的很旧,或者您知道您在视图和函数中使用了长期不推荐使用的函数,则可能需要加载 legacy.sql 以便您的所有函数和视图等都能正常恢复。只有在真的需要时才这样做。如果可能的话,在转储之前考虑升级您的视图和功能。不推荐使用的函数稍后可以通过加载 uninstall_legacy.sql

  3. 将您的备份恢复到新的 Newdb 使用postgis_Restore.pl的数据库。意外错误(如果有)将由psql打印到标准错误流中。把这些都记下来。

    Perl utils/postgis_Restore.pl“/Somepath/olddb.backup”|psql-h本地主机-p 5432-U postgres newdb 2
    >errors.txt

在以下情况下可能会出现错误:

  1. 您的一些视图或函数使用了不推荐使用的PostGIS对象。要修复此问题,您可以尝试加载 legacy.sql 在恢复之前编写脚本,否则您将不得不恢复到仍然包含这些对象的PostGIS版本,并在移植代码后再次尝试迁移。如果 legacy.sql 方法适用于您,不要忘记修复您的代码以停止使用不推荐使用的函数,并停止加载它们 uninstall_legacy.sql

  2. 转储文件中SPATIAL_REF_SYS的某些自定义记录的SRID值无效。有效的SRID值大于0小于999000。999000.999999范围内的值保留供内部使用,而大于999999的值根本不能使用。具有无效SRID的所有自定义记录都将被保留,那些 >999999的记录将被移入保留范围,但是SPATIAL_REF_SYS表将失去一个检查约束,该约束保护该不变量以及它的主键(当多个无效的SRID被转换为相同的保留SRID值时)。

    In order to fix this you should copy your custom SRS to a SRID with a valid value (maybe in the 910000..910999 range), convert all your tables to the new srid (see 更新几何SRID), delete the invalid entry from spatial_ref_sys and re-construct the check(s) with:

    ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid > 0 AND srid < 999000 );

    ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));

    If you are upgrading an old database containing french IGN cartography, you will have probably SRIDs out of range and you will see, when importing your database, issues like this :

     WARNING: SRID 310642222 converted to 999175 (in reserved zone)

    In this case, you can try following steps : first throw out completely the IGN from the sql which is resulting from postgis_restore.pl. So, after having run :

    perl utils/postgis_restore.pl "/somepath/olddb.backup" > olddb.sql

    run this command :

    grep -v IGNF olddb.sql > olddb-without-IGN.sql

    Create then your newdb, activate the required Postgis extensions, and insert properly the french system IGN with : this script After these operations, import your data :

    Psql-h本地主机-p 5432-U postgres-d newdb-f olddb-less-IGN.sql 2
    >errors.txt

Chapter 4. 数据管理

4.1. 空间数据模型

4.1.1. OGC几何图形

开放地理空间联盟(OGC)开发了 简单功能访问 标准(SFA),为地理空间数据提供模型。它定义了的基本空间类型 几何体 以及操作和转换几何值以执行空间分析任务的操作。PostGIS将OGC几何模型实现为PostgreSQL数据类型 几何体 地理学

几何学是一种 摘要 键入。几何值属于其 混凝土 代表各种类型和尺寸的几何形状的子类型。其中包括 原子性 类型 LineString LinearRing 多边形 ,以及 征集 类型 MultiPoint MultiLineString MultiPolygon GeometryCollection 。这个 简单功能访问.第1部分:通用体系结构v1.2.1 为结构添加子类型 PolyhedralSurface 三角形 TIN

几何图形在2维笛卡尔平面中对形状建模。多面体曲面、三角形和三角网类型也可以表示三维空间中的形状。形状的大小和位置由其 坐标 。每个坐标都有一个X和Y 纵坐标 确定其在平面中的位置的值。形状由点或线段构成,其中点由单个坐标指定,线段由两个坐标指定。

坐标可以包含可选的Z和M纵坐标值。Z坐标通常用于表示高程。M纵坐标包含一个测量值,它可以表示时间或距离。如果几何图形值中存在Z或M值,则必须为几何图形中的每个点定义它们。如果几何图形具有Z或M坐标,则 坐标尺寸 是3D的;如果它既有Z又有M,则坐标维度是4D。

几何值与 空间参考系 指示它所嵌入的坐标系。空间参考系由几何SRID编号标识。X轴和Y轴的单位由空间参考系确定。在……里面 平面型 参考系X和Y坐标通常表示东距和北距,而在 大地测量学 它们代表经度和纬度。SRID 0表示没有为其轴指定单位的无限笛卡尔平面。看见 Section 4.5, “空间参考系”

几何图形 尺寸标注 是几何图形类型的特性。点类型的维度为0,线性类型的维度为1,面类型的维度为2。集合具有最大元素维度的维度。

几何值可以是 空的 。空值不包含顶点(对于原子几何体类型)或不包含元素(对于集合)。

几何值的一个重要属性是它们的空间 程度 边界框 ,OGC模型将其称为 信封 。这是包含几何体坐标的二维或三维长方体。它是表示几何图形在坐标空间中的范围以及检查两个几何图形是否相互作用的有效方法。

几何模型允许评估拓扑空间关系,如中所述 Section 5.1.1, “量纲扩展的9交点模型” 。为了支持这一点, 室内 边界 外部 为每种几何图形类型定义。几何图形在拓扑上是封闭的,因此它们始终包含它们的边界。边界是一个比几何体本身的维度小一的几何体。

OGC几何模型定义了每种几何类型的有效性规则。这些规则确保几何体值表示真实情况(例如,可以指定一个位于壳外部的洞的多边形,但这在几何上没有意义,因此是无效的)。PostGIS还允许存储和操作无效的几何值。这允许在需要时检测和修复它们。看见 Section 4.4, “几何图形验证”

4.1.1.1. 点

点是表示坐标空间中的单个位置的0维几何图形。

POINT (1 2)
POINT Z (1 2 3)
POINT ZM (1 2 3 4)

4.1.1.2. LineString

线串是由连续的线段序列形成的一维直线。每条线段由两个点定义,其中一条线段的终点构成下一条线段的起点。OGC有效的线串可以是零个点,也可以是两个或多个点,但PostGIS也允许使用单点线串。线串可以相互交叉(自相交)。线条是 关着的不营业的 如果起点和终点相同。线条是 简单 如果它没有自交的话。

线条(1 2,3 4,5 6)

4.1.1.3. LinearRing

LinearRing是一种既封闭又简单的线串。第一个点和最后一个点必须相等,并且直线不能自相交。

线性排列(0 0 0,4 0 0,4 4 0,0 4 0,0 0 0)

4.1.1.4. 多边形

多边形是由外部边界(壳)和零个或多个内部边界(洞)分隔的二维平面区域。每个边界都是一个 LinearRing

多边形((0 0 0,4 0 0,4 4 0,0 40,0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 2 0))

4.1.1.5. MultiPoint

多点是点的集合。

多点((0),(1 2))

4.1.1.6. MultiLineString

多重线串是线串的集合。如果多重线串的每个元素都是闭合的,则它是闭合的。

多行((0,1,1,1 2),(2 3,3 2,5 4))

4.1.1.7. MultiPolygon

多重多边形是不重叠、不相邻的多边形的集合。集合中的多边形只能在有限数量的点处接触。

MULTIPOLYGON(1 5,5 5,5 1,11,1 5)),((6 5,9 1,6 1,6 5)

4.1.1.8. GeometryCollection

GeometryCollection是几何图形的异类(混合)集合。

几何测量选择(点(2 3),直线(2 3,3 4))

4.1.1.9. PolyhedralSurface

多面体曲面是共享某些边的面片或面片的连续集合。每个面片都是一个平面多边形。如果多边形坐标具有Z坐标,则曲面是三维的。

POLYHEDRALSURFACE Z (
  ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
  ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
  ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
  ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

4.1.1.10. 三角形

三角形是由三个不同的非共线顶点定义的多边形。因为三角形是一个多边形,所以它由四个坐标指定,第一个和第四个坐标相等。

三角形((0 0,0 9,9 0,0 0))

4.1.1.11. TIN

TIN是非重叠的集合 三角形 %s表示一个 不规则三角网

TIN Z(0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,0 0 0))

4.1.2. SQL/MM第3部分-曲线

这个 ISO/IEC 13249-3SQL多媒体-空间 标准(SQL/MM)扩展了OGC SFA以定义包含圆弧曲线的几何子类型。SQL/MM类型支持3DM、3DZ和4D坐标。

[Note]

SQL-MM实现中的所有浮点比较都按照指定的容差执行,当前为1E-8。

4.1.2.1. CircularString

CircularString是基本的曲线类型,类似于线性世界中的LineString。单个圆弧段由三个点指定:起点和终点(第一个和第三个)以及圆弧上的某个其他点。要指定闭合圆,起点和终点相同,并且中点是圆直径(即圆弧的中心)上的相反点。在圆弧序列中,前一个圆弧的终点是下一个圆弧的起点,就像线串的线段一样。这意味着CircularString必须具有大于1的奇数个点。

CIRCULARSTRING(0 0, 1 1, 1 0)

CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)

4.1.2.2. CompoundCurve

复合曲线是一条可以同时包含圆弧段和线性段的单条连续曲线。这意味着,除了具有结构良好的组件外,每个组件的终点(最后一个除外)必须与下一个组件的起点重合。

CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)

4.1.2.3. CurvePolygon

CurvePolygon就像一个多边形,有一个外环和零个或多个内环。不同之处在于,环可以是CircularString或CompoundCurve,也可以是线串。

从PostGIS 1.4开始,PostGIS支持曲线多边形中的复合曲线。

CURVEPOLYGON(
  CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),
  (1 1, 3 3, 3 1, 1 1) )

示例:一个CurvePolygon,其壳由包含CircularString和LineString的CompoundCurve定义,以及一个孔由CircularString定义

CURVEPOLYGON(
  COMPOUNDCURVE( CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),
                 (4 3, 4 5, 1 4, 0 0)),
  CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )

4.1.2.4. MultiCurve

多重曲线是一组曲线,其中可以包括LineStrings、CircularStrings或CompoundCurve。

MULTICURVE((0 0,5 5),Circularstring(4 0,4 4,8 4))

4.1.2.5. MultiSurface

多曲面是曲面的集合,可以是(线性)多边形或曲线多边形。

MULTISURFACE(
  CURVEPOLYGON(
    CIRCULARSTRING( 0 0, 4 0, 4 4, 0 4, 0 0),
    (1 1, 3 3, 3 1, 1 1)),
  ((10 10, 14 12, 11 10, 10 10), (11 11, 11.5 11, 11 11.5, 11 11)))

4.1.3. WKT和WKB

OGC SFA规范定义了两种用于表示供外部使用的几何值的格式:熟知文本(WKT)和熟知二进制(WKB)。WKT和WKB都包括有关对象类型和定义它的坐标的信息。

熟知文本(WKT)提供了空间数据的标准文本表示。空间对象的WKT表示的示例如下:

  • 点(0 0)

  • 点Z(0 0 0)

  • ZM点(0 0 0)

  • 点为空

  • LINESTRING(0,1 1 1 2)

  • 线路设置为空

  • 多边形((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,12,1 1))

  • 多点((0),(1 2))

  • 多点Z((0 0 0),(1 2 3))

  • 多点为空

  • 多行((0,1,1,1 2),(2 3,3 2,5 4))

  • MULTIPOLYGON(0 0,4 0,44,04,0 0),(1,2 1,2 2,12,11)),((-1-1,-1-2,-2-2,-2-1,-1-1))

  • 几何测量选择(点(2 3),直线(2 3,3 4))

  • 几何测量集合为空

WKT的输入和输出由函数提供 ST_AsTextST_GeomFromText

text WKT = ST_AsText(geometry);
geometry = ST_GeomFromText(text WKT, SRID);

例如,从WKT和SRID创建和插入空间对象的语句为:

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');

熟知二进制(WKB)提供了将空间数据表示为二进制数据(字节数组)的可移植的全精度表示。空间对象的WKB表示的示例如下:

  • WKT:点(1 1)

    WKB:010100000000000000000000F03F000000000000F03

  • WKT:LINESTRING(2 2,9 9)

    Wkb:0102000000020000000000000000000040000000000000004000000000000022400000000000002240

WKB的输入和输出由函数提供 ST_AsBinaryST_GeomFromWKB

bytea WKB = ST_AsBinary(geometry);
geometry = ST_GeomFromWKB(bytea WKB, SRID);

例如,从WKB创建和插入空间对象的语句为:

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromWKB('\x0101000000000000000000f03f000000000000f03f', 312), 'A Place');

4.2. 几何数据类型

PostGIS通过定义名为的PostgreSQL数据类型实现OGC简单要素模型 几何体 。它使用内部类型代码表示所有几何子类型(请参见 GeometryTypeST_GeometryType )。这允许将空间要素建模为使用类型为的列定义的表行 几何体

这个 几何体 数据类型为 不透明 这意味着所有访问都是通过对几何值调用函数来完成的。函数允许创建几何对象、访问或更新所有内部字段以及计算新的几何值。PostGIS支持OGC中指定的所有功能 简单功能访问.第2部分:SQL选项 (SFS)规范,以及许多其他规范。看见 Chapter 8, PostGIS参考资料 查看完整的函数列表。

[Note]

PostGIS遵循SFA标准,在空间函数前面加上“ST_”。这是为了代表“空间和时间”,但该标准的时间部分从未被开发出来。相反,它可以被解释为“空间类型”。

SFA标准规定空间对象包括空间参考系统标识符(SRID)。创建要插入到数据库中的空间对象时需要SRID(可能默认为0)。看见 ST_SRIDSection 4.5, “空间参考系”

为了高效地查询几何图形,PostGIS定义了各种空间索引,并定义了使用它们的空间运算符。看见 Section 4.9, “空间索引”Section 5.2, “使用空间索引” 有关详细信息,请参阅。

4.2.1. PostGIS EWKB和EWKT

OGC SFA规范最初仅支持2D几何图形,几何图形SRID不包括在输入/输出表示法中。OGC SFA规范1.2.1(与ISO 19125标准一致)增加了对3D(ZYZ)和测量(XYM和XYZM)坐标的支持,但仍不包括SRID值。

由于这些限制,PostGIS定义了扩展的EWKB和EWKT格式。它们提供3D(XYZ和XYM)和4D(XYZM)坐标支持,并包含SRID信息。包括所有几何信息允许PostGIS使用EWKB作为记录格式(例如,在转储文件中)。

EWKB和EWKT用于PostGIS数据对象的“规范形式”。对于输入,二进制数据的规范格式是EWKB,而对于文本数据,可以接受EWKB或EWKT。这允许通过使用将HEXEWKB或EWKT中的文本值转换为几何值来创建几何值 ::几何图形 。对于输出,二进制的规范形式是EWKB,而文本的规范形式是HEXEWKB(十六进制编码的EWKB)。

例如,此语句通过从EWKT文本值强制转换来创建几何图形,并使用HEXEWKB的规范形式输出该几何图形:

SELECT 'SRID=4;POINT(0 0)'::geometry;
  geometry
  ----------------------------------------------------
  01010000200400000000000000000000000000000000000000

PostGIS EWKT输出与OGC WKT有几点不同:

  • 对于3DZ几何图形,省略Z限定符:

    OGC:点Z(1 2 3)

    EWKT:点(1 2 3)

  • 对于3 DM几何图形,包括M限定符:

    OGC:点M(1 2 3)

    EWKT:POINTM(1 2 3)

  • 对于4D几何图形,省略ZM限定符:

    OGC:点ZM(1 2 3 4)

    EWKT:点(1 2 3 4)

EWKT避免过度指定维度和OGC/ISO格式可能出现的不一致,例如:

  • ZM点(1 1)

  • ZM点(1 1 1)

  • 点(1 1 1)

[Caution]

PostGIS扩展格式目前是OGC格式的超集,因此每个有效的OGC WKB/WKT也是有效的EWKB/EWKT。然而,如果OGC以与PosGIS定义冲突的方式扩展一种格式,这在未来可能会有所不同。因此,您不应该依赖这种兼容性!

空间对象的EWKT文本表示的示例如下:

  • 点(0 0 0)--XYZ

  • SRID=32632;点(0 0)--带SRID的XY

  • POINTM(00 0)--XYM

  • 点(0 0 0)--XYZM

  • SRID=4326;MULTIPOINTM(0 0 0,1 21)--带SRID的XYM

  • 多行((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))

  • 多边形((0 0 0,4 0 0,4 4 0,0 40,0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 2 0))

  • MULTIPOLYGON(0 0 0,4 0 0,4 4 0,0 4 0,0 4 0,0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1-1 0,-1-2 0,-2-2 0,-2-1 0,-1-1 0))

  • GEOMETRYCOLLECTIONM(POINTM(2 3 9),LINESTRINGM(2 3 4,3 4 5))

  • MULTICURVE((0 0,5 5),Circularstring(4 0,4 4,8 4))

  • POLYHEDRALSURFACE(0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),(0 0 0,0 1 0,1 1 0,1 0 0)),((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),(1 1 0,1 1,1 0 1,1 0 0,1 0)),(0 1 0,0 1,1 1,1 0,0 0),((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))

  • 三角形((0 0,0 10,10 0,0 0))

  • TIN(0 0 0,0 0 1,0 1 0,0 0 0)),((0 0 0,0 1 0,1 1 0,0 0 0))

使用以下功能可以使用这些格式的输入和输出:

bytea EWKB = ST_AsEWKB(geometry);
text EWKT = ST_AsEWKT(geometry);
geometry = ST_GeomFromEWKB(bytea EWKB);
geometry = ST_GeomFromEWKT(text EWKT);

例如,使用EWKT创建和插入PostGIS空间对象的语句为:

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )

4.3. 地理数据类型

邮政地理信息系统 地理学 数据类型为在“地理”坐标(有时称为“大地”坐标,或“经度/经度”或“经度/经度”)上表示的空间要素提供原生支持。地理坐标是以角度单位(度)表示的球面坐标。

PostGIS几何数据类型的基础是平面。平面上两点之间的最短路径是一条直线。这意味着几何上的函数(面积、距离、长度、交点等)是使用直线向量和笛卡尔数学来计算的。这使得它们更容易实现和更快地执行,但也使它们对地球球面上的数据不准确。

PostGIS地理数据类型基于球形模型。球面上两点之间的最短路径是一条大圆弧。地理上的函数(面积、距离、长度、交点等)是使用球面上的圆弧计算的。通过考虑世界的球体形状,这些函数提供了更准确的结果。

因为基础数学更复杂,所以为地理类型定义的函数比为几何类型定义的函数要少。随着时间的推移,随着新算法的加入,地理类型的能力将会扩大。作为一种解决办法,可以在几何类型和地理类型之间来回转换。

与几何数据类型类似,地理数据通过空间参考系统标识符(SRID)与空间参考系统相关联。中定义的任何大地(基于经度/经度)空间参考系统 spatial_ref_sys 可以使用表格。(在PostGIS 2.2之前,地理类型仅支持WGS 84大地测量(SRID:4326))。您可以添加您自己的自定义大地空间参考系统,如中所述 Section 4.5.2, “用户定义的空间参考系统”

对于所有空间参考系,由测量函数返回的单位(例如 ST_DistanceST_LengthST_PerimeterST_Area )和关于距离的争论 ST_DWithin 以米为单位。

4.3.1. 创建地理表

您可以使用创建一个表来存储地理数据 创建表格 具有以下类型列的SQL语句 地理学 。以下样例创建一个表,其中包含存储WGS84大地坐标系(SRID 4326)中的二维线串的地理列:

CREATE TABLE global_points (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    location geography(POINT,4326)
  );

地理类型支持两个可选的类型修饰符:

  • 空间类型修饰符限制列中允许的造型和尺寸标注的类型。空间类型允许的值为:POINT、LINESTRING、POLYGON、MULTPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。地理类型不支持曲线、三角网或多角曲线。修改器通过添加后缀Z、M和ZM来支持坐标维度限制。例如,修饰符‘LINESTRINGM’只允许具有三个维度的线串,并将第三个维度视为测量。同样,‘POINTZM’需要四维(XYZM)数据。

  • SRID修饰符将空间参考系统SRID限制为特定数字。如果省略,则SRID默认为4326(WGS84大地坐标),并且所有计算都使用WGS84执行。

创建包含地理列的表格的示例:

  • 使用默认SRID 4326(WGS84经度/纬度)创建具有二维点地理位置的表格:

    创建表ptgeogwgs(gid序列主键,geog地理(Point));
  • 在NAD83 Longlat中创建包含二维点地理信息的表格:

    创建表ptgeognad83(gid序列主键,地理记录地理(point,4269));
  • 创建具有3D(XYZ)点和显式SRID 4326的表:

    创建表ptzgeogwgs84(gid序列主键,地理日志地理(POINTZ,4326));
  • 使用默认SRID 4326创建具有二维线列地理位置的表格:

    创建表lgeog(gid序列主键,geog地理(LINESTRING));
  • 使用SRID 4267(NAD 1927经度)创建具有2D多边形地理位置的表格:

    创建表lgeognad27(GID序列主键,地理日志地理(Polygon,4267));

地理字段在中注册 geography_columns 系统视图。您可以查询 geography_columns 查看并查看该表是否已列出:

SELECT * FROM geography_columns;

创建空间索引与创建几何图形列的工作原理相同。PostGIS将注意到列类型是地理类型,并创建适当的基于球体的索引,而不是通常用于几何图形的平面索引。

-- Index the test table with a spherical index
CREATE INDEX global_points_gix ON global_points USING GIST ( location );

4.3.2. 使用地理表

您可以使用与几何图形相同的方式将数据插入到地理表中。如果几何图形数据具有SRID 4326,则它将自动转换为地理类型。这个 EWKT和EWKB 格式还可用于指定地理值。

-- Add some data into the test table
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');

中列出的任何大地(经度/经度)空间参考系统 spatial_ref_sys 表可以指定为地理SRID。如果使用非大地坐标系,则会引发错误。

-- NAD 83 lon/lat
SELECT 'SRID=4269;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AD1000000000000000C05EC00000000000004140
-- NAD27 lon/lat
SELECT 'SRID=4267;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AB1000000000000000C05EC00000000000004140
-- NAD83 UTM zone meters - gives an error since it is a meter-based planar projection
SELECT 'SRID=26910;POINT(-123 34)'::geography;

ERROR:  Only lon/lat coordinate systems are supported in geography.

查询和测量功能使用米的单位。因此,距离参数应以米为单位表示,返回值应以米为单位(或面积为平方米)。

-- A distance query using a 1000km tolerance
SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);

你可以通过计算一架从西雅图到伦敦的大圆航线(LINESTRING(-122.33 47.606,0.051.5))到雷克雅未克(点(-21.9664.15))的距离就可以看到地理的力量在起作用。 绘制路线地图 )。

地理类型计算出了雷克雅未克与西雅图和伦敦之间的大圆环航道之间的球体上的真正最短距离122.235公里。

-- Distance calculation using GEOGRAPHY
SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography);
   st_distance
-----------------
 122235.23815667

几何类型计算的是雷克雅未克和从西雅图到伦敦的直线路径之间的无意义的笛卡尔距离,这条直线路径绘制在一张平面世界地图上。结果的名义单位是“度”,但结果并不对应于点之间的任何真实角度差,因此即使称它们为“度”也是不准确的。

-- Distance calculation using GEOMETRY
SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)'::geometry);
      st_distance
--------------------
 13.342271221453624

4.3.3. 何时使用地理数据类型

地理数据类型允许您以经度/纬度坐标存储数据,但代价是:在地理上定义的函数比在几何上定义的函数少;那些定义的函数需要更多的CPU时间来执行。

您选择的数据类型应该由您正在构建的应用程序的预期工作区确定。您的数据将覆盖全球或大片大陆地区,还是某个州、县或市的本地数据?

  • 如果您的数据包含在较小的区域中,您可能会发现,就性能和可用的功能而言,选择适当的投影并使用几何体是最佳解决方案。

  • 如果您的数据是全球性的或覆盖大陆地区,您可能会发现地理位置允许您构建一个系统,而不必担心预测细节。您以经度/纬度存储数据,并使用已在地理上定义的函数。

  • 如果您不了解投影,也不想学习它们,并且准备接受地理中可用功能的限制,那么使用地理可能比使用几何更容易。只需将您的数据加载为经度/纬度,然后从那里开始。

请参阅 Section 15.11, “PostGIS Function Support Matrix” 用于比较地理与几何支持的内容。有关地理函数的简短列表和说明,请参阅 Section 15.4, “PostGIS Geography Support Functions”

4.3.4. 地理高级常见问题解答

4.3.4.1. 你算的是球体还是椭球体?
4.3.4.2. 日期线和电线杆呢?
4.3.4.3. 你能处理的最长弧线是多少?
4.3.4.4. 为什么计算欧洲/俄罗斯/在这里插入大的地理区域的面积会这么慢?

4.3.4.1.

你算的是球体还是椭球体?

默认情况下,所有距离和面积计算都在椭球体上完成。您应该会发现,局部区域的计算结果将与良好的局部投影中的局部平面结果相匹配。在更大的区域上,球面计算将比在投影平面上进行的任何计算更准确。

所有地理函数都可以选择使用球体计算,方法是将最后一个布尔参数设置为‘False’。这将在一定程度上加快计算速度,特别是在几何体非常简单的情况下。

4.3.4.2.

日期线和电线杆呢?

所有的计算都没有日期线或极点的概念,坐标是球形的(经度/纬度),所以从计算的角度来看,穿过日期线的形状与任何其他形状没有什么不同。

4.3.4.3.

你能处理的最长弧线是多少?

我们使用大圆弧作为两点之间的“插值线”。这意味着任何两个点实际上是以两种方式连接在一起的,这取决于你沿着大圆圈旅行的方向。我们所有的代码都假设这些点是由沿着大圆的两条路径中的较短路径连接的。因此,弧度超过180度的形状将无法正确建模。

4.3.4.4.

为什么计算欧洲/俄罗斯/在这里插入大的地理区域的面积会这么慢?

因为这个多边形太大了!大区域不好有两个原因:它们的边界很大,所以无论运行什么查询,索引都会拉出特征;顶点数量很大,测试(距离、包容)必须至少遍历顶点列表一次,有时必须遍历N次(N是另一个候选特征中的顶点数)。

与几何学一样,我们建议,当您有非常大的多边形,但在较小的区域进行查询时,您可以将几何数据“反规格化”成较小的块,以便索引可以有效地子查询对象的各个部分,这样查询就不必每次都取出整个对象。请咨询 ST_Subdivide 功能文档。仅仅因为你可以将整个欧洲存储在一个多边形中,并不意味着你应该。

4.4. 几何图形验证

PostGIS符合开放地理空间联盟(OGC)的简单要素规范。该标准定义了几何的概念 简单 有效 。这些定义允许简单要素几何模型以一致且明确的方式表示空间对象,从而支持高效计算。(注:OGC SF和SQL/MM对简单和有效的定义相同。)

4.4.1. 简单几何图形

A 简单 几何体是指没有不规则几何点的几何体,例如自交或自切。

A POINT 与生俱来 简单 作为0维几何图形对象。

MULTIPOINT %s是 简单 如果没有两个坐标( POINT S)相等(具有相同的坐标值)。

A LINESTRING 简单 如果它没有两次通过相同的点,除了端点。如果简单线串的端点相同,则称为 关着的不营业的 并被称为线性环。

(A) (C) 都很简单 LINESTRING s. (B) (D) 并不简单。 (C) 是一个闭线性环。

(A)

(B)

(C)

(D)

A MULTILINESTRING 简单 仅当它的所有元素都是单的,并且任意两个元素之间的唯一交集出现在两个元素的边界上的点上。

(E) (F) 都很简单 MULTILINESTRING s. (G) 并不简单。

(E)

(F)

(G)

POLYGON 由线性环组成,因此有效的面几何始终为 简单

要测试几何体是否简单,请使用 ST_IsSimple 功能:

SELECT
   ST_IsSimple('LINESTRING(0 0, 100 100)') AS straight,
   ST_IsSimple('LINESTRING(0 0, 100 100, 100 0, 0 100)') AS crossing;

 straight | crossing
----------+----------
 t        | f

通常,PostGIS函数不要求几何参数简单。简单性主要用作定义几何有效性的基础。这也是某些类型的空间数据模型的要求(例如,线性网络通常不允许相交的线)。使用可简化多点几何和线性几何 ST_UnaryUnion

4.4.2. 有效的几何图形

几何有效性主要适用于2维几何图形( POLYGON S和 MULTIPOLYGON S)。有效性由允许多边形几何体明确建模平面区域的规则定义。

A POLYGON 有效 如果:

  1. 多边形边界环(外壳环和内孔环)是 简单 (请勿交叉或自行触摸)。正因为如此,多边形不能有切割线、尖峰或环。这意味着多边形洞必须用内环来表示,而不是用外环自接触(所谓的“倒置洞”)来表示。

  2. 边界环不交叉

  3. 边界环可以在点上接触,但只能作为切线(即不在一条线上)

  4. 内环包含在外环中

  5. 多边形内部是简单连接的(即环不能以将多边形分割为多个部分的方式接触)

(H) (I) 是有效的 POLYGON s. (J-m) 是无效的。 (J) 可以表示为有效的 MULTIPOLYGON

(H)

(I)

(J)

(K)

(L)

(M)

A MULTIPOLYGON 有效 如果:

  1. 其要素 POLYGON %s有效

  2. 元素不能重叠(即其内部不得相交)

  3. 元素仅在点上接触(即不沿线)

(N) 是有效的 MULTIPOLYGON (O) (P) 是无效的。

(N)

(O)

(P)

这些规则意味着有效的面几何也是 简单

对于线性几何,唯一的有效性规则是 LINESTRING %s必须至少有两个点并且长度不为零(或者等价地,至少有两个不同的点)。请注意,非简单(自交)线是有效的。

SELECT
   ST_IsValid('LINESTRING(0 0, 1 1)') AS len_nonzero,
   ST_IsValid('LINESTRING(0 0, 0 0, 0 0)') AS len_zero,
   ST_IsValid('LINESTRING(10 10, 150 150, 180 50, 20 130)') AS self_int;

 len_nonzero | len_zero | self_int
-------------+----------+----------
 t           | f        | t

POINT MULTIPOINT 几何图形没有有效性规则。

4.4.3. 管理效度

PostGIS允许创建和存储有效和无效的几何图形。这允许检测并标记或修复无效的几何图形。还有一些情况下,OGC有效性规则比预期的更严格(例如,具有倒置孔的零长度线串和多边形)。

PostGIS提供的许多函数都依赖于几何参数有效的假设。例如,计算在多边形外部定义了洞的多边形的面积,或者从非简单边界线构建多边形没有意义。假设有效的几何输入允许函数更高效地运行,因为它们不需要检查拓扑正确性。(值得注意的例外是,带有反转的零长度直线和多边形通常可以正确处理。)此外,如果输入有效,则大多数PostGIS函数都会生成有效的几何输出。这允许将PostGIS功能安全地链接在一起。

如果在调用PostGIS函数时遇到意想不到的错误消息(例如“GEOS cross()抛出错误!”),您应该首先确认函数参数有效。如果它们不是,则考虑使用以下技术之一来确保您正在处理的数据是有效的。

[Note]

如果函数使用有效的输入报告错误,则您可能在PostGIS或它使用的某个库中发现了错误,您应该将此情况报告给PostGIS项目。如果PostGIS函数返回有效输入的无效几何图形,情况也是如此。

若要测试几何图形是否有效,请使用 ST_IsValid 功能:

SELECT ST_IsValid('POLYGON ((20 180, 180 180, 180 20, 20 20, 20 180))');
-----------------
 t

有关几何无效的性质和位置的信息由 ST_IsValidDetail 功能:

SELECT valid, reason, ST_AsText(location) AS location
    FROM ST_IsValidDetail('POLYGON ((20 20, 120 190, 50 190, 170 50, 20 20))') AS t;

 valid |      reason       |                  location
-------+-------------------+---------------------------------------------
 f     | Self-intersection | POINT(91.51162790697674 141.56976744186045)

在某些情况下,需要自动更正无效的几何图形。使用 ST_MakeValid 函数来执行此操作。( ST_MakeValid 是空间函数的一个例子,该函数 会吗? 允许无效输入!)

默认情况下,PostGIS在加载几何体时不会检查有效性,因为对于复杂的几何体,有效性测试可能会占用大量的CPU时间。如果不信任数据源,可以通过添加检查约束对表强制执行有效性检查:

ALTER TABLE mytable
  ADD CONSTRAINT geometry_valid_check
        CHECK (ST_IsValid(geom));

4.5. 空间参考系

A 空间参考系 (SRS)(也称为坐标参考系(CRS))定义几何图形如何参考地球表面上的位置。有三种类型的SR:

  • A 大地测量学 SRS使用直接映射到地球表面的角坐标(经度和纬度)。

  • A 预计 SRS使用数学投影变换将球形地球的表面“展平”到一个平面上。它以允许直接测量距离、面积和角度等数量的方式指定位置坐标。坐标系是笛卡尔坐标系,这意味着它有一个定义的原点和两个垂直轴(通常指向北和东)。每个投影的SRS使用规定的长度单位(通常为米或英尺)。投影的SRS可以在其适用范围内受到限制,以避免变形并符合所定义的坐标范围。

  • A 本地 SRS是不以地球表面为基准的笛卡尔坐标系。在PostGIS中,这由SRID值0指定。

有许多不同的空间参考系统在使用中。欧洲石油勘探组对常见的SRS进行了标准化 EPSG数据库 。为方便起见,PostGIS(和许多其他空间系统)使用称为SRID的整数标识符来引用SRS定义。

几何通过其SRID值与空间参考系相关联,该值可通过访问 ST_SRID 。可以使用指定几何的SRID ST_SetSRID 。某些几何构造函数允许提供SRID(例如 ST_PointST_MakeEnvelope )。这个 EWKT 格式支持SRID和 SRID=n; 前缀。

处理几何对的空间函数(例如 覆盖层 关系 函数)要求输入几何图形在相同的空间参考系中(具有相同的SRID)。可以使用将几何数据转换为不同的空间参考系 ST_Transform 。从函数返回的几何图形具有与输入几何图形相同的SRS。

4.5.1. SPATIAL_REF_SYS表

这个 SPATIAL_REF_SYS PostGIS使用的表是与OGC兼容的数据库表,它定义了可用的空间参考系统。它保存坐标系的数字SRID和文本描述。

这个 spatial_ref_sys 表定义为:

CREATE TABLE spatial_ref_sys (
  srid       INTEGER NOT NULL PRIMARY KEY,
  auth_name  VARCHAR(256),
  auth_srid  INTEGER,
  srtext     VARCHAR(2048),
  proj4text  VARCHAR(2048)
)

这些列包括:

格栅

唯一标识 空间参考系 (SRS)在数据库中。

auth_name

本参考系统引用的标准或标准机构的名称。例如,“EPSG”是有效的 auth_name

auth_srid

引用的管理局定义的空间参考系统的ID auth_name 。对于EPSG,这是EPSG代码。

源文本

空间参考系的众所周知的文本表示法。WKT SRS表示的一个示例是:

PROJCS["NAD83 / UTM Zone 10N",
  GEOGCS["NAD83",
        DATUM["North_American_Datum_1983",
          SPHEROID["GRS 1980",6378137,298.257222101]
        ],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]
  ],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin",0],
  PARAMETER["central_meridian",-123],
  PARAMETER["scale_factor",0.9996],
  PARAMETER["false_easting",500000],
  PARAMETER["false_northing",0],
  UNIT["metre",1]
]

有关SRS WKT的讨论,请参阅OGC标准 坐标参考系的熟知文本表示法

项目4Text

PostGIS使用Proj库来提供坐标转换功能。这个 项目4Text 列包含特定SRID的项目坐标定义字符串。例如:

+项目=utm+区域=10+ellps=clrk66+datum=NAD27+单位=m

有关详细信息,请参阅 项目网站 。这个 spatial_ref_sys.sql 文件同时包含两者 源文本 项目4Text 所有EPSG预测的定义。

在检索用于转换的空间参考系定义时,PostGIS使用以下策略:

  • 如果 auth_name auth_srid 存在(非空),则根据这些条目使用项目SR(如果存在)。

  • 如果 源文本 如果可能,请使用它创建一个SRS。

  • 如果 项目4Text 如果可能,请使用它创建一个SRS。

4.5.2. 用户定义的空间参考系统

邮政地理信息系统 spatial_ref_sys 表包含3000多个最常见的空间参考系统定义,这些定义由 PROJ 投影库。但有许多坐标系是它不包含的。如果您具有有关空间参考系统的所需信息,则可以将SRS定义添加到表中。或者,如果您熟悉项目构造,也可以定义自己的自定义空间参考系统。请记住,大多数空间参考系统都是区域性的,在超出它们的预期范围使用时没有任何意义。

用于查找核心集中未定义的空间参考系的资源是 http://spatialreference.org/

一些常用的空间参考系统包括: 4326-WGS 84经度 4269-NAD 83经度 3395-WGS 84世界墨卡托 2163-美国国家地图集等面积 ,和60个WGS84 UTM地带。UTM区域是最理想的测量区域之一,但仅覆盖6度区域。(要确定将哪个UTM区域用于您感兴趣的区域,请参阅 Utmzone PostGIS plpgsql Helper函数 。)

美国各州使用州平面空间参考系统(基于米或英尺)-通常每个州存在一个或两个。大多数基于仪表的文档位于核心集合中,但许多基于英尺的文档或ESRI创建的文档将需要从 spatialreference.org

您甚至可以定义非地球坐标系,例如 火星2000 该火星坐标系是非平面的(单位为椭球度),但您可以将其与 地理学 键入以获取以米为单位的长度和邻近度,而不是度。

以下是使用未指定的SRID和以美国为中心的Lambert Conform投影的Proj定义加载自定义坐标系的示例:

INSERT INTO spatial_ref_sys (srid, proj4text)
VALUES ( 990000,
  '+proj=lcc  +lon_0=-95 +lat_0=25 +lat_1=25 +lat_2=25 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs'
);

4.6. 空间表

4.6.1. 创建空间表

您可以使用创建表来存储几何数据 创建表格 具有以下类型列的SQL语句 几何体 。下面的示例创建一个表,其中包含存储BC-Albers坐标系(SRID 3005)中的二维(XY)线串的几何图形列:

CREATE TABLE roads (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    geom geometry(LINESTRING,3005)
  );

这个 几何体 类型支持两个可选的 类型修饰符

  • 这个 空间类型修饰符 限制列中允许的形状和尺寸的种类。该值可以是受支持的 几何子类型 (例如POINT、LINESTRING、POLYON、MULPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION等)。修改器通过添加后缀Z、M和ZM来支持坐标维度限制。例如,‘LINESTRINGM’修饰符仅允许具有三个维度的线串,并将第三个维度视为测量。同样,‘POINTZM’需要四维(XYZM)数据。

  • 这个 SRID修改器 限制 空间参考系 将SRID设置为特定号码。如果省略,则SRID默认为0。

使用几何图形列创建表格的示例:

  • 创建包含具有默认SRID的任何类型几何图形的表:

    创建表geom(gid序列主键、geom几何);
  • 使用默认SRID创建具有二维点几何图形的表:

    创建表PTS(GID序列主键、几何几何(点));
  • 创建具有3D(XYZ)点和显式SRID 3005的表:

    创建表PTS(GID序列主键,GEOM几何(POINTZ,3005));
  • 使用默认SRID创建具有四维(XYZM)线条几何图形的表:

    创建表行(GID序列主键、几何几何(LINESTRINGZM));
  • 使用SRID 4267(NAD 1927经度)创建具有二维多边形几何图形的表格:

    创建表POLY(GID序列主键,几何几何(Polygon,4267));

一个表中可以有多个几何图形列。这可以在创建表时指定,也可以使用 ALTER TABLE SQL语句。此示例添加一个可以包含3D线条字符串的列:

ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);

4.6.2. 几何图形_列视图

《OGC》 针对SQL的简单功能规范 定义 GEOMETRY_COLUMNS 描述几何表结构的元数据表。在PostGIS中 geometry_columns 是从数据库系统目录表中读取的视图。这确保空间元数据信息始终与当前定义的表和视图一致。视图结构为:

\d几何体_列
View "public.geometry_columns"
      Column       |          Type          | Modifiers
-------------------+------------------------+-----------
 f_table_catalog   | character varying(256) |
 f_table_schema    | character varying(256) |
 f_table_name      | character varying(256) |
 f_geometry_column | character varying(256) |
 coord_dimension   | integer                |
 srid              | integer                |
 type              | character varying(30)  |

这些列包括:

F表格目录、f表格模式、f表格名称

包含几何图形列的要素表的完全限定名称。没有类似于“CATALOG”的PostgreSQL,因此该列保留为空。对于“SCHEMA”,使用PostgreSQL模式名称( 公共的 是默认设置)。

f_geometry_column

要素表中几何图形列的名称。

coord_dimension

柱的坐标尺寸(2、3或4)。

格栅

此表中用于坐标几何的空间参考系的ID。它是对 spatial_ref_sys 表(请参见 Section 4.5.1, “SPATIAL_REF_SYS表” )。

类型

空间对象的类型。若要将空间列限制为单一类型,请使用下列选项之一:POINT、LINESTRING、POLYGON、MULTPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION或相应的XYM版本POINTM、LINESTRINGM、POLYGONM、MULTIPOINTM、MULTILINESTRINGM、MULTIPOLYGONM、GEOMETRYCOLLECTIONM。对于异类(混合类型)集合,可以使用“GEOMETRY”作为类型。

4.6.3. 手动注册几何图形列

您可能需要这样做的两种情况是SQL视图和批量插入。对于大容量插入,您可以通过约束列或执行ALTER TABLE来更正GEOMETRY_COLUMNS表中的注册。对于视图,您可以使用强制转换操作来公开。请注意,如果您的列是基于类型模式的,则创建过程将正确注册它,因此不需要执行任何操作。此外,未对几何图形应用空间函数的视图将与基础表几何图形列注册相同。

-- Lets say you have a view created like this
CREATE VIEW public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom, 3395) As geom, f_name
        FROM public.mytable;

-- For it to register correctly
-- You need to cast the geometry
--
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom, 3395)::geometry(Geometry, 3395) As geom, f_name
        FROM public.mytable;

-- If you know the geometry type for sure is a 2D POLYGON then you could do
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom,3395)::geometry(Polygon, 3395) As geom, f_name
        FROM public.mytable;
--Lets say you created a derivative table by doing a bulk insert
SELECT poi.gid, poi.geom, citybounds.city_name
INTO myschema.my_special_pois
FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom);

-- Create 2D index on new table
CREATE INDEX idx_myschema_myspecialpois_geom_gist
  ON myschema.my_special_pois USING gist(geom);

-- If your points are 3D points or 3M points,
-- then you might want to create an nd index instead of a 2D index
CREATE INDEX my_special_pois_geom_gist_nd
        ON my_special_pois USING gist(geom gist_geometry_ops_nd);

-- To manually register this new table's geometry column in geometry_columns.
-- Note it will also change the underlying structure of the table to
-- to make the column typmod based.
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass);

-- If you are using PostGIS 2.0 and for whatever reason, you
-- you need the constraint based definition behavior
-- (such as case of inherited tables where all children do not have the same type and srid)
-- set optional use_typmod argument to false
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, false); 

尽管仍然支持旧的基于约束的方法,但直接在视图中使用的基于约束的几何列将不会正确地注册到GEOMETRY_COLUMNS中,类型模式列也是如此。在本例中,我们使用tymod定义了一个列,并使用约束定义了另一个列。

CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY, poi_name text, cat text, geom geometry(POINT,4326));
SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false);

如果我们在PSQL中运行

\d pois_ny;

我们观察到它们的定义是不同的--一个是类型模式,一个是约束

Table "public.pois_ny"
  Column   |         Type          |                       Modifiers

-----------+-----------------------+------------------------------------------------------
 gid       | integer               | not null default nextval('pois_ny_gid_seq'::regclass)
 poi_name  | text                  |
 cat       | character varying(20) |
 geom      | geometry(Point,4326)  |
 geom_2160 | geometry              |
Indexes:
    "pois_ny_pkey" PRIMARY KEY, btree (gid)
Check constraints:
    "enforce_dims_geom_2160" CHECK (st_ndims(geom_2160) = 2)
    "enforce_geotype_geom_2160" CHECK (geometrytype(geom_2160) = 'POINT'::text
        OR geom_2160 IS NULL)
    "enforce_srid_geom_2160" CHECK (st_srid(geom_2160) = 2160)

在GEOMETRY_COLUMNS中,它们都正确注册

SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'pois_ny';
f_table_name | f_geometry_column | srid | type
-------------+-------------------+------+-------
pois_ny      | geom              | 4326 | POINT
pois_ny      | geom_2160         | 2160 | POINT

然而,如果我们要创建一个这样的视图

CREATE VIEW vw_pois_ny_parks AS
SELECT *
  FROM pois_ny
  WHERE cat='park';

SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'vw_pois_ny_parks';

基于tymod的geom view列可以正确注册,但基于约束的geom view列不能正确注册。

f_table_name   | f_geometry_column | srid |   type
------------------+-------------------+------+----------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         |    0 | GEOMETRY

这可能会在未来的PostGIS版本中发生变化,但目前要强制基于约束的视图列正确注册,您需要执行以下操作:

DROP VIEW vw_pois_ny_parks;
CREATE VIEW vw_pois_ny_parks AS
SELECT gid, poi_name, cat,
  geom,
  geom_2160::geometry(POINT,2160) As geom_2160
  FROM pois_ny
  WHERE cat = 'park';
SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'vw_pois_ny_parks';
f_table_name   | f_geometry_column | srid | type
------------------+-------------------+------+-------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         | 2160 | POINT

4.7. 加载空间数据

一旦创建了空间表,就可以将空间数据上载到数据库了。有两种内置的方法可以将空间数据放入PostGIS/PostgreSQL数据库中:使用格式化的SQL语句或使用shapefile加载器。

4.7.1. 使用SQL加载数据

如果空间数据可以转换为文本表示形式(如WKT或WKB),那么使用SQL可能是将数据转换到PostGIS的最简单方法。可通过加载SQL的文本文件将数据批量加载到PostGIS/PostgreSQL中 INSERT 语句使用 PSQL SQL实用程序。

SQL加载文件( roads.sql 例如)可能如下所示:

BEGIN;
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (1,'LINESTRING(191232 243118,191108 243242)','Jeff Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (2,'LINESTRING(189141 244158,189265 244817)','Geordie Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (3,'LINESTRING(192783 228138,192612 229814)','Paul St');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (4,'LINESTRING(189412 252431,189631 259122)','Graeme Ave');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (5,'LINESTRING(190131 224148,190871 228134)','Phil Tce');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (6,'LINESTRING(198231 263418,198213 268322)','Dave Cres');
COMMIT;

可以使用将SQL文件加载到PostgreSQL中 PSQL

Psql-d[数据库]-f Roads s.sql

4.7.2. 使用Shapefile加载器

这个 shp2pgsql 数据加载器将shapefile转换为适合以几何或地理格式插入到PostGIS/PostgreSQL数据库中的SQL。加载器有几种通过命令行标志选择的操作模式。

也有一个 Shp2pgsql-gui 图形界面,具有大多数选项作为命令行加载器。这可能更容易用于一次性非脚本加载,或者如果您是PostGIS的新手。它也可以配置为PgAdminIII的插件。

(C|a|d|p)以下是互斥选项:

-c

创建新表格并从shapefile填充该表格。 这是默认模式。

-a

将Shapefile中的数据附加到数据库表中。请注意,要使用此选项加载多个文件,这些文件必须具有相同的属性和相同的数据类型。

-d

在使用shapefile中的数据创建新表之前删除数据库表。

-p

只生成表创建SQL代码,而不添加任何实际数据。如果您需要将表创建和数据加载步骤完全分开,则可以使用此方法。

-?

显示帮助屏幕。

-D

输出数据使用PostgreSQL“转储”格式。它可以与-a、-c和-d组合使用。它的加载速度比默认的“插入”SQL格式快得多。对于非常大的数据集,请使用此选项。

-s[ < FROM_SRID > :] < SRID >

使用指定的SRID创建并填充几何表。(可选)指定输入的形文件使用给定的FROM_SRID,在这种情况下,几何图形将被重新投影到目标SRID。

-k

保留标识符大小写(列、模式和属性)。请注意,shapefile中的属性均为大写。

-我

将所有整数强制为标准的32位整数,不要创建64位大整数,即使DBF标头签名似乎保证了这一点。

-我

在几何图形列上创建一个Gist索引。

-m

-m a_file_name 指定一个文件,其中包含一组从(长)列名到10个字符的DBF列名的映射。文件的内容是一个或多个两个名称的行,中间用空格分隔,没有尾随或前导空格。例如:

COLUMNNAME DBFFIELD1
AVERYLONGCOLUMNNAME DBFFIELD2

-S

生成简单的几何图形,而不是多个几何图形。仅当所有几何体实际上都是单个几何体(即,具有单个壳的多点或具有单个顶点的多点)时,才会成功。

-t < 维度 >

强制输出几何图形具有指定的维度。使用以下字符串表示维度:2D、3DZ、3DM、4D。

如果输入的维度少于指定的维度,则输出将使用零填充这些维度。如果输入的尺寸超过指定的尺寸,则不需要的尺寸将被去除。

-w

输出WKT格式,而不是WKB。请注意,这可能会由于精度损失而导致坐标漂移。

-e

单独执行每条语句,而不使用事务。这允许在存在一些会产生错误的坏几何图形时加载大多数好数据。请注意,这不能与-D标志一起使用,因为“转储”格式总是使用事务。

-W < 编码 >

指定输入数据(DBF文件)的编码。使用时,DBF的所有属性都将从指定的编码转换为UTF8。生成的SQL输出将包含一个 将CLIENT_ENCODING设置为UTF8 命令,这样后端将能够从UTF8重新转换为数据库内部配置使用的任何编码。

-N < 政策 >

空几何图形处理策略(插入*、跳过、中止)

-n

-n仅导入DBF文件。如果您的数据没有对应的shapefile,它将自动切换到此模式并仅加载DBF。因此,只有在设置了完整的shapefile,并且只需要属性数据而不需要几何体时,才需要设置此标志。

-G

在WGS84经度(SRID=4326)中使用地理类型而不是几何图形(需要经纬度数据)

-T < 表空间 >

指定新表的表空间。除非还使用-X参数,否则索引仍将使用默认表空间。PostgreSQL文档对何时使用自定义表空间有很好的描述。

-X < 表空间 >

为新表的索引指定表空间。这适用于主键索引,如果还使用了-i,则还可以使用GIST空间索引。

-Z

使用时,此标志将防止生成 ANALYZE 发言。如果没有-Z标志(默认行为), ANALYZE 将生成报表。

使用加载器创建并加载输入文件的示例会话可能如下所示:

# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql
# psql -d roadsdb -f roads.sql

使用Unix管道可以一步完成转换和加载:

#shp2pgsql shaperoads.shp myHEMA|psql-d Roadsdb

4.8. 提取空间数据

可以使用SQL或Shapefile转储程序从数据库中提取空间数据。关于SQL的一节介绍了一些可用于对空间表进行比较和查询的函数。

4.8.1. 使用SQL提取数据

从数据库中提取空间数据的最直接方法是使用SQL SELECT 定义要提取的数据集并将结果列转储到可解析的文本文件的查询:

db=# SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads;

road_id | geom                                    | road_name
--------+-----------------------------------------+-----------
          1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd
          2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd
          3 | LINESTRING(192783 228138,192612 229814) | Paul St
          4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave
          5 | LINESTRING(190131 224148,190871 228134) | Phil Tce
          6 | LINESTRING(198231 263418,198213 268322) | Dave Cres
          7 | LINESTRING(218421 284121,224123 241231) | Chris Way
(6 rows)

有时需要某种限制,以减少退回的记录数量。对于基于属性的限制,请使用与非空间表相同的SQL语法。在空间限制的情况下,以下函数非常有用:

ST_Intersects

此函数用于告知两个几何图形是否共享任何空间。

=

这将测试两个几何图形是否在几何上相同。例如,如果‘Polygon((0 0,1,1,1 0,0 0))’与‘Polygon((0 0,1,1 0,0 0))’相同(它是)。

接下来,您可以在查询中使用这些运算符。请注意,在SQL命令行上指定几何图形和方框时,必须显式地将字符串表示形式转换为几何函数。312是一个虚构的空间参考系统,与我们的数据相匹配。所以,举个例子:

SELECT road_id, road_name
  FROM roads
  WHERE roads_geom='SRID=312;LINESTRING(191232 243118,191108 243242)'::geometry;

上面的查询将返回“Roads_Geom”表中几何图形等于该值的单个记录。

要检查某些道路是否通过由多边形定义的区域,请执行以下操作:

SELECT road_id, road_name
FROM roads
WHERE ST_Intersects(roads_geom, 'SRID=312;POLYGON((...))');

最常见的空间查询可能是“基于框架的”查询,数据浏览器和网络地图绘制程序等客户端软件使用这种查询来获取“地图框架”的数据以供显示。

在使用“ & & “运算符,您可以将BOX3D指定为比较特征或几何图形。但是,当您指定几何图形时,其边界框将用于比较。

使用框架的“BOX3D”对象,这样的查询如下所示:

SELECT ST_AsText(roads_geom) AS geom
FROM roads
WHERE
  roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312);

请注意,使用SRID 312来指定信封的投影。

4.8.2. 使用Shapefile Dumper

这个 pgsql2shp 表转储程序连接到数据库并将表(可能由查询定义)转换为形文件。基本语法为:

Pgsql2shp[ < 选项 > ] < 数据库 > [ < 模式 > ] < 表格 >
pgsql2shp [<options>] <database> <query>

命令行选项包括:

-f < 文件名 >

将输出写入特定的文件名。

-H < 主机 >

要连接到的数据库主机。

-p < 端口 >

数据库主机上要连接到的端口。

-P < 密码 >

连接到数据库时使用的密码。

-U < 用户 >

连接到数据库时使用的用户名。

-g < 几何图形列 >

如果表格具有多个几何图形列,则为写入形状文件时要使用的几何图形列。

-b

使用二进制游标。这将使操作更快,但如果表中的任何非几何属性缺少转换为文本,则不起作用。

-R

原始模式。请不要将 GID 字段或转义列名。

-m 文件名

将标识符重映射到十个字符名称。文件的内容是由两个符号组成的行,由一个空格分隔,没有尾随或前导空格:VERYLONGSYMBOL SHORTONE ANOTHERVERYLONGSYMBOL SHORTER等。

4.9. 空间索引

空间索引使对大型数据集使用空间数据库成为可能。在没有索引的情况下,搜索特征需要对数据库中的每条记录进行顺序扫描。索引通过将数据组织到可以快速遍历以找到匹配记录的结构来加快搜索速度。

通常用于属性数据的B树索引方法对于空间数据并不是很有用,因为它只支持在单个维度中存储和查询数据。诸如几何图形(具有2个或更多维)之类的数据需要支持跨所有数据维的范围查询的索引方法。PostgreSQL用于空间数据处理的关键优势之一是它提供了几种适用于多维数据的索引方法:GIST、BRIN和SP-GIST索引。

  • GIST(通用搜索树) 索引将数据分解为“一侧的事物”、“重叠的事物”和“内部的事物”,可用于包括地理信息系统数据在内的各种数据类型。PostGIS使用在GIST之上实现的R-Tree索引来索引空间数据。GIST是最常用、用途最广的空间索引方法,具有很好的查询性能。

  • BRIN(块范围索引) 索引的运行方式是汇总表记录范围的空间范围。搜索是通过扫描范围完成的。BRIN仅适用于某些类型的数据(按空间排序,不频繁更新或不更新)。但它提供了更快的索引创建时间和更小的索引大小。

  • SP-GIST(空间分割广义搜索树) 是一种支持分区搜索树(如四叉树、k-d树和基数树(Try))的通用索引方法。

空间索引只存储几何图形的边界框。空间查询使用索引作为 主过滤器 以快速确定可能匹配查询条件的一组几何图形。大多数空间查询都需要 二次过滤器 它使用空间谓词函数来测试更具体的空间条件。有关使用空间谓词排队的更多信息,请参见 Section 5.2, “使用空间索引”

另请参阅 PostGIS专题讨论会关于空间索引的部分 ,以及 PostgreSQL手册

4.9.1. 主旨指数

GIST代表“通用搜索树”,是多维数据的通用索引形式。PostGIS使用在GIST之上实现的R-Tree索引来索引空间数据。GIST是最常用、用途最广的空间索引方法,具有很好的查询性能。GIST的其他实现被用来加速对所有类型的不规则数据结构(整数数组、光谱数据等)的搜索,这些数据结构不符合正常的B树索引。有关详细信息,请参阅 PostgreSQL手册

一旦空间数据表超过几千行,您就需要构建索引来加快数据的空间搜索(除非所有搜索都是基于属性的,在这种情况下,您需要在属性字段上构建普通索引)。

在“GEOMETRY”列上构建GIST索引的语法如下:

使用GIST([geometryfield])对[Tablename]创建索引[indexname]; 

上述语法将始终构建2D索引。要获取几何图形类型的n维索引,可以使用以下语法创建一个索引:

使用GIST([geometryfield]gist_geomy_ops_nd)在[Tablename]上创建索引[indexname];

构建空间索引是一项计算密集型的工作。它还会在创建的时间内阻止对表的写入访问,因此在生产系统上,您可能希望以一种较慢的并发感知方式执行操作:

使用GIST([geometryfield])在[表名]上并发创建索引[indexname]; 

建立索引后,强制PostgreSQL收集用于优化查询计划的表统计信息有时会很有帮助:

真空分析[表名][(列名)];

4.9.2. Brin指数

Brin代表“区块范围指数”。它是在PostgreSQL 9.5中引入的一种通用索引方法。布林是一个 Lossy 索引方法,这意味着需要进行二次检查以确认记录与给定的搜索条件匹配(所有提供的空间索引都是这种情况)。它提供了更快的索引创建速度和更小的索引大小,并具有合理的读取性能。它的主要目的是支持在与表中的物理位置相关的列上对非常大的表进行索引。除了空间索引,Brin还可以加快对各种属性数据结构(整数、数组等)的搜索速度。有关详细信息,请参阅 PostgreSQL手册

一旦空间表超过几千行,您就需要构建索引来加快数据的空间搜索。只要GIST索引的大小不超过数据库可用的RAM数量,并且只要您能够负担得起索引存储大小和写入时的索引更新成本,GIST索引的性能就非常好。否则,对于非常大的表,可以考虑使用Brin索引。

Brin索引将包含行中包含的所有几何的边界框存储在一组连续的表块中,称为 数据块范围 。当使用索引执行查询时,将扫描块范围以查找与查询范围相交的块范围。只有在对数据进行物理排序以使块范围的边界框具有最小重叠(理想情况下是互斥的)时,这才是有效的。生成的索引在大小上非常小,但对于相同数据的读取性能通常不如GIST索引。

构建Brin索引比构建GIST索引占用的CPU少得多。通常会发现,在相同的数据上,Brin索引的构建速度是Gist索引的十倍。而且,因为Brin索引只为每个表块范围存储一个边界框,所以使用的磁盘空间通常比GIST索引少一千倍。

您可以选择要在一定范围内汇总的块数。如果减少此数字,索引将更大,但可能会提供更好的性能。

为使BRIN有效,表数据应以物理顺序存储,以最大限度地减少数据块范围重叠量。可能已经对数据进行了适当的排序(例如,如果它是从已经按空间顺序排序的另一个数据集加载的)。否则,这可以通过按一维空间键对数据进行排序来实现。一种方法是创建按几何值排序的新表格(在最新的PostGIS版本中使用有效的希尔伯特曲线排序):

CREATE TABLE table_sorted AS
   SELECT * FROM table  ORDER BY geom;

或者,通过使用GeoHash作为(临时)索引并在该索引上进行集群,可以就地对数据进行排序:

CREATE INDEX idx_temp_geohash ON table
    USING btree (ST_GeoHash( ST_Transform( geom, 4326 ), 20));
CLUSTER table USING idx_temp_geohash;

对象上构建Brin索引的语法 几何体 列为:

使用Brin([geome_ol])在[表名]上创建索引[indexname]; 

上面的语法构建了一个2D索引。要构建3D索引,请使用以下语法:

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ([geome_col] brin_geometry_inclusion_ops_3d);

您还可以使用4D运算符类获取4D索引:

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ([geome_col] brin_geometry_inclusion_ops_4d);

上面的命令使用一个范围内的默认块数,即128。要指定要在某个范围内汇总的块数,请使用以下语法

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ( [geome_col] ) WITH (pages_per_range = [number]); 

请记住,Brin索引仅存储大量行的一个索引项。如果您的表存储具有混合数量的维度的几何图形,则结果索引的性能可能会很差。您可以通过选择存储几何的维度数最少的运算符类来避免此性能损失

这个 地理学 Brin索引支持数据类型。在地理列上构建Brin索引的语法为:

使用Brin([geog_ol])在[表名]上创建索引[indexname]; 

上述语法为椭球体上的地理空间对象构建2D索引。

目前,只提供“包含支持”,这意味着只有 & & ~ @ 运算符可用于2D情况(用于两种情况 几何体 地理学 ),并且仅仅是 & & & 用于3D几何图形的运算符。目前不支持KNN搜索。

Brin与其他索引类型之间的一个重要区别是,数据库不动态维护索引。对表中空间数据的更改将简单地附加到索引的末尾。这将导致索引搜索性能随着时间的推移而降低。可以通过执行以下操作更新索引 VACUUM ,或通过使用特殊函数 BRIN_SUMMARM_NEW_VALUES(RegClass) 。因此,Brin可能最适合用于只读或很少更改的数据。有关更多信息,请参阅 人工

总结一下使用Brin处理空间数据:

  • 索引构建时间非常快,并且索引大小非常小。

  • 索引查询时间比GIST慢,但仍然可以接受。

  • 要求按空间顺序对表数据进行排序。

  • 需要手动维护索引。

  • 最适合非常大的表格,重叠很少或没有重叠(例如点),这些表格是静态的或不经常变化的。

  • 对于返回相对大量数据记录的查询更有效。

4.9.3. SP-GIST指数

SP-GIST代表“空间分区通用搜索树”,是多维数据类型的通用索引形式,支持分区搜索树,如四叉树、k-d树和基数树(TRIES)。这些数据结构的共同特征是,它们重复地将搜索空间划分为不需要大小相等的分区。除了空间索引之外,SP-GIST还用于加速对多种数据的搜索,例如电话路由、IP路由、子字符串搜索等。 PostgreSQL手册

与GIST索引的情况一样,SP-GIST索引是有损的,因为它们存储了包围空间对象的边界框。可以将SP-GIST索引视为GIST索引的替代。

一旦GIS数据表超过几千行,就可以使用SP-GIST索引来加快数据的空间搜索。在“GEOMETRY”列上构建SP-GIST索引的语法如下:

使用SPGIST([geometryfield])在[表名]上创建索引[indexname]; 

上面的语法将构建一个2维索引。可以使用3D运算符类创建几何图形类型的三维索引:

使用SPGIST([geometryfield]spgist_geometryops_3d)在[Tablename]上创建索引[indexname];

构建空间索引是一项计算密集型操作。它还会在创建的时间内阻止对表的写入访问,因此在生产系统上,您可能希望以一种较慢的并发感知方式执行操作:

使用SPGIST([geometryfield])对[Tablename]并发创建索引[indexname]; 

建立索引后,强制PostgreSQL收集用于优化查询计划的表统计信息有时会很有帮助:

真空分析[表名][(列名)];

SP-GIST索引可以加速涉及以下运算符的查询:

  • < < , & < , & > , > > , < < |, & < |, | & > ,| > > , & & ,@ > , < @和~=,对于二维索引,

  • & / & ,~==,@ > > ,以及 < < @,表示三维索引。

目前不支持KNN搜索。

4.9.4. 调整索引使用率

通常,索引会以无形的方式加速数据访问:一旦构建了索引,PostgreSQL查询规划器就会自动决定何时使用它来提高查询性能。但在某些情况下,规划者不会选择使用现有索引,因此查询最终会使用缓慢的顺序扫描,而不是空间索引。

如果您发现您的空间索引未被使用,您可以执行以下操作:

  • 检查查询计划并检查您的查询是否实际计算了您需要的内容。错误的联接(无论是忘记的联接还是连接到错误的表)可能会意外地多次检索表记录。要获取查询计划,请使用执行 EXPLAIN 在查询的前面。

  • 确保收集了有关表中值的数量和分布的统计信息,以便为查询规划者提供更好的信息,以做出有关索引使用的决策。 真空分析 将两者都计算出来。

    无论如何,你都应该定期清理你的数据库。许多PostgreSQL DBA运行 VACUUM 作为一份非高峰期的定期工作。

  • 如果清理无济于事,您可以使用以下命令临时强制规划器使用索引信息 将ENABLE_SEQSCAN设置为OFF; 。这样,您就可以检查规划器是否能够为您的查询生成索引加速的查询计划。您应该只使用此命令进行调试;一般来说,规划器比您更清楚何时使用索引。运行完查询后,不要忘记运行 将ENABLE_SEQSCAN设置为ON; 以便计划器将对其他查询正常运行。

  • 如果 将ENABLE_SEQSCAN设置为OFF; 帮助您的查询运行得更快,您的Postgres可能没有针对您的硬件进行调整。如果您发现规划者在顺序扫描与索引扫描的成本上是错误的,请尝试减少 RANDOM_PAGE_COST 在……里面 postgresql.conf ,或使用 设置RANDOM_PAGE_COST为1.1; 。的默认值 RANDOM_PAGE_COST 是4.0。尝试将其设置为1.1(对于固态硬盘)或2.0(对于快速磁盘)。减小该值会使规划器更有可能使用索引扫描。

  • 如果 将ENABLE_SEQSCAN设置为OFF; 对您的查询没有帮助,查询可能正在使用Postgres规划器尚不能优化的SQL结构。有可能以规划者能够处理的方式重写查询。例如,带有内联SELECT的子查询可能不会生成有效的计划,但可能会使用横向联接重写。

有关更多信息,请参阅上的Postgres手册部分 查询规划

Chapter 5. 空间查询

这个 《理由》 空间数据库的一个重要功能是在数据库内执行查询,这通常需要桌面地理信息系统功能。有效地使用PostGIS需要了解哪些空间函数可用,如何在查询中使用它们,并确保适当的索引到位以提供良好的性能。

5.1. 确定空间关系

空间关系指示两个几何图形如何相互作用。它们是查询几何图形的基本功能。

5.1.1. 量纲扩展的9交点模型

根据 OpenGIS针对SQL的简单功能实现规范 比较两个几何图形的基本方法是对两个几何图形的内部、边界和外部的交点进行成对测试,并根据得到的‘交集’矩阵中的条目对两个几何图形之间的关系进行分类。

在点集拓扑理论中,嵌入到2维空间中的几何中的点被分为三个集合:

边界

几何体的边界是下一个较低维度的几何体的集合。为 POINT S,其维度为0,则边界为空集。的边界 LINESTRING 是两个端点。为 POLYGON S,则边界是外环和内环的线条。

内饰

几何图形的内部是指几何图形中不在边界内的点。为 POINT S,内部就是点本身。它的内部是 LINESTRING 是终结点之间的点集。为 POLYGON S,则内部是多边形内部的面积曲面。

外部

几何图形的外部是嵌入几何图形的空间的其余部分;换句话说,不在几何图形内部或边界上的所有点。它是一个二维非闭合曲面。

这个 量纲扩展的9交点模型 (De-9IM)通过为每个几何图形指定上述集合之间的9个交叉点的尺寸来描述两个几何图形之间的空间关系。相交尺寸可以形式地表示为3x3 交集矩阵

For a geometry g the Interior, Boundary, and Exterior are denoted using the notation I(g), B(g), and E(g). Also, dim(s) denotes the dimension of a set s with the domain of {0,1,2,F}:

  • 0 = > 点

  • 1 = > 线

  • 2 = > 面积

  • F = > 空集

使用此表示法,两个几何图形的交矩阵 一个 B类 是:

 内饰 边界 外部
内饰 Dim(i(A)∩I(B))Dim(I(A)∩B(B))Dim(i(A)∩E(B))
边界 Dim(B(A)∩I(B))Dim(B(A)∩B(B))Dim(B(A)∩E(B))
外部 Dim(E(A)∩I(B))Dim(E(A)∩B(B))Dim(E(A)∩E(B))

从视觉上看,对于两个重叠的多边形几何体,如下所示:

 

 内饰 边界 外部
内饰

Dim(i(A)∩i(B))= 2

Dim(i(A)∩B(B)= 1

Dim(i(A)∩E(B))= 2

边界

Dim(B(A)∩I(B))= 1

Dim(B(A)∩B(B))= 0

Dim(B(A)∩E(B))= 1

外部

Dim(E(A)∩I(B))= 2

Dim(E(A)∩B(B))= 1

Dim(E(A)∩E(B)= 2

从左到右和从上到下阅读,交集矩阵表示为文本字符串‘ 212101212 ‘。

有关详细信息,请参阅:

5.1.2. 命名空间关系

为了便于确定常见的空间关系,OGC SFS定义了一组 命名空间关系谓词 。PostGIS将这些作为功能提供 ST_ContainsST_CrossesST_DisjointST_EqualsST_IntersectsST_OverlapsST_TouchesST_Within 。它还定义了非标准关系谓词 ST_CoversST_CoveredBy ,以及 ST_ContainsProperly

在SQL中,空间谓词通常用作条件 WHERE JOIN 条款。命名空间谓词自动使用空间索引(如果可用),因此不需要使用边界框运算符 & & 也是。例如:

SELECT city.name, state.name, city.geom
FROM city JOIN state ON ST_Intersects(city.geom, state.geom);

有关更多详细信息和插图,请参阅 邮政地理信息系统专题讨论会。

5.1.3. 一般空间关系

在某些情况下,命名的空间关系不足以提供所需的空间过滤条件。

例如,考虑表示公路网的线性数据集。可能需要识别彼此交叉的所有路段,不是在一点,而是在一条线上(可能是为了验证某些业务规则)。在这种情况下 ST_Crosses 不提供必要的空间过滤器,因为对于线状要素,它会返回 真的 只有他们在某一点上交叉的地方。

一个分两步进行的解决方案是首先计算实际交点( ST_Intersection )空间相交的成对道路线( ST_Intersects ),然后检查交叉口是否 ST_GeometryType IS‘ LINESTRING ‘(妥善处理退回的案件 GEOMETRYCOLLECTION S.的. [多]点 S, [多]线条 S等)。

显然,更简单、更快速的解决方案是可取的。

第二个例子是在一条线上定位与湖泊边界相交的码头,码头的一端在岸上。换句话说,如果码头位于湖泊内,但不完全被湖泊所控制,则码头与湖泊的边界在一条线上相交,并且码头的一个端点恰好在湖泊的边界之内或之上。可以使用空间谓词的组合来查找所需的功能:

这些要求可以通过计算完整的DE-9IM交矩阵来满足。PostGIS提供了 ST_Relate 函数来执行此操作:

SELECT ST_Relate( 'LINESTRING (1 1, 5 5)',
                  'POLYGON ((3 3, 3 7, 7 7, 7 3, 3 3))' );
st_relate
-----------
1010F0212

To test a particular spatial relationship, an intersection matrix pattern is used. This is the matrix representation augmented with the additional symbols {T,*}:

  • T => intersection dimension is non-empty; i.e. is in {0,1,2}

  • * = > 不管了

使用交集矩阵模式,可以以更简洁的方式评估特定的空间关系。这个 ST_Relate 以及 ST_RelateMatch 函数可用于测试交集矩阵模式。对于上面的第一个例子,指定在一条线中相交的两条线的交叉点矩阵模式是‘ 1*1*1** ‘:

-- Find road segments that intersect in a line
SELECT a.id
FROM roads a, roads b
WHERE a.id != b.id
      AND a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '1*1***1**');

对于第二个例子,指定部分在多边形内部和部分在多边形外部的线的交集矩阵图案是‘ 102101FF2 ‘:

-- Find wharves partly on a lake's shoreline
SELECT a.lake_id, b.wharf_id
FROM lakes a, wharfs b
WHERE a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '102101FF2');

5.2. 使用空间索引

使用空间条件构建查询时,为获得最佳性能,务必确保使用空间索引(如果存在)(请参阅 Section 4.9, “空间索引” )。为此,必须在中使用空间操作符或索引感知函数 WHERE ON 查询的子句。

空间运算符包括边界框运算符(其中最常用的是 & & ;请参阅 Section 8.10.1, “边界框运算符” 获取完整列表)和最近邻查询中使用的距离运算符(最常见的是 < - > ;请参阅 Section 8.10.2, “距离运算符” 查看完整的名单。)

索引感知函数会自动向空间条件添加边界框运算符。索引感知函数包括命名的空间关系谓词 ST_ContainsST_ContainsProperlyST_CoveredByST_CoversST_CrossesST_IntersectsST_OverlapsST_TouchesST_WithinST_Within ,以及 ST_3DIntersects ,和距离谓词 ST_DWithinST_DFullyWithinST_3DDFullyWithin ,以及 ST_3DDWithin 。)

功能,如 ST_Distance 使用索引来优化它们的操作。例如,在一个大表上执行以下查询会非常慢:

SELECT geom
FROM geom_table
WHERE ST_Distance( geom, 'SRID=312;POINT(100000 200000)' ) < 100

此查询将选择中的所有几何 geom_table 它们位于点(100000,200000)的100个单位内。它会很慢,因为它正在计算表中每个点与指定点之间的距离,即。一 ST_DISTANCE() 计算是为 每个 表中的行。

通过使用索引感知函数,可以大大减少处理的行数 ST_DWithin

SELECT geom
FROM geom_table
WHERE ST_DWithin( geom, 'SRID=312;POINT(100000 200000)', 100 )

该查询选择相同的几何图形,但它以更高效的方式执行。这可通过以下方式实现 ST_DWiThin() 使用 & & 查询几何图形的展开边界框上的内部运算符。如果上有空间索引 几何图形 ,查询规划器将认识到它可以在计算距离之前使用索引来减少扫描的行数。空间索引仅允许检索其边界框与展开范围重叠的几何的记录 威力 在要求的距离内。然后计算实际距离以确认是否将该记录包括在结果集中。

有关更多信息和示例,请参阅 PostGIS研讨会

5.3. 空间SQL示例

本节中的示例使用线性道路表格和多边形市政当局边界表格。定义的定义 bc_roads 表如下:

Column    | Type              | Description
----------+-------------------+-------------------
gid       | integer           | Unique ID
name      | character varying | Road Name
geom      | geometry          | Location Geometry (Linestring)

定义的定义 bc_municipality 表如下:

Column   | Type              | Description
---------+-------------------+-------------------
gid      | integer           | Unique ID
code     | integer           | Unique ID
name     | character varying | City / Town Name
geom     | geometry          | Location Geometry (Polygon)
5.3.1. 所有道路的总长度是多少,以公里为单位?
5.3.2. 以公顷为单位,乔治王子的城市有多大?
5.3.3. 按地区划分,该省最大的直辖市是什么?
5.3.4. 每个直辖市内完全包含的道路长度是多少?
5.3.5. 创建一个包含乔治王子城内所有道路的新表格。
5.3.6. 维多利亚的道格拉斯街以公里为单位有多长?
5.3.7. 有洞的最大的市政多边形是什么?

5.3.1.

所有道路的总长度是多少,以公里为单位?

您可以用一段非常简单的SQL回答这个问题:

SELECT sum(ST_Length(geom))/1000 AS km_roads FROM bc_roads;

km_roads
------------------
70842.1243039643

5.3.2.

以公顷为单位,乔治王子的城市有多大?

此查询将属性条件(针对市政当局名称)与空间计算(针对面区域)相结合:

SELECT
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
WHERE name = 'PRINCE GEORGE';

hectares
------------------
32657.9103824927

5.3.3.

按地区划分,该省最大的直辖市是什么?

此查询使用空间度量值作为排序值。有几种方法可以解决这个问题,但最有效的方法如下:

SELECT
  name,
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
ORDER BY hectares DESC
LIMIT 1;

name           | hectares
---------------+-----------------
TUMBLER RIDGE  | 155020.02556131

请注意,为了回答这个问题,我们必须计算每个多边形的面积。如果我们经常这样做,那么向表中添加一个可为性能编制索引的Area列将是有意义的。通过将结果按降序排列,并使用PostgreSQL“Limit”命令对结果进行排序,我们可以轻松地选择最大的值,而无需使用Max()之类的聚合函数。

5.3.4.

每个直辖市内完全包含的道路长度是多少?

这是一个“空间连接”的例子,它使用空间交互(“包含的”)作为连接条件(而不是使用公共键连接的通常关系方法)从两个表(使用一个连接)汇集数据:

SELECT
  m.name,
  sum(ST_Length(r.geom))/1000 as roads_km
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Contains(m.geom, r.geom)
GROUP BY m.name
ORDER BY roads_km;

name                        | roads_km
----------------------------+------------------
SURREY                      | 1539.47553551242
VANCOUVER                   | 1450.33093486576
LANGLEY DISTRICT            | 833.793392535662
BURNABY                     | 773.769091404338
PRINCE GEORGE               | 694.37554369147
...

这个查询需要一段时间,因为表中的每条道路都被汇总到最终结果中(示例表中大约有25万条道路)。对于较小的数据集(数百条记录中的数千条记录),响应速度可能非常快。

5.3.5.

创建一个包含乔治王子城内所有道路的新表格。

这是一个“叠加”的例子,它接受两个表,并输出一个由空间剪裁或剪切结果组成的新表。与上面演示的“空间连接”不同,该查询创建了新的几何图形。覆盖类似于增强型空间连接,对于更精确的分析工作非常有用:

CREATE TABLE pg_roads as
SELECT
  ST_Intersection(r.geom, m.geom) AS intersection_geom,
  ST_Length(r.geom) AS rd_orig_length,
  r.*
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Intersects(r.geom, m.geom)
WHERE
  m.name = 'PRINCE GEORGE';

5.3.6.

维多利亚的道格拉斯街以公里为单位有多长?

SELECT
  sum(ST_Length(r.geom))/1000 AS kilometers
FROM bc_roads r
JOIN bc_municipality m
  ON ST_Intersects(m.geom, r.geom
WHERE
  r.name = 'Douglas St'
  AND m.name = 'VICTORIA';

kilometers
------------------
4.89151904172838

5.3.7.

有洞的最大的市政多边形是什么?

SELECT gid, name, ST_Area(geom) AS area
FROM bc_municipality
WHERE ST_NRings(geom) > 1
ORDER BY area DESC LIMIT 1;

gid  | name         | area
-----+--------------+------------------
12   | SPALLUMCHEEN | 257374619.430216

Chapter 6. 性能提示

6.1. 大几何形状的小桌子

6.1.1. 问题描述

当前的PostgreSQL版本(包括9.6)在Toast表方面存在查询优化器的弱点。Toast表是一种用于存储不适合正常数据页(如长文本、图像或具有许多顶点的复杂几何图形)的大值(从数据大小的意义上)的“扩展空间”,请参见 Toast的PostgreSQL文档 了解更多信息)。

如果您碰巧有一个包含相当大的几何图形的表,但它们的行数不是太多(就像一个包含所有欧洲国家边界的高分辨率表),那么问题就会出现。然后桌子本身很小,但它使用了大量的烤面包空间。在我们的示例中,表本身有大约80行,只使用了3个数据页,但toast表使用了8225页。

现在发出一个使用几何运算符的查询 & & 以搜索仅与这些行中的极少数行匹配的边界框。现在,查询优化器看到该表只有3页和80行。它估计,在这样一个小表上进行顺序扫描比使用索引快得多。因此,它决定忽略GIST指数。通常情况下,这种估计是正确的。但在我们的案例中, & & 操作员必须从磁盘获取每个几何图形来比较边界框,从而也读取所有吐司页面。

要查看您是否存在此问题,请使用“EXPLAIN ANALYE”PostgreSQL命令。有关更多信息和技术细节,您可以阅读PostgreSQL性能邮件列表上的线程: http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php

和更新的关于PostGIS的主题 https://lists.osgeo.org/pipermail/postgis-devel/2017-June/026209.html

6.1.2. 变通办法

PostgreSQL人员正试图通过使查询估计具有Toast感知来解决这个问题。目前,这里有两个变通办法:

第一个解决方法是强制查询规划器使用索引。在发出查询之前,将“set Enable_seqcan to off;”发送到服务器。这基本上迫使查询规划器尽可能避免顺序扫描。因此,它照常使用GIST指数。但是,必须在每个连接上设置该标志,并且它会导致查询规划器在其他情况下做出错误估计,因此您应该在查询之后将ENABLE_seqcan设置为ON;。

第二个解决方法是使顺序扫描的速度与查询规划者所认为的一样快。这可以通过创建一个“缓存”BBox的附加列并与之匹配来实现。在我们的示例中,命令如下所示:

SELECT AddGeometryColumn('myschema','mytable','bbox','4326','GEOMETRY','2');
UPDATE mytable SET bbox = ST_Envelope(ST_Force2D(geom));

现在更改您的查询以使用 & & 针对BBox而不是geom_Column的运算符,如:

SELECT geom_column
FROM mytable
WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326);

当然,如果您更改或添加行到MyTable,您必须保持BBox“同步”。执行此操作的最透明方式是触发器,但您也可以修改应用程序以使BBox列保持最新,或者在每次修改后运行上面的更新查询。

6.2. 基于几何指数的聚类

对于大多数是只读的表,并且大多数查询使用单个索引,PostgreSQL提供了CLUSTER命令。该命令以与索引条件相同的顺序对所有数据行进行物理重新排序,从而产生两个性能优势:首先,对于索引范围扫描,大大减少了数据表上的查找次数。其次,如果您的工作集集中在索引上的一些小间隔上,您将拥有更高效的缓存,因为数据行分布在较少的数据页上。(现在请阅读PostgreSQL手册中的集群命令文档。)

但是,目前PostgreSQL不允许在PostGIS GIST索引上进行群集,因为GIST索引只是忽略空值,因此您会收到如下错误消息:

lwgeom=# CLUSTER my_geom_index ON my_table;
ERROR: cannot cluster when index access method does not handle null values
HINT: You may be able to work around this by marking column "geom" NOT NULL.

正如提示消息告诉您的那样,可以通过向表添加“非空”约束来解决此缺陷:

lwgeom=# ALTER TABLE my_table ALTER COLUMN geom SET not null;
ALTER TABLE

当然,如果您的几何图形列中实际上需要空值,这将不起作用。此外,您必须使用上面的方法来添加约束,使用类似“ALTER TABLE Blubb ADD CHECK(GEOMETRY IS NOT NULL);”这样的检查约束将不起作用。

6.3. 避免维度转换

有时,您的表中恰好有3D或4D数据,但始终使用仅输出2D几何图形的兼容OpenGIS的ST_AsText()或ST_AsBinary()函数来访问它。它们通过在内部调用ST_Force2D()函数来实现这一点,这为大型几何图形带来了巨大的开销。为了避免这种开销,可能可以一劳永逸地预先丢弃这些额外的维度:

UPDATE mytable SET geom = ST_Force2D(geom);
VACUUM FULL ANALYZE mytable;

请注意,如果使用AddGeometryColumn()添加几何图形列,则几何图形尺寸将受到约束。要绕过它,您需要删除该约束。请记住更新GEOMETRY_COLUMNS表中的条目,然后重新创建约束。

对于大型表,明智的做法是通过WHERE子句和主键或其他可行的条件将更新限制到表的一部分,并在更新之间运行简单的“Vacuum;”,从而将此更新分成较小的部分。这极大地减少了对临时磁盘空间的需求。此外,如果您有混合的尺寸几何图形,则通过“WHERE DIMENSION(Geom)”限制更新 > 2“跳过重写已在2D中的几何图形。

Chapter 7. 构建应用程序

7.1. 使用MapServer

明尼苏达州地图服务器是符合OpenGIS网络地图服务规范的互联网网络地图服务器。

7.1.1. 基本用法

要在MapServer中使用PostGIS,您需要了解如何配置MapServer,这不在本文档的讨论范围之内。本节介绍特定的PostGIS问题和配置详细信息。

要将PostGIS与MapServer配合使用,您将需要:

  • PostGIS的0.6版或更高版本。

  • MapServer 3.5版或更高版本。

MapServer像访问任何其他PostgreSQL客户端一样,使用 Libpq 界面。这意味着MapServer可以安装在任何可以通过网络访问PostGIS服务器的计算机上,并使用PostGIS作为数据源。系统之间的连接越快越好。

  1. 使用您想要的任何选项编译和安装MapServer,包括“--with-postgis”配置选项。

  2. 在MapServer Mapfile 中,添加一个PostGIS图层。例如:

    LAYER
      CONNECTIONTYPE postgis
      NAME "widehighways"
      # Connect to a remote spatial database
      CONNECTION "user=dbuser dbname=gisdatabase host=bigserver"
      PROCESSING "CLOSE_CONNECTION=DEFER"
      # Get the lines from the 'geom' column of the 'roads' table
      DATA "geom from roads using srid=4326 using unique gid"
      STATUS ON
      TYPE LINE
      # Of the lines in the extents, only render the wide highways
      FILTER "type = 'highway' and numlanes >= 4"
      CLASS
        # Make the superhighways brighter and 2 pixels wide
        EXPRESSION ([numlanes] >= 6)
        STYLE
          COLOR 255 22 22
          WIDTH 2
        END
      END
      CLASS
        # All the rest are darker and only 1 pixel wide
        EXPRESSION ([numlanes] < 6)
        STYLE
          COLOR 205 92 82
        END
      END
    END

    在上面的示例中,特定于PostGIS的指令如下:

    CONNECTIONTYPE

    对于PostGIS图层,此名称始终为“postgis”。

    CONNECTION

    数据库连接由a‘连接字符串’控制,这是一组标准的键和值,如下所示(在 < > ):

    用户= < 用户名 > 密码= < 密码 > 数据库名= < 用户名 > 主机名= < 服务器 > 端口= < 5432 >

    空的连接字符串仍然有效,任何键/值对都可以省略。至少,您通常需要提供要连接的数据库名称和用户名。

    DATA

    此参数的形式为“ < 地理柱 > 从… < 表名 > 使用SRID= < 格栅 > 使用唯一 < 主键 > “其中,列是要呈现到地图的空间列,SRID是列使用的SRID,主键是表主键(或任何其他具有索引的唯一值列)。

    您可以省略“USING SRID”和“USING UNIQUE”子句,如果可能,MapServer将自动确定正确的值,但代价是为每个地图绘制在服务器上运行几个额外的查询。

    PROCESSING

    如果有多个层,则输入CLOSE_CONNECTION=DEFER将重用现有连接,而不是关闭它们。这提高了速度。请参阅以了解 MapServer PostGIS性能提示 以获得更详细的解释。

    FILTER

    筛选器必须是有效的SQL字符串,对应于SQL查询中通常跟随在“WHERE”关键字之后的逻辑。因此,例如,要仅渲染具有6条或更多车道的道路,请使用过滤器“num_lanes > =6“。

  3. 在空间数据库中,确保已为要绘制的任何图层构建了空间(GIST)索引。

    使用GIST([GeometryColumn])对[Tablename]创建索引[indexname];
  4. 如果要使用MapServer查询图层,还需要在DATA语句中使用“USING UNIQUE”子句。

    在执行查询时,MapServer需要每个空间记录的唯一标识符,而MapServer的PostGIS模块使用您指定的唯一值来提供这些唯一标识符。使用表主键是最佳实践。

7.1.2. 常见问题解答

7.1.2.1. 当我使用 EXPRESSION 在我的映射文件中,条件永远不会返回为真,即使我知道值存在于我的表中。
7.1.2.2. 我对shapefile使用的过滤器不适用于相同数据的PostGIS表。
7.1.2.3. 我的PostGIS层绘制速度比Shapefile层慢得多,这正常吗?
7.1.2.4. 我的PostGIS层绘制得很好,但查询速度非常慢。怎么啦?
7.1.2.5. 我是否可以使用“地理”列(在PostGIS 1.5中新增)作为MapServer图层的源?

7.1.2.1.

当我使用 EXPRESSION 在我的映射文件中,条件永远不会返回为真,即使我知道值存在于我的表中。

与Shape文件不同,在表达式中必须使用引用PostGIS字段名称 小写

表达式([数字车道] > =6)

7.1.2.2.

我对shapefile使用的过滤器不适用于相同数据的PostGIS表。

与形状文件不同,PostGIS图层的过滤器使用SQL语法(它们被附加到PostGIS连接器为MapServer中的图形图层生成的SQL语句中)。

过滤器“type=‘高速公路’和数字车道 > =4“

7.1.2.3.

我的PostGIS层绘制速度比Shapefile层慢得多,这正常吗?

通常,在给定地图中绘制的要素越多,PostGIS的速度就越有可能比shapefile慢。对于要素相对较少的地图(100个),PostGIS通常会更快。对于要素密度较高(1000s)的地图,PostGIS总是速度较慢。

如果您发现了严重的绘制性能问题,则可能是您尚未在表上构建空间索引。

postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn );
postgis# VACUUM ANALYZE;

7.1.2.4.

我的PostGIS层绘制得很好,但查询速度非常慢。怎么啦?

为了提高查询速度,您的空间表必须有一个唯一键,并且必须有该唯一键的索引。

您可以指定地图服务器要使用的唯一密钥 使用唯一 从句在您的 DATA 行:

数据“使用唯一的GID从Geotable创建geom”

7.1.2.5.

我是否可以使用“地理”列(在PostGIS 1.5中新增)作为MapServer图层的源?

是!MapServer将地理列理解为与几何列相同,但始终使用SRID 4326。只需确保在您的 DATA 陈述。其他一切与几何体的工作原理完全相同。

数据“使用唯一GID从使用SRID=4326的地理表进行地理记录”

7.1.3. 高级用法

这个 USING 伪SQL子句用于添加一些信息,以帮助地图服务器了解更复杂查询的结果。更具体地说,当视图或子选择用作源表时( DATA 定义)对于mapserver来说,自动确定每一行的唯一标识符以及表的SRID更加困难。这个 USING 子句可以为映射服务器提供以下两条信息:

DATA "geom FROM (
  SELECT
    table1.geom AS geom,
    table1.gid AS gid,
    table2.data AS data
  FROM table1
  LEFT JOIN table2
  ON table1.id = table2.id
) AS new_table USING UNIQUE gid USING SRID=4326"
使用唯一 < 唯一ID >

在执行地图查询时,MapServer要求每行具有唯一的ID,以便标识该行。通常,它从系统表中标识主键。但是,视图和子选择不会自动具有已知的唯一列。如果要使用MapServer的查询功能,则需要确保您的视图或子选择包含唯一值列,并使用 使用唯一 。例如,您可以为此显式选择表的主键值中的一个,或者选择保证对结果集唯一的任何其他列。

[Note]

“查询地图”是点击地图以查询该位置的地图要素信息的操作。不要将“映射查询”与 DATA 定义。

使用SRID= < 格栅 >

PostGIS需要知道几何图形正在使用哪个空间参考系统,以便将正确的数据返回给MapServer。通常,可以在PostGIS数据库的“GEOMETRY_COLUMNS”表中找到此信息,但是,对于在即创建的表(如SUBSELECT和VIEW),这是不可能的。因此, 使用SRID= 选项允许在 DATA 定义。

7.1.4. 示例

让我们从一个简单的例子开始,然后逐步向上。请考虑以下MapServer图层定义:

LAYER
  CONNECTIONTYPE postgis
  NAME "roads"
  CONNECTION "user=theuser password=thepass dbname=thedb host=theserver"
  DATA "geom from roads"
  STATUS ON
  TYPE LINE
  CLASS
    STYLE
      COLOR 0 0 0
    END
  END
END

此图层将以黑线显示Roads表中的所有道路几何图形。

现在,假设我们只想显示高速公路,直到我们放大到至少1:100000的比例--下两个层将实现此效果:

LAYER
  CONNECTIONTYPE postgis
  CONNECTION "user=theuser password=thepass dbname=thedb host=theserver"
  PROCESSING "CLOSE_CONNECTION=DEFER"
  DATA "geom from roads"
  MINSCALE 100000
  STATUS ON
  TYPE LINE
  FILTER "road_type = 'highway'"
  CLASS
    COLOR 0 0 0
  END
END
LAYER
  CONNECTIONTYPE postgis
  CONNECTION "user=theuser password=thepass dbname=thedb host=theserver"
  PROCESSING "CLOSE_CONNECTION=DEFER"
  DATA "geom from roads"
  MAXSCALE 100000
  STATUS ON
  TYPE LINE
  CLASSITEM road_type
  CLASS
    EXPRESSION "highway"
    STYLE
      WIDTH 2
      COLOR 255 0 0
    END
  END
  CLASS
    STYLE
      COLOR 0 0 0
    END
  END
END

第一个层在比例大于1:100000时使用,并且仅以黑线显示“高速公路”类型的道路。这个 FILTER 选项会导致仅显示“高速公路”类型的道路。

第二层在比例小于1:100000时使用,并将高速公路显示为双粗红线,其他道路显示为常规黑线。

因此,我们只使用MapServer功能做了几件有趣的事情,但我们的 DATA SQL语句保持简单。假设道路的名称存储在另一个表中(无论出于何种原因),我们需要做一个连接来获取它并标记我们的道路。

LAYER
  CONNECTIONTYPE postgis
  CONNECTION "user=theuser password=thepass dbname=thedb host=theserver"
  DATA "geom FROM (SELECT roads.gid AS gid, roads.geom AS geom,
        road_names.name as name FROM roads LEFT JOIN road_names ON
        roads.road_name_id = road_names.road_name_id)
        AS named_roads USING UNIQUE gid USING SRID=4326"
  MAXSCALE 20000
  STATUS ON
  TYPE ANNOTATION
  LABELITEM name
  CLASS
    LABEL
      ANGLE auto
      SIZE 8
      COLOR 0 192 0
      TYPE truetype
      FONT arial
    END
  END
END

当比例尺降至1:20000或更小时,此注释图层会为所有道路添加绿色标签。它还演示了如何在 DATA 定义。

7.2. Java客户端(JDBC)

Java客户端可以直接以文本表示形式或使用与PostGIS捆绑在一起的JDBC扩展对象来访问PostgreSQL数据库中的PostGIS“几何”对象。为了使用扩展对象,“postgis.jar”文件必须与“postgresql.jar”JDBC驱动程序包一起位于您的CLASSPATH中。

import java.sql.*;
import java.util.*;
import java.lang.*;
import org.postgis.*;

public class JavaGIS {

public static void main(String[] args) {

  java.sql.Connection conn;

  try {
    /*
    * Load the JDBC driver and establish a connection.
    */
    Class.forName("org.postgresql.Driver");
    String url = "jdbc:postgresql://localhost:5432/database";
    conn = DriverManager.getConnection(url, "postgres", "");
    /*
    * Add the geometry types to the connection. Note that you
    * must cast the connection to the pgsql-specific connection
    * implementation before calling the addDataType() method.
    */
    ((org.postgresql.PGConnection)conn).addDataType("geometry",Class.forName("org.postgis.PGgeometry"));
    ((org.postgresql.PGConnection)conn).addDataType("box3d",Class.forName("org.postgis.PGbox3d"));
    /*
    * Create a statement and execute a select query.
    */
    Statement s = conn.createStatement();
    ResultSet r = s.executeQuery("select geom,id from geomtable");
    while( r.next() ) {
      /*
      * Retrieve the geometry as an object then cast it to the geometry type.
      * Print things out.
      */
      PGgeometry geom = (PGgeometry)r.getObject(1);
      int id = r.getInt(2);
      System.out.println("Row " + id + ":");
      System.out.println(geom.toString());
    }
    s.close();
    conn.close();
  }
catch( Exception e ) {
  e.printStackTrace();
  }
}
}

根据类型:点、线串、多边形、多点、多线串、多面,包含特定的拓扑几何对象(抽象类的子类)的包装对象。

PGgeometry geom = (PGgeometry)r.getObject(1);
if( geom.getType() == Geometry.POLYGON ) {
  Polygon pl = (Polygon)geom.getGeometry();
  for( int r = 0; r < pl.numRings(); r++) {
    LinearRing rng = pl.getRing(r);
    System.out.println("Ring: " + r);
    for( int p = 0; p < rng.numPoints(); p++ ) {
      Point pt = rng.getPoint(p);
      System.out.println("Point: " + p);
      System.out.println(pt.toString());
    }
  }
}

扩展对象的JavaDoc为几何对象中的各种数据访问器函数提供了参考。

7.3. C客户端(Libpq)

...

7.3.1. 文本光标

...

7.3.2. 二进制游标

...

Chapter 8. PostGIS参考资料

下面给出的功能是PostGIS用户可能需要的功能。还有其他功能是对一般用户不使用的PostGIS对象所需的支持功能。

[Note]

PostGIS已经开始从现有的命名约定向以SQL-MM为中心的约定过渡。因此,您熟悉和喜爱的大多数函数都使用标准空间类型(ST)前缀进行了重命名。以前的函数仍然可用,尽管本文档中没有列出更新后的函数是等效的。本文档中未列出的非ST_Functions已弃用,并将在未来版本中删除,因此请停止使用它们。

8.1. PostGIS几何/地理/方框数据类型

Abstract

本节列出了由PostGIS安装的用于表示空间数据的自定义PostgreSQL数据类型。

每种数据类型都描述其类型转换行为。一个 类型铸型 将一种数据类型的值转换为另一种类型。PostgreSQL允许定义自定义类型的强制转换行为,以及用于转换类型值的函数。投射可以有 自动 行为,允许将函数参数自动转换为该函数支持的类型。

一些演员有 显式 行为,这意味着必须使用语法指定强制转换 演员阵容(Myval As Sometype) Myval::sometype 。显式强制转换避免了二义性强制转换的问题,当使用不支持给定类型的重载函数时可能会发生这种情况。例如,函数可能接受box2d或box3d,但不接受几何体。由于几何体自动强制转换为两种长方体类型,因此会产生一个“歧义函数”错误。要防止该错误,请使用显式强制转换为所需的框类型。

所有数据类型都可以强制转换为 文本 ,因此这不需要显式指定。

框2d — 表示二维边框的类型。
方框3d — 表示三维边框的类型。
几何体 — 用平面坐标系表示空间要素的类型。
geometry_dump — 一种复合类型,用于描述复杂几何图形的各个部分。
地理学 — 使用大地(椭球)坐标系表示空间要素的类型。

Name

框2d — 表示二维边框的类型。

描述

框2d 是一种空间数据类型,用于表示包围几何图形或几何图形集合的二维边界框。例如, ST_Extent 聚合函数返回一个 框2d 对象。

该制图表达包含值 Xmin、ymin、xmax、ymax 。这些是X和Y范围的最小值和最大值。

框2d 对象有一个文本表示形式,如下所示 方框(1 2 5 6)

投射行为

下表列出了此数据类型允许的自动转换和显式转换:

投给行为
方框3d 自动
几何体 自动

Name

方框3d — 表示三维边框的类型。

描述

方框3d 是一种PostGIS空间数据类型,用于表示包围几何图形或几何图形集合的三维边界框。例如, ST_3DExtent 聚合函数返回一个 方框3d 对象。

该制图表达包含值 Xmin、ymin、zmin、xmax、ymax、zmax 。这些是X、Y和Z范围的最小值和最大值。

方框3d 对象有一个文本表示形式,如下所示 BOX3D(1 2 3 5 6 5)

投射行为

下表列出了此数据类型允许的自动转换和显式转换:

投给行为
自动
框2d 自动
几何体 自动

Name

几何体 — 用平面坐标系表示空间要素的类型。

描述

几何体 是一种基本的PostGIS空间数据类型,用于在平面(欧几里得)坐标系中表示要素。

对几何体的所有空间操作都使用几何体所在的空间参考系的单位。

投射行为

下表列出了此数据类型允许的自动转换和显式转换:

投给行为
自动
框2d 自动
方框3d 自动
喝杯茶自动
地理学 自动
文本自动

Name

geometry_dump — 一种复合类型,用于描述复杂几何图形的各个部分。

描述

geometry_dump 是一种 复合数据类型 包含以下字段:

  • 几何图形 -表示转储几何体的组件的几何体。几何图形类型取决于原始函数。

  • 路径[] -一个整数数组,它定义转储的几何体中指向 几何图形 组件。路径数组以1为基础(即 路径[1] 是第一个元素。)

它由 ST_Dump* 作为输出类型的函数族,用于将复杂几何图形分解为其组成部分。


Name

地理学 — 使用大地(椭球)坐标系表示空间要素的类型。

描述

地理学 是一种用于在大地坐标系中表示要素的空间数据类型。大地坐标系使用椭球体对地球进行建模。

通过考虑椭球体模型,对地理类型的空间运算提供了更准确的结果。

投射行为

下表列出了此数据类型允许的自动转换和显式转换:

投给行为
几何体 显式

8.2. 表管理功能

Abstract

这些函数有助于定义包含几何列的表。

AddGeometryColumn — 将几何图形列添加到现有表格。
DropGeometryColumn — 从空间表中删除几何图形列。
DropGeometryTable — 删除GEOMETRY_COLUMNS中的表及其所有引用。
Find_SRID — 返回为几何列定义的SRID。
Populate_Geometry_Columns — 确保使用类型修饰符定义几何图形列或具有适当的空间约束。
更新几何SRID — 更新几何图形列中所有要素的SRID和表元数据。

Name

AddGeometryColumn — 将几何图形列添加到现有表格。

Synopsis

text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

描述

将几何图形列添加到现有属性表中。这个 schema_name 表架构的名称。这个 格栅 必须是对SPATIAL_REF_SYS表中条目的整数值引用。这个 类型 必须是与几何类型对应的字符串,例如‘Polygon’或‘MULTILINESTRING’。如果架构名称不存在(或在当前SEARCH_PATH中不可见),或者指定的SRID、几何类型或尺寸无效,则会引发错误。

[Note]

已更改:2.0.0此函数不再更新GEOMETRY_COLUMNS,因为GEOMETRY_COLUMNS是从系统目录读取的视图。默认情况下,它也不创建约束,而是使用PostgreSQL的内置类型修饰符行为。因此,例如,使用此函数构建一个WGS84点列现在相当于: ALTER TABLE SOME_TABLE添加列几何图形(Point,4326);

已更改:2.0.0如果需要旧的约束行为,请使用缺省值 use_typmod ,但将其设置为False。

[Note]

已更改:2.0.0视图不能再在GEOMETRY_COLUMNS中手动注册,但是,针对几何类型模表几何构建并在没有包装函数的情况下使用的视图将正确注册自身,因为它们继承了其父表列的类型模式行为。使用输出其他几何图形的几何函数的视图需要转换为类型模化几何图形,以便在GEOMETRY_COLUMNS中正确注册这些视图几何图形列。参考 Section 4.6.3, “手动注册几何图形列”

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

增强:2.0.0引入了USE_TYPMOD参数。默认情况下创建TypeMod几何图形列,而不是基于约束。

示例

-- Create schema to hold data
CREATE SCHEMA my_schema;
-- Create a new simple PostgreSQL table
CREATE TABLE my_schema.my_spatial_table (id serial);

-- Describing the table shows a simple table with a single "id" column.
postgis=# \d my_schema.my_spatial_table
                                                         Table "my_schema.my_spatial_table"
 Column |  Type   |                                Modifiers
--------+---------+-------------------------------------------------------------------------
 id     | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)

-- Add a spatial column to the table
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POINT',2);

-- Add a point using the old constraint based behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);

--Add a curvepolygon using old constraint behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);

-- Describe the table again reveals the addition of a new geometry columns.
\d my_schema.my_spatial_table
                            addgeometrycolumn
-------------------------------------------------------------------------
 my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2
(1 row)

                                    Table "my_schema.my_spatial_table"
  Column  |         Type         |                                Modifiers
----------+----------------------+-------------------------------------------------------------------------
 id       | integer              | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)
 geom     | geometry(Point,4326) |
 geom_c   | geometry             |
 geomcp_c | geometry             |
Check constraints:
    "enforce_dims_geom_c" CHECK (st_ndims(geom_c) = 2)
    "enforce_dims_geomcp_c" CHECK (st_ndims(geomcp_c) = 2)
    "enforce_geotype_geom_c" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL)
    "enforce_geotype_geomcp_c" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL)
    "enforce_srid_geom_c" CHECK (st_srid(geom_c) = 4326)
    "enforce_srid_geomcp_c" CHECK (st_srid(geomcp_c) = 4326)

-- geometry_columns view also registers the new columns --
SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims
    FROM geometry_columns
    WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

 col_name |     type     | srid | ndims
----------+--------------+------+-------
 geom     | Point        | 4326 |     2
 geom_c   | Point        | 4326 |     2
 geomcp_c | CurvePolygon | 4326 |     2

Name

DropGeometryColumn — 从空间表中删除几何图形列。

Synopsis

text DropGeometryColumn(varchar table_name, varchar column_name);

text DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

text DropGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name);

描述

从空间表中删除几何图形列。请注意,SCHEMA_NAME需要与GEOMETRY_COLUMNS表中表行的f_TABLE_SCHEMA字段匹配。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

[Note]

已更改:2.0.0提供此函数是为了向后兼容。既然GEOMETRY_COLUMNS现在是系统编目的视图,您就可以像删除任何其他表列一样使用 ALTER TABLE

示例

SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');
                        ----RESULT output ---
                                          dropgeometrycolumn
------------------------------------------------------
 my_schema.my_spatial_table.geom effectively removed.

-- In PostGIS 2.0+ the above is also equivalent to the standard
-- the standard alter table.  Both will deregister from geometry_columns
ALTER TABLE my_schema.my_spatial_table DROP column geom;
                

Name

DropGeometryTable — 删除GEOMETRY_COLUMNS中的表及其所有引用。

Synopsis

boolean DropGeometryTable(varchar table_name);

boolean DropGeometryTable(varchar schema_name, varchar table_name);

boolean DropGeometryTable(varchar catalog_name, varchar schema_name, varchar table_name);

描述

删除GEOMETRY_COLUMNS中的表及其所有引用。注:如果未提供模式,则在支持模式的pgsql安装上使用CURRENT_SCHEMA()。

[Note]

已更改:2.0.0提供此函数是为了向后兼容。既然GEOMETRY_COLUMNS现在是系统编目的视图,您就可以像删除任何其他表一样删除具有几何列的表 DROP表

示例

SELECT DropGeometryTable ('my_schema','my_spatial_table');
----RESULT output ---
my_schema.my_spatial_table dropped.

-- The above is now equivalent to --
DROP TABLE my_schema.my_spatial_table;
                

Name

Find_SRID — 返回为几何列定义的SRID。

Synopsis

integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);

描述

通过搜索GEOMETRY_COLUMNS表返回指定几何图形列的整数SRID。如果几何图形列未正确添加(例如,使用 AddGeometryColumn 函数),则该函数将不起作用。

示例

SELECT Find_SRID('public', 'tiger_us_state_2007', 'geom_4269');
find_srid
----------
4269

另请参阅

ST_SRID


Name

Populate_Geometry_Columns — 确保使用类型修饰符定义几何图形列或具有适当的空间约束。

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

描述

确保几何图形列具有适当的类型修饰符或空间约束,以确保它们在 geometry_columns 查看。默认情况下,会将所有没有类型修饰符的几何图形列转换为有类型修饰符的几何图形列。

出于向后兼容性和空间需求(如表继承,其中每个子表可能具有不同的几何类型),仍然支持旧的CHECK约束行为。如果需要旧的行为,则需要将新的可选参数作为False传递 use_typmod=false 。完成此操作后,将创建不带类型修饰符的几何柱,但将定义3个约束。特别是,这意味着属于表的每个几何图形列至少有三个约束:

  • enforce_dims_geom -确保每个几何图形具有相同的尺寸(请参见 ST_NDims )

  • enforce_geotype_geom -确保每个几何图形的类型相同(请参见 GeometryType )

  • enforce_srid_geom -确保每个几何图形都在同一投影中(请参见 ST_SRID )

如果一张桌子 OID 时,此函数尝试确定表中所有几何图形列的sRID、尺寸和几何图形类型,并根据需要添加约束。如果成功,则在GEOMETRY_COLUMNS表中插入适当的行,否则将捕获异常并引发描述问题的错误通知。

如果 OID 时,此函数尝试确定视图中所有几何图形的sRID、尺寸和类型,并将适当的条目插入 geometry_columns 表,但不执行任何操作来强制约束。

无参数变量是参数变量的简单包装器,它首先截断并重新填充数据库中每个空间表和视图的GEOMETRY_COLUMNS表,在适当的地方向表添加空间约束。它返回在数据库中检测到的几何列数和插入到 geometry_columns 桌子。参数化版只返回插入到 geometry_columns 桌子。

可用性:1.4.0

已更改:2.0.0默认情况下,现在使用类型修饰符而不是检查约束来约束几何体类型。仍然可以使用检查约束行为,方法是使用新的 use_typmod 并将其设置为False。

增强版:2.0.0 use_typmod 引入了可选参数,允许控制是使用类型修饰符还是使用检查约束来创建列。

示例

CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
-- This will now use typ modifiers.  For this to work, there must exist data
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);

populate_geometry_columns
--------------------------
                        1


\d myspatial_table

                                   Table "public.myspatial_table"
 Column |           Type            |                           Modifiers
--------+---------------------------+---------------------------------------------------------------
 gid    | integer                   | not null default nextval('myspatial_table_gid_seq'::regclass)
 geom   | geometry(LineString,4326) |
-- This will change the geometry columns to use constraints if they are not typmod or have constraints already.
--For this to work, there must exist data
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
populate_geometry_columns
--------------------------
                        1
\d myspatial_table_cs

                          Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry |
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)

Name

更新几何SRID — 更新几何图形列中所有要素的SRID和表元数据。

Synopsis

text UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);

描述

更新几何图形列中所有特征的SRID,更新GEOMETRY_COLUMNS中的约束和参照。如果列是由类型定义强制执行的,则类型定义将被更改。注:如果未提供模式,则在支持模式的pgsql安装上使用CURRENT_SCHEMA()。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

将几何插入到已使用SRID集的道路表中 EWKT格式

COPY roads (geom) FROM STDIN;
SRID=4326;LINESTRING(0 0, 10 10)
SRID=4326;LINESTRING(10 10, 15 0)
\.
                

这将把sRid of the Roads表从以前的版本更改为4326:

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

前面的示例等同于下面的DDL语句:

ALTER TABLE roads
  ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326)
    USING ST_SetSRID(geom,4326);

如果你在加载中搞错了投影(或者把它作为未知的东西带进来),你想一下子转换成网络墨卡托,你可以用DDL来完成,但是没有同等的PostGIS管理功能可以一口气做到这一点。

ALTER TABLE roads
 ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom,4326),3857) ;

8.3. 几何构造器

ST_Collect — 从一组几何图形创建GeometryCollection或Multi*几何图形。
ST_LineFromMultiPoint — 从多点几何图形创建线串。
ST_MakeEnvelope — 从最小和最大坐标创建矩形多边形。
ST_MakeLine — 从点、多点或线串几何图形创建线串。
ST_MakePoint — 创建二维、三维或四维点。
ST_MakePointM — 从X、Y和M值创建点。
ST_MakePolygon — 从壳和可选的孔列表创建多边形。
ST_Point — 使用X、Y和SRID值创建点。
ST_PointZ — 使用X、Y、Z和SRID值创建点。
ST_PointM — 使用X、Y、M和SRID值创建点。
ST_PointZM — 使用X、Y、Z、M和SRID值创建点。
ST_Polygon — 从具有指定SRID的线串创建多边形。
ST_TileEnvelope — 在中创建矩形多边形 Web墨卡托 (SRID:3857)使用 XYZ瓷砖系统 。
ST_HexagonGrid — 返回一组完全覆盖几何参数边界的六边形和单元格索引。
ST_Hexagon — 使用提供的边大小和六边形网格空间内的单元格坐标返回单个六边形。
ST_SquareGrid — 返回一组完全覆盖几何参数边界的网格正方形和单元格索引。
ST_Square — 使用提供的边大小和正方形网格空间内的单元格坐标返回单个正方形。
ST_Letters — 返回呈现为几何图形的输入字母,该几何图形的默认起始位置为原点,默认文本高度为100。

Name

ST_Collect — 从一组几何图形创建GeometryCollection或Multi*几何图形。

Synopsis

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

描述

将几何图形收集到几何图形集合中。结果是一个多*或一个GeometryCollection,这取决于输入几何的类型是相同的还是不同的(同构或异类)。输入几何图形在集合中保持不变。

变体1: 接受两个输入几何

变体2: 接受几何图形数组

变体3: 接受几何图形行集的聚合函数。

[Note]

如果任何输入几何图形是集合(多*或GeometryCollection),ST_Collect将返回GeometryCollection(因为这是唯一可以包含嵌套集合的类型)。要防止出现这种情况,请使用 ST_Dump 在子查询中将输入集合扩展到它们的原子元素(请参见下面的示例)。

[Note]

ST_COLLECT和 ST_Union 看起来很相似,但实际上运作方式截然不同。ST_Collect将几何图形聚合到一个集合中,而不会以任何方式更改它们。ST_UNION以几何形式合并重叠的几何图形,并在交点处拆分线串。融合边界时,它可能会返回单个几何图形。

可用性:1.4.0-ST_COLLECT(Geomray)已推出。ST_Collect得到了增强,可以更快地处理更多的几何图形。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例-双输入变量

收集二维点。

SELECT ST_AsText( ST_Collect( ST_GeomFromText('POINT(1 2)'),
        ST_GeomFromText('POINT(-2 3)') ));

st_astext
----------
MULTIPOINT((1 2),(-2 3))

收集三维点。

SELECT ST_AsEWKT( ST_Collect( ST_GeomFromEWKT('POINT(1 2 3)'),
                ST_GeomFromEWKT('POINT(1 2 4)') ) );

                st_asewkt
-------------------------
 MULTIPOINT(1 2 3,1 2 4)
 

收集曲线。

SELECT ST_AsText( ST_Collect( 'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
                'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));

                st_astext
------------------------------------------------------------------------------------
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
 CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

示例-数组变体

使用子查询的数组构造函数。

SELECT ST_Collect( ARRAY( SELECT geom FROM sometable ) );

使用值的数组构造函数。

SELECT ST_AsText(  ST_Collect(
                ARRAY[ ST_GeomFromText('LINESTRING(1 2, 3 4)'),
                        ST_GeomFromText('LINESTRING(3 4, 4 5)') ] )) As wktcollect;

--wkt collect --
MULTILINESTRING((1 2,3 4),(3 4,4 5))

示例-聚合变体

通过对表中的几何图形进行分组来创建多个集合。

SELECT stusps, ST_Collect(f.geom) as geom
         FROM (SELECT stusps, (ST_Dump(geom)).geom As geom
                                FROM
                                somestatetable ) As f
        GROUP BY stusps

另请参阅

ST_Dump, ST_Union


Name

ST_LineFromMultiPoint — 从多点几何图形创建线串。

Synopsis

geometry ST_LineFromMultiPoint(geometry aMultiPoint);

描述

从多点几何图形创建线串。

使用 ST_MakeLine 从点或线串输入创建直线的步骤。

This function supports 3d and will not drop the z-index.

示例

从3D多点创建3D线串

SELECT ST_AsEWKT(  ST_LineFromMultiPoint('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)')  ));

--result--
LINESTRING(1 2 3,4 5 6,7 8 9)

另请参阅

ST_AsEWKT, ST_MakeLine


Name

ST_MakeEnvelope — 从最小和最大坐标创建矩形多边形。

Synopsis

geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);

描述

从X和Y的最小值和最大值创建矩形。输入值必须在SRID指定的空间参考系中。如果未指定SRID,则使用未知空间参考系(SRID 0)。

可用性:1.5

增强:2.0:引入了在不指定SRID的情况下指定信封的功能。

示例:构建边界框多边形

SELECT ST_AsText( ST_MakeEnvelope(10, 10, 11, 11, 4326) );

st_asewkt
-----------
POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))

Name

ST_MakeLine — 从点、多点或线串几何图形创建线串。

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

描述

创建包含点、多点或线串几何图形的点的线串。其他几何图形类型会导致错误。

变体1: 接受两个输入几何

变体2: 接受几何图形数组

变体3: 接受几何图形行集的聚合函数。要确保输入几何的顺序,请使用 排序依据 在函数调用中,或具有 排序依据 条款。

Input LineStrings开头的重复节点将折叠为一个点。点和多点输入中的重复点不会折叠。 ST_RemoveRepeatedPoints 可用于折叠输出线串中的重复点。

This function supports 3d and will not drop the z-index.

可用性:2.3.0-引入了对多点输入元素的支持

可用性:2.0.0-引入了对线串输入元素的支持

可获得性:1.4.0-ST_MakeLine(地理阵列)已推出。ST_MakeLine聚合函数得到了增强,可以更快地处理更多的点。

示例:双输入变量

创建一条由两点组成的直线。

SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );

          st_astext
---------------------
 LINESTRING(1 2,3 4)

从两个三维点创建三维线。

SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) ));

                st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)

从两个不相交的线串创建一条线。

select ST_AsText( ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)' ) );

          st_astext
-----------------------------
 LINESTRING(0 0,1 1,2 2,3 3)

示例:数组变量

从具有排序的子查询形成的数组中创建一行。

SELECT ST_MakeLine( ARRAY( SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time) );

从三维点阵列创建三维线

SELECT ST_AsEWKT( ST_MakeLine(
          ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]  ));

                st_asewkt
-------------------------
LINESTRING(1 2 3,3 4 5,6 6 6)

示例:聚合变量

此示例从一组轨迹中查询基于时间的GPS点序列,并为每个轨迹创建一条记录。结果几何图形是由GPS跟踪点按行进顺序组成的线串。

使用聚合 排序依据 提供排序正确的线串。

SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
        FROM gps_points As gps
        GROUP BY track_id;

在PostgreSQL9之前,可以使用子查询中的排序。但是,有时查询计划可能不尊重子查询的顺序。

SELECT gps.track_id, ST_MakeLine(gps.geom) As geom
        FROM ( SELECT track_id, gps_time, geom
                        FROM gps_points ORDER BY track_id, gps_time ) As gps
        GROUP BY track_id;

Name

ST_MakePoint — 创建二维、三维或四维点。

Synopsis

geometry ST_MakePoint(float x, float y);

geometry ST_MakePoint(float x, float y, float z);

geometry ST_MakePoint(float x, float y, float z, float m);

描述

创建2D、3D Z或4D ZM点几何图形。

使用 ST_MakePointM 使用XYM坐标制作点。

虽然不符合OGC, ST_MakePoint 速度更快,精度更高 ST_GeomFromTextST_PointFromText 。对于数值坐标值,它也更易于使用。

[Note]

对于大地坐标, X 是经度和 Y 是纬度

This function supports 3d and will not drop the z-index.

示例

--Return point with unknown SRID
SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);

--Return point marked as WGS 84 long lat
SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

--Return a 3D point (e.g. has altitude)
SELECT ST_MakePoint(1, 2,1.5);

--Get z of point
SELECT ST_Z(ST_MakePoint(1, 2,1.5));
result
-------
1.5

Name

ST_MakePointM — 从X、Y和M值创建点。

Synopsis

geometry ST_MakePointM(float x, float y, float m);

描述

使用X、Y和M(测量)坐标创建点。

使用 ST_MakePoint 使用XY、XYZ或XYZM坐标创建点。

[Note]

对于大地坐标, X 是经度和 Y 是纬度

示例

[Note]

ST_AsEWKT 用于文本输出,因为 ST_AsText 不支持M值。

创建具有未知SRID的点。

SELECT ST_AsEWKT(  ST_MakePointM(-71.1043443253471, 42.3150676015829, 10)  );

                                   st_asewkt
-----------------------------------------------
 POINTM(-71.1043443253471 42.3150676015829 10)

使用WGS 84大地坐标系中的测量创建点。

SELECT ST_AsEWKT( ST_SetSRID(  ST_MakePointM(-71.104, 42.315, 10),  4326));

                                                st_asewkt
---------------------------------------------------------
SRID=4326;POINTM(-71.104 42.315 10)

获取创建点的度量值。

SELECT ST_M(  ST_MakePointM(-71.104, 42.315, 10)  );

result
-------
10

Name

ST_MakePolygon — 从壳和可选的孔列表创建多边形。

Synopsis

geometry ST_MakePolygon(geometry linestring);

geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);

描述

创建由给定壳和可选孔阵列形成的多边形。输入几何图形必须是闭合线串(环)。

变体1: 接受一个壳线串。

变体2: 接受壳线串和内部(孔)线串的数组。可以使用PostgreSQL ARRAY_AGG()、ARRAY[]或ARRAY()构造几何数组。

[Note]

此函数不接受多行字符串。使用 ST_LineMerge 要生成线条,或 ST_Dump 若要提取线条字符串,请执行以下操作。

This function supports 3d and will not drop the z-index.

示例:单输入变量

从二维线串创建多边形。

SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));

使用从开放的线串创建面 ST_StartPointST_AddPoint 来关闭它。

SELECT ST_MakePolygon( ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)) )
FROM (
  SELECT ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)') As open_line) As foo;

从三维线串创建面

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));

st_asewkt
-----------
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))

从带测量的线串创建面

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)' ));

st_asewkt
----------
POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))

示例:带内孔的外壳变量

创建一个带有额外孔的圆环多边形

SELECT ST_MakePolygon( ST_ExteriorRing( ST_Buffer(ring.line,10)),
        ARRAY[  ST_Translate(ring.line, 1, 1),
                ST_ExteriorRing(ST_Buffer(ST_Point(20,20),1)) ]
        )
FROM (SELECT ST_ExteriorRing(
        ST_Buffer(ST_Point(10,10),10,10)) AS line ) AS ring;

创建一组带有代表湖泊的洞的省边界。输入是省多边形表/多重多边形表和水线串表。形成湖泊的线是通过使用 ST_IsClosed 。省级线条的提取是使用 ST_Boundary 。按照以下条件要求 ST_MakePolygon ,将边界强制为单个线条,方法是使用 ST_LineMerge 。(但是,请注意,如果某个省有多个区域或岛屿,则会生成无效的面。)使用左连接可确保包括所有省份,即使它们没有湖泊。

[Note]

之所以使用CASE构造,是因为将空数组传递到ST_MakePolygon会导致空返回值。

SELECT p.gid, p.province_name,
        CASE WHEN array_agg(w.geom) IS NULL
        THEN p.geom
        ELSE  ST_MakePolygon( ST_LineMerge(ST_Boundary(p.geom)),
                        array_agg(w.geom)) END
FROM
        provinces p LEFT JOIN waterlines w
                ON (ST_Within(w.geom, p.geom) AND ST_IsClosed(w.geom))
GROUP BY p.gid, p.province_name, p.geom;

另一种技术是利用相关子查询和将行集转换为数组的数组()构造函数。

SELECT p.gid,  p.province_name,
    CASE WHEN EXISTS( SELECT w.geom
        FROM waterlines w
        WHERE ST_Within(w.geom, p.geom)
        AND ST_IsClosed(w.geom))
    THEN ST_MakePolygon(
        ST_LineMerge(ST_Boundary(p.geom)),
        ARRAY( SELECT w.geom
            FROM waterlines w
            WHERE ST_Within(w.geom, p.geom)
            AND ST_IsClosed(w.geom)))
    ELSE p.geom
    END AS geom
FROM provinces p;

另请参阅

ST_BuildArea ST_Polygon


Name

ST_Point — 使用X、Y和SRID值创建点。

Synopsis

geometry ST_Point(float x, float y);

geometry ST_Point(float x, float y, integer srid=unknown);

描述

返回具有给定X和Y坐标值的点。这是的SQL-MM等效项 ST_MakePoint 这只需要X和Y。

[Note]

对于大地坐标, X 是经度和 Y 是纬度

增强:添加了3.2.0 sRID作为额外的可选参数。较早的安装需要与ST_SetSRID组合以在几何体上标记sRID。

This method implements the SQL/MM specification. SQL-MM 3:6.1.2

示例:几何体

SELECT ST_Point( -71.104, 42.315);
SELECT ST_SetSRID(ST_Point( -71.104, 42.315),4326);

3.2.0中的新功能:指定了SRID

SELECT ST_Point( -71.104, 42.315, 4326);

示例:地理

PostGIS 3.2之前版本的语法

SELECT CAST( ST_SetSRID(ST_Point( -71.104, 42.315), 4326) AS geography);

3.2和上,您可以包括sRID

SELECT CAST( ST_Point( -71.104, 42.315, 4326) AS geography);

PostgreSQL还提供了 :: 铸造速记

SELECT ST_Point( -71.104, 42.315, 4326)::geography;

如果点坐标不在大地坐标系(例如WGS84)中,则必须在投射到地理位置之前重新投影它们。在本例中,宾夕法尼亚州平面英尺(SRID 2273)中的一个点被投影到WGS84(SRID 4326)。

SELECT ST_Transform(ST_SetSRID( ST_Point( 3637510, 3014852 ), 2273), 4326)::geography;

Name

ST_PointZ — 使用X、Y、Z和SRID值创建点。

Synopsis

geometry ST_PointZ(float x, float y, float z, integer srid=unknown);

描述

返回一个具有给定X、Y和Z坐标值的点,还可以返回一个SRID编号。

增强:添加了3.2.0 sRID作为额外的可选参数。较早的安装需要与ST_SetSRID组合以在几何体上标记sRID。

示例

SELECT ST_PointZ(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4)

Name

ST_PointM — 使用X、Y、M和SRID值创建点。

Synopsis

geometry ST_PointM(float x, float y, float m, integer srid=unknown);

描述

返回一个具有给定X、Y和M坐标值的点,还可以返回一个SRID编号。

增强:添加了3.2.0 sRID作为额外的可选参数。较早的安装需要与ST_SetSRID组合以在几何体上标记sRID。

示例

SELECT ST_PointM(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4)

Name

ST_PointZM — 使用X、Y、Z、M和SRID值创建点。

Synopsis

geometry ST_PointZM(float x, float y, float z, float m, integer srid=unknown);

描述

返回一个具有给定X、Y、Z和M坐标值的点,还可以返回一个SRID编号。

增强:添加了3.2.0 sRID作为额外的可选参数。较早的安装需要与ST_SetSRID组合以在几何体上标记sRID。

示例

SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, srid => 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5)

Name

ST_Polygon — 从具有指定SRID的线串创建多边形。

Synopsis

geometry ST_Polygon(geometry lineString, integer srid);

描述

返回从给定线串构建的面,并从 格栅

ST_Polygon类似于 ST_MakePolygon 变体1,增加了设置SRID。

要创建带有孔的多边形,请使用 ST_MakePolygon 变体2,然后 ST_SetSRID

[Note]

此函数不接受多行字符串。使用 ST_LineMerge 要生成线条,或 ST_Dump 若要提取线条字符串,请执行以下操作。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:8.3.2

This function supports 3d and will not drop the z-index.

示例

创建一个二维多边形。

SELECT ST_AsText( ST_Polygon('LINESTRING(75 29, 77 29, 77 29, 75 29)'::geometry, 4326) );

-- result --
POLYGON((75 29, 77 29, 77 29, 75 29))

创建3D多边形。

SELECT ST_AsEWKT( ST_Polygon( ST_GeomFromEWKT('LINESTRING(75 29 1, 77 29 2, 77 29 3, 75 29 1)'), 4326) );

-- result --
SRID=4326;POLYGON((75 29 1, 77 29 2, 77 29 3, 75 29 1))

Name

ST_TileEnvelope — 在中创建矩形多边形 Web墨卡托 (SRID:3857)使用 XYZ瓷砖系统

Synopsis

geometry ST_TileEnvelope(integer tileZoom, integer tileX, integer tileY, geometry bounds=SRID=3857;LINESTRING(-20037508.342789 -20037508.342789,20037508.342789 20037508.342789), float margin=0.0);

描述

在中创建矩形多边形 Web墨卡托 (SRID:3857)使用 XYZ瓷砖系统 。默认情况下,界限是使用Web墨卡托系统的标准范围(-20037508.342789,20037508.342789)的EPSG:3857中的。可选的边界参数可用于为任何平铺方案生成封套:提供一个几何图形,该几何图形具有要内嵌平铺系统的初始“缩放级别为零”正方形的SRID和范围。

可选的边距参数可用于按给定百分比增大切片,例如边距=0.125将切片增大12.5%,这相当于当范围为4096时缓冲区=512%,如中所用 ST_AsMVTGeom 。这对于创建平铺缓冲区很有用--包括位于平铺可见区域之外的数据,但这些数据的存在会影响当前平铺的渲染。例如,城市名称(地理点)可能靠近瓷砖的边缘,但文本需要渲染在两个瓷砖上,即使该地理位置只位于一个瓷砖的可见区域。在搜索中使用展开的切片将包括两个切片的城市地理位置。改为使用负值来收缩平铺。禁止使用小于-0.5的值,因为这会完全消除平铺。请勿对ST_AsMVTGeom()使用页边距。请参见中的示例 ST_AsMVT

增强:3.1.0增加了边距参数。

可用性:3.0.0

示例:构建平铺信封

SELECT ST_AsText( ST_TileEnvelope(2, 1, 1) );

 st_astext
------------------------------
 POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))

SELECT ST_AsText( ST_TileEnvelope(3, 1, 1, ST_MakeEnvelope(-180, -90, 180, 90, 4326) ) );

                      st_astext
------------------------------------------------------
 POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))

另请参阅

ST_MakeEnvelope


Name

ST_HexagonGrid — 返回一组完全覆盖几何参数边界的六边形和单元格索引。

Synopsis

setof record ST_HexagonGrid(float8 size, geometry bounds);

描述

从平面的六边形平铺的概念开始。(不是六角形的地球瓷砖,这不是 H3 平铺方案。)对于给定的平面SRS和给定的边大小,从SRS的原点开始,平面有一个唯一的六边形平铺,即平铺(SRS,SIZE)。此函数回答以下问题:给定平铺(SRS,大小)中的哪些六边形与给定边界重叠。

输出六边形的SRS是由边界几何体提供的SRS。

将六边形的边大小加倍或三倍将生成与原点平铺相匹配的新父平铺。不幸的是,不可能生成子瓷砖完全适合其中的父六边形瓷砖。

可用性:3.1.0

示例:计算六边形中的点数

要对六边形平铺进行点汇总,请使用点的范围作为边界生成一个六边形网格,然后在空间上连接到该网格。

SELECT COUNT(*), hexes.geom
FROM
    ST_HexagonGrid(
        10000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS hexes
    INNER JOIN
    pointtable AS pts
    ON ST_Intersects(pts.geom, hexes.geom)
GROUP BY hexes.geom;

示例:生成多边形的十六进制覆盖

如果我们为每个多边形边界生成一组六边形,并过滤掉那些不与其六边形相交的六边形,我们最终会为每个多边形生成一个平铺。

平铺州的结果是覆盖每个州的六边形,并在州之间的边界上重叠多个六边形。

[Note]

引用From列表中以前的表时,集合返回函数隐含了关键字SLATEAL。因此,对于本例来说,CROSS JOIN、CROSS JOIN或只是纯连接是等价的构造。

SELECT admin1.gid, hex.geom
FROM
    admin1
    CROSS JOIN
    ST_HexagonGrid(100000, admin1.geom) AS hex
WHERE
    adm0_a3 = 'USA'
    AND
    ST_Intersects(admin1.geom, hex.geom)

Name

ST_Hexagon — 使用提供的边大小和六边形网格空间内的单元格坐标返回单个六边形。

Synopsis

geometry ST_Hexagon(float8 size, integer cell_i, integer cell_j, geometry origin);

描述

使用与以下相同的六边形平铺概念 ST_HexagonGrid ,但只在所需的单元格坐标上生成一个六边形。可选择调整平铺的原点坐标,默认原点为0,0。

在没有设置SRID的情况下生成六边形,因此使用 ST_SetSRID 将SRID设置为您期望的值。

可用性:3.1.0

示例:在原点创建六边形

SELECT ST_AsText(ST_SetSRID(ST_Hexagon(1.0, 0, 0), 3857));

POLYGON((-1 0,-0.5
         -0.866025403784439,0.5
         -0.866025403784439,1
         0,0.5
         0.866025403784439,-0.5
         0.866025403784439,-1 0)) 

Name

ST_SquareGrid — 返回一组完全覆盖几何参数边界的网格正方形和单元格索引。

Synopsis

setof record ST_SquareGrid(float8 size, geometry bounds);

描述

从平面的正方形平铺的概念开始。对于给定的平面SRS和给定的边大小,从SRS的原点开始,平面有一个唯一的正方形平铺,即平铺(SRS,SIZE)。此函数用于回答以下问题:给定平铺(SRS,大小)中的哪些栅格与给定边界重叠。

输出正方形的SRS是由边界几何体提供的SRS。

正方形的加倍或边缘大小会生成一个新的父平铺,该平铺与原始平铺完美匹配。墨卡托中的标准网络地图拼贴只是墨卡托平面中的2次方格网。

可用性:3.1.0

示例:为国家/地区生成1度栅格

网格将填充整个国家的边界,因此如果您只想要接触到国家的正方形,则必须在之后使用ST_Intersects进行过滤。

WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom,4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT ST_AsText(geom)
  FROM grid

示例:以正方形为单位计算点数(使用单个截断的网格)

要对正方形平铺进行点汇总,请使用点的范围作为边界生成正方形栅格,然后在空间上连接到该栅格。注估计的范围可能与实际范围不一致,因此要小心,至少要确保您已经分析了表。

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom

示例:使用每点一组栅格计算正方形中的点

这将产生与第一个示例相同的结果,但对于大量的点来说,速度会更慢

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
       pts.geom
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom

Name

ST_Square — 使用提供的边大小和正方形网格空间内的单元格坐标返回单个正方形。

Synopsis

geometry ST_Square(float8 size, integer cell_i, integer cell_j, geometry origin);

描述

使用相同的正方形平铺概念 ST_SquareGrid ,但只在所需的单元格坐标上生成一个正方形。可选择调整平铺的原点坐标,默认原点为0,0。

生成的正方形没有设置SRID,因此使用 ST_SetSRID 将SRID设置为您期望的值。

可用性:3.1.0

示例:在原点创建正方形

SELECT ST_AsText(ST_SetSRID(ST_Square(1.0, 0, 0), 3857));

 POLYGON((0 0,0 1,1 1,1 0,0 0))

Name

ST_Letters — 返回呈现为几何图形的输入字母,该几何图形的默认起始位置为原点,默认文本高度为100。

Synopsis

geometry ST_Letters(text letters, json font);

描述

使用内置字体将字符串渲染为多边形几何体。默认文字高度为100.0,即从下斜线底部到大写字母顶部的距离。默认起点位置将基线的起点放置在原点。覆盖字体需要传递一个JSON映射,该映射以字符为键,并以Base64编码的TWKB作为字体形状,字体从下降者的底部到大写字母的顶部具有1000个单位的高度。

默认情况下,文本是在原点生成的,因此要重新定位文本并调整其大小,请首先将 ST_Scale 函数,然后将 ST_Translate 功能。

可用性:3.3.0

示例:生成单词‘Yo’

SELECT ST_AsText(ST_Letters('Yo'), 1);

ST_Letters生成的信函

示例:缩放和移动单词

SELECT ST_Translate(ST_Scale(ST_Letters('Yo'), 10, 10), 100,100);

8.4. 几何体访问器

GeometryType — 以文本形式返回几何图形的类型。
ST_Boundary — 返回几何图形的边界。
ST_BoundingDiagonal — 返回几何体边界框的对角线。
ST_CoordDim — 返回几何图形的坐标尺寸。
ST_Dimension — 返回几何图形的拓扑尺寸。
ST_Dump — 返回一组 geometry_dump 几何图形组件的行。
ST_DumpPoints — 返回一组 geometry_dump 几何图形中坐标的行。
ST_DumpSegments — 返回一组 geometry_dump 几何图形中线段的行。
ST_DumpRings — 返回一组 geometry_dump 多边形的外环和内环的行。
ST_EndPoint — 返回LineString或CircularLineString的最后一点。
ST_Envelope — 返回表示几何图形的边框的几何图形。
ST_ExteriorRing — 返回表示多边形外环的线串。
ST_GeometryN — 返回几何图形集合的元素。
ST_GeometryType — 以文本形式返回几何图形的SQL-MM类型。
ST_HasArc — 测试几何图形是否包含圆弧
ST_InteriorRingN — 返回多边形的第N个内环(孔)。
ST_IsClosed — 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。
ST_IsCollection — 测试几何图形是否为几何图形集合类型。
ST_IsEmpty — 测试几何图形是否为空。
ST_IsPolygonCCW — 测试多边形是否具有逆时针方向的外环和顺时针方向的内环。
ST_IsPolygonCW — 测试多边形是否具有顺时针方向的外环和逆时针方向的内环。
ST_IsRing — 测试线串是否闭合且简单。
ST_IsSimple — 测试几何体是否没有自交点或自切点。
ST_M — 返回点的M坐标。
ST_MemSize — 返回几何体占用的内存空间量。
ST_NDims — 返回几何图形的坐标尺寸。
ST_NPoints — 返回几何体中的点(顶点)数。
ST_NRings — 返回多边形几何体中的环形数。
ST_NumGeometries — 返回几何图形集合中的元素数。
ST_NumInteriorRings — 返回多边形的内环(孔)数。
ST_NumInteriorRing — 返回多边形的内环(孔)数。ST_NumInteriorRings的AIAS
ST_NumPatches — 返回多面体曲面上的面数。对于非多面体几何图形将返回NULL。
ST_NumPoints — 返回LineString或CircularString中的点数。
ST_PatchN — 返回多面体曲面的第N个几何图形(面)。
ST_PointN — 返回几何图形中第一条直线串或圆形直线串中的第N点。
ST_Points — 返回包含几何图形坐标的多点。
ST_StartPoint — 返回线串的第一个点。
ST_Summary — 返回几何图形内容的文本摘要。
ST_X — 返回点的X坐标。
ST_Y — 返回点的Y坐标。
ST_Z — 返回点的Z坐标。
ST_Zmflag — 返回指示几何图形的ZM坐标尺寸的代码。

Name

GeometryType — 以文本形式返回几何图形的类型。

Synopsis

text GeometryType(geometry geomA);

描述

以字符串形式返回几何图形的类型。例如:“LINESTRING”、“POLYGON”、“MULTPOINT”等。

OGC规范s2.1.1.1-返回该Geometry实例所属的Geometry的可实例化的子类型的名称。几何图形的可实例化的子类型的名称以字符串形式返回。

[Note]

此函数还通过返回形式为‘POINTM’的字符串来指示是否测量几何图形。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
 geometrytype
--------------
 LINESTRING
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        POLYHEDRALSURFACE
                        
SELECT GeometryType(geom) as result
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
 result
--------
 TIN    

另请参阅

ST_GeometryType


Name

ST_Boundary — 返回几何图形的边界。

Synopsis

geometry ST_Boundary(geometry geomA);

描述

返回此几何图形的组合边界的闭合。组合边界的定义如OGC规范的第3.12.3.2节所述。由于此函数的结果是闭包,因此在拓扑上是闭合的,因此可以使用OGC规范第3.12.2节中讨论的表示几何基元来表示结果边界。

由GEOS模块执行

[Note]

在2.0.0之前,如果与一起使用,此函数将引发异常 GEOMETRYCOLLECTION 。从2.0.0开始,它将返回NULL(不支持的输入)。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. OGC规范s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.14

This function supports 3d and will not drop the z-index.

增强:2.1.0引入了对三角形的支持

已更改:3.2.0支持TIN,不使用GEOS,不线性化曲线

示例

边界点叠加的线串

SELECT ST_Boundary(geom)
FROM (SELECT 'LINESTRING(100 150,50 60, 70 80, 160 170)'::geometry As geom) As f;
                                

-- ST_AsText output
MULTIPOINT((100 150),(160 170))

具有边界多线串的多边形孔

SELECT ST_Boundary(geom)
FROM (SELECT
'POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 ),
        ( 70 40, 100 50, 120 80, 80 110, 50 90, 70 40 ))'::geometry As geom) As f;
                                

-- ST_AsText output
MULTILINESTRING((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),
        (70 40,100 50,120 80,80 110,50 90,70 40))

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));
st_astext
-----------
MULTIPOINT((1 1),(-1 1))

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));
st_astext
----------
LINESTRING(1 1,0 0,-1 1,1 1)

--Using a 3d polygon
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))')));

st_asewkt
-----------------------------------
LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)

--Using a 3d multilinestring
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )')));

st_asewkt
----------
MULTIPOINT((-1 1 1),(1 1 0.75))

Name

ST_BoundingDiagonal — 返回几何体边界框的对角线。

Synopsis

geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);

描述

以线串形式返回所提供几何图形的边框的对角线。对角线是由两点组成的线串,每个标注的最小值位于其起点,最大值位于其终点。如果输入几何图形为空,则对角线为空。

可选的 配合 参数指定是否需要最佳匹配。如果为False,则可以接受稍大的边界框的对角线(对于具有多个顶点的几何体,这会更快地进行计算)。在这两种情况下,返回的对角线的边界框始终覆盖输入几何图形。

返回的几何图形保留输入几何图形的SRID和维度(Z和M存在)。

[Note]

在退化的情况下(即输入中的单个顶点),返回的线串将在形式上无效(没有内部)。这一结果在拓扑上仍然有效。

可用性:2.2.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

示例

-- Get the minimum X in a buffer around a point
SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
  ST_Buffer(ST_Point(0,0),10)
)));
 st_x
------
  -10
                

Name

ST_CoordDim — 返回几何图形的坐标尺寸。

Synopsis

integer ST_CoordDim(geometry geomA);

描述

返回ST_Geometry值的坐标尺寸。

这是的符合MM的别名 ST_NDims

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:5.1.3

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');
                        ---result--
                                3

                                SELECT ST_CoordDim(ST_Point(1,2));
                        --result--
                                2

                

另请参阅

ST_NDims


Name

ST_Dimension — 返回几何图形的拓扑尺寸。

Synopsis

integer ST_Dimension(geometry g);

描述

返回此几何对象的拓扑维,它必须小于或等于坐标维。OGC规范s2.1.1.1-返回0 POINT ,1表示 LINESTRING ,2个用于 POLYGON 的组件的最大维度。 GEOMETRYCOLLECTION 。如果维度未知(例如,对于空的 GEOMETRYCOLLECTION )返回0。

This method implements the SQL/MM specification. SQL-MM 3:5.1.2

增强:2.0.0引入了对多面体曲面和三角网的支持。如果给定的几何图形为空,则不再引发异常。

[Note]

在2.0.0之前的版本中,如果与空几何图形一起使用,此函数会引发异常。

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');
ST_Dimension
-----------
1

另请参阅

ST_NDims


Name

ST_Dump — 返回一组 geometry_dump 几何图形组件的行。

Synopsis

geometry_dump[] ST_Dump(geometry g1);

描述

提取几何体组件的集返回函数(SRF)。它返回一组 geometry_dump 行,每个行包含一个几何图形( 几何图形 字段)和一个整数数组( 路径 字段)。

对于原子几何类型(POINT、LINESTRING、POLGON),返回的单个记录为空 路径 数组和输入几何图形为 几何图形 。对于集合或多几何图形,返回每个集合组件的记录,并且 路径 表示组件在集合内的位置。

ST_DUMP对于展开几何图形非常有用。它是与 ST_Collect /GROUP BY,因为它创建新行。例如,它可以用于将MULTIPOLYGONS扩展为多边形。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

提供:PostGIS 1.0.0RC1.需要PostgreSQL 7.3或更高版本。

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

标准示例

SELECT sometable.field1, sometable.field1,
      (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b
        ) AS a;
          st_asewkt          | st_hasarc
-----------------------------+----------
 CIRCULARSTRING(0 0,1 1,1 0) | t
 LINESTRING(1 0,0 1)         | f
(2 rows)

多面体曲面、三角网和三角形示例

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
  FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)') ) AS p_geom )  AS a;

 path |                geom_ewkt
------+------------------------------------------
    1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
    2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
    3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
    4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
    5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
    6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_Dump( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
 path |                 wkt
------+-------------------------------------
 {1}  | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
 {2}  | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Name

ST_DumpPoints — 返回一组 geometry_dump 几何图形中坐标的行。

Synopsis

geometry_dump[] ST_DumpPoints(geometry geom);

描述

提取几何体坐标(顶点)的集返回函数(SRF)。它返回一组 geometry_dump 行,每个行包含一个几何图形( 几何图形 字段)和一个整数数组( 路径 字段)。

  • 这个 几何图形 字段 POINT 表示提供的几何图形的坐标。

  • the path field (an integer[]) is an index enumerating the coordinate positions in the elements of the supplied geometry. The indices are 1-based. For example, for a LINESTRING the paths are {i} where i is the nth coordinate in the LINESTRING. For a POLYGON the paths are {i,j} where i is the ring number (1 is outer; inner rings follow) and j is the coordinate position in the ring.

要获取包含坐标的单个几何图形,请使用 ST_Points

增强:2.1.0更快的速度。重新实现为本机-C。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

可用性:1.5.0

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

Classic将行字符串表分解为节点

SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode
FROM (SELECT 1 As edge_id
        , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp
     UNION ALL
     SELECT 2 As edge_id
        , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp
   ) As foo;
 edge_id | index |    wktnode
---------+-------+--------------
       1 |     1 | POINT(1 2)
       1 |     2 | POINT(3 4)
       1 |     3 | POINT(10 10)
       2 |     1 | POINT(3 5)
       2 |     2 | POINT(5 6)
       2 |     3 | POINT(9 10)

标准几何图形示例

SELECT path, ST_AsText(geom)
FROM (
  SELECT (ST_DumpPoints(g.geom)).*
  FROM
    (SELECT
       'GEOMETRYCOLLECTION(
          POINT ( 0 1 ),
          LINESTRING ( 0 3, 3 4 ),
          POLYGON (( 2 0, 2 3, 0 2, 2 0 )),
          POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ),
                   ( 5 1, 4 2, 5 2, 5 1 )),
          MULTIPOLYGON (
                  (( 0 5, 0 8, 4 8, 4 5, 0 5 ),
                   ( 1 6, 3 6, 2 7, 1 6 )),
                  (( 5 4, 5 8, 6 7, 5 4 ))
          )
        )'::geometry AS geom
    ) AS g
  ) j;

   path    | st_astext
-----------+------------
 {1,1}     | POINT(0 1)
 {2,1}     | POINT(0 3)
 {2,2}     | POINT(3 4)
 {3,1,1}   | POINT(2 0)
 {3,1,2}   | POINT(2 3)
 {3,1,3}   | POINT(0 2)
 {3,1,4}   | POINT(2 0)
 {4,1,1}   | POINT(3 0)
 {4,1,2}   | POINT(3 3)
 {4,1,3}   | POINT(6 3)
 {4,1,4}   | POINT(6 0)
 {4,1,5}   | POINT(3 0)
 {4,2,1}   | POINT(5 1)
 {4,2,2}   | POINT(4 2)
 {4,2,3}   | POINT(5 2)
 {4,2,4}   | POINT(5 1)
 {5,1,1,1} | POINT(0 5)
 {5,1,1,2} | POINT(0 8)
 {5,1,1,3} | POINT(4 8)
 {5,1,1,4} | POINT(4 5)
 {5,1,1,5} | POINT(0 5)
 {5,1,2,1} | POINT(1 6)
 {5,1,2,2} | POINT(3 6)
 {5,1,2,3} | POINT(2 7)
 {5,1,2,4} | POINT(1 6)
 {5,2,1,1} | POINT(5 4)
 {5,2,1,2} | POINT(5 8)
 {5,2,1,3} | POINT(6 7)
 {5,2,1,4} | POINT(5 4)
(29 rows)

多面体曲面、三角网和三角形示例

-- Polyhedral surface cube --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) AS gdump
    ) AS g;
-- result --
  path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 1)
 {1,1,4} | POINT(0 1 0)
 {1,1,5} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(1 0 0)
 {2,1,5} | POINT(0 0 0)
 {3,1,1} | POINT(0 0 0)
 {3,1,2} | POINT(1 0 0)
 {3,1,3} | POINT(1 0 1)
 {3,1,4} | POINT(0 0 1)
 {3,1,5} | POINT(0 0 0)
 {4,1,1} | POINT(1 1 0)
 {4,1,2} | POINT(1 1 1)
 {4,1,3} | POINT(1 0 1)
 {4,1,4} | POINT(1 0 0)
 {4,1,5} | POINT(1 1 0)
 {5,1,1} | POINT(0 1 0)
 {5,1,2} | POINT(0 1 1)
 {5,1,3} | POINT(1 1 1)
 {5,1,4} | POINT(1 1 0)
 {5,1,5} | POINT(0 1 0)
 {6,1,1} | POINT(0 0 1)
 {6,1,2} | POINT(1 0 1)
 {6,1,3} | POINT(1 1 1)
 {6,1,4} | POINT(0 1 1)
 {6,1,5} | POINT(0 0 1)
(30 rows)
-- Triangle --
SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE ((
                0 0,
                0 9,
                9 0,
                0 0
            ))') ) AS gdump
    ) AS g;
-- result --
 path |    wkt
------+------------
 {1}  | POINT(0 0)
 {2}  | POINT(0 9)
 {3}  | POINT(9 0)
 {4}  | POINT(0 0)
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
  path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 0)
 {1,1,4} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(0 0 0)
(8 rows)

Name

ST_DumpSegments — 返回一组 geometry_dump 几何图形中线段的行。

Synopsis

geometry_dump[] ST_DumpSegments(geometry geom);

描述

一种集返回函数(SRF),用于提取几何体的分段。它返回一组 geometry_dump 行,每个行包含一个几何图形( 几何图形 字段)和一个整数数组( 路径 字段)。

  • 这个 几何图形 字段 LINESTRING 表示所提供几何图形的线段。

  • the path field (an integer[]) is an index enumerating the segment start point positions in the elements of the supplied geometry. The indices are 1-based. For example, for a LINESTRING the paths are {i} where i is the nth segment start point in the LINESTRING. For a POLYGON the paths are {i,j} where i is the ring number (1 is outer; inner rings follow) and j is the segment start point position in the ring.

可用性:3.2.0

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

标准几何图形示例

SELECT path, ST_AsText(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'GEOMETRYCOLLECTION(
    LINESTRING(1 1, 3 3, 4 4),
    POLYGON((5 5, 6 6, 7 7, 5 5))
)'::geometry AS geom
        ) AS g
) j;

  path   │      st_astext
---------------------------------
 {1,1}   │ LINESTRING(1 1,3 3)
 {1,2}   │ LINESTRING(3 3,4 4)
 {2,1,1} │ LINESTRING(5 5,6 6)
 {2,1,2} │ LINESTRING(6 6,7 7)
 {2,1,3} │ LINESTRING(7 7,5 5)
(5 rows)

三角网和三角形示例

-- Triangle --
SELECT path, ST_AsText(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TRIANGLE((
        0 0,
        0 9,
        9 0,
        0 0
    ))'::geometry AS geom
        ) AS g
) j;

 path  │      st_astext
 ---------------------------------
 {1,1} │ LINESTRING(0 0,0 9)
 {1,2} │ LINESTRING(0 9,9 0)
 {1,3} │ LINESTRING(9 0,0 0)
(3 rows)
-- TIN --
SELECT path, ST_AsEWKT(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TIN(((
        0 0 0,
        0 0 1,
        0 1 0,
        0 0 0
    )), ((
        0 0 0,
        0 1 0,
        1 1 0,
        0 0 0
    ))
    )'::geometry AS geom
        ) AS g
) j;

  path   │        st_asewkt
  ---------------------------------
 {1,1,1} │ LINESTRING(0 0 0,0 0 1)
 {1,1,2} │ LINESTRING(0 0 1,0 1 0)
 {1,1,3} │ LINESTRING(0 1 0,0 0 0)
 {2,1,1} │ LINESTRING(0 0 0,0 1 0)
 {2,1,2} │ LINESTRING(0 1 0,1 1 0)
 {2,1,3} │ LINESTRING(1 1 0,0 0 0)
(6 rows)

Name

ST_DumpRings — 返回一组 geometry_dump 多边形的外环和内环的行。

Synopsis

geometry_dump[] ST_DumpRings(geometry a_polygon);

描述

提取多边形环的集合返回函数(SRF)。它返回一组 geometry_dump 行,每个行包含一个几何图形( 几何图形 字段)和一个整数数组( 路径 字段)。

这个 几何图形 该字段将每个环包含为一个多边形。这个 路径 字段是包含多边形环索引的长度为1的整数数组。外环(壳)的索引为0。内环(孔)的折射率为1或更高。

[Note]

这仅适用于多边形几何体。它不适用于多聚合一

提供:PostGIS 1.1.3。需要PostgreSQL 7.3或更高版本。

This function supports 3d and will not drop the z-index.

示例

查询的一般形式。

SELECT polyTable.field1, polyTable.field1,
          (ST_DumpRings(polyTable.geom)).geom As geom
FROM polyTable;

只有一个洞的多边形。

SELECT path, ST_AsEWKT(geom) As geom
        FROM ST_DumpRings(
                ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,
                -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,
                -8150305 5132788 1,-8149064 5133092 1),
                (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))')
                )  as foo;
 path |                                            geom
----------------------------------------------------------------------------------------------------------------
  {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,
          |          -8148941 5132466 1,-8148924 5132394 1,
          |          -8148903 5132210 1,-8148930 5131967 1,
          |          -8148992 5131978 1,-8149237 5132093 1,
          |          -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1))
  {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,
          |          -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))

Name

ST_EndPoint — 返回LineString或CircularLineString的最后一点。

Synopsis

geometry ST_EndPoint(geometry g);

描述

的最后一个点。 LINESTRING CIRCULARLINESTRING 几何体作为 POINT 。退货 NULL 如果输入不是 LINESTRING CIRCULARLINESTRING

This method implements the SQL/MM specification. SQL-MM 3:7.1.4

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

[Note]

已更改:2.0.0不再适用于单个几何体多行字符串。在较早版本的PostGIS中,单行多行字符串将与此函数一起使用并返回终点。在2.0.0中,它像任何其他多行字符串一样返回NULL。旧的行为是一个没有文档记录的功能,但是那些认为他们的数据存储为LINESTRING的人可能会在2.0.0中遇到这些返回NULL的情况。

示例

线条的终点

postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));
 st_astext
------------
 POINT(3 3)

非线型字符串的终点为空

SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;
  is_null
----------
 t

三维线串的终点

--3d endpoint
SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));
  st_asewkt
--------------
 POINT(0 0 5)

圆形字符串的终点

SELECT ST_AsText(ST_EndPoint('CIRCULARSTRING(5 2,-3 1.999999, -2 1, -4 2, 6 3)'::geometry));
 st_astext
------------
 POINT(6 3)

Name

ST_Envelope — 返回表示几何图形的边框的几何图形。

Synopsis

geometry ST_Envelope(geometry g1);

描述

以几何体的形式返回所提供几何体的双精度(浮点8)最小边界框。多边形由边界框的角点定义(( MINX MINY )、( MINX MAXY )、( MAXX MAXY )、( MAXX MINY )、( MINX MINY ))。(PostGIS将添加一个 ZMIN / ZMAX 也要协调)。

退化情况(垂直线、点)将返回低于以下维度的几何 POLYGON ,即。 POINT LINESTRING

可用性:1.5.0行为更改为输出双精度,而不是浮动4

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.15

示例

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));
 st_astext
------------
 POINT(1 3)
(1 row)


SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));
                   st_astext
--------------------------------
 POLYGON((0 0,0 3,1 3,1 0,0 0))
(1 row)


SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)
SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)

SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As envelopewkt
        FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, 1.0000001 0, 0 0))'::geometry As geom) As foo;


        

点和线串的包络。

SELECT ST_AsText(ST_Envelope(
                ST_Collect(
                        ST_GeomFromText('LINESTRING(55 75,125 150)'),
                                ST_Point(20, 80))
                                )) As wktenv;
wktenv
-----------
POLYGON((20 75,20 150,125 150,125 75,20 75))

Name

ST_ExteriorRing — 返回表示多边形外环的线串。

Synopsis

geometry ST_ExteriorRing(geometry a_polygon);

描述

返回表示多边形的外环(壳)的LINESTRING。如果几何图形不是多边形,则返回NULL。

[Note]

此函数不支持MULTIPOLYGON。对于与一起使用的MULTIPOLYGON ST_GeometryNST_Dump

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3:8.2.3、8.3.3

This function supports 3d and will not drop the z-index.

示例

--If you have a table of polygons
SELECT gid, ST_ExteriorRing(geom) AS ering
FROM sometable;

--If you have a table of MULTIPOLYGONs
--and want to return a MULTILINESTRING composed of the exterior rings of each polygon
SELECT gid, ST_Collect(ST_ExteriorRing(geom)) AS erings
        FROM (SELECT gid, (ST_Dump(geom)).geom As geom
                        FROM sometable) As foo
GROUP BY gid;

--3d Example
SELECT ST_AsEWKT(
        ST_ExteriorRing(
        ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')
        )
);

st_asewkt
---------
LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)

Name

ST_GeometryN — 返回几何图形集合的元素。

Synopsis

geometry ST_GeometryN(geometry geomA, integer n);

描述

返回输入几何图形的从1开始的第N个元素几何图形,它是GEOMETRYCOLLECTION、MULTIPPOINT、MULTILINESTRING、MULTICURVE、MULTICURVE或POLYHEDRALSURFACE。否则,返回NULL。

[Note]

从0.8.0版开始,OGC规范的索引是从1开始的。以前的版本将其实现为从0开始。

[Note]

要提取几何图形的所有元素,请执行以下操作 ST_Dump 效率更高,适用于原子几何。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

已更改:2.0.0之前的版本将为奇异几何图形返回NULL。这已更改为返回ST_GeometryN(..,1)大小写的几何图形。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:9.1.5

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

标准示例

--Extracting a subset of points from a 3d multipoint
SELECT n, ST_AsEWKT(ST_GeometryN(geom, n)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))') ),
( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )
        )As foo(geom)
        CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

 n |               geomewkt
---+-----------------------------------------
 1 | POINT(1 2 7)
 2 | POINT(3 4 7)
 3 | POINT(5 6 7)
 4 | POINT(8 9 10)
 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
 2 | LINESTRING(10 11,12 11)


--Extracting all geometries (useful when you want to assign an id)
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

多面体曲面、三角网和三角形示例

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt
  FROM (SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)')  AS p_geom )  AS a;

                geom_ewkt
------------------------------------------
 POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
-- TIN --
SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
-- result --
                 wkt
-------------------------------------
 TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Name

ST_GeometryType — 以文本形式返回几何图形的SQL-MM类型。

Synopsis

text ST_GeometryType(geometry g1);

描述

以字符串形式返回几何图形的类型。此函数与GeometryType(几何)的不同之处在于返回的字符串和前面的ST的大小写,以及它不会指示是否测量几何图形。

增强:引入了对多面体曲面的2.0.0支持。

This method implements the SQL/MM specification. SQL-MM 3:5.1.4

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                        --result
                        ST_LineString
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        ST_PolyhedralSurface
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        ST_PolyhedralSurface
SELECT ST_GeometryType(geom) as result
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
 result
--------
 ST_Tin    

另请参阅

GeometryType


Name

ST_HasArc — 测试几何图形是否包含圆弧

Synopsis

boolean ST_HasArc(geometry geomA);

描述

如果几何或几何集合包含循环字符串,则返回True

可用性:1.2.3?

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'));
                st_hasarc
                --------
                t
                

Name

ST_InteriorRingN — 返回多边形的第N个内环(孔)。

Synopsis

geometry ST_InteriorRingN(geometry a_polygon, integer n);

描述

将多边形几何体的第N个内环(孔)作为LINESTRING返回。索引从1开始。如果几何图形不是多边形或索引超出范围,则返回NULL。

[Note]

此函数不支持MULTIPOLYGON。对于与一起使用的MULTIPOLYGON ST_GeometryNST_Dump

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:8.2.6、8.3.5

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsText(ST_InteriorRingN(geom, 1)) As geom
FROM (SELECT ST_BuildArea(
                ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),
                        ST_Buffer(ST_Point(1, 2), 10,3))) As geom
                )  as foo;
                

Name

ST_IsClosed — 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。

Synopsis

boolean ST_IsClosed(geometry g);

描述

退货 TRUE 如果 LINESTRING 的起点和终点重合。对于多面体曲面,报告曲面是平面(开放)还是体积(闭合)。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:7.1.5、9.3.3

[Note]

SQL-MM定义以下结果 ST_IsClosed( NULL ) 设置为0,而PostGIS返回 NULL

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

增强:引入了对多面体曲面的2.0.0支持。

This function supports Polyhedral surfaces.

线条、字符串和点示例

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);
 st_isclosed
-------------
 t
(1 row)

多面体曲面示例

-- A cube --
                SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));

 st_isclosed
-------------
 t


 -- Same as cube but missing a side --
 SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)) )'));

 st_isclosed
-------------
 f

另请参阅

ST_IsRing


Name

ST_IsCollection — 测试几何图形是否为几何图形集合类型。

Synopsis

boolean ST_IsCollection(geometry g);

描述

退货 TRUE 如果参数的几何类型为几何集合类型。集合类型如下:

  • GEOMETRYCOLLECTION

  • 多个{点、面、直线、曲线、曲面}

  • COMPOUNDCURVE

[Note]

此函数用于分析几何图形的类型。这意味着它将返回 TRUE 在为空或包含单个元素的集合上。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);
 st_iscollection
-------------
 f
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

另请参阅

ST_NumGeometries


Name

ST_IsEmpty — 测试几何图形是否为空。

Synopsis

boolean ST_IsEmpty(geometry geomA);

描述

如果此几何图形为空几何图形,则返回True。如果为真,则此几何图形表示空的几何图形集合、多边形、点等。

[Note]

SQL-MM将ST_IsEmpty(NULL)的结果定义为0,而PostGIS返回NULL。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.7

This method supports Circular Strings and Curves

[Warning]

已更改:在以前版本的PostGIS ST_GeomFromText(‘GEOMETRYCOLLECTION(Empty)’)中允许2.0.0。现在,为了更好地符合SQL/MM标准,这在PostGIS 2.0.0中是非法的

示例

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));
 st_isempty
------------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));
 st_isempty
------------
 t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));

 st_isempty
------------
 f
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;
 ?column?
----------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));
  st_isempty
------------
 t
(1 row)


                

Name

ST_IsPolygonCCW — 测试多边形是否具有逆时针方向的外环和顺时针方向的内环。

Synopsis

boolean ST_IsPolygonCCW ( geometry geom );

描述

如果输入几何体的所有多边形组件的外环使用逆时针方向,所有内环使用顺时针方向,则返回True。

如果几何体没有多边形组件,则返回TRUE。

[Note]

闭合线串不被视为多边形分量,因此,无论其方向如何,通过传递单个闭合线串仍可获得真正的返回。

[Note]

如果多边形几何体未对内环使用反向方向(即,如果一个或多个内环与外环方向相同),则ST_IsPolygonCW和ST_IsPolygonCCW都将返回FALSE。

可用性:2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_IsPolygonCW — 测试多边形是否具有顺时针方向的外环和逆时针方向的内环。

Synopsis

boolean ST_IsPolygonCW ( geometry geom );

描述

如果输入几何体的所有多边形组件的外环使用顺时针方向,所有内环使用逆时针方向,则返回True。

如果几何体没有多边形组件,则返回TRUE。

[Note]

闭合线串不被视为多边形分量,因此,无论其方向如何,通过传递单个闭合线串仍可获得真正的返回。

[Note]

如果多边形几何体未对内环使用反向方向(即,如果一个或多个内环与外环方向相同),则ST_IsPolygonCW和ST_IsPolygonCCW都将返回FALSE。

可用性:2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_IsRing — 测试线串是否闭合且简单。

Synopsis

boolean ST_IsRing(geometry g);

描述

Returns TRUE if this LINESTRING is both ST_IsClosed (ST_StartPoint(g) ~= ST_Endpoint(g)) and ST_IsSimple (does not self intersect).

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3:7.1.6

[Note]

SQL-MM定义以下结果 ST_IsRing( NULL ) 设置为0,而PostGIS返回 NULL

示例

SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS geom) AS foo;
 st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 t         | t           | t
(1 row)

SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry AS geom) AS foo;
 st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 f         | t           | f
(1 row)

Name

ST_IsSimple — 测试几何体是否没有自交点或自切点。

Synopsis

boolean ST_IsSimple(geometry geomA);

描述

如果此几何图形没有异常几何点(如自交或自切),则返回True。有关OGC对几何简单性和有效性的定义的详细信息,请参阅 “确保几何图形的OpenGIS兼容性”

[Note]

SQL-MM将ST_isSimple(NULL)的结果定义为0,而PostGIS返回NULL。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.8

This function supports 3d and will not drop the z-index.

示例

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
 st_issimple
-------------
 t
(1 row)

 SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
 st_issimple
-------------
 f
(1 row)

另请参阅

ST_IsValid


Name

ST_M — 返回点的M坐标。

Synopsis

float ST_M(geometry a_point);

描述

返回点的M坐标,如果不可用,则返回NULL。输入必须是点。

[Note]

这还不是OGC规范的一部分,但在此列出是为了完成点坐标提取函数列表。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification.

This function supports 3d and will not drop the z-index.

示例

SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_m
------
        4
(1 row)

                

另请参阅

ST_GeomFromEWKT, ST_X, ST_Y, ST_Z


Name

ST_MemSize — 返回几何体占用的内存空间量。

Synopsis

integer ST_MemSize(geometry geomA);

描述

返回几何体占用的内存空间量(以字节为单位)。

这是对PostgreSQL内置功能的补充 数据库对象函数 PG_Column_Size、PG_Size_Pretty、PG_Relationship_Size、PG_Total_Relationship_Size。

[Note]

给出表的字节大小的PG_Relationship_SIZE可能返回小于ST_MemSize的字节大小。这是因为PG_Relationship_SIZE不添加烤面包表贡献,并且大几何图形存储在烤面包表中。

PG_TOTAL_RELATION_SIZE-包括、表、烤面包表和索引。

PG_COLUMN_SIZE返回考虑压缩后几何在列中所占的空间量,因此可能低于ST_MemSize

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

已更改:2.2.0名称更改为ST_MemSize以遵循命名约定。

示例

--Return how much byte space Boston takes up  in our Mass data set
SELECT pg_size_pretty(SUM(ST_MemSize(geom))) as totgeomsum,
pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END)) As bossum,
CAST(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END)*1.00 /
                SUM(ST_MemSize(geom))*100 As numeric(10,2)) As perbos
FROM towns;

totgeomsum        bossum        perbos
----------        ------        ------
1522 kB                30 kB        1.99


SELECT ST_MemSize(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));

---
73

--What percentage of our table is taken up by just the geometry
SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_MemSize(geom)) As geomsize,
sum(ST_MemSize(geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As pergeom
FROM neighborhoods;
fulltable_size geomsize  pergeom
------------------------------------------------
262144         96238         36.71188354492187500000
        

Name

ST_NDims — 返回几何图形的坐标尺寸。

Synopsis

integer ST_NDims(geometry g1);

描述

返回几何图形的坐标尺寸。PostGIS支持2-(x,y)、3-(x,y,z)或2D测量-x,y,m和4-3D测量空间x,y,z,m

This function supports 3d and will not drop the z-index.

示例

SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,
        ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,
        ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;

         d2point | d3point | d2pointm
---------+---------+----------
           2 |       3 |        3
                        

Name

ST_NPoints — 返回几何体中的点(顶点)数。

Synopsis

integer ST_NPoints(geometry g1);

描述

返回几何图形中的点数。适用于所有几何体。

增强:引入了对多面体曲面的2.0.0支持。

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
4

--Polygon in 3D space
SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)'))
--result
4

另请参阅

ST_NumPoints


Name

ST_NRings — 返回多边形几何体中的环形数。

Synopsis

integer ST_NRings(geometry geomA);

描述

如果几何体是一个多边形或多个多边形,则返回环形数。与NumInteriorRings不同,它也计算外环。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_NRings(geom) As Nrings, ST_NumInteriorRings(geom) As ninterrings
                                        FROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As geom) As foo;
         nrings | ninterrings
--------+-------------
          1 |           0
(1 row)

Name

ST_NumGeometries — 返回几何图形集合中的元素数。

Synopsis

integer ST_NumGeometries(geometry geom);

描述

返回几何图形的数量。如果GEOMETRYCOLLECTION(或MULTI*)为GEOMETRYCOLLECTION,则返回几何图形的数量,对于单个几何图形将返回1,否则返回NULL。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

已更改:2.0.0在早期版本中,如果几何体不是集合/多类型,则返回NULL。2.0.0+现在为单个几何图形返回1,例如多边形、线条、点。

This method implements the SQL/MM specification. SQL-MM 3:9.1.4

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--Prior versions would have returned NULL for this -- in 2.0.0 this returns 1
SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
1

--Geometry Collection Example - multis count as one geom in a collection
SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT((-2 3),(-2 2)),
LINESTRING(5 5 ,10 10),
POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));
--result
3

另请参阅

ST_GeometryN, ST_Multi


Name

ST_NumInteriorRings — 返回多边形的内环(孔)数。

Synopsis

integer ST_NumInteriorRings(geometry a_polygon);

描述

返回多边形几何体的内环数量。如果几何体不是多边形,则返回NULL。

This method implements the SQL/MM specification. SQL-MM 3:8.2.5

已更改:2.0.0-在以前的版本中,它允许传递MULTIPOLYGON,返回第一个多边形的内部环数。

示例

--If you have a regular polygon
SELECT gid, field1, field2, ST_NumInteriorRings(geom) AS numholes
FROM sometable;

--If you have multipolygons
--And you want to know the total number of interior rings in the MULTIPOLYGON
SELECT gid, field1, field2, SUM(ST_NumInteriorRings(geom)) AS numholes
FROM (SELECT gid, field1, field2, (ST_Dump(geom)).geom As geom
        FROM sometable) As foo
GROUP BY gid, field1,field2;
                        

Name

ST_NumInteriorRing — 返回多边形的内环(孔)数。ST_NumInteriorRings的AIAS

Synopsis

integer ST_NumInteriorRing(geometry a_polygon);


Name

ST_NumPatches — 返回多面体曲面上的面数。对于非多面体几何图形将返回NULL。

Synopsis

integer ST_NumPatches(geometry g1);

描述

返回多面体曲面上的面数。对于非多面体几何图形,将返回NULL。这是ST_NumGeometries的别名,用于支持MM命名。如果您不关心MM约定,则使用ST_NumGeometries的速度更快。

可用性:2.0.0

This function supports 3d and will not drop the z-index.

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:?

This function supports Polyhedral surfaces.

示例

SELECT ST_NumPatches(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                --result
                6
                

Name

ST_NumPoints — 返回LineString或CircularString中的点数。

Synopsis

integer ST_NumPoints(geometry g1);

描述

返回ST_LineString值或ST_CircularString值中的点数。1.4之前的版本仅适用于等级库状态的线串。从1.4开始,这是ST_NPoints的别名,它返回的不只是线串的顶点数。请考虑改用ST_NPoints,它具有多用途,可用于多种几何图形类型。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:7.2.4

示例

SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                --result
                4
                

另请参阅

ST_NPoints


Name

ST_PatchN — 返回多面体曲面的第N个几何图形(面)。

Synopsis

geometry ST_PatchN(geometry geomA, integer n);

描述

如果第N个几何图形是POLYHEDRALSURFACE或POLYHEDRALSURFACEM,则返回从1开始的第N个几何图形(面)。否则,返回NULL。这将返回与多面体曲面的ST_GeometryN相同的答案。使用ST_GeometryN更快。

[Note]

索引以1为基数。

[Note]

如果要提取几何图形的所有元素 ST_Dump 效率更高。

可用性:2.0.0

This method implements the SQL/MM specification. SQL-MM 3:?

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

--Extract the 2nd face of the polyhedral surface
SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ) As foo(geom);

              geomewkt
---+-----------------------------------------
 POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))

Name

ST_PointN — 返回几何图形中第一条直线串或圆形直线串中的第N点。

Synopsis

geometry ST_PointN(geometry a_linestring, integer n);

描述

返回几何图形中单个线串或圆形线串中的第N个点。负值从线串的末尾向后计数,因此-1是最后一个点。如果几何图形中没有线串,则返回NULL。

[Note]

从0.8.0版开始,OGC规范的索引是从1开始的。向后索引(负索引)不在OGC中,以前的版本将其实现为从0开始。

[Note]

如果要获取多重线串中每条线串的第N点,请与ST_DUMP结合使用

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:7.2.5、7.3.5

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

[Note]

已更改:2.0.0不再适用于单个几何体多线串。在旧版本的PostGIS中,单行多行字符串可以很好地与该函数配合使用,并返回起点。在2.0.0中,它只是像任何其他多行字符串一样返回NULL。

已更改:2.3.0:可用的负索引(-1为最后一点)

示例

-- Extract all POINTs from a LINESTRING
SELECT ST_AsText(
   ST_PointN(
          column1,
          generate_series(1, ST_NPoints(column1))
   ))
FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;

 st_astext
------------
 POINT(0 0)
 POINT(1 1)
 POINT(2 2)
(3 rows)

--Example circular string
SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'), 2));

 st_astext
------------
 POINT(3 2)
(1 row)

SELECT ST_AsText(f)
FROM ST_GeomFromText('LINESTRING(0 0 0, 1 1 1, 2 2 2)') AS g
  ,ST_PointN(g, -2) AS f; -- 1 based index

    st_astext
-----------------
 POINT Z (1 1 1)
(1 row)

另请参阅

ST_NPoints


Name

ST_Points — 返回包含几何图形坐标的多点。

Synopsis

geometry ST_Points( geometry geom );

描述

返回包含几何图形的所有坐标的多点。将保留重复的点,包括环形几何图形的起点和终点。(如果需要,可以通过调用 ST_RemoveRepeatedPoints 在结果上)。

要获取有关父几何中每个坐标位置的信息,请使用 ST_DumpPoints

如果存在M和Z坐标,则会保留它们。

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

可用性:2.3.0

示例

SELECT ST_AsText(ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6, 30 10))'));

--result
MULTIPOINT Z ((30 10 4),(10 30 5),(40 40 6),(30 10 4))
                        

Name

ST_StartPoint — 返回线串的第一个点。

Synopsis

geometry ST_StartPoint(geometry geomA);

描述

函数的第一个点。 LINESTRING CIRCULARLINESTRING 几何体作为 POINT 。退货 NULL 如果输入不是 LINESTRING CIRCULARLINESTRING

This method implements the SQL/MM specification. SQL-MM 3:7.1.3

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

[Note]

增强:3.2.0为所有几何图形返回点。如果输入不是线串,则前一行为返回Nulls。

已更改:2.0.0不再适用于单个几何体多行字符串。在较早版本的PostGIS中,单行多行字符串可以很好地与该函数配合使用,并返回起点。在2.0.0中,它只返回NULL,就像其他任何多行字符串一样。旧的行为是一个没有文档记录的功能,但是那些认为他们的数据存储为LINESTRING的人可能会在2.0.0中遇到这些返回NULL的情况。

示例

线串的起点

SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));
 st_astext
------------
 POINT(0 1)

非线条的起始点为空

SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;
  is_null
----------
 t

三维线串的起点

SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));
 st_asewkt
------------
 POINT(0 1 1)

圆形字符串的起点

SELECT ST_AsText(ST_StartPoint('CIRCULARSTRING(5 2,-3 1.999999, -2 1, -4 2, 6 3)'::geometry));
 st_astext
------------
 POINT(5 2)

另请参阅

ST_EndPoint, ST_PointN


Name

ST_Summary — 返回几何图形内容的文本摘要。

Synopsis

text ST_Summary(geometry g);

text ST_Summary(geography g);

描述

返回几何图形内容的文本摘要。

几何图形类型后面的方括号显示的标志具有以下含义:

  • M:有M坐标

  • Z:具有Z坐标

  • B:具有缓存的边界框

  • G:是大地(地理)的吗?

  • S:有空间参照系

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

可用性:1.2.2

增强:2.0.0添加了对地理位置的支持

增强:2.1.0 S标志,表示是否具有已知的空间参考系统

增强:2.2.0添加了对三角网和曲线的支持

示例

=# SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,
        ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;
            geom             |          geog
-----------------------------+--------------------------
 LineString[B] with 2 points | Polygon[BGS] with 1 rings
                             | ring 0 has 5 points
                             :
(1 row)


=# SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line,
        ST_Summary(ST_GeomFromText('SRID=4326;POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly;
;
           geog_line             |        geom_poly
-------------------------------- +--------------------------
 LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings
                                :    ring 0 has 5 points
                                :
(1 row)


Name

ST_X — 返回点的X坐标。

Synopsis

float ST_X(geometry a_point);

描述

返回点的X坐标,如果不可用,则返回值为空。输入必须是一个点。

[Note]

要获取几何坐标的最小和最大X值,请使用以下函数 ST_XMinST_XMax

This method implements the SQL/MM specification. SQL-MM 3:6.1.3

This function supports 3d and will not drop the z-index.

示例

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_x
------
        1
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)

                

Name

ST_Y — 返回点的Y坐标。

Synopsis

float ST_Y(geometry a_point);

描述

返回点的Y坐标,如果不可用,则返回值为空。输入必须是一个点。

[Note]

要获取几何坐标的最小和最大Y值,请使用以下函数 ST_YMinST_YMax

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:6.1.4

This function supports 3d and will not drop the z-index.

示例

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_y
------
        2
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)


                

Name

ST_Z — 返回点的Z坐标。

Synopsis

float ST_Z(geometry a_point);

描述

返回点的Z坐标,如果不可用,则返回值为空。输入必须是一个点。

[Note]

要获取几何坐标的最小和最大Z值,请使用以下函数 ST_ZMinST_ZMax

This method implements the SQL/MM specification.

This function supports 3d and will not drop the z-index.

示例

SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_z
------
        3
(1 row)

                

Name

ST_Zmflag — 返回指示几何图形的ZM坐标尺寸的代码。

Synopsis

smallint ST_Zmflag(geometry geomA);

描述

返回指示几何图形的ZM坐标尺寸的代码。

值为:0=2D、1=3D-M、2=3D-Z、3=4D。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));
 st_zmflag
-----------
                 0

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));
 st_zmflag
-----------
                 1

SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));
 st_zmflag
-----------
                 2
SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_zmflag
-----------
                 3

8.5. 几何图形编辑器

Abstract

这些函数通过更改类型、结构或顶点来创建修改后的几何图形。

ST_AddPoint — 将点添加到线串。
ST_CollectionExtract — 给定几何图形集合,返回仅包含指定类型的元素的多个几何图形。
ST_CollectionHomogenize — 返回几何图形集合的最简单表示形式。
ST_CurveToLine — 将包含曲线的几何图形转换为线性几何图形。
ST_Scroll — 更改闭合线串的起点。
ST_FlipCoordinates — 返回X轴和Y轴翻转的几何体版本。
ST_Force2D — 强制几何图形进入“2维模式”。
ST_Force3D — 强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。
ST_Force3DZ — 强制几何图形进入XYZ模式。
ST_Force3DM — 强制几何图形进入XYM模式。
ST_Force4D — 强制几何图形进入XYZM模式。
ST_ForcePolygonCCW — 逆时针方向调整所有外环方向,顺时针方向调整所有内环方向。
ST_ForceCollection — 将几何图形转换为GEOMETRYCOLLECTION。
ST_ForcePolygonCW — 顺时针定向所有外环,逆时针定向所有内环。
ST_ForceSFS — 强制几何图形仅使用SFS 1.1几何图形类型。
ST_ForceRHR — 强制多边形中顶点的方向遵循右手规则。
ST_ForceCurve — 如果适用,将几何图形向上转换为其曲线类型。
ST_LineToCurve — 将线性几何图形转换为曲线几何图形。
ST_Multi — 将几何图形作为多*几何图形返回。
ST_Normalize — 以其规范形式返回几何图形。
ST_QuantizeCoordinates — 将坐标的最低有效位设置为零
ST_RemovePoint — 从线串中删除点。
ST_RemoveRepeatedPoints — 返回删除了重复点的几何图形版本。
ST_Reverse — 返回顶点顺序颠倒的几何体。
ST_Segmentize — 返回线段长度不超过给定距离的修改后的几何图形/地理图形。
ST_SetPoint — 将线串的点替换为给定点。
ST_ShiftLongitude — 在-180..180和0..360之间移动几何体的经度坐标。
ST_WrapX — 将几何体环绕在X值周围。
ST_SnapToGrid — 将输入几何体的所有点捕捉到规则栅格。
ST_Snap — 将输入几何图形的线段和顶点捕捉到参考几何图形的顶点。
ST_SwapOrdinates — 返回交换了给定纵坐标的给定几何图形的版本。

Name

ST_AddPoint — 将点添加到线串。

Synopsis

geometry ST_AddPoint(geometry linestring, geometry point);

geometry ST_AddPoint(geometry linestring, geometry point, integer position = -1);

描述

将点添加到索引之前的线串 职位 (使用从0开始的索引)。如果 职位 参数被省略或为-1,则将该点附加到线串的末尾。

可用性:1.1.0

This function supports 3d and will not drop the z-index.

示例

将点添加到3D线的末端

SELECT ST_AsEWKT(ST_AddPoint('LINESTRING(0 0 1, 1 1 1)', ST_MakePoint(1, 2, 3)));

    st_asewkt
    ----------
    LINESTRING(0 0 1,1 1 1,1 2 3)

通过将每行的起点添加到行的末尾来确保表中的所有行都是闭合的,这只适用于那些未闭合的行。

UPDATE sometable
SET geom = ST_AddPoint(geom, ST_StartPoint(geom))
FROM sometable
WHERE ST_IsClosed(geom) = false;

Name

ST_CollectionExtract — 给定几何图形集合,返回仅包含指定类型的元素的多个几何图形。

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

描述

给定几何图形集合,返回同构多几何图形。

如果 类型 未指定,则返回仅包含最高维度的几何图形的多重几何图形。因此,多边形比线更受欢迎,而线比点更受欢迎。

如果 类型 则返回仅包含该类型的多重几何图形。如果没有正确类型的子几何图形,则返回空几何图形。仅支持点、线和面。类型编号为:

  • 1==点

  • 2==线条

  • 3==多边形

对于原子几何体输入,如果输入类型与请求的类型匹配,几何体将原封不动地恢复。否则,结果是指定类型的空几何图形。如果需要,可以使用将这些几何转换为多个几何 ST_Multi

[Warning]

不检查多重多边形结果的有效性。如果多边形分量相邻或重叠,则结果将无效。(例如,将此函数应用于 ST_Split 结果。)这种情况可以通过以下方式进行核实 ST_IsValid 并用其修复 ST_MakeValid

可用性:1.5.0

[Note]

在1.5.3之前,此函数返回未更改的原子输入,无论类型如何。在1.5.3中,不匹配的单个几何图形返回空结果。在2.0.0中,不匹配的单一几何图形返回请求类型的空结果。

示例

提取最高维度类型:

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
    st_astext
    ---------------
    MULTILINESTRING((1 1, 2 2))

提取点(类型1==点):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1 ));
    st_astext
    ---------------
    MULTIPOINT((0 0))

提取线(类型2==线条):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
        2 ));
    st_astext
    ---------------
    MULTILINESTRING((0 0, 1 1), (2 2, 3 3))

Name

ST_CollectionHomogenize — 返回几何图形集合的最简单表示形式。

Synopsis

geometry ST_CollectionHomogenize(geometry collection);

描述

给定一个几何集合,返回内容的“最简单”表示形式。

  • 同构(统一)集合作为适当的多重几何体返回。

  • 异类(混合)集合被展平为单个GeometryCollection。

  • 包含单个原子元素的集合将作为该元素返回。

  • 原子几何图形返回时不变。如果需要,可以使用将这些几何转换为多几何 ST_Multi

[Warning]

此函数不能确保结果有效。特别是,包含相邻或重叠的多边形的集合将创建无效的多重多边形。这种情况可以通过以下方式进行核实 ST_IsValid 并用其修复 ST_MakeValid

可用性:2.0.0

示例

转换为原子几何体的单元素集合

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));

        st_astext
        ------------
        POINT(0 0)

转换为原子几何体的嵌套单元素集合:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(MULTIPOINT((0 0)))'));

        st_astext
        ------------
        POINT(0 0)

转换为多几何图形的集合:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));

        st_astext
        ---------------------
        MULTIPOINT((0 0),(1 1))

嵌套的异类集合展平为GeometryCollection:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), GEOMETRYCOLLECTION( LINESTRING(1 1, 2 2)))'));

        st_astext
        ---------------------
        GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2))

转换为(无效)多重多边形的多边形集合:

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION (POLYGON ((10 50, 50 50, 50 10, 10 10, 10 50)), POLYGON ((90 50, 90 10, 50 10, 50 50, 90 50)))'));

        st_astext
        ---------------------
        MULTIPOLYGON(((10 50,50 50,50 10,10 10,10 50)),((90 50,90 10,50 10,50 50,90 50)))

Name

ST_CurveToLine — 将包含曲线的几何图形转换为线性几何图形。

Synopsis

geometry ST_CurveToLine(geometry curveGeom, float tolerance, integer tolerance_type, integer flags);

描述

将圆形字符串转换为常规LINESTRING或将CURVEPOLYGON转换为多边形或将多曲面转换为MULTIPOLYGON。用于输出到不支持CIRCULARSTRING几何类型的设备

将给定的几何图形转换为线性几何图形。每个曲线几何图形或线段都使用给定的 `tolerance` 和选项(每个象限32个分段,默认情况下没有选项)。

TERTENCE_TYPE参数确定对 `tolerance` 争论。它可以采用下列值:

  • 0(默认):公差是每个象限的最大分段数。

  • 1:公差是直线与曲线的最大偏差,以源单位表示。

  • 2:公差是最大角度,以弧度为单位,在生成半径之间。

“FLAGS”参数是一个位字段。默认情况下为0。支持的位包括:

  • 1:对称(方向相关)输出。

  • 2:保留角度,避免在生成对称输出时减小角度(线段长度)。当对称标志处于禁用状态时不起作用。

可用性:1.3.0

增强:2.4.0增加了对最大偏差和最大角度公差以及对称输出的支持。

增强:3.0.0实现了每个线性化圆弧的最小分段数,以防止拓扑崩溃。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:7.1.7

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')));

--Result --
 LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 150418.17258804,220273.613787707 150419.895736857,
 220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847 150425.562198489,
 220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347 150431.876723113,
 220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099 150438.702620341,220286.147650624 150441.066277505,
 220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149 150448.342699654,
 220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775 150455.77405574,
 220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492 150463.199479347,
 220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259 150470.458232479,220285.196316903 150472.81345077,
 220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384 150479.606668057,
 220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122 150485.87804878,
 220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362 150491.491836488,
 220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731 150496.326509628,
 220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106 150500.277412127,
 220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878 150503.259018879,
 220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107 150505.206787101,
 220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968 150506.078553494,
 220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804 150505.855446946,
 220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724 150504.542297043,
 220222.663718741 150503.86659104,220220.308500449 150503.074365683,
 220217.994991777 150502.167529512,220215.72876617 150501.148267175,
 220213.515283163 150500.019034164,220211.35987523 150498.7825509,
 220209.267734939 150497.441796181,220207.243902439 150496,
 220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732 150491.104263143,
 220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592 150485.437801511,
 220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092 150479.123276887,220191.739336189 150476.89769814,
 220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815 150469.933722495,
 220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229 150462.657300346,
 220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664 150455.22594426,
 220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947 150447.800520653,
 220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018 150440.541767521,
 220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044 150433.60681495,
 220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039 150427.14578372,220197.12195122 150425.12195122,
 220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077 150419.508163512,220203.826610682 150417.804498867,
 220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298 150413.253689397,220211.830006129 150411.935663483,
 220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756 150408.622717305,220220.824571561 150407.740981121,
 220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406)

--3d example
SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')));
Output
------
 LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673,
 220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857 1.05435185700189,....AD INFINITUM ....
    220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)

--use only 2 segments to approximate quarter circle
SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),2));
st_astext
------------------------------
 LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 150485.87804878,
 220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346,
 220197.12195122 150425.12195122,220227 150406)

-- Ensure approximated line is no further than 20 units away from
-- original curve, and make the result direction-neutral
SELECT ST_AsText(ST_CurveToLine(
 'CIRCULARSTRING(0 0,100 -100,200 0)'::geometry,
    20, -- Tolerance
    1, -- Above is max distance between curve and line
    1  -- Symmetric flag
));
st_astext
-------------------------------------------------------------------------------------------
 LINESTRING(0 0,50 -86.6025403784438,150 -86.6025403784439,200 -1.1331077795296e-13,200 0)


        

另请参阅

ST_LineToCurve


Name

ST_Scroll — 更改闭合线串的起点。

Synopsis

geometry ST_Scroll(geometry linestring, geometry point);

描述

将闭合线串的起点/终点更改为给定顶点

可用性:3.2.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

示例

使闭合直线从其第三个顶点开始

SELECT ST_AsEWKT(ST_Scroll('SRID=4326;LINESTRING(0 0 0 1, 10 0 2 0, 5 5 4 2,0 0 0 1)', 'POINT(5 5 4 2)'));

st_asewkt
----------
SRID=4326;LINESTRING(5 5 4 2,0 0 0 1,10 0 2 0,5 5 4 2)

另请参阅

ST_Normalize


Name

ST_FlipCoordinates — 返回X轴和Y轴翻转的几何体版本。

Synopsis

geometry ST_FlipCoordinates(geometry geom);

描述

返回X轴和Y轴翻转的给定几何图形的版本。用于固定包含以纬度/经度(Y,X)表示的坐标的几何图形。

可用性:2.0.0

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));
 st_asewkt
------------
POINT(2 1)
         

另请参阅

ST_SwapOrdinates


Name

ST_Force2D — 强制几何图形进入“2维模式”。

Synopsis

geometry ST_Force2D(geometry geomA);

描述

将几何体强制为“2维模式”,以便所有输出表示将只有X和Y坐标。这对于FORCE OGC兼容的输出非常有用(因为OGC仅指定2-D几何图形)。

增强:引入了对多面体曲面的2.0.0支持。

更改:2.1.0。直到2.0.x版本,这被称为ST_Force_2D。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                st_asewkt
-------------------------------------
CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)

SELECT  ST_AsEWKT(ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))'));

                                  st_asewkt
----------------------------------------------
 POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))

                

另请参阅

ST_Force3D


Name

ST_Force3D — 强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。

Synopsis

geometry ST_Force3D(geometry geomA, float Zvalue = 0.0);

描述

强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。如果几何图形没有Z分量,则一个 Z值 已附加Z坐标。

增强:引入了对多面体曲面的2.0.0支持。

更改:2.1.0。直到2.0.x版本,这被称为ST_Force_3D。

更改:3.1.0。添加了对提供非零Z值的支持。

This function supports Polyhedral surfaces.

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

示例

--Nothing happens to an already 3D geometry
                SELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
-----------------------------------------------
 CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)


SELECT  ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

                                                 st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
                

Name

ST_Force3DZ — 强制几何图形进入XYZ模式。

Synopsis

geometry ST_Force3DZ(geometry geomA, float Zvalue = 0.0);

描述

强制几何图形进入XYZ模式。如果几何图形没有Z分量,则一个 Z值 已附加Z坐标。

增强:引入了对多面体曲面的2.0.0支持。

更改:2.1.0。直到2.0.x版本,这被称为ST_Force_3DZ。

更改:3.1.0。添加了对提供非零Z值的支持。

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
-----------------------------------------------
 CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)


SELECT  ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

                                                 st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
                

Name

ST_Force3DM — 强制几何图形进入XYM模式。

Synopsis

geometry ST_Force3DM(geometry geomA, float Mvalue = 0.0);

描述

强制几何图形进入XYM模式。如果几何图形没有M分量,则一个 MValue M坐标已附加上。如果它具有Z分量,则会移除Z

更改:2.1.0。直到2.0.x版本,这被称为ST_Force_3 DM。

更改:3.1.0。添加了对提供非零M值的支持。

This method supports Circular Strings and Curves

示例

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
------------------------------------------------
 CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)


SELECT  ST_AsEWKT(ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                  st_asewkt
---------------------------------------------------------------
 POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))

                

Name

ST_Force4D — 强制几何图形进入XYZM模式。

Synopsis

geometry ST_Force4D(geometry geomA, float Zvalue = 0.0, float Mvalue = 0.0);

描述

强制几何图形进入XYZM模式。 Z值 MValue 分别为缺失的Z和M尺寸添加。

更改:2.1.0。直到2.0.x版本,这被称为ST_Force_4D。

更改:3.1.0。添加了对提供非零Z和M值的支持。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                                st_asewkt
---------------------------------------------------------
 CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)



SELECT  ST_AsEWKT(ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                                          st_asewkt
--------------------------------------------------------------------------------------
 MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 1,1 1 0 1))

                

Name

ST_ForcePolygonCCW — 逆时针方向调整所有外环方向,顺时针方向调整所有内环方向。

Synopsis

geometry ST_ForcePolygonCCW ( geometry geom );

描述

强制(多个)多边形对其外环使用逆时针方向,对其内环使用顺时针方向。非多边形几何体返回时不变。

可用性:2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_ForceCollection — 将几何图形转换为GEOMETRYCOLLECTION。

Synopsis

geometry ST_ForceCollection(geometry geomA);

描述

将几何图形转换为几何图形。这对于简化WKB表示非常有用。

增强:引入了对多面体曲面的2.0.0支持。

可用性:1.2.2,1.3.4之前,此函数将与Curves一起崩溃。这在1.3.4+中已修复

更改:2.1.0。直到2.0.x,这被称为ST_Force_Collection。

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT  ST_AsEWKT(ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                                   st_asewkt
----------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1)))


  SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));
                                                                   st_astext
--------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
(1 row)

                
-- POLYHEDRAL example --
SELECT ST_AsEWKT(ST_ForceCollection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))'))

                                                                   st_asewkt
----------------------------------------------------------------------------------
GEOMETRYCOLLECTION(
  POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
  POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
  POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
  POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
  POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
  POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)
                

Name

ST_ForcePolygonCW — 顺时针定向所有外环,逆时针定向所有内环。

Synopsis

geometry ST_ForcePolygonCW ( geometry geom );

描述

强制(多个)多边形对其外环使用顺时针方向,对其内环使用逆时针方向。非多边形几何体返回时不变。

可用性:2.4.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.


Name

ST_ForceSFS — 强制几何图形仅使用SFS 1.1几何图形类型。

Synopsis

geometry ST_ForceSFS(geometry geomA);

geometry ST_ForceSFS(geometry geomA, text version);

描述

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.


Name

ST_ForceRHR — 强制多边形中顶点的方向遵循右手规则。

Synopsis

geometry ST_ForceRHR(geometry g);

描述

强制多边形中顶点的方向遵循右手规则,在该规则中,由多边形界定的区域位于边界的右侧。具体地,外环以顺时针方向定向,而内环以逆时针方向定向。此函数是以下项的同义词 ST_ForcePolygonCW

[Note]

上述右手规则的定义与其他上下文中使用的定义冲突。为避免混淆,建议使用ST_ForcePolygonCW。

增强:引入了对多面体曲面的2.0.0支持。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

SELECT ST_AsEWKT(
  ST_ForceRHR(
        'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'
  )
);
                                                  st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))
(1 row)

Name

ST_ForceCurve — 如果适用,将几何图形向上转换为其曲线类型。

Synopsis

geometry ST_ForceCurve(geometry g);

描述

将几何图形转换为其曲线表示(如果适用):直线变为复合曲线,多线变为多曲线,多边形变为曲线多边形变为多曲面。如果几何图形输入已经是曲线表示,则返回与输入相同的表示。

可用性:2.2.0

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_AsText(
  ST_ForceCurve(
        'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'::geometry
  )
);
                              st_astext
----------------------------------------------------------------------
 CURVEPOLYGON Z ((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))
(1 row)

另请参阅

ST_LineToCurve


Name

ST_LineToCurve — 将线性几何图形转换为曲线几何图形。

Synopsis

geometry ST_LineToCurve(geometry geomANoncircular);

描述

将普通线条/多边形转换为圆形字符串和弯曲多边形。请注意,用更少的点来描述曲线等价物。

[Note]

如果输入LINESTRING/POLYGON曲线不够弯曲,无法清楚地表示曲线,则该函数将返回相同的输入几何图形。

可用性:1.3.0

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

-- 2D Example
SELECT ST_AsText(ST_LineToCurve(foo.geom)) As curvedastext,ST_AsText(foo.geom) As non_curvedastext
    FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As geom) As foo;

curvedatext                                                            non_curvedastext
--------------------------------------------------------------------|-----------------------------------------------------------------
CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,
1 0,-1.12132034355965 5.12132034355963,4 3))                        |  3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,
                                                                    |  2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141,
                                                                    |  1.58527096604839 0.0576441587903094,1 0,
                                                                    |  0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137,
                                                                    |  -0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353,
                                                                    |  -1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472
                                                                    |  --ETC-- ,3.94235584120969 3.58527096604839,4 3))

--3D example
SELECT ST_AsText(ST_LineToCurve(geom)) As curved, ST_AsText(geom) AS not_curved
FROM (SELECT ST_Translate(ST_Force3D(ST_Boundary(ST_Buffer(ST_Point(1,3), 2,2))),0,0,3) AS geom) AS foo;

                        curved                        |               not_curved
------------------------------------------------------+---------------------------------------------------------------------
 CIRCULARSTRING Z (3 3 3,-1 2.99999999999999 3,3 3 3) | LINESTRING Z (3 3 3,2.4142135623731 1.58578643762691 3,1 1 3,
                                                      | -0.414213562373092 1.5857864376269 3,-1 2.99999999999999 3,
                                                      | -0.414213562373101 4.41421356237309 3,
                                                      | 0.999999999999991 5 3,2.41421356237309 4.4142135623731 3,3 3 3)
(1 row)

另请参阅

ST_CurveToLine


Name

ST_Multi — 将几何图形作为多*几何图形返回。

Synopsis

geometry ST_Multi(geometry geom);

描述

将几何图形作为多*几何图形集合返回。如果几何图形已经是一个集合,则返回时不变。

示例

SELECT ST_AsText(ST_Multi('POLYGON ((10 30, 30 30, 30 10, 10 10, 10 30))'));
                    st_astext
    -------------------------------------------------
    MULTIPOLYGON(((10 30,30 30,30 10,10 10,10 30)))

另请参阅

ST_AsText


Name

ST_Normalize — 以其规范形式返回几何图形。

Synopsis

geometry ST_Normalize(geometry geom);

描述

以其规格化/规范形式返回几何体。可以对多边形环中的顶点、多边形环中的环、多几何图形复合体中的元素进行重新排序。

主要用于测试目的(比较预期结果和获得的结果)。

可用性:2.3.0

示例

SELECT ST_AsText(ST_Normalize(ST_GeomFromText(
  'GEOMETRYCOLLECTION(
    POINT(2 3),
    MULTILINESTRING((0 0, 1 1),(2 2, 3 3)),
    POLYGON(
      (0 10,0 0,10 0,10 10,0 10),
      (4 2,2 2,2 4,4 4,4 2),
      (6 8,8 8,8 6,6 6,6 8)
    )
  )'
)));
                                                                     st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0),(6 6,8 6,8 8,6 8,6 6),(2 2,4 2,4 4,2 4,2 2)),MULTILINESTRING((2 2,3 3),(0 0,1 1)),POINT(2 3))
(1 row)
                        

另请参阅

ST_Equals


Name

ST_QuantizeCoordinates — 将坐标的最低有效位设置为零

Synopsis

geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );

描述

ST_QuantizeCoordinates 确定位数( N )来表示小数点后具有指定位数的坐标值,然后设置除 N 将最高有效位设置为零。生成的坐标值仍将舍入为原始值,但会提高可压缩性。这可以显著减少磁盘使用量,前提是几何图形列使用 可压缩存储类型 。该函数允许在每个维度的小数点后指定不同的位数;假定未指定的维度具有 X 尺寸。负数被解释为指小数点左侧的数位(即, PREC_x=-2 会将坐标值保留到最接近的100。

由生成的坐标 ST_QuantizeCoordinates 独立于包含这些坐标的几何图形以及这些坐标在该几何图形中的相对位置。因此,使用此函数不会影响几何图形之间的现有拓扑关系。当使用低于几何图形的固有精度的位数调用该函数时,该函数可能会生成无效的几何图形。

可用性:2.5.0

技术背景

PostGIS将所有坐标值存储为双精度浮点整数,可以可靠地表示15位有效数字。然而,PostGIS可用于管理本质上少于15位有效数字的数据。一个例子是Tiger data,它作为地理坐标提供,小数点后有6位精度(因此只需要9位有效经度和8位有效纬度)。

当有15个有效数字可用时,有9个有效数字的数字有许多可能的表示法。双精度浮点数使用52个显式位来表示坐标的有效数(尾数)。只需要30位来表示具有9个有效位的尾数,剩下22个不重要的位;我们可以将它们的值设置为任何我们喜欢的值,最终仍然得到一个四舍五入为输入值的数字。例如,值100.123456可以由最接近100.123456000000、100.123456000001和100.123456432199的浮点数表示。所有这些都是同样有效的,因为 ST_AsText(geom,6) 对于这些输入中的任何一个都将返回相同的结果。因为我们可以将这些位设置为任何值, ST_QuantizeCoordinates 将22个无效位设置为零。对于较长的坐标序列,这将创建一种由连续零组成的块的模式,由PostgreSQL更有效地进行压缩。

[Note]

只有几何的磁盘大小可能受以下因素影响 ST_QuantizeCoordinates ST_MemSize 报告几何体在内存中的使用情况,将返回相同的值,而不考虑几何体使用的磁盘空间。

示例

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
st_astext
-------------------------
POINT(100.123455047607 0)
                        
WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)
SELECT
  digits,
  encode(ST_QuantizeCoordinates(geom, digits), 'hex'),
  ST_AsText(ST_QuantizeCoordinates(geom, digits))
FROM test, generate_series(15, -15, -1) AS digits;

digits  |                   encode                   |                st_astext
--------+--------------------------------------------+------------------------------------------
15      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
14      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
13      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
12      | 01010000005c9a72083cdd5e405c9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
11      | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
10      | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.456789123455 123.456789123455)
9       | 0101000000009072083cdd5e40009072083cdd5e40 | POINT(123.456789123418 123.456789123418)
8       | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336 123.45678912336)
7       | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.456789121032 123.456789121032)
6       | 0101000000000040083cdd5e40000040083cdd5e40 | POINT(123.456789076328 123.456789076328)
5       | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.456789016724 123.456789016724)
4       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
3       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
2       | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 123.45654296875)
1       | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)
0       | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)
-1      | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)
-2      | 01010000000000000000005e400000000000005e40 | POINT(120 120)
-3      | 010100000000000000000058400000000000005840 | POINT(96 96)
-4      | 010100000000000000000058400000000000005840 | POINT(96 96)
-5      | 010100000000000000000058400000000000005840 | POINT(96 96)
-6      | 010100000000000000000058400000000000005840 | POINT(96 96)
-7      | 010100000000000000000058400000000000005840 | POINT(96 96)
-8      | 010100000000000000000058400000000000005840 | POINT(96 96)
-9      | 010100000000000000000058400000000000005840 | POINT(96 96)
-10     | 010100000000000000000058400000000000005840 | POINT(96 96)
-11     | 010100000000000000000058400000000000005840 | POINT(96 96)
-12     | 010100000000000000000058400000000000005840 | POINT(96 96)
-13     | 010100000000000000000058400000000000005840 | POINT(96 96)
-14     | 010100000000000000000058400000000000005840 | POINT(96 96)
-15     | 010100000000000000000058400000000000005840 | POINT(96 96)

另请参阅

ST_SnapToGrid


Name

ST_RemovePoint — 从线串中删除点。

Synopsis

geometry ST_RemovePoint(geometry linestring, integer offset);

描述

给定线串索引(从0开始),从线串中删除点。用于将闭合直线(环)转换为开放线串。

增强版:3.2.0

可用性:1.1.0

This function supports 3d and will not drop the z-index.

示例

通过删除闭合直线(环)的终点来确保不闭合直线。假设geom的类型为LINESTRING

UPDATE sometable
        SET geom = ST_RemovePoint(geom, ST_NPoints(geom) - 1)
        FROM sometable
        WHERE ST_IsClosed(geom);

Name

ST_RemoveRepeatedPoints — 返回删除了重复点的几何图形版本。

Synopsis

geometry ST_RemoveRepeatedPoints(geometry geom, float8 tolerance);

描述

返回删除了重复的连续点的给定几何图形的版本。该函数仅处理(多)线串、(多)多边形和多点,但可以使用任何类型的几何体进行调用。GeometryCollection的元素是单独处理的。线串的端点将被保留。

如果 容忍度 参数,则彼此公差距离内的顶点被视为重复。

增强版:3.2.0

可用性:2.2.0

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'MULTIPOINT ((1 1), (2 2), (3 3), (2 2))'));
-------------------------
 MULTIPOINT(1 1,2 2,3 3)
SELECT ST_AsText( ST_RemoveRepeatedPoints( 'LINESTRING (0 0, 0 0, 1 1, 0 0, 1 1, 2 2)'));
---------------------------------
 LINESTRING(0 0,1 1,0 0,1 1,2 2)

示例: 收集要素是单独处理的。

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'GEOMETRYCOLLECTION (LINESTRING (1 1, 2 2, 2 2, 3 3), POINT (4 4), POINT (4 4), POINT (5 5))'));
------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),POINT(4 4),POINT(4 4),POINT(5 5))

示例: 使用距离公差重复删除点。

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'LINESTRING (0 0, 0 0, 1 1, 5 5, 1 1, 2 2)', 2));
-------------------------
 LINESTRING(0 0,5 5,2 2)

另请参阅

ST_Simplify


Name

ST_Reverse — 返回顶点顺序颠倒的几何体。

Synopsis

geometry ST_Reverse(geometry g1);

描述

可用于任何几何体,并颠倒顶点的顺序。

增强:引入了对曲线的2.4.0支持。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

SELECT ST_AsText(geom) as line, ST_AsText(ST_Reverse(geom)) As reverseline
FROM
(SELECT ST_MakeLine(ST_Point(1,2),
                ST_Point(1,10)) As geom) as foo;
--result
                line         |     reverseline
---------------------+----------------------
LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)

Name

ST_Segmentize — 返回线段长度不超过给定距离的修改后的几何图形/地理图形。

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

描述

返回线段长度不超过给定值的已修改几何 max_segment_length 。距离计算仅在2维时间内执行。对于几何图形,长度单位使用空间参考单位。对于地理,单位以米为单位。

可用性:1.2.2

增强:3.0.0分段几何体现在使用等长分段

增强:2.3.0分段地理现在使用等长分段

增强:2.1.0引入了对地理位置的支持。

更改:2.1.0由于引入了地理支持:构造 SELECT ST_Segentize(‘LINESTRING(1 2,3 4)’,0.5); 将导致二义性函数错误。您需要具有正确类型的对象,例如几何/地理列,请使用ST_GeomFromText、ST_GeogFromText或 SELECT ST_Segentize(‘LINESTRING(1 2,3 4)’::Geomety,0.5);

[Note]

这只会增加细分市场。它不会加长短于最大长度的线段

示例

SELECT ST_AsText(ST_Segmentize(
ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))')
                ,5)
);
st_astext
--------------------------------------------------------------------------------------------------
MULTILINESTRING((-29 -27,-30 -29.7,-34.886615700134 -30.758766735029,-36 -31,
-40.8809353009198 -32.0846522890933,-45 -33),
(-45 -33,-46 -32))
(1 row)

SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('POLYGON((-29 28, -30 40, -29 28))'),10));
st_astext
-----------------------
POLYGON((-29 28,-29.8304547985374 37.9654575824488,-30 40,-29.1695452014626 30.0345424175512,-29 28))
(1 row)

                        

另请参阅

ST_LineSubstring


Name

ST_SetPoint — 将线串的点替换为给定点。

Synopsis

geometry ST_SetPoint(geometry linestring, integer zerobasedposition, geometry point);

描述

将线串的点N替换为给定点。指数是以0为基数的。负指数被倒数计算,因此-1是最后一个点。当一个顶点移动时尝试保持关节关系时,这在触发器中特别有用。

可用性:1.1.0

更新2.3.0:负面索引

This function supports 3d and will not drop the z-index.

示例

--Change first point in line string from -1 3 to -1 1
SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));
           st_astext
-----------------------
 LINESTRING(-1 1,-1 3)

---Change last point in a line string (lets play with 3d linestring this time)
SELECT ST_AsEWKT(ST_SetPoint(foo.geom, ST_NumPoints(foo.geom) - 1, ST_GeomFromEWKT('POINT(-1 1 3)')))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As geom) As foo;
           st_asewkt
-----------------------
LINESTRING(-1 2 3,-1 3 4,-1 1 3)

SELECT ST_AsText(ST_SetPoint(g, -3, p))
FROM ST_GEomFromText('LINESTRING(0 0, 1 1, 2 2, 3 3, 4 4)') AS g
        , ST_PointN(g,1) as p;
           st_astext
-----------------------
LINESTRING(0 0,1 1,0 0,3 3,4 4)

                        

Name

ST_ShiftLongitude — 在-180..180和0..360之间移动几何体的经度坐标。

Synopsis

geometry ST_ShiftLongitude(geometry geom);

描述

读取几何体中的每个点/顶点,并将其经度坐标从-180..0移动到180..360,如果在这些范围之间,则反之亦然。该函数是对称的,因此结果是-180..180数据的0..360表示和0..360数据的-180..180表示。

[Note]

这仅对具有经度/纬度坐标的数据有用;例如SRID 4326(WGS 84地理位置)

[Warning]

1.3.4之前的错误阻止了这一点的多点工作。1.3.4+也适用于多点。

This function supports 3d and will not drop the z-index.

增强:引入了对多面体曲面和三角网的2.0.0支持。

注意:此函数在2.2.0中从“ST_SHIFT_LONGATION”重命名

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--single point forward transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(270 0)'::geometry))

st_astext
----------
POINT(-90 0)


--single point reverse transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(-90 0)'::geometry))

st_astext
----------
POINT(270 0)


--for linestrings the functions affects only to the sufficient coordinates
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;LINESTRING(174 12, 182 13)'::geometry))

st_astext
----------
LINESTRING(174 12,-178 13)
        

另请参阅

ST_WrapX


Name

ST_WrapX — 将几何体环绕在X值周围。

Synopsis

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

描述

此函数拆分输入几何图形,然后将每个落在给定卷绕线的右侧(对于负的‘Move’)或落在给定的‘WRAP’的左侧(对于正的‘Move’)的组件按照‘Move’参数指定的方向移动,最后将碎片重新组合在一起。

[Note]

这有助于将较长时间输入重新定为中心,以使感兴趣的特征不会从一边产生到另一边。

可用性:2.3.0需要GEOS

This function supports 3d and will not drop the z-index.

示例

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=0 to +360
select ST_WrapX(geom, 0, 360);

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=-30 to +360
select ST_WrapX(geom, -30, 360);
        

另请参阅

ST_ShiftLongitude


Name

ST_SnapToGrid — 将输入几何体的所有点捕捉到规则栅格。

Synopsis

geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float size);

geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);

描述

变体1、2、3:将输入几何图形的所有点捕捉到由其原点和单元大小定义的栅格。删除落在同一单元格上的连续点,如果输出点不足以定义给定类型的几何图形,则最终返回NULL。集合中的折叠几何图形将从中剥离。对降低精度很有用。

变体4:引入了1.1.0-将输入几何图形的所有点捕捉到由其原点(第二个参数,必须是点)和单元格大小定义的栅格。指定0作为不想捕捉到栅格的任何尺寸的大小。

[Note]

返回的几何可能会失去简单性(请参见 ST_IsSimple )。

[Note]

在1.1.0版之前,该函数始终返回2D几何体。从1.1.0开始,返回的几何体将具有与输入几何体相同的维度,其尺寸值更高,保持不变。使用带有第二个几何参数的版本定义所有栅格尺寸。

可用性:1.0.0RC1

可用性:1.1.0-Z和M支持

This function supports 3d and will not drop the z-index.

示例

--Snap your geometries to a precision grid of 10^-3
UPDATE mytable
   SET geom = ST_SnapToGrid(geom, 0.001);

SELECT ST_AsText(ST_SnapToGrid(
                        ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)'),
                        0.001)
                );
                          st_astext
-------------------------------------
 LINESTRING(1.112 2.123,4.111 3.237)
 --Snap a 4d geometry
SELECT ST_AsEWKT(ST_SnapToGrid(
        ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111,
                4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 1.1111112)'),
 ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'),
 0.1, 0.1, 0.1, 0.01) );
                                                                  st_asewkt
------------------------------------------------------------------------------
 LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)


--With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same
SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456,
                4.111111 3.2374897 3.1234 1.1111)'),
           0.01)      );
                                                st_asewkt
---------------------------------------------------------
 LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)

                

Name

ST_Snap — 将输入几何图形的线段和顶点捕捉到参考几何图形的顶点。

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

描述

将一个几何体的顶点和线段捕捉到另一个几何体的顶点。捕捉距离公差用于控制执行捕捉的位置。结果几何体是捕捉了顶点的输入几何体。如果没有发生捕捉,则返回的输入几何体不变。

将一个几何图形捕捉到另一个几何图形可以消除近乎重合的边(这会在节点和交点计算期间导致问题),从而提高覆盖操作的稳健性。

过多的捕捉可能会导致创建无效的拓扑,因此捕捉的顶点的数量和位置需要使用启发式算法来确定何时可以安全捕捉。但是,这可能会导致一些潜在的快照被省略。

[Note]

返回的几何可能会失去简单性(请参见 ST_IsSimple )和有效性(见 ST_IsValid )。

由GEOS模块执行。

可用性:2.0.0

示例

使用线串显示的多边形(在任何捕捉之前)

多边形捕捉到线串到公差:距离的1.01。新的多面显示为参考线串

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
 MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
 (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

多边形捕捉到线串到公差:距离的1.25。新的多面显示为参考线串

SELECT ST_AsText(
    ST_Snap(poly,line, ST_Distance(poly,line)*1.25)
  ) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

线串在距离公差1.01处捕捉到原始多边形。显示的新线串带有参考多面

SELECT ST_AsText(
   ST_Snap(line, poly, ST_Distance(poly,line)*1.01)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

线串在距离公差1.25处捕捉到原始多边形。显示的新线串带有参考多面

SELECT ST_AsText(
 ST_Snap(line, poly, ST_Distance(poly,line)*1.25)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

另请参阅

ST_SnapToGrid


Name

ST_SwapOrdinates — 返回交换了给定纵坐标的给定几何图形的版本。

Synopsis

geometry ST_SwapOrdinates(geometry geom, cstring ords);

描述

返回交换了给定坐标的给定几何图形的版本。

这个 奥兹 参数是命名要交换的坐标的两个字符的字符串。有效名称为:x、y、z和m。

可用性:2.2.0

This method supports Circular Strings and Curves

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

-- Scale M value by 2
SELECT ST_AsText(
  ST_SwapOrdinates(
    ST_Scale(
      ST_SwapOrdinates(g,'xm'),
      2, 1
    ),
  'xm')
) FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;
     st_astext
--------------------
 POINT ZM (0 0 0 4)
                 

另请参阅

ST_FlipCoordinates

8.6. 几何图形验证

Abstract

这些函数根据OGC SFS标准测试几何图形是否有效。它们还提供有关无效的性质和位置的信息。还有一个功能可以从无效的几何图形创建有效的几何图形。

ST_IsValid — 测试几何图形在二维中是否格式良好。
ST_IsValidDetail — 返回一个 valid_detail 表示几何图形是否有效或原因和位置是否有效的行。
ST_IsValidReason — 返回说明几何图形是否有效或无效原因的文本。
ST_MakeValid — 尝试在不丢失顶点的情况下使无效几何体有效。

Name

ST_IsValid — 测试几何图形在二维中是否格式良好。

Synopsis

boolean ST_IsValid(geometry g);

boolean ST_IsValid(geometry g, integer flags);

描述

根据OGC规则测试ST_Geometry值在二维中是否格式正确且有效。对于三维和四维的几何图形,有效性仍然只在两个维度上进行测试。对于无效的几何图形,将发出PostgreSQL通知,详细说明无效的原因。

对于包含 旗帜 参数,支持的值记录在 ST_IsValidDetail 此版本不会打印解释无效的通知。

有关几何有效性定义的详细信息,请参阅 Section 4.4, “几何图形验证”

[Note]

SQL-MM将ST_IsValid(NULL)的结果定义为0,而PostGIS返回NULL。

由GEOS模块执行。

版本接受标志从2.0.0开始可用。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:5.1.9

[Note]

OGC-SFS和SQL-MM规范都不包含ST_IsValid的标志参数。该标志是PostGIS的扩展。

示例

SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,
        ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly
--results
NOTICE:  Self-intersection at or near point 0 0
 good_line | bad_poly
-----------+----------
 t         | f

Name

ST_IsValidDetail — 返回一个 valid_detail 表示几何图形是否有效或原因和位置是否有效的行。

Synopsis

valid_detail ST_IsValidDetail(geometry geom, integer flags);

描述

返回一个 valid_detail 行,包含一个布尔值( 有效 )声明几何图形是否有效,则使用varchar( 原因 )说明无效的原因,以及几何图形( 位置 )指出其无效之处。

有助于改进以下各项的组合 ST_IsValidST_IsValidReason 以生成无效几何图形的详细报告。

可选的 旗帜 参数是位字段。它可以具有下列值:

  • 0:使用常用的OGC SFS有效性语义。

  • 1:考虑某些类型的自触环(倒壳和外折孔)有效。这也称为“ESRI标志”,因为这是这些工具使用的有效性模型。请注意,这在OGC模型下是无效的。

由GEOS模块执行。

可用性:2.0.0

示例

--First 3 Rejects from a successful quintuplet experiment
SELECT gid, reason(ST_IsValidDetail(geom)), ST_AsText(location(ST_IsValidDetail(geom))) as location
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
        FROM generate_series(-4,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,8) z1
        WHERE x1 > y1*0.5 AND z1 < x1*y1) As e
        INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
        FROM generate_series(-3,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,10) z1
        WHERE x1 > y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;

 gid  |      reason       |  location
------+-------------------+-------------
 5330 | Self-intersection | POINT(32 5)
 5340 | Self-intersection | POINT(42 5)
 5350 | Self-intersection | POINT(52 5)

 --simple example
SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 valid | reason | location
-------+--------+----------
 t     |        |

                

Name

ST_IsValidReason — 返回说明几何图形是否有效或无效原因的文本。

Synopsis

text ST_IsValidReason(geometry geomA);

text ST_IsValidReason(geometry geomA, integer flags);

描述

返回文本,说明几何图形是否有效,如果无效,则返回原因。

结合使用时很有用 ST_IsValid 生成无效几何图形和原因的详细报告。

允许 旗帜 都记录在 ST_IsValidDetail

由GEOS模块执行。

可用性:1.4

可用版本:2.0版本带旗帜。

示例

-- invalid bow-tie polygon
SELECT ST_IsValidReason(
    'POLYGON ((100 200, 100 100, 200 200,
     200 100, 100 200))'::geometry) as validity_info;
validity_info
--------------------------
Self-intersection[150 150]
        
--First 3 Rejects from a successful quintuplet experiment
SELECT gid, ST_IsValidReason(geom) as validity_info
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
        FROM generate_series(-4,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,8) z1
        WHERE x1 > y1*0.5 AND z1 < x1*y1) As e
        INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
        FROM generate_series(-3,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,10) z1
        WHERE x1 > y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) > 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;

 gid  |      validity_info
------+--------------------------
 5330 | Self-intersection [32 5]
 5340 | Self-intersection [42 5]
 5350 | Self-intersection [52 5]

 --simple example
SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 st_isvalidreason
------------------
 Valid Geometry

                

另请参阅

ST_IsValid, ST_Summary


Name

ST_MakeValid — 尝试在不丢失顶点的情况下使无效几何体有效。

Synopsis

geometry ST_MakeValid(geometry input);

geometry ST_MakeValid(geometry input, text params);

描述

该函数尝试在不丢失任何输入顶点的情况下创建给定无效几何体的有效表示。返回有效的几何图形时不会更改。

支持的输入包括:POINTS、MULTIPOINTS、LINESTRINGS、MULTILINESTRINGS、POLGON、MULTIPOLYGONS和GEOMETRYCOLLECTIONS,其中包含它们的任意组合。

在完全或部分维度收拢的情况下,输出几何图形可以是较低维度的几何图形的集合,也可以是较低维度的几何图形的集合。

在自交的情况下,单个多边形可能会变成多个几何图形。

这个 参数 参数可用于提供选项字符串,以选择用于生成有效几何图形的方法。选项字符串的格式为“METHOD=LINEWORK|Structure Keep Caved=TRUE|FALSE”。

“方法”键有两个值。

  • “线条”是原始算法,它通过首先提取所有线条,将线条连接在一起,然后从线条生成输出值来构建有效的几何图形。

  • “结构”是一种区分内环和外环的算法,通过联合外环,然后区分所有内环来构建新的几何体。

该键仅对“Structure”算法有效,取值为“True”或“False”。当设置为“False”时,折叠到较低维度的几何图形组件将被丢弃,例如一点线串。

由GEOS模块执行。

可用性:2.0.0

增强版:2.0.1,速度提升

增强:2.1.0,添加了对GEOMETRYCOLLECTION和多点的支持。

增强:3.1.0,添加了移除带有NaN值的坐标。

增强:3.2.0,增加了算法选项,‘线条’和‘结构’。

This function supports 3d and will not drop the z-index.

示例

BEFORE_GEOM:两个重叠多边形的多重投影

After_geom:4个非重叠多边形的多重聚

AFTER_GEOM_STRUCTURE:1个非重叠多边形的多重组合

SELECT f.geom AS before_geom, ST_MakeValid(f.geom) AS after_geom, ST_MakeValid(f.geom, 'method=structure') AS after_geom_structure
FROM (SELECT 'MULTIPOLYGON(((186 194,187 194,188 195,189 195,190 195,
191 195,192 195,193 194,194 194,194 193,195 192,195 191,
195 190,195 189,195 188,194 187,194 186,14 6,13 6,12 5,11 5,
10 5,9 5,8 5,7 6,6 6,6 7,5 8,5 9,5 10,5 11,5 12,6 13,6 14,186 194)),
((150 90,149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,
90 41,81 44,72 48,65 55,58 62,54 71,51 80,50 90,51 100,
54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,
119 136,128 132,135 125,142 118,146 109,149 100,150 90)))'::geometry AS geom) AS f;

BEFORE_GEOM:6个重叠多边形的多重聚

After_geom:由14个不重叠的多边形组成的多重多边形

AFTER_GEOM_STRUCTURE:1个非重叠多边形的多重组合

SELECT c.geom AS before_geom,
                    ST_MakeValid(c.geom) AS after_geom,
                    ST_MakeValid(c.geom, 'method=structure') AS after_geom_structure
        FROM (SELECT 'MULTIPOLYGON(((91 50,79 22,51 10,23 22,11 50,23 78,51 90,79 78,91 50)),
                  ((91 100,79 72,51 60,23 72,11 100,23 128,51 140,79 128,91 100)),
                  ((91 150,79 122,51 110,23 122,11 150,23 178,51 190,79 178,91 150)),
                  ((141 50,129 22,101 10,73 22,61 50,73 78,101 90,129 78,141 50)),
                  ((141 100,129 72,101 60,73 72,61 100,73 128,101 140,129 128,141 100)),
                  ((141 150,129 122,101 110,73 122,61 150,73 178,101 190,129 178,141 150)))'::geometry AS geom) AS c;

示例

SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=true'
    ));

 st_astext
------------
 POINT(0 0)


SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=false'
    ));

    st_astext
------------------
 LINESTRING EMPTY

8.7. 空间参考系功能

Abstract

这些函数使用中定义的几何空间参考系 spatial_ref_sys 桌子。

ST_SetSRID — 在几何图形上设置SRID。
ST_SRID — 返回几何图形的空间参考标识符。
ST_Transform — 返回坐标转换到不同空间参考系的新几何图形。

Name

ST_SetSRID — 在几何图形上设置SRID。

Synopsis

geometry ST_SetSRID(geometry geom, integer srid);

描述

将几何图形上的SRID设置为特定整数值。在构造查询的边界框时非常有用。

[Note]

此函数不以任何方式转换几何图形坐标-它只是设置定义几何图形所在的空间参考系的元数据。使用 ST_Transform 如果要将几何图形转换为新投影。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method supports Circular Strings and Curves

示例

-- Mark a point as WGS 84 long lat --

SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=4326;POINT(-123.365556 48.428611)
                        

-- Mark a point as WGS 84 long lat and then transform to web mercator (Spherical Mercator) --

SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785) As spere_merc;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=3785;POINT(-13732990.8753491 6178458.96425423)
                        

Name

ST_SRID — 返回几何图形的空间参考标识符。

Synopsis

integer ST_SRID(geometry g1);

描述

返回在SPATIAL_REF_SYS表中定义的ST_Geometry的空间参考标识符。 Section 4.5, “空间参考系”

[Note]

Space_ref_sys表是一个表,它编目了PostGIS已知的所有空间参考系统,并用于从一个空间参考系统到另一个空间参考系统的转换。因此,如果您计划转换几何图形,验证您拥有正确的空间参考系统标识符是很重要的。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.5

This method supports Circular Strings and Curves

示例

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
                --result
                4326
                

Name

ST_Transform — 返回坐标转换到不同空间参考系的新几何图形。

Synopsis

geometry ST_Transform(geometry g1, integer srid);

geometry ST_Transform(geometry geom, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, integer to_srid);

描述

返回坐标已转换到不同空间参考系的新几何图形。目标空间参考 to_srid 可以由有效的SRID整数参数标识(即,它必须存在于 spatial_ref_sys 表)。或者,定义为PROJ.4字符串的空间参考可用于 to_proj 和/或 from_proj 然而,这些方法并没有得到优化。如果目标空间参考系统用PROJ.4字符串而不是SRID表示,则输出几何图形的SRID将设置为零。的函数除外 from_proj 、输入几何图形必须具有已定义的SRID。

ST_Transform经常与 ST_SetSRID 。ST_Transform实际上将几何体的坐标从一个空间参考系更改到另一个空间参考系,而ST_SetSRID()只是更改几何体的SRID标识符。

[Note]

需要在支持项目的情况下编译PostGIS。使用 PostGIS_Full_Version 以确认您已编译了项目支持。

[Note]

如果使用多个转换,则对常用转换使用函数索引以利用索引使用是很有用的。

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

增强:引入了对多面体曲面的2.0.0支持。

增强:2.3.0引入了对直接PROJ.4文本的支持。

This method implements the SQL/MM specification. SQL-MM 3:5.1.6

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

将马萨诸塞州平面US Foot几何体更改为WGS 84经度

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
        743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;

 wgs_geom
---------------------------
 POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684
8522251 42.3902896512902));
(1 row)

--3D Circular String example
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326));

                                 st_asewkt
--------------------------------------------------------------------------------------
 SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2,
 -71.1775844305465 42.3903826677917 3,
 -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)

                

创建部分函数索引的示例。对于不确定是否会填充所有几何图形的表,最好使用省略空几何图形的部分索引,这样既可以节省空间,又可以使索引更小、更高效。

CREATE INDEX idx_geom_26986_parcels
  ON parcels
  USING gist
  (ST_Transform(geom, 26986))
  WHERE geom IS NOT NULL;
                

使用PROJ.4文本转换自定义空间参考的示例。

-- Find intersection of two polygons near the North pole, using a custom Gnomic projection
-- See http://boundlessgeo.com/2012/02/flattening-the-peel/
 WITH data AS (
   SELECT
     ST_GeomFromText('POLYGON((170 50,170 72,-130 72,-130 50,170 50))', 4326) AS p1,
     ST_GeomFromText('POLYGON((-170 68,-170 90,-141 90,-141 68,-170 68))', 4326) AS p2,
     '+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text AS gnom
 )
 SELECT ST_AsText(
   ST_Transform(
     ST_Intersection(ST_Transform(p1, gnom), ST_Transform(p2, gnom)),
   gnom, 4326))
 FROM data;
                                          st_astext
 --------------------------------------------------------------------------------
  POLYGON((-170 74.053793645338,-141 73.4268621378904,-141 68,-170 68,-170 74.053793645338))
                

配置转换行为

有时,涉及栅格移动的坐标转换可能会失败,例如,如果PROJ.4尚未使用栅格移动文件构建,或者坐标不在定义栅格移动的范围内。默认情况下,如果不存在格网平移文件,则PostGIS将引发错误,但可以通过测试不同的SRID来配置此行为 to_proj PROJ.4文本的值,或更改 项目4Text 中的值。 spatial_ref_sys 桌子。

例如,proj4text参数+datum=NAD87是以下+nadgrids参数的简写形式:

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat

@前缀表示如果文件不存在,则不会报告错误,但如果到达列表末尾,但没有合适的文件(即找到并重叠),则发出错误。

相反,如果您希望确保至少存在标准文件,但如果扫描所有文件时没有命中,则应用空转换,您可以使用:

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null

空网格平移文件是覆盖整个世界且不应用平移的有效网格平移文件。因此,作为一个完整的示例,如果您想要更改PostGIS,以使不在正确范围内的到SRID 4267的转换不会引发错误,您将使用以下命令:

UPDATE SPATIAL_REF_SYS set proj4text=‘+proj=Longlat+ellps=clrk66+nadgrids=@conus,@alaska,@ntw2_0.gsb,@ntw1_can.dat,NULL+no_Defs’,其中sRID=4267;

8.8. 几何体输入

Abstract

这些函数从各种文本或二进制格式创建几何图形对象。

8.8.1. 熟知文本(WKT)

ST_BdPolyFromText — 构造给定任意闭合线串集合作为MultiLineString熟知文字表示的多边形。
ST_BdMPolyFromText — 构造一个给定任意闭合线串集合的多重多边形作为多重线串文本表示众所周知的文本表示。
ST_GeogFromText — 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。
ST_GeographyFromText — 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。
ST_GeomCollFromText — 使用给定的SRID从集合WKT创建集合几何图形。如果未提供SRID,则默认为0。
ST_GeomFromEWKT — 从扩展熟知文本表示法(EWKT)返回指定的ST_Geometry值。
ST_GeometryFromText — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名
ST_GeomFromText — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。
ST_LineFromText — 使用给定的SRID从WKT创建几何图形表示。如果未提供SRID,则默认为0。
ST_MLineFromText — 从WKT表示法返回指定的ST_MultiLineString值。
ST_MPointFromText — 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。
ST_MPolyFromText — 使用给定的SRID从WKT创建多重多边形几何图形。如果未提供SRID,则默认为0。
ST_PointFromText — 使用给定的SRID从WKT生成点几何图形。如果未提供SRID,则默认为未知。
ST_PolygonFromText — 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。
ST_WKTToSQL — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名

Name

ST_BdPolyFromText — 构造给定任意闭合线串集合作为MultiLineString熟知文字表示的多边形。

Synopsis

geometry ST_BdPolyFromText(text WKT, integer srid);

描述

构造给定任意闭合线串集合作为MultiLineString熟知文字表示的多边形。

[Note]

如果wkt不是MULTILINESTRING,则引发错误。如果输出是MULTIPOLYGON,则抛出错误;在这种情况下使用ST_BdMPolyFromText,或参见ST_BuildArea()以了解特定于PostGIS的方法。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

由GEOS模块执行。

可用性:1.1.0


Name

ST_BdMPolyFromText — 构造一个给定任意闭合线串集合的多重多边形作为多重线串文本表示众所周知的文本表示。

Synopsis

geometry ST_BdMPolyFromText(text WKT, integer srid);

描述

构造一个给定任意集合的闭合线串、多边形、多线串作为熟知文本表示。

[Note]

如果wkt不是MULTILINESTRING,则引发错误。强制MULTIPOLYGON输出,即使结果实际上只由一个面组成;使用 ST_BdPolyFromText 如果您确定操作将产生一个面,或者请参见 ST_BuildArea() 用于后地理信息系统特定的方法。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

由GEOS模块执行。

可用性:1.1.0


Name

ST_GeogFromText — 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。

Synopsis

geography ST_GeogFromText(text EWKT);

描述

从熟知文本或扩展熟知表示中返回地理对象。如果未指定,则假定为SRID 4326。这是ST_Gegraph yFromText的别名。分数总是以较长的后期形式表示。

示例

--- converting lon lat coords to geography
ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);
UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');

--- specify a geography point using EPSG:4267, NAD27
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4267;POINT(-77.0092 38.889588)'));
                        

Name

ST_GeographyFromText — 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。

Synopsis

geography ST_GeographyFromText(text EWKT);

描述

从熟知文本表示形式返回地理对象。如果未指定,则假定为SRID 4326。


Name

ST_GeomCollFromText — 使用给定的SRID从集合WKT创建集合几何图形。如果未提供SRID,则默认为0。

Synopsis

geometry ST_GeomCollFromText(text WKT, integer srid);

geometry ST_GeomCollFromText(text WKT);

描述

从具有给定SRID的熟知文本(WKT)表示形式创建集合几何图形。如果未提供SRID,则默认为0。

OGC规范3.2.6.2-选项SRID来自一致性套件

如果WKT不是GEOMETRYCOLLECTION,则返回NULL

[Note]

如果您绝对确定您的所有wkt几何图形都是集合,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification.

示例

SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');

Name

ST_GeomFromEWKT — 从扩展熟知文本表示法(EWKT)返回指定的ST_Geometry值。

Synopsis

geometry ST_GeomFromEWKT(text EWKT);

描述

从OGC扩展熟知文本(EWKT)表示法构造一个PostGIS ST_Geometry对象。

[Note]

EWKT格式不是OGC标准,而是包含空间参考系(SRID)标识符的特定于PostGIS的格式

增强:引入了对多面体曲面和三角网的2.0.0支持。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');

SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))');
--3d circular string
SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');
--Polyhedral Surface example
SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE(
        ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
        ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
        ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)');

Name

ST_GeometryFromText — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名

Synopsis

geometry ST_GeometryFromText(text WKT);

geometry ST_GeometryFromText(text WKT, integer srid);

描述

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:5.1.40

另请参阅

ST_GeomFromText


Name

ST_GeomFromText — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。

Synopsis

geometry ST_GeomFromText(text WKT);

geometry ST_GeomFromText(text WKT, integer srid);

描述

从OGC熟知文本表示形式构造一个PostGIS ST_Geometry对象。

[Note]

ST_GeomFromText函数有两个变体。第一个不采用SRID,并返回没有定义的空间参考系统(SRID=0)的几何图形。第二个函数将SRID作为第二个参数,并返回包含此SRID的几何体作为其元数据的一部分。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S3.2.6.2-选项SRID来自一致性套件。

This method implements the SQL/MM specification. SQL-MM 3:5.1.40

This method supports Circular Strings and Curves

[Note]

虽然不符合OGC, ST_MakePoint 比ST_GeomFromText和ST_PointFromText更快。对于数值坐标值,它也更易于使用。 ST_Point 是另一个在速度上类似于 ST_MakePoint 并且符合OGC标准,但只支持2D点。

[Warning]

已更改:在以前版本的PostGIS ST_GeomFromText(‘GEOMETRYCOLLECTION(Empty)’)中允许2.0.0。现在,为了更好地符合SQL/MM标准,这在PostGIS 2.0.0中是非法的。现在应将其写为ST_GeomFromText(‘GEOMETRYCOLLECTION EMPTY’)

示例

SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269);

SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');

SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326);

SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');
        

Name

ST_LineFromText — 使用给定的SRID从WKT创建几何图形表示。如果未提供SRID,则默认为0。

Synopsis

geometry ST_LineFromText(text WKT);

geometry ST_LineFromText(text WKT, integer srid);

描述

使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。如果传入的WKT不是LINESTRING,则返回NULL。

[Note]

OGC规范3.2.6.2-选项SRID来自一致性套件。

[Note]

如果您知道所有的几何图形都是LINESTRINGS,那么只使用ST_GeomFromText会更有效。这只是调用ST_GeomFromText并添加额外的验证,以确保它返回一个线串。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:7.2.8

示例

SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

另请参阅

ST_GeomFromText


Name

ST_MLineFromText — 从WKT表示法返回指定的ST_MultiLineString值。

Synopsis

geometry ST_MLineFromText(text WKT, integer srid);

geometry ST_MLineFromText(text WKT);

描述

使用给定的SRID从熟知文本(WKT)生成几何图形。如果未提供SRID,则默认为0。

OGC规范3.2.6.2-选项SRID来自一致性套件

如果WKT不是MULTILINESTRING,则返回NULL

[Note]

如果您绝对确定所有的WKT几何图形都是点,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:9.4.4

示例

SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');

另请参阅

ST_GeomFromText


Name

ST_MPointFromText — 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。

Synopsis

geometry ST_MPointFromText(text WKT, integer srid);

geometry ST_MPointFromText(text WKT);

描述

使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。

OGC规范3.2.6.2-选项SRID来自一致性套件

如果WKT不是多点,则返回NULL

[Note]

如果您绝对确定所有的WKT几何图形都是点,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. 3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:9.2.4

示例

SELECT ST_MPointFromText('MULTIPOINT((1 2),(3 4))');
SELECT ST_MPointFromText('MULTIPOINT((-70.9590 42.1180),(-70.9611 42.1223))', 4326);

另请参阅

ST_GeomFromText


Name

ST_MPolyFromText — 使用给定的SRID从WKT创建多重多边形几何图形。如果未提供SRID,则默认为0。

Synopsis

geometry ST_MPolyFromText(text WKT, integer srid);

geometry ST_MPolyFromText(text WKT);

描述

使用给定的SRID从WKT生成多重多边形。如果未提供SRID,则默认为0。

OGC规范3.2.6.2-选项SRID来自一致性套件

如果WKT不是MULTIPOLYGON,则引发错误

[Note]

如果您绝对确定您的所有WKT几何图形都是多面体,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:9.6.4

示例

SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))');
SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,
        -70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326);

Name

ST_PointFromText — 使用给定的SRID从WKT生成点几何图形。如果未提供SRID,则默认为未知。

Synopsis

geometry ST_PointFromText(text WKT);

geometry ST_PointFromText(text WKT, integer srid);

描述

从OGC熟知文本表示法构造一个PostGIS ST_Geometry点对象。如果未提供SRID,则默认为未知(当前为0)。如果几何图形不是WKT点表示,则返回NULL。如果wkt完全无效,则抛出错误。

[Note]

ST_PointFromText函数有两个变体,第一个不接受SRID,并返回没有定义的空间参考系统的几何图形。第二个参数将空间参考id作为第二个参数,并返回一个ST_Geometry值,该值将此sRID作为其元数据的一部分。SRID必须在SPATIAL_REF_SYS表中定义。

[Note]

如果您绝对确定所有的WKT几何图形都是点,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。如果您从较长后方坐标构建点,且更关心性能和准确性,而不是OGC合规性,请使用 ST_MakePoint 或符合OGC标准的别名 ST_Point

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S3.2.6.2-选项SRID来自一致性套件。

This method implements the SQL/MM specification. SQL-MM 3:6.1.8

示例

SELECT ST_PointFromText('POINT(-71.064544 42.28787)');
SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);
        

Name

ST_PolygonFromText — 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。

Synopsis

geometry ST_PolygonFromText(text WKT);

geometry ST_PolygonFromText(text WKT, integer srid);

描述

使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。如果wkt不是多边形,则返回NULL。

OGC规范3.2.6.2-选项SRID来自一致性套件

[Note]

如果您绝对确定所有的WKT几何图形都是多边形,请不要使用此函数。它比ST_GeomFromText慢,因为它增加了一个额外的验证步骤。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:8.3.6

示例

SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
st_polygonfromtext
------------------
010300000001000000050000006...


SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;

point_is_not_poly
----------
t

另请参阅

ST_GeomFromText


Name

ST_WKTToSQL — 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名

Synopsis

geometry ST_WKTToSQL(text WKT);

描述

This method implements the SQL/MM specification. SQL-MM 3:5.1.34

另请参阅

ST_GeomFromText

8.8.2. 熟知二进制(WKB)

ST_GeogFromWKB — 从熟知二进制几何表示(WKB)或扩展熟知二进制(EWKB)创建地理实例。
ST_GeomFromEWKB — 从扩展熟知二进制表示法(EWKB)返回指定的ST_Geometry值。
ST_GeomFromWKB — 从熟知的二进制几何图形表示(WKB)和可选SRID创建几何图形实例。
ST_LineFromWKB — 使之成为 LINESTRING 从具有给定SRID的WKB
ST_LinestringFromWKB — 使用给定的SRID从WKB创建几何图形。
ST_PointFromWKB — 使用给定的SRID从WKB创建几何图形
ST_WKBToSQL — 从熟知二进制表示法(WKB)返回指定的ST_Geometry值。这是不带sRID的ST_GeomFromWKB的别名

Name

ST_GeogFromWKB — 从熟知二进制几何表示(WKB)或扩展熟知二进制(EWKB)创建地理实例。

Synopsis

geography ST_GeogFromWKB(bytea wkb);

描述

这个 ST_GeogFromWKB 函数,获取几何图形的众所周知的二进制表示(WKB)或PostGIS扩展的WKB,并创建相应地理类型的实例。此函数在SQL中扮演几何图形工厂的角色。

如果未指定SRID,则默认为4326(WGS 84 Long Lat)。

This method supports Circular Strings and Curves

示例

--Although bytea rep contains single \, these need to be escaped when inserting into a table
SELECT ST_AsText(
ST_GeogFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@')
);
                                          st_astext
------------------------------------------------------
 LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)


Name

ST_GeomFromEWKB — 从扩展熟知二进制表示法(EWKB)返回指定的ST_Geometry值。

Synopsis

geometry ST_GeomFromEWKB(bytea EWKB);

描述

从OGC扩展熟知二进制(EWKT)表示法构造一个PostGIS ST_Geometry对象。

[Note]

EWKB格式不是OGC标准,而是包含空间参考系(SRID)标识符的特定于PostGIS的格式

增强:引入了对多面体曲面和三角网的2.0.0支持。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

NAD 83 Long Late(4269)中行字符串二进制表示为LINESTRING(-71.160281 42.258729、-71.160837 42.259113、-71.161144 42.25932)。

[Note]

注意:即使字节数组用\分隔,并且可能有‘,如果STANDARD_CONFINGING_STRINGS为OFF,我们也需要使用\和’进行转义。因此,它看起来并不完全像它的AsEWKB表示形式。

SELECT ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J=
\\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K
\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q
\\300p\\231\\323e1!E@');
[Note]

在PostgreSQL 9.1+中,默认情况下将STANDARD_CONFINGING_STRINGS设置为ON,而在以前的版本中将其设置为OFF。您可以根据需要更改单个查询的默认设置,也可以在数据库或服务器级别更改。下面是在STANDARD_CONFINGING_STRINGS=ON的情况下如何执行此操作。在本例中,我们转义了‘with Standard ansi’,但斜杠没有转义

set standard_conforming_strings = on;
SELECT ST_GeomFromEWKB('\001\002\000\000 \255\020\000\000\003\000\000\000\344J=\012\013B
    \312Q\300n\303(\010\036!E@''\277E''K\012\312Q\300\366{b\235*!E@\225|\354.P\312Q\012\300p\231\323e1')

Name

ST_GeomFromWKB — 从熟知的二进制几何图形表示(WKB)和可选SRID创建几何图形实例。

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

描述

这个 ST_GeomFromWKB 函数接受几何图形的众所周知的二进制表示形式和空间参考系ID( SRID ),并创建相应几何图形类型的实例。此函数在SQL中扮演几何图形工厂的角色。这是ST_WKBToSQL的备用名称。

如果未指定SRID,则默认为0(未知)。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S3.2.7.2-可选的SRID来自一致性套件

This method implements the SQL/MM specification. SQL-MM 3:5.1.41

This method supports Circular Strings and Curves

示例

--Although bytea rep contains single \, these need to be escaped when inserting into a table
                -- unless standard_conforming_strings is set to on.
SELECT ST_AsEWKT(
ST_GeomFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@',4326)
);
                                          st_asewkt
------------------------------------------------------
 SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

SELECT
  ST_AsText(
        ST_GeomFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

Name

ST_LineFromWKB — 使之成为 LINESTRING 从具有给定SRID的WKB

Synopsis

geometry ST_LineFromWKB(bytea WKB);

geometry ST_LineFromWKB(bytea WKB, integer srid);

描述

这个 ST_LineFromWKB 函数接受几何图形的众所周知的二进制表示形式和空间参考系ID( SRID ),并创建相应几何图形类型的实例-在本例中为 LINESTRING 几何图形。此函数在SQL中扮演几何图形工厂的角色。

如果未指定SRID,则默认为0。 NULL 如果输入的是 喝杯茶 并不代表 LINESTRING

[Note]

OGC规范3.2.6.2-选项SRID来自一致性套件。

[Note]

如果你知道你所有的几何图形都是 LINESTRING S,直接使用会更有效 ST_GeomFromWKB 。此函数仅调用 ST_GeomFromWKB 并添加了返回线串的附加验证。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:7.2.9

示例

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
                ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

Name

ST_LinestringFromWKB — 使用给定的SRID从WKB创建几何图形。

Synopsis

geometry ST_LinestringFromWKB(bytea WKB);

geometry ST_LinestringFromWKB(bytea WKB, integer srid);

描述

这个 ST_LinestringFromWKB 函数接受几何图形的众所周知的二进制表示形式和空间参考系ID( SRID ),并创建相应几何图形类型的实例-在本例中为 LINESTRING 几何图形。此函数在SQL中扮演几何图形工厂的角色。

如果未指定SRID,则默认为0。 NULL 如果输入的是 喝杯茶 并不代表 LINESTRING 几何图形。这是的别名 ST_LineFromWKB

[Note]

OGC规范3.2.6.2-可选的SRID来自一致性套件。

[Note]

如果你知道你所有的几何图形都是 LINESTRING S,直接使用会更有效 ST_GeomFromWKB 。此函数仅调用 ST_GeomFromWKB 并添加额外的验证,以确保它返回 LINESTRING

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

This method implements the SQL/MM specification. SQL-MM 3:7.2.9

示例

SELECT
  ST_LineStringFromWKB(
        ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))
  ) AS aline,
  ST_LinestringFromWKB(
        ST_AsBinary(ST_GeomFromText('POINT(1 2)'))
  ) IS NULL AS null_return;
   aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t

Name

ST_PointFromWKB — 使用给定的SRID从WKB创建几何图形

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

描述

这个 ST_PointFromWKB 函数接受几何图形的众所周知的二进制表示形式和空间参考系ID( SRID ),并创建相应几何图形类型的实例-在本例中为 POINT 几何图形。此函数在SQL中扮演几何图形工厂的角色。

如果未指定SRID,则默认为0。 NULL 如果输入的是 喝杯茶 并不代表 POINT 几何图形。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2

This method implements the SQL/MM specification. SQL-MM 3:6.1.9

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)
        )
  );
 st_astext
-----------

(1 row)

Name

ST_WKBToSQL — 从熟知二进制表示法(WKB)返回指定的ST_Geometry值。这是不带sRID的ST_GeomFromWKB的别名

Synopsis

geometry ST_WKBToSQL(bytea WKB);

描述

This method implements the SQL/MM specification. SQL-MM 3:5.1.36

另请参阅

ST_GeomFromWKB

8.8.3. 其他格式

ST_Box2dFromGeoHash — 从GeoHash字符串返回BOX2D。
ST_GeomFromGeoHash — 从GeoHash字符串返回几何图形。
ST_GeomFromGML — 将几何的GML表示作为输入并输出PostGIS几何对象
ST_GeomFromGeoJSON — 将几何的Geojson制图表达作为输入并输出PostGIS几何对象
ST_GeomFromKML — 将几何的KML表示作为输入并输出PostGIS几何对象
ST_GeomFromTWKB — 从TWKB创建几何图形实例(“ 微小的众所周知的二进制 “)几何表示法。
ST_GMLToSQL — 从GML表示法返回指定的ST_Geometry值。这是ST_GeomFromGML的别名
ST_LineFromEncodedPolyline — 从编码的多段线创建线串。
ST_PointFromGeoHash — 从GeoHash字符串返回点。
ST_FromFlatGeobufToTable — 基于FlatGeobuf数据的结构创建表。
ST_FromFlatGeobuf — 读取FlatGeobuf数据。

Name

ST_Box2dFromGeoHash — 从GeoHash字符串返回BOX2D。

Synopsis

box2d ST_Box2dFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

描述

从GeoHash字符串返回BOX2D。

如果没有 精度 被指定为ST_Box2dFromGeoHash根据输入GeoHash字符串的全精度返回BOX2D。

如果 精度 则ST_Box2dFromGeoHash将使用GeoHash中的相同数量的字符来创建BOX2D。精度值越低,BOX2D越大,值越大,精度越高。

可用性:2.1.0

示例

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');

                st_geomfromgeohash
--------------------------------------------------
 BOX(-115.172816 36.114646,-115.172816 36.114646)

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0);

 st_box2dfromgeohash
----------------------
 BOX(-180 -90,180 90)

 SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
                            st_box2dfromgeohash
---------------------------------------------------------------------------
 BOX(-115.17282128334 36.1146408319473,-115.172810554504 36.1146461963654)
                
                

Name

ST_GeomFromGeoHash — 从GeoHash字符串返回几何图形。

Synopsis

geometry ST_GeomFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

描述

从GeoHash字符串返回几何图形。几何体将是表示GeoHash边界的多边形。

如果没有 精度 指定ST_GeomFromGeoHash将根据输入GeoHash字符串的全精度返回一个多边形。

如果 精度 则ST_GeomFromGeoHash将使用GeoHash中的相同数量的字符来创建多边形。

可用性:2.1.0

示例

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
                                                        st_astext
--------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
                                                          st_astext
------------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.3125 36.03515625,-115.3125 36.2109375,-114.9609375 36.2109375,-114.9609375 36.03515625,-115.3125 36.03515625))

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
                                                                                       st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.17282128334 36.1146408319473,-115.17282128334 36.1146461963654,-115.172810554504 36.1146461963654,-115.172810554504 36.1146408319473,-115.17282128334 36.1146408319473))
                
                

Name

ST_GeomFromGML — 将几何的GML表示作为输入并输出PostGIS几何对象

Synopsis

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

描述

从OGC GML表示构造一个PostGIS ST_Geometry对象。

ST_GeomFromGML仅适用于GML几何体片段。如果您试图在整个GML文档上使用它,它会抛出一个错误。

OGC GML versions supported:

  • GML 3.2.1 Namespace

  • GML 3.1.1 Simple Features profile SF-2 (with GML 3.1.0 and 3.0.0 backward compatibility)

  • GML 2.1.2

OGC GML standards, cf: http://www.opengeospatial.org/standards/gml:

可用性:1.5,需要libxml2 1.6+

增强:引入了对多面体曲面和三角网的2.0.0支持。

增强:增加了2.0.0默认SRID可选参数。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

GML允许混合维度(例如,同一多几何图形中的2D和3D)。与PostGIS几何图形不同,如果一次发现缺少Z维度,则ST_GeomFromGML会将整个几何图形转换为2D。

GML支持在同一多几何图形中混合SR。与PostGIS几何图形不同,在本例中,ST_GeomFromGML将所有子几何图形重新投影到SRS根节点。如果没有可用于GML根节点的srsName属性,该函数将抛出错误。

ST_GeomFromGML函数对于显式的GML命名空间并不迂腐。对于常见用法,您可以避免明确提及它。但是,如果您想在GML中使用XLink功能,则需要它。

[Note]

ST_GeomFromGML函数不支持SQL/MM曲线几何。

示例-具有srsName的单个几何图形

SELECT ST_GeomFromGML('
                <gml:LineString srsName="EPSG:4269">
                        <gml:coordinates>
                                -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
                        </gml:coordinates>
                </gml:LineString>');
                

示例-XLink用法

SELECT ST_GeomFromGML('
                <gml:LineString xmlns:gml="http://www.opengis.net/gml"
                                xmlns:xlink="http://www.w3.org/1999/xlink"
                                srsName="urn:ogc:def:crs:EPSG::4269">
                        <gml:pointProperty>
                                <gml:Point gml:id="p1"><gml:pos>42.258729 -71.16028</gml:pos></gml:Point>
                        </gml:pointProperty>
                        <gml:pos>42.259112 -71.160837</gml:pos>
                        <gml:pointProperty>
                                <gml:Point xlink:type="simple" xlink:href="#p1"/>
                        </gml:pointProperty>
                </gml:LineString>'););
                

示例-多面体曲面

SELECT ST_AsEWKT(ST_GeomFromGML('
<gml:PolyhedralSurface>
<gml:polygonPatches>
  <gml:PolygonPatch>
    <gml:exterior>
      <gml:LinearRing><gml:posList srsDimension="3">0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing><gml:posList srsDimension="3">0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing><gml:posList srsDimension="3">0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing><gml:posList srsDimension="3">1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing><gml:posList srsDimension="3">0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing><gml:posList srsDimension="3">0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface>'));

-- result --
 POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))
                

Name

ST_GeomFromGeoJSON — 将几何的Geojson制图表达作为输入并输出PostGIS几何对象

Synopsis

geometry ST_GeomFromGeoJSON(text geomjson);

geometry ST_GeomFromGeoJSON(json geomjson);

geometry ST_GeomFromGeoJSON(jsonb geomjson);

描述

从GeoJSON表示构造一个PostGIS几何对象。

ST_GeomFromGeoJSON仅适用于JSON几何图形片段。如果您试图在整个JSON文档上使用它,它会抛出一个错误。

增强:如果未另行指定,则3.0.0解析的几何体默认为SRID=4326。

增强:2.5.0现在可以接受json和jsonb作为输入。

可用性:2.0.0需要-JSON-C > =0.9

[Note]

如果您没有启用JSON-C,Support您将收到错误通知,而不是看到输出。要启用JSON-C,运行CONFigure--with-jsondir=/path/to/json-c。看见 Section 2.2.3, “生成配置” 有关详细信息,请参阅。

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
wkt
------
POINT(-48.23456 20.12345)
-- a 3D linestring
SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt;

wkt
-------------------
LINESTRING(1 2,4 5,7 8)

Name

ST_GeomFromKML — 将几何的KML表示作为输入并输出PostGIS几何对象

Synopsis

geometry ST_GeomFromKML(text geomkml);

描述

从OGC KML表示构造一个PostGIS ST_Geometry对象。

ST_GeomFromKML仅适用于KML几何图形片段。如果您尝试在整个KML文档上使用它,它会抛出错误。

OGC KML versions supported:

  • KML 2.2.0 Namespace

OGC KML standards, cf: http://www.opengeospatial.org/standards/kml:

可用性:1.5,需要libxml2 2.6+

This function supports 3d and will not drop the z-index.

[Note]

ST_GeomFromKML函数不支持SQL/MM曲线几何。

示例-具有srsName的单个几何图形

SELECT ST_GeomFromKML('
                <LineString>
                        <coordinates>-71.1663,42.2614
                                -71.1667,42.2616</coordinates>
                </LineString>');
                

Name

ST_GeomFromTWKB — 从TWKB创建几何图形实例(“ 微小的众所周知的二进制 “)几何表示法。

Synopsis

geometry ST_GeomFromTWKB(bytea twkb);

描述

这个 ST_GeomFromTWKB 函数,接受一个TWKB(“ 微小的众所周知的二进制 “)几何图形表示(WKB),并创建相应几何图形类型的实例。

示例

SELECT ST_AsText(ST_GeomFromTWKB(ST_AsTWKB('LINESTRING(126 34, 127 35)'::geometry)));

         st_astext
-----------------------------
 LINESTRING(126 34, 127 35)
(1 row)


SELECT ST_AsEWKT(
  ST_GeomFromTWKB(E'\\x620002f7f40dbce4040105')
);
                                          st_asewkt
------------------------------------------------------
LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

另请参阅

ST_AsTWKB


Name

ST_GMLToSQL — 从GML表示法返回指定的ST_Geometry值。这是ST_GeomFromGML的别名

Synopsis

geometry ST_GMLToSQL(text geomgml);

geometry ST_GMLToSQL(text geomgml, integer srid);

描述

This method implements the SQL/MM specification. SQL-MM 3:5.1.50(曲线支持除外)。

可用性:1.5,需要libxml2 1.6+

增强:引入了对多面体曲面和三角网的2.0.0支持。

增强:增加了2.0.0默认SRID可选参数。


Name

ST_LineFromEncodedPolyline — 从编码的多段线创建线串。

Synopsis

geometry ST_LineFromEncodedPolyline(text polyline, integer precision=5);

描述

从编码的多段线字符串创建线串。

可选 精度 指定将在编码多段线中保留的小数位数。编码和解码的值应该是相同的,否则坐标会错误。

请参阅http://developers.google.com/maps/documentation/utilities/polylinealgorithm

可用性:2.2.0

示例

-- Create a line string from a polyline
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));
-- result --
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)

-- Select different precision that was used for polyline encoding
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@',6));
-- result --
SRID=4326;LINESTRING(-12.02 3.85,-12.095 4.07,-12.6453 4.3252)

    

Name

ST_PointFromGeoHash — 从GeoHash字符串返回点。

Synopsis

point ST_PointFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

描述

从GeoHash字符串返回点。该点表示GeoHash的中心点。

如果没有 精度 指定ST_PointFromGeoHash将根据输入GeoHash字符串的全精度返回点。

如果 精度 则ST_PointFromGeoHash将使用GeoHash中的相同数量的字符来创建点。

可用性:2.1.0

示例

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
          st_astext
------------------------------
 POINT(-115.172816 36.114646)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
             st_astext
-----------------------------------
 POINT(-115.13671875 36.123046875)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
                 st_astext
-------------------------------------------
 POINT(-115.172815918922 36.1146435141563)
                
                

Name

ST_FromFlatGeobufToTable — 基于FlatGeobuf数据的结构创建表。

Synopsis

void ST_FromFlatGeobufToTable(text schemaname, text tablename, bytea FlatGeobuf input data);

描述

基于FlatGeobuf数据的结构创建表。( http://flatgeobuf.org )。

模式 架构名称。

表格 表名。

数据 输入FlatGeobuf数据。

可用性:3.2.0


Name

ST_FromFlatGeobuf — 读取FlatGeobuf数据。

Synopsis

setof anyelement ST_FromFlatGeobuf(anyelement Table reference, bytea FlatGeobuf input data);

描述

读取FlatGeobuf数据( http://flatgeobuf.org )。注意:PostgreSQL字节不能超过1 GB。

表格类型 对表类型的引用。

数据 输入FlatGeobuf数据。

可用性:3.2.0

8.9. 几何体输出

Abstract

这些函数将几何体对象转换为各种文本或二进制格式。

8.9.1. 熟知文本(WKT)

ST_AsEWKT — 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。
ST_AsText — 返回不带SRID元数据的几何图形/地理图形的熟知文本(WKT)表示。

Name

ST_AsEWKT — 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。

Synopsis

text ST_AsEWKT(geometry g1);

text ST_AsEWKT(geometry g1, integer maxdecimaldigits=15);

text ST_AsEWKT(geography g1);

text ST_AsEWKT(geography g1, integer maxdecimaldigits=15);

描述

返回以SRID为前缀的几何图形的熟知文本表示形式。可选的 最大小数位数 参数可用于减少输出中浮点后使用的最大小数位数(默认为15)。

要执行从EWKT制图表达到PostGIS几何的逆转换,请使用 ST_GeomFromEWKT

[Warning]

使用 最大小数位数 参数可能会导致输出几何图形无效。为了避免这种使用 ST_ReducePrecision 首先要有一个合适的网格大小。

[Note]

WKT规范不包括SRID。要获取OGC WKT格式,请使用 ST_AsText

[Warning]

WKT格式不能保持精度,因此为了防止浮动截断,请使用 ST_AsBinaryST_AsEWKB 传输格式。

增强:3.1.0支持可选精度参数。

增强:2.0.0引入了对地理、多面体曲面、三角形和三角网的支持。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_AsEWKT('0103000020E61000000100000005000000000000
                        000000000000000000000000000000000000000000000000000000
                        F03F000000000000F03F000000000000F03F000000000000F03
                        F000000000000000000000000000000000000000000000000'::geometry);

                   st_asewkt
--------------------------------
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
(1 row)

SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018
E20A4100000000485F024100000000000000400000000018
E20A4100000000305C02410000000000000840')

--st_asewkt---
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)

Name

ST_AsText — 返回不带SRID元数据的几何图形/地理图形的熟知文本(WKT)表示。

Synopsis

text ST_AsText(geometry g1);

text ST_AsText(geometry g1, integer maxdecimaldigits = 15);

text ST_AsText(geography g1);

text ST_AsText(geography g1, integer maxdecimaldigits = 15);

描述

返回OGC 熟知文本 (Wkt)几何图形/地理图形的表示。可选的 最大小数位数 参数可用于限制输出纵坐标中小数点后的位数(默认为15)。

要执行从WKT制图表达到PostGIS几何的逆转换,请使用 ST_GeomFromText

[Note]

标准OGC WKT表示不包括SRID。要将SRID作为输出表示的一部分,请使用非标准的PostGIS函数 ST_AsEWKT

[Warning]

WKT中数字的文本表示可能不会保持完全的浮点精度。为确保数据存储或传输的完全准确性,最好使用 熟知的二进制 (WKB)格式(请参阅 ST_AsBinary 最大小数位数 )。

[Warning]

使用 最大小数位数 参数可能会导致输出几何图形无效。为了避免这种使用 ST_ReducePrecision 首先要有一个合适的网格大小。

可用性:1.5-引入了对地理位置的支持。

增强:2.5-引入可选参数精度。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.25

This method supports Circular Strings and Curves

示例

SELECT ST_AsText('01030000000100000005000000000000000000
000000000000000000000000000000000000000000000000
F03F000000000000F03F000000000000F03F000000000000F03
F000000000000000000000000000000000000000000000000');

    st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))

全精度输出是默认设置。

SELECT ST_AsText('POINT(111.1111111 1.1111111)'));
    st_astext
------------------------------
 POINT(111.1111111 1.1111111)

这个 最大小数位数 参数可用于限制输出精度。

SELECT ST_AsText('POINT(111.1111111 1.1111111)'), 2);
    st_astext
--------------------
 POINT(111.11 1.11)

8.9.2. 熟知二进制(WKB)

ST_AsBinary — 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。
ST_AsEWKB — 返回具有SRID元数据的几何体的扩展熟知二进制(EWKB)表示。
ST_AsHEXEWKB — 使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(文本形式)的几何图形。

Name

ST_AsBinary — 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。

Synopsis

bytea ST_AsBinary(geometry g1);

bytea ST_AsBinary(geometry g1, text NDR_or_XDR);

bytea ST_AsBinary(geography g1);

bytea ST_AsBinary(geography g1, text NDR_or_XDR);

描述

返回OGC/ISO 熟知的二进制 (WKB)几何图形的表示形式。第一个函数变量默认为使用服务器端进行编码。第二个函数变量接受一个文本参数,指定字节顺序编码,可以是小端(‘ndr’)或大端(‘xdr’)。

WKB格式对于从数据库中读取几何图形数据并保持完全的数值精度非常有用。这避免了使用文本格式(如WKT)时可能发生的精确舍入。

要执行从WKB到PostGIS几何的逆转换,请使用 ST_GeomFromWKB

[Note]

OGC/ISO WKB格式不包括SRID。要获得包含SRID的EWKB格式,请使用 ST_AsEWKB

[Note]

PostgreSQL 9.0中的默认行为已更改为十六进制编码的OUTPUT BYTE。如果您的图形用户界面工具需要旧的行为,那么在您的数据库中设置TEA_OUTPUT=‘ESCRAPE’。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

增强:2.0.0引入了对更高坐标维度的支持。

增强:2.0.0引入了对使用地理位置指定字节顺序的支持。

可用性:引入了1.5.0地理支持。

已更改:2.0.0此函数的输入不能是未知的--必须是几何图形。构造,如 ST_AsBinary(‘point(1 2)’) 不再有效,并且您将获得 N st_as二进制(未知)不是唯一错误 。这样的代码需要更改为 ST_AsBinary(‘point(1 2)’::Geomety); 。如果这是不可能的,则安装 legacy.sql

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

This method implements the SQL/MM specification. SQL-MM 3:5.1.37

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asbinary
--------------------------------
\x01030000000100000005000000000000000000000000000000000000000000000000000000000000
000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000
00000000000000000000000000
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asbinary
--------------------------------
\x000000000300000001000000050000000000000000000000000000000000000000000000003ff000
00000000003ff00000000000003ff00000000000003ff00000000000000000000000000000000000
00000000000000000000000000

Name

ST_AsEWKB — 返回具有SRID元数据的几何体的扩展熟知二进制(EWKB)表示。

Synopsis

bytea ST_AsEWKB(geometry g1);

bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);

描述

返回 扩展的熟知二进制 (EWKB)具有SRID元数据的几何图形的表示。第一个函数变量默认为使用服务器端进行编码。第二个函数变量接受一个文本参数,指定字节顺序编码,可以是小端(‘ndr’)或大端(‘xdr’)。

WKB格式对于从数据库中读取几何图形数据并保持完全的数值精度非常有用。这避免了使用文本格式(如WKT)时可能发生的精确舍入。

要执行EWKB到PostGIS几何的逆转换,请使用 ST_GeomFromEWKB

[Note]

要获取OGC/ISO WKB格式,请使用 ST_AsBinary 。请注意,OGC/ISO WKB格式不包括SRID。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asewkb
--------------------------------
\x0103000020e610000001000000050000000000000000000000000000000000000000000000000000
00000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000
0000000000000000000000000000000000
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asewkb
--------------------------------
\x0020000003000010e600000001000000050000000000000000000000000000000000000000000000
003ff00000000000003ff00000000000003ff00000000000003ff000000000000000000000000000
0000000000000000000000000000000000
                

Name

ST_AsHEXEWKB — 使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(文本形式)的几何图形。

Synopsis

text ST_AsHEXEWKB(geometry g1, text NDRorXDR);

text ST_AsHEXEWKB(geometry g1);

描述

使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(文本形式)的几何图形。如果未指定编码,则使用NDR。

[Note]

可用性:1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
                which gives same answer as

                SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)::text;

                st_ashexewkb
                --------
                0103000020E6100000010000000500
                00000000000000000000000000000000
                00000000000000000000000000000000F03F
                000000000000F03F000000000000F03F000000000000F03
                F000000000000000000000000000000000000000000000000

8.9.3. 其他格式

ST_AsEncodedPolyline — 从线串几何图形返回编码的多段线。
ST_AsFlatGeobuf — 返回一组行的FlatGeobuf表示形式。
ST_AsGeobuf — 返回一组行的Geobuf表示形式。
ST_AsGeoJSON — 将几何图形作为GeoJSON元素返回。
ST_AsGML — 将几何图形作为GML版本2或3元素返回。
ST_AsKML — 将几何图形作为KML元素返回。
ST_AsLatLonText — 返回给定点的度、分、秒表示形式。
ST_AsMVTGeom — 将几何图形变换到 地图框向量平铺 。
ST_AsMVT — 返回一组行的MapBox向量平铺表示形式的聚合函数。
ST_AsSVG — 返回几何图形的SVG路径数据。
ST_AsTWKB — 将几何图形返回为TWKB,也称为“极小的熟知二进制”
ST_AsX3D — 返回X3DXML节点元素格式的几何图形:ISO-IEC-19776-1.2-X3DEncoding-xml
ST_GeoHash — 返回几何图形的GeoHash表示形式。

Name

ST_AsEncodedPolyline — 从线串几何图形返回编码的多段线。

Synopsis

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

描述

将几何图形作为编码的多段线返回。精度为5的Google Maps和精度为5和6的Open Source Routing Machine使用此格式。

可选 精度 指定将在编码多段线中保留的小数位数。编码和解码的值应该是相同的,否则坐标会错误。

可用性:2.2.0

示例

基本信息

SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
        --result--
        |_p~iF~ps|U_ulLnnqC_mqNvxq`@
        

与地理线串和地理分段结合使用,并放在谷歌地图上

-- the SQL for Boston to San Francisco, segments every 100 KM
        SELECT ST_AsEncodedPolyline(
                ST_Segmentize(
                        ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),
                                100000)::geometry) As encodedFlightPath;

当您用查询结果替换$VARIABLE时,JavaScript将如下所示

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<script type="text/javascript">
         flightPath = new google.maps.Polyline({
                        path:  google.maps.geometry.encoding.decodePath("$encodedFlightPath"),
                        map: map,
                        strokeColor: '#0000CC',
                        strokeOpacity: 1.0,
                        strokeWeight: 4
                });
</script>
        

Name

ST_AsFlatGeobuf — 返回一组行的FlatGeobuf表示形式。

Synopsis

bytea ST_AsFlatGeobuf(anyelement set row);

bytea ST_AsFlatGeobuf(anyelement row, bool index);

bytea ST_AsFlatGeobuf(anyelement row, bool index, text geom_name);

描述

返回FlatGeobuf表示形式( http://flatgeobuf.org )对应于FeatureCollection的一组行。注意:PostgreSQL字节不能超过1 GB。

至少包含一个几何图形列的行数据。

索引 切换空间索引创建。默认值为FALSE。

geom_name 行数据中几何图形列的名称。如果为空,则默认为找到的第一个几何图形列。

可用性:3.2.0


Name

ST_AsGeobuf — 返回一组行的Geobuf表示形式。

Synopsis

bytea ST_AsGeobuf(anyelement set row);

bytea ST_AsGeobuf(anyelement row, text geom_name);

描述

返回Geobuf表示形式( https://github.com/mapbox/geobuf )对应于FeatureCollection的一组行。对每个输入几何图形进行分析,以确定最佳存储的最大精度。请注意,当前形式的Geobuf不能流传输,因此完整的输出将在内存中汇编。

至少包含一个几何图形列的行数据。

geom_name 行数据中几何图形列的名称。如果为空,则默认为找到的第一个几何图形列。

可用性:2.4.0

示例

SELECT encode(ST_AsGeobuf(q, 'geom'), 'base64')
    FROM (SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))') AS geom) AS q;
 st_asgeobuf
----------------------------------
 GAAiEAoOCgwIBBoIAAAAAgIAAAE=

                
                

Name

ST_AsGeoJSON — 将几何图形作为GeoJSON元素返回。

Synopsis

text ST_AsGeoJSON(record feature, text geomcolumnname, integer maxdecimaldigits=9, boolean pretty_bool=false);

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

描述

将几何图形作为GeoJSON“几何图形”返回,或将行作为GeoJSON“要素”返回。(请参阅 GeoJSON规范RFC 7946 )。同时支持2D和3D几何图形。GeoJSON仅支持SFS 1.1几何体类型(例如,不支持曲线)。

这个 最大小数位数 参数可用于减少输出中使用的最大小数位数(默认为9)。如果您使用的是EPSG:4326并且输出的几何图形仅用于显示, 最大小数位数 =6对于许多贴图来说可能是一个很好的选择。

[Warning]

使用 最大小数位数 参数可能会导致输出几何图形无效。为了避免这种使用 ST_ReducePrecision 首先要有一个合适的网格大小。

这个 选项 参数可用于在GeoJSON输出中添加BBox或CRS:

  • 0:表示无选项

  • 1:GeoJSON BBox

  • 2:GeoJSON短CRS(例如EPSG:4326)

  • 4:GeoJSON长CRS(例如urn:ogc:def:crs:epsg::4326)

  • 8:GeoJSON短CRS,如果不是EPSG:4326(默认)

GeoJSON规范规定,使用右手规则来确定多边形的方向,有些客户端要求使用此方向。这可以通过使用 ST_ForcePolygonCCW 。该规范还要求几何图形采用WGS84坐标系(SRID=4326)。如有必要,可以使用将几何图形投影到WGS84中 ST_Transform ST_Transform(geom,4326)

GeoJSON可在线测试和查看,网址为 geojson.io geojsonlint.com 。它得到了Web地图框架的广泛支持:

可用性:1.3.4

可用性:引入了1.5.0地理支持。

已更改:2.0.0支持默认参数和命名参数。

更改:3.0.0支持记录作为输入

已更改:3.0.0如果不是EPSG:4326,则输出SRID。

This function supports 3d and will not drop the z-index.

示例

生成FeatureCollection:

SELECT json_build_object(
    'type', 'FeatureCollection',
    'features', json_agg(ST_AsGeoJSON(t.*)::json)
    )
FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry),
              (2, 'two', 'POINT(2 2)'),
              (3, 'three', 'POINT(3 3)')
     ) as t(id, name, geom);
{“type”:“FeatureCollection”,“Feature”:[{“type”:“Feature”,“geomety”:{“type”:“Point”,“coels”:[1,1]},“Properties”:{“id”:1,“name”:“one”}},{“type”:“Feature”,“geomety”:{“type”:“Point”,“coels”:[2,2]},“Properties”:{“id”:2,“名称”:“二”}},{“类型”:“要素”,“几何”:{“类型”:“点”,“坐标”:[3,3]},“属性”:{“id”:3,“名称”:“三”}}]}

生成特征:

SELECT ST_AsGeoJSON(t.*)
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson
-----------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "properties": {"id": 1, "name": "one"}}

使用生成要素的另一种方法 ID号 属性是使用JSONB函数和运算符:

SELECT jsonb_build_object(
    'type',       'Feature',
    'id',         id,
    'geometry',   ST_AsGeoJSON(geom)::jsonb,
    'properties', to_jsonb( t.* ) - 'id' - 'geom'
    ) AS json
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
json
-----------------------------------------------------------------------------------------------------------------
 {"id": 1, "type": "Feature", "geometry": {"type": "Point", "coordinates": [1, 1]}, "properties": {"name": "one"}}

不要忘记将数据转换为WGS84经度,以符合GeoJSON规范:

SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson
-----------------------------------------------------------------------------------------------------------

{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

支持3D几何图形:

SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{“type”:“线串”,“坐标”:[[1,2,3],[4,5,6]]}

Name

ST_AsGML — 将几何图形作为GML版本2或3元素返回。

Synopsis

text ST_AsGML(geometry geom, integer maxdecimaldigits=15, integer options=0);

text ST_AsGML(geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geometry geom, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

描述

将几何图形作为地理标记语言(GML)元素返回。Version参数(如果指定)可以是2或3。如果未指定Version参数,则默认为2。 最大小数位数 参数可用于减少输出中使用的最大小数位数(默认为15)。

[Warning]

使用 最大小数位数 参数可能会导致输出几何图形无效。为了避免这种使用 ST_ReducePrecision 首先要有一个合适的网格大小。

GML 2指2.1.2版,GML 3指3.1.1版

‘Options’参数是一个位字段。它可用于在GML输出中定义CRS输出类型,并将数据声明为经度/经度:

  • 0:GML短CRS(如EPSG:4326),默认值

  • 1:GML长CRS(例如urn:ogc:def:crs:epsg::4326)

  • 2:仅适用于GML 3,从输出中删除srsDimension属性。

  • 4:仅适用于GML 3,使用 < LineString > 而不是 < 曲线 > 行的标记。

  • 16:声明数据是晚/长的(例如,sRID=4326)。默认情况下,假定数据为Planars。此选项仅适用于与轴顺序相关的GML 3.1.1输出。因此,如果您设置它,它将交换坐标,以便稍后排序,而不是稍后更改数据库。

  • 32:输出几何体(封套)的长方体。

‘Namespace Prefix’参数可用于指定自定义命名空间前缀或无前缀(如果为空)。如果使用的是NULL或省略的‘GML’前缀

可用性:1.3.2

可用性:引入了1.5.0地理支持。

增强:引入了2.0.0前缀支持。引入了GML3的选项4,以允许对线使用线串而不是曲线标记。介绍了GML3对多面体曲面和三角网的支持。引入了选项32来输出箱。

已更改:2.0.0使用默认命名参数

增强:为GML 3引入了2.1.0id支持。

[Note]

只有版本3+的ST_AsGML支持多面体曲面和三角网。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例:版本2

SELECT ST_AsGML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
                st_asgml
                --------
                <gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,0 0,1 1,1 1,0 0,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>
                        

示例:版本3

-- Flip coordinates and output extended EPSG (16 | 1)--
SELECT ST_AsGML(3, ST_GeomFromText('POINT(5.234234233242 6.34534534534)',4326), 5, 17);
                        st_asgml
                        --------
                <gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>6.34535 5.23423</gml:pos></gml:Point>
                        
-- Output the envelope (32) --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 32);
                st_asgml
                --------
        <gml:Envelope srsName="EPSG:4326">
                <gml:lowerCorner>1 2</gml:lowerCorner>
                <gml:upperCorner>10 20</gml:upperCorner>
        </gml:Envelope>
                        
-- Output the envelope (32) , reverse (lat lon instead of lon lat) (16), long srs (1)= 32 | 16 | 1 = 49 --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 49);
        st_asgml
        --------
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
        <gml:lowerCorner>2 1</gml:lowerCorner>
        <gml:upperCorner>20 10</gml:upperCorner>
</gml:Envelope>
                        
-- Polyhedral Example --
SELECT ST_AsGML(3, ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
        st_asgml
        --------
 <gml:PolyhedralSurface>
<gml:polygonPatches>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3">0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface>
                        

另请参阅

ST_GeomFromGML


Name

ST_AsKML — 将几何图形作为KML元素返回。

Synopsis

text ST_AsKML(geometry geom, integer maxdecimaldigits=15, text nprefix=NULL);

text ST_AsKML(geography geog, integer maxdecimaldigits=15, text nprefix=NULL);

描述

将几何图形作为Keyhole标记语言(KML)元素返回。默认最大小数位数为15,默认命名空间为无前缀。

[Warning]

使用 最大小数位数 参数可能会导致输出几何图形无效。为了避免这种使用 ST_ReducePrecision 首先要有一个合适的网格大小。

[Note]

需要在支持项目的情况下编译PostGIS。使用 PostGIS_Full_Version 以确认您已编译了项目支持。

[Note]

可用性:1.2.2-1.3.2中包含版本参数的更高版本

[Note]

增强:2.0.0-添加前缀命名空间,使用默认和命名参数

[Note]

已更改:3.0.0-删除了“Versioned”变体签名

[Note]

AsKML输出将不适用于没有SRID的几何

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                st_askml
                --------
                <Polygon><outerBoundaryIs><LinearRing><coordinates>0,0 0,1 1,1 1,0 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>

                --3d linestring
                SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');
                <LineString><coordinates>1,2,3 4,5,6</coordinates></LineString>
                
                

另请参阅

ST_AsSVG, ST_AsGML


Name

ST_AsLatLonText — 返回给定点的度、分、秒表示形式。

Synopsis

text ST_AsLatLonText(geometry pt, text format='');

描述

返回点的度、分、秒表示形式。

[Note]

假定该点在经度/经度投影中。X(经度)和Y(经度)坐标在输出中归一化为“正常”范围(经度为-180到+180,经度为-90到+90)。

Text参数是包含结果文本格式的格式字符串,类似于日期格式字符串。有效的记号是“D”代表度,“M”代表分钟,“S”代表秒,“C”代表基数方向(NSEW)。可以重复DMS令牌以指示所需的宽度和精度(“SSS.SSSS”意思是“1.0023”)。

“M”、“S”和“C”是可选的。如果省略“C”,则在向南或向西的情况下,度数显示为“-”符号。如果省略“S”,分钟将显示为小数,精度位数由您指定。如果还省略了“M”,则度数将显示为小数,精度取决于您指定的位数。

如果格式字符串被省略(或长度为零),则将使用默认格式。

可用性:2.0

示例

默认格式。

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

提供一种格式(与默认格式相同)。

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"C'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

除D、M、S、C和之外的字符。只是路过而已。

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));
                                   st_aslatlontext
--------------------------------------------------------------------------------------
 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W

有签名的学位而不是基数方向。

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"'));
      st_aslatlontext
----------------------------
 -2°19'29.928" -3°14'3.243"

十进制度。

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
          st_aslatlontext
-----------------------------------
 2.3250 degrees S 3.2342 degrees W

过大的值被规格化。

SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
        st_aslatlontext
-------------------------------
 72°19'29.928"S 57°45'56.757"E

Name

ST_AsMVTGeom — 将几何图形变换到 地图框向量平铺

Synopsis

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

描述

将几何图形变换到 地图框向量平铺 对应于某一层的一组行。尽最大努力保持甚至纠正有效性,并可能在此过程中将几何图形折叠到较低的维度。

几何图形 是要变换的几何体。

边界 是无缓冲区的平铺内容的几何边界。

程度 是由定义的切片坐标空间中的切片范围 规格 。如果为空,则默认为4096。

缓冲层 平铺坐标空间中的缓冲区距离,可选择剪裁几何图形。如果为空,则默认为256。

clip_geom 是一个布尔值,用于控制几何图形是否应按原样进行剪裁或编码。如果为空,则默认为真。

可用性:2.4.0

[Note]

从3.0开始,可以在配置时选择Wagyu来剪裁和验证MVT多边形。与GEOS默认设置相比,该库速度更快,生成的结果更正确,但它可能会丢弃小的多边形。

示例

SELECT ST_AsText(ST_AsMVTGeom(
        ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
        ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
        4096, 0, false));
                              st_astext
--------------------------------------------------------------------
 MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))

                
                

Name

ST_AsMVT — 返回一组行的MapBox向量平铺表示形式的聚合函数。

Synopsis

bytea ST_AsMVT(anyelement set row);

bytea ST_AsMVT(anyelement row, text name);

bytea ST_AsMVT(anyelement row, text name, integer extent);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name, text feature_id_name);

描述

返回二进制数的聚合函数 地图框向量平铺 对应于平铺层的一组行的表示。行应该包含一个几何图形列,该列将被编码为要素几何图形。几何图形应在平铺坐标空间中,并根据 MVT规范 ST_AsMVTGeom 可用于将几何体转换为平铺坐标空间。其他行列被编码为特征属性。

这个 地图框向量平铺 格式可以存储具有不同属性集的要素。要使用此功能,请在包含一级Json对象的行数据中提供一个JSONB列。JSONB值中的键和值将被编码为功能属性。

通过使用串联对此函数的多个调用,可以创建具有多个图层的切片 || STRING_AGG

[Important]

不要用电话呼叫 GEOMETRYCOLLECTION 作为行中的元素。但是,您可以使用 ST_AsMVTGeom 要准备包含的几何图形集合,请执行以下操作。

至少包含一个几何图形列的行数据。

名字 是层的名称。DEFAULT是字符串“Default”。

程度 是规范定义的屏幕空间中的平铺范围。默认为4096。

geom_name 行数据中几何图形列的名称。默认为第一个几何图形列。请注意,默认情况下,PostgreSQL会自动 将未加引号的标识符折换成小写 这意味着除非用引号引用几何图形列,例如 “MyMVTGeom” ,则此参数必须以小写形式提供。

feature_id_name 是行数据中的要素ID列的名称。如果为空或负,则不设置功能ID。匹配名称和有效类型(Smallint、INTEGER、BIGINT)的第一列将用作功能ID,后续任何列都将作为属性添加。不支持JSON属性。

增强版:3.0-新增对功能ID的支持。

增强:2.5.0新增支持并行查询。

可用性:2.4.0

示例

WITH mvtgeom AS
(
  SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12, 513, 412), extent => 4096, buffer => 64) AS geom, name, description
  FROM points_of_interest
  WHERE geom && ST_TileEnvelope(12, 513, 412, margin => (64.0 / 4096))
)
SELECT ST_AsMVT(mvtgeom.*)
FROM mvtgeom;

Name

ST_AsSVG — 返回几何图形的SVG路径数据。

Synopsis

text ST_AsSVG(geometry geom, integer rel=0, integer maxdecimaldigits=15);

text ST_AsSVG(geography geog, integer rel=0, integer maxdecimaldigits=15);

描述

将几何图形作为标量矢量图形(SVG)路径数据返回。使用1作为第二个参数以相对移动的形式实现路径数据,默认(或0)使用绝对移动。第三个参数可用于减少输出中使用的最大小数位数(默认为15位)。当‘rel’arg为0时,点几何图形将呈现为cx/Cy,当‘rel’为1时,将呈现为x/y。多点几何图形由逗号(“,”)分隔,GeometryCollection几何图形由分号(“;”)分隔。

[Note]

可用性:1.2.2。可用性:在PostGIS 1.4.0中对1.4.0进行了更改,在绝对路径中包含L命令以符合 Http://www.w3.org/TR/SVG/paths.html#PathDataBNF

已更改:2.0.0以使用默认参数并支持命名参数

示例

SELECT ST_AsSVG('POLYGON((0 0,0 1,1 1,1 0,0 0))');

                st_assvg
                --------
                M 0 0 L 0 -1 1 -1 1 0 Z

Name

ST_AsTWKB — 将几何图形返回为TWKB,也称为“极小的熟知二进制”

Synopsis

bytea ST_AsTWKB(geometry g1, integer decimaldigits_xy=0, integer decimaldigits_z=0, integer decimaldigits_m=0, boolean include_sizes=false, boolean include_bounding boxes=false);

bytea ST_AsTWKB(geometry[] geometries, bigint[] unique_ids, integer decimaldigits_xy=0, integer decimaldigits_z=0, integer decimaldigits_m=0, boolean include_sizes=false, boolean include_bounding_boxes=false);

描述

返回TWKB(微小熟知二进制)格式的几何体。TWKB是一种 压缩二进制格式 重点是最大限度地减少输出的大小。

小数位数参数控制输出中存储的精度。默认情况下,在编码前将值四舍五入为最接近的单位。如果你想转移更多的精度,增加数字。例如,值1表示保留小数点右侧的第一个数字。

大小和边界框参数控制输出中是否包含有关对象的编码长度和边界的可选信息。默认情况下,它们并非如此。除非您的客户端软件对它们有用处,否则不要打开它们,因为它们只会耗尽空间(而节省空间是TWKB的目的)。

该函数的数组输入形式用于将几何图形和唯一标识符的集合转换为保留这些标识符的TWKB集合。对于希望解包集合然后访问其中对象的进一步信息的客户端来说,这很有用。您可以使用 array_agg 功能。其他参数的操作与该函数的简单形式相同。

[Note]

格式规范可在线获取,网址为 https://github.com/TWKB/Specification ,构建一个JavaScript客户端的代码可以在 https://github.com/TWKB/twkb.js

增强:2.4.0内存和速度提升。

可用性:2.2.0

示例

SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
                 st_astwkb
--------------------------------------------
\x02000202020808

要创建包括标识符的聚合TWKB对象,首先使用“arrayagg()”聚合所需的几何图形和对象,然后调用适当的TWKB函数。

SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
                 st_astwkb
--------------------------------------------
\x040402020400000202

Name

ST_AsX3D — 返回X3DXML节点元素格式的几何图形:ISO-IEC-19776-1.2-X3DEncoding-xml

Synopsis

text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);

描述

将几何作为X3D XML格式的节点元素返回 http://www.web3d.org/standards/number/19776-1 。如果 最大小数位数 (精度)未指定,则默认为15。

[Note]

将PostGIS几何图形转换为X3D有多种选择,因为X3D几何图形类型不直接映射到PostGIS几何图形类型和一些较新的X3D类型,这些类型可能是我们避免的更好的映射,因为大多数渲染工具目前不支持它们。这些是我们已经确定的映射。如果您对我们的想法或方法有任何想法,或者我们可以让人们指明他们喜欢的映射,请随时发布错误罚单。

下面是我们当前如何将PostGIS 2D/3D类型映射到X3D类型

‘Options’参数是一个位字段。对于PostGIS 2.2+,这用于指示是否使用X3D地理坐标地理空间节点来表示坐标,以及是否翻转x/y轴。默认情况下, ST_AsX3D 数据库形式的输出(Long,Lat或X,Y),但X3D默认的经度/经度,y/x可能是首选。

  • 0:数据库顺序中的X/Y(例如,LONG/LAT=X,Y是标准数据库顺序)、默认值和非空间坐标(只是常规的旧坐标标记)。

  • 1:翻转X和Y。如果与地理坐标选项开关一起使用,则输出将是默认的“Latitude_First”,坐标也将被翻转。

  • 2:以地理空间地理坐标形式输出坐标。如果几何图形不在WGS 84 Long Late(SRID:4326)中,则此选项将引发错误。这是目前唯一受支持的地理坐标类型。 请参考指定空间参考系的X3D等级库。 。默认输出将为 地理坐标地理系统=‘“GD”“WE”“经度优先”’ 。如果您更喜欢X3D缺省值 地理坐标地理系统=‘“GD”“WE”“纬度_First”’ 使用 (2+1) = 3

邮政编码类型2D X3D类型3D X3D类型
LINESTRING尚未实施-将为PolyLine2DLineSet
MULTILINESTRING尚未实施-将为PolyLine2DIndexedLineSet
MULTIPOINT多点二维PointSet
POINT输出以空格分隔的坐标输出以空格分隔的坐标
(多)多边形、多面体曲面无效的X3D标记IndexedFaceSet(内环当前作为另一个面输出)
TIN TriangleSet2D(尚未实现)IndexedTriangleSet
[Note]

二维几何图形支持尚未完成。内环当前仅绘制为单独的多边形。我们正在努力解决这些问题。

在3D空间中发生了许多进步,特别是 X3D与HTML5的集成

还有一个很好的开源X3D查看器,可以用来查看渲染的几何图形。免费WRL http://freewrl.sourceforge.net/ 可用于Mac、Linux和Windows的二进制文件。使用打包的FreeWRL_Launcher查看几何图形。

还可以结账 PostGIS极简主义X3D查看器 利用此函数并 X3dDom html/js开源工具包

可用性:2.0.0:ISO-IEC-19776-1.2-X3D编码-可扩展标记语言

增强:2.2.0:支持地理坐标和轴(x/y,经度/经度)翻转。请查看选项以了解详细信息。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例:创建一个功能齐全的X3D文档--这将生成一个可在FreeWrl和其他X3D查看器中查看的立方体。

SELECT '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor=''0 0 1''/>
       </Appearance> ' ||
       ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ||
      '</Shape>
    </Transform>
  </Scene>
</X3D>' As x3ddoc;

                x3ddoc
                --------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor='0 0 1'/>
       </Appearance>
       <IndexedFaceSet  coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'>
            <Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' />
      </IndexedFaceSet>
      </Shape>
    </Transform>
  </Scene>
</X3D>

邮政地理信息系统建筑

将此查询的输出复制并粘贴到 X3D场景查看器 然后单击显示

SELECT string_agg('<Shape>' || ST_AsX3D(ST_Extrude(geom, 0,0, i*0.5)) ||
    '<Appearance>
          <Material diffuseColor="' || (0.01*i)::text || ' 0.8 0.2" specularColor="' || (0.05*i)::text || ' 0 0.5"/>
        </Appearance>
    </Shape>', '')
FROM ST_Subdivide(ST_Letters('PostGIS'),20) WITH ORDINALITY AS f(geom,i);

由PostGIS细分和拉伸形成的建筑物

示例:八角形提升了3个单位,小数精度为6

SELECT ST_AsX3D(
ST_Translate(
    ST_Force_3d(
        ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
    3)
  ,6) As x3dfrag;

x3dfrag
--------
<IndexedFaceSet coordIndex="0 1 2 3 4 5 6 7">
    <Coordinate point="15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 " />
</IndexedFaceSet>

示例:TIN

SELECT ST_AsX3D(ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')) As x3dfrag;

                x3dfrag
                --------
<IndexedTriangleSet  index='0 1 2 3 4 5'><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>

示例:闭合多线串(带洞的多边形的边界)

SELECT ST_AsX3D(
                    ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10),
  (12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))')
) As x3dfrag;

                x3dfrag
                --------
<IndexedLineSet  coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'>
    <Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' />
 </IndexedLineSet>

Name

ST_GeoHash — 返回几何图形的GeoHash表示形式。

Synopsis

text ST_GeoHash(geometry geom, integer maxchars=full_precision_of_point);

描述

返回GeoHash表示形式( http://en.wikipedia.org/wiki/Geohash )。GeoHash将点编码为文本形式,该文本形式可基于前缀进行排序和搜索。较短的GeoHash表示点的精确度较低。它也可以被认为是一个盒子,其中包含实际的点。

如果没有 Maxchars 指定ST_GeoHash将根据输入几何图形类型的全精度返回GeoHash。Points返回一个包含20个字符精度的GeoHash(大约足以保持输入的两倍精度)。其他类型根据要素的大小返回具有可变精度的GeoHash。较大的要素以较低的精度表示,较小的要素以较高的精度表示。其想法是,由GeoHash暗示的框将始终包含输入特性。

如果 Maxchars 被指定为ST_GeoHash将返回最多包含相同字符的GeoHash,因此输入几何图形的表示精度可能较低。对于非点,计算的起点是几何图形边界框的中心。

可用性:1.4.0

[Note]

ST_GeoHash不适用于不在地理(经度/经度)坐标中的几何图形。

This method supports Circular Strings and Curves

示例

SELECT ST_GeoHash(ST_SetSRID(ST_Point(-126,48),4326));

         st_geohash
----------------------
 c0w3hf1s70w3hf1s70w3

SELECT ST_GeoHash(ST_SetSRID(ST_Point(-126,48),4326),5);

 st_geohash
------------
 c0w3h
                
                

另请参阅

ST_GeomFromGeoHash

8.10. 运营者

8.10.1. 边界框运算符

& & — 退货 TRUE 如果A的2D边界框与B的2D边界框相交。
& & (几何体,长方体2df) — 退货 TRUE 如果几何体的(缓存)2D边界框与2D浮点精度边界框(BOX2DF)相交。
& & (box2df,几何体) — 退货 TRUE 如果2D浮点精度边界框(BOX2DF)与几何体的(缓存)2D边界框相交。
& & (box2df,box2df) — 退货 TRUE 如果两个2D浮点精度边界框(BOX2DF)彼此相交。
& & & — 退货 TRUE 如果A的n维边界框与B的n维边界框相交。
& & & (几何体,gidx) — 退货 TRUE 如果几何体的(缓存)n维边界框与n维浮点精度边界框(GIDX)相交。
& & & (gidx,几何体) — 退货 TRUE 如果n维浮点精度边界框(GIDX)与几何体的(缓存)n维边界框相交。
& & & (gidx,gidx) — 退货 TRUE 如果两个n维浮点精度边界框(GIDX)彼此相交。
& < — 退货 TRUE 如果A的边界框与B的边界框重叠或在B的左侧。
& < | — 退货 TRUE 如果A的边界框重叠或低于B的边界框。
& > — 退货 TRUE 如果A‘边界框重叠或在B边界框的右侧。
< < — 退货 TRUE 如果A的边界框严格位于B的左侧。
< < | — 退货 TRUE 如果A的包围盒严格低于B的包围盒。
= — 退货 TRUE 如果几何/地理A的坐标和坐标顺序与几何/地理B的坐标和坐标顺序相同。
> > — 退货 TRUE 如果A的边界框严格位于B的右侧。
@ — 退货 TRUE 如果A的包围盒包含在B的包围盒中。
@(几何体,长方体2df) — 退货 TRUE 如果几何体的2D边界框包含在2D浮点精度边界框(BOX2DF)中。
@(box2df,几何体) — 退货 TRUE 如果将2D浮点精度边界框(BOX2DF)包含在几何体的2D边界框中。
@(box2df,box2df) — 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含在另一个2D浮点精度边界框中。
| & > — 退货 TRUE 如果A的边界框与B的边界框重叠或在B的边界框之上。
| > > — 退货 TRUE 如果A的边界框严格高于B的边界框。
~ — 退货 TRUE 如果A的包围盒包含B。
~(几何体,长方体2df) — 退货 TRUE 如果几何体的2D粘合框包含2D浮点精度边界框(GIDX)。
~(box2df,几何体) — 退货 TRUE 如果2D浮点精度边界框(BOX2DF)包含几何图形的2D粘合框。
~(box2df,box2df) — 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含另一个2D浮点精度边界框(BOX2DF)。
~= — 退货 TRUE 如果A的边界框与B的边界框相同。

Name

& & — 退货 TRUE 如果A的2D边界框与B的2D边界框相交。

Synopsis

boolean &&( geometry A , geometry B );

boolean &&( geography A , geography B );

描述

这个 & & 运算符返回 TRUE 如果几何图形A的二维边界框与几何图形B的二维边界框相交。

[Note]

此操作数将使用几何图形上可用的任何索引。

增强:引入了对多面体曲面的2.0.0支持。

可用性:引入了对地理的1.5.0支持。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 && tbl2.column2 AS overlaps
FROM ( VALUES
        (1, 'LINESTRING(0 0, 3 3)'::geometry),
        (2, 'LINESTRING(0 1, 0 5)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overlaps
---------+---------+----------
           1 |       3 | t
           2 |       3 | f
(2 rows)

Name

& & (几何体,长方体2df) — 退货 TRUE 如果几何体的(缓存)2D边界框与2D浮点精度边界框(BOX2DF)相交。

Synopsis

boolean &&( geometry A , box2df B );

描述

这个 & & 运算符返回 TRUE 如果缓存的几何体A的2D边界框与2D边界框B相交,则使用浮点精度。这意味着如果B是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_Point(1,1) && ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& & (box2df,几何体) — 退货 TRUE 如果2D浮点精度边界框(BOX2DF)与几何体的(缓存)2D边界框相交。

Synopsis

boolean &&( box2df A , geometry B );

描述

这个 & & 运算符返回 TRUE 如果2D边界框A与几何体B的缓存2D边界框相交,则使用浮点精度。这意味着如果A是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_Point(1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& & (box2df,box2df) — 退货 TRUE 如果两个2D浮点精度边界框(BOX2DF)彼此相交。

Synopsis

boolean &&( box2df A , box2df B );

描述

这个 & & 运算符返回 TRUE 如果两个2D边界框A和B彼此相交,则使用浮点精度。这意味着如果A(或B)是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此运算符旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_MakeBox2D(ST_Point(1,1), ST_Point(3,3)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& & & — 退货 TRUE 如果A的n维边界框与B的n维边界框相交。

Synopsis

boolean &&&( geometry A , geometry B );

描述

这个 & & & 运算符返回 TRUE 如果几何A的n维边界框与几何B的n维边界框相交。

[Note]

此操作数将使用几何图形上可用的任何索引。

可用性:2.0.0

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例:三维线串

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3d,
                                    tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
        (1, 'LINESTRING Z(0 0 1, 3 3 2)'::geometry),
        (2, 'LINESTRING Z(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING Z(1 2 1, 4 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overlaps_3d | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t

示例:3M线条

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3zm,
                                    tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
        (1, 'LINESTRING M(0 0 1, 3 3 2)'::geometry),
        (2, 'LINESTRING M(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING M(1 2 1, 4 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overlaps_3zm | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t

另请参阅

& &


Name

& & & (几何体,gidx) — 退货 TRUE 如果几何体的(缓存)n维边界框与n维浮点精度边界框(GIDX)相交。

Synopsis

boolean &&&( geometry A , gidx B );

描述

这个 & & & 运算符返回 TRUE 如果缓存的几何A的n维边界框与n维边界框B相交,则使用浮点精度。这意味着如果B是(双精度)框3d,则它将在内部转换为浮点精度3D边界框(GIDX)

[Note]

此运算符旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例

SELECT ST_MakePoint(1,1,1) &&& ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& & & (gidx,几何体) — 退货 TRUE 如果n维浮点精度边界框(GIDX)与几何体的(缓存)n维边界框相交。

Synopsis

boolean &&&( gidx A , geometry B );

描述

这个 & & & 运算符返回 TRUE 如果n维边界框A与几何图形B的缓存n维边界框相交,则使用浮点精度。这意味着如果A是(双精度)框3d,它将在内部转换为浮点精度3D边界框(GIDX)

[Note]

此运算符旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例

SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_MakePoint(1,1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& & & (gidx,gidx) — 退货 TRUE 如果两个n维浮点精度边界框(GIDX)彼此相交。

Synopsis

boolean &&&( gidx A , gidx B );

描述

这个 & & & 运算符返回 TRUE 如果两个n维边界框A和B彼此相交,则使用浮点精度。这意味着如果A(或B)是(双精度)框3d,它将在内部转换为浮点精度3D边界框(GIDX)

[Note]

此运算符旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例

SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_3DMakeBox(ST_MakePoint(1,1,1), ST_MakePoint(3,3,3)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

& < — 退货 TRUE 如果A的边界框与B的边界框重叠或在B的左侧。

Synopsis

boolean &<( geometry A , geometry B );

描述

这个 & < 运算符返回 TRUE 如果几何图形A的边界框与几何图形B的边界框重叠或位于其左侧,或者更准确地说,与几何图形B的边界框重叠或不在其右侧。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &< tbl2.column2 AS overleft
FROM
  ( VALUES
        (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overleft
---------+---------+----------
           1 |       2 | f
           1 |       3 | f
           1 |       4 | t
(3 rows)

另请参阅

& &, | & >, & >, & < |


Name

& < | — 退货 TRUE 如果A的边界框重叠或低于B的边界框。

Synopsis

boolean &<|( geometry A , geometry B );

描述

这个 & < | 运算符返回 TRUE 如果几何图形A的边界框与几何图形B的边界框重叠或在其下方,或者更准确地说,与几何图形B的边界框重叠或不在几何图形B的边界框之上。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &<| tbl2.column2 AS overbelow
FROM
  ( VALUES
        (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overbelow
---------+---------+-----------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

另请参阅

& &, | & >, & >, & <


Name

& > — 退货 TRUE 如果A‘边界框重叠或在B边界框的右侧。

Synopsis

boolean &>( geometry A , geometry B );

描述

这个 & > 运算符返回 TRUE 如果几何图形A的边界框与几何图形B的边界框重叠或位于其右侧,或者更准确地说,与几何图形B的边界框重叠或不在其左侧。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &> tbl2.column2 AS overright
FROM
  ( VALUES
        (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overright
---------+---------+-----------
           1 |       2 | t
           1 |       3 | t
           1 |       4 | f
(3 rows)

另请参阅

& &, | & >, & < |, & <


Name

< < — 退货 TRUE 如果A的边界框严格位于B的左侧。

Synopsis

boolean <<( geometry A , geometry B );

描述

这个 < < 运算符返回 TRUE 如果几何图形A的边界框严格位于几何图形B的边界框的左侧。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 << tbl2.column2 AS left
FROM
  ( VALUES
        (1, 'LINESTRING (1 2, 1 5)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 3)'::geometry),
        (3, 'LINESTRING (6 0, 6 5)'::geometry),
        (4, 'LINESTRING (2 2, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | left
---------+---------+------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

另请参阅

> >, | > >, < < |


Name

< < | — 退货 TRUE 如果A的包围盒严格低于B的包围盒。

Synopsis

boolean <<|( geometry A , geometry B );

描述

这个 < < | 运算符返回 TRUE 如果几何图形A的边界框严格低于几何图形B的边界框。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 <<| tbl2.column2 AS below
FROM
  ( VALUES
        (1, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (1 4, 1 7)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | below
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

另请参阅

< <, > >, | > >


Name

= — 退货 TRUE 如果几何/地理A的坐标和坐标顺序与几何/地理B的坐标和坐标顺序相同。

Synopsis

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

描述

这个 = 运算符返回 TRUE 如果坐标和坐标顺序几何/地理A与几何/地理B的坐标和坐标顺序相同,则PostgreSQL使用=, < ,以及 > 为几何定义的运算符,用于执行几何的内部排序和比较(即在GROUP BY或ORDER BY子句中)。

[Note]

只有在所有方面都完全相等、具有相同坐标、相同顺序的几何图形/地理区域才被该运算符视为相等。对于“空间相等”,这忽略了诸如坐标顺序之类的东西,并且可以检测覆盖具有不同表示的相同空间区域的要素,使用 ST_OrderingEqualsST_Equals

[Caution]

此操作数不会使用几何图形上可能可用的任何索引。对于索引辅助的精确相等测试,请组合 = 使用 & & 。

已更改:2.4.0,在以前的版本中,这是边界框相等,而不是几何相等。如果需要边界框相等,请使用 ~= 取而代之的是。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry;
 ?column?
----------
 f
(1 row)

SELECT ST_AsText(column1)
FROM ( VALUES
        ('LINESTRING(0 0, 1 1)'::geometry),
        ('LINESTRING(1 1, 0 0)'::geometry)) AS foo;
          st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)

-- Note: the GROUP BY uses the "=" to compare for geometry equivalency.
SELECT ST_AsText(column1)
FROM ( VALUES
        ('LINESTRING(0 0, 1 1)'::geometry),
        ('LINESTRING(1 1, 0 0)'::geometry)) AS foo
GROUP BY column1;
      st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)

-- In versions prior to 2.0, this used to return true --
 SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =
        ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;

--pt_intersect --
f

Name

> > — 退货 TRUE 如果A的边界框严格位于B的右侧。

Synopsis

boolean >>( geometry A , geometry B );

描述

这个 > > 运算符返回 TRUE 如果几何图形A的边界框严格位于几何图形B的边界框的右侧。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 >> tbl2.column2 AS right
FROM
  ( VALUES
        (1, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (1 4, 1 7)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl2;

 column1 | column1 | right
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

另请参阅

< <, | > >, < < |


Name

@ — 退货 TRUE 如果A的包围盒包含在B的包围盒中。

Synopsis

boolean @( geometry A , geometry B );

描述

这个 @ 运算符返回 TRUE 如果几何图形A的边界框完全包含在几何图形B的边界框中。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 @ tbl2.column2 AS contained
FROM
  ( VALUES
        (1, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 4)'::geometry),
        (3, 'LINESTRING (2 2, 4 4)'::geometry),
        (4, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl2;

 column1 | column1 | contained
---------+---------+-----------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | t
(3 rows)

另请参阅

~ , & &


Name

@(几何体,长方体2df) — 退货 TRUE 如果几何体的2D边界框包含在2D浮点精度边界框(BOX2DF)中。

Synopsis

boolean @( geometry A , box2df B );

描述

这个 @ 运算符返回 TRUE 如果A几何体的2D边界框包含2D边界框B,则使用浮点精度。这意味着如果B是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,几何体) — 退货 TRUE 如果将2D浮点精度边界框(BOX2DF)包含在几何体的2D边界框中。

Synopsis

boolean @( box2df A , geometry B );

描述

这个 @ 运算符返回 TRUE 如果2D边界框A包含在B几何体的2D边界框中,则使用浮点精度。这意味着如果B是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,box2df) — 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含在另一个2D浮点精度边界框中。

Synopsis

boolean @( box2df A , box2df B );

描述

这个 @ 运算符返回 TRUE 如果2D边界框A包含在2D边界框B中,则使用浮点精度。这意味着如果A(或B)是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

| & > — 退货 TRUE 如果A的边界框与B的边界框重叠或在B的边界框之上。

Synopsis

boolean |&>( geometry A , geometry B );

描述

这个 | & > 运算符返回 TRUE 如果几何图形A的边界框与几何图形B的边界框重叠或位于几何图形B的边界框之上,或者更准确地说,与几何图形B的边界框重叠或不在几何图形B的边界框下面。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 |&> tbl2.column2 AS overabove
FROM
  ( VALUES
        (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overabove
---------+---------+-----------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

另请参阅

& &, & >, & < |, & <


Name

| > > — 退货 TRUE 如果A的边界框严格高于B的边界框。

Synopsis

boolean |>>( geometry A , geometry B );

描述

这个 | > > 运算符返回 TRUE 如果几何图形A的边界框严格位于几何图形B的边界框上方。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 |>> tbl2.column2 AS above
FROM
  ( VALUES
        (1, 'LINESTRING (1 4, 1 7)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 2)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | above
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

另请参阅

< <, > >, < < |


Name

~ — 退货 TRUE 如果A的包围盒包含B。

Synopsis

boolean ~( geometry A , geometry B );

描述

这个 ~ 运算符返回 TRUE 如果几何A的边界框完全包含几何B的边界框。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT tbl1.column1, tbl2.column1, tbl1.column2 ~ tbl2.column2 AS contains
FROM
  ( VALUES
        (1, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 4)'::geometry),
        (3, 'LINESTRING (1 1, 2 2)'::geometry),
        (4, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl2;

 column1 | column1 | contains
---------+---------+----------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

另请参阅

@ , & &


Name

~(几何体,长方体2df) — 退货 TRUE 如果几何体的2D粘合框包含2D浮点精度边界框(GIDX)。

Synopsis

boolean ~( geometry A , box2df B );

描述

这个 ~ 运算符返回 TRUE 如果几何图形A的二维边界框包含二维边界框B,则使用浮点精度。这意味着如果B是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) ~ ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,几何体) — 退货 TRUE 如果2D浮点精度边界框(BOX2DF)包含几何图形的2D粘合框。

Synopsis

boolean ~( box2df A , geometry B );

描述

这个 ~ 运算符返回 TRUE 如果2D边界框A包含B几何体的边界框,则使用浮点精度。这意味着如果A是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,box2df) — 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含另一个2D浮点精度边界框(BOX2DF)。

Synopsis

boolean ~( box2df A , box2df B );

描述

这个 ~ 运算符返回 TRUE 如果二维边界框A包含二维边界框B,则使用浮点精度。这意味着如果A是(双精度)框2d,它将在内部转换为浮点精度2D边界框(BOX2DF)

[Note]

此操作数旨在供Brin索引内部使用,而不是供用户使用。

可用性:2.3.0推出了对数据块范围索引(Brin)的支持。需要PostgreSQL 9.5+。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

示例

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) AS contains;

 contains
----------
 t
(1 row)

Name

~= — 退货 TRUE 如果A的边界框与B的边界框相同。

Synopsis

boolean ~=( geometry A , geometry B );

描述

这个 ~= 运算符返回 TRUE 如果几何/地理A的边界框与几何/地理B的边界框相同。

[Note]

此操作数将使用几何图形上可用的任何索引。

可用性:1.5.0更改的行为

This function supports Polyhedral surfaces.

[Warning]

此操作符已将PostGIS 1.5中的行为从测试实际几何相等更改为仅检查边界框相等。让事情变得复杂的是,它还取决于您是否进行了硬升级或软升级,您的数据库具有哪些行为。要找出您的数据库具有哪种行为,可以运行下面的查询。要检查是否真的相等,请使用 ST_OrderingEqualsST_Equals

示例

select 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry as equality;
 equality   |
-----------------+
          t    |
                        

8.10.2. 距离运算符

< - > — 返回A和B之间的2D距离。
|=| — 返回A和B轨迹在其最近的接近点处的距离。
< # > — 返回A和B边界框之间的2D距离。
< < - > > — 返回A和B边界框质心之间的n-D距离。
< < # > > — 返回A和B边界框之间的n-D距离。

Name

< - > — 返回A和B之间的2D距离。

Synopsis

double precision <->( geometry A , geometry B );

double precision <->( geography A , geography B );

描述

这个 < - > 运算符返回两个几何图形之间的2D距离。在“ORDER BY”子句中使用提供索引辅助的最近邻结果集。对于低于9.5的PostgreSQL,仅提供边界框的质心距离,对于PostgreSQL 9.5+,执行True KNN距离搜索,提供几何图形之间的真实距离,以及地理的距离球体。

[Note]

此操作数将使用几何图形上可能可用的2D Gist索引。它与其他使用空间索引的运算符的不同之处在于,仅当运算符位于ORDER BY子句中时才使用空间索引。

[Note]

仅当其中一个几何图形是常量(不在子查询/CTE中)时,索引才起作用。例如:‘SRID=3005;POINT(1011102 450541)’::几何图形而不是a.geom

请参阅 PostGIS专题讨论会:最近邻搜索 查看详细的示例。

增强:2.2.0--PostgreSQL 9.5+的几何和地理的True KNN(“K近邻”)行为。请注意,KNN是基于球面而不是椭球体的。对于PostgreSQL 9.4和更低版本,地理支持是新的,但只支持质心框。

更改:2.2.0--对于PostgreSQL9.5用户,旧的混合语法可能会更慢,所以如果您只在PostGIS2.2+9.5+上运行代码,那么您将希望摆脱这种攻击。请参见下面的示例。

可用性:2.0.0--弱KNN基于几何形心距离而不是真实距离提供最近邻居。点的结果是准确的,所有其他类型的结果都不准确。适用于PostgreSQL 9.1+

示例

SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
FROM va2005
ORDER BY d limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

然后是KNN的原始答案:

SELECT st_distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
FROM va2005
ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

如果您对这两个查询运行“EXPLAIN ANALYSE”,您将看到第二个查询的性能有所提高。

适用于运行PostgreSQL的用户 < 9.5中,使用混合查询来查找真正的最近邻居。首先是使用索引辅助KNN的CTE查询,然后是获得正确排序的精确查询:

WITH index_query AS (
  SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
        FROM va2005
  ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry LIMIT 100)
  SELECT *
        FROM index_query
  ORDER BY d limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

                        

Name

|=| — 返回A和B轨迹在其最近的接近点处的距离。

Synopsis

double precision |=|( geometry A , geometry B );

描述

这个 |=| 运算符返回两个轨迹之间的3D距离(请参见 ST_IsValidTrajectory )。这与 ST_DistanceCPA 但作为运算符,它可以用于使用N维索引执行最近邻居搜索(需要PostgreSQL 9.5.0或更高版本)。

[Note]

该操作数将使用几何图形上可用的ND Gist索引。它与其他使用空间索引的运算符的不同之处在于,仅当运算符位于ORDER BY子句中时才使用空间索引。

[Note]

仅当其中一个几何图形是常量(不在子查询/CTE中)时,索引才起作用。例如:‘SRID=3005;LINESTRINGM(0 0 0,0 0 1)’::几何图形而不是a.geom

可用性:2.2.0。索引支持仅适用于PostgreSQL 9.5+

示例

-- Save a literal query trajectory in a psql variable...
\set qt 'ST_AddMeasure(ST_MakeLine(ST_MakePointM(-350,300,0),ST_MakePointM(-410,490,0)),10,20)'
-- Run the query !
SELECT track_id, dist FROM (
  SELECT track_id, ST_DistanceCPA(tr,:qt) dist
  FROM trajectories
  ORDER BY tr |=| :qt
  LIMIT 5
) foo;
 track_id        dist
----------+-------------------
      395 | 0.576496831518066
      380 |  5.06797130410151
      390 |  7.72262293958322
      385 |   9.8004461358071
      405 |  10.9534397988433
(5 rows)

Name

< # > — 返回A和B边界框之间的2D距离。

Synopsis

double precision <#>( geometry A , geometry B );

描述

这个 < # > 运算符返回两个浮点边界框之间的距离,可能从空间索引中读取它们(需要PostgreSQL 9.1+)。对做最近的邻居很有用 近似值 距离排序。

[Note]

此操作数将使用几何图形上可用的任何索引。它与其他使用空间索引的运算符的不同之处在于,仅当运算符位于ORDER BY子句中时才使用空间索引。

[Note]

索引仅在其中一个几何为常量时才起作用,例如ORDER BY(ST_GeomFromText(‘point(1 2)’)) < # > Geom)而不是g1.geom < # > 。

可用性:2.0.0--KNN仅适用于PostgreSQL 9.1+

示例

SELECT *
FROM (
SELECT b.tlid, b.mtfcc,
        b.geom <#> ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
                745787 2948499,745740 2948468,745712 2948438,
                745690 2948384,745677 2948319)',2249) As b_dist,
                ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
                745787 2948499,745740 2948468,745712 2948438,
                745690 2948384,745677 2948319)',2249)) As act_dist
    FROM bos_roads As b
    ORDER BY b_dist, b.tlid
    LIMIT 100) As foo
    ORDER BY act_dist, tlid LIMIT 10;

   tlid    | mtfcc |      b_dist      |     act_dist
-----------+-------+------------------+------------------
  85732027 | S1400 |                0 |                0
  85732029 | S1400 |                0 |                0
  85732031 | S1400 |                0 |                0
  85734335 | S1400 |                0 |                0
  85736037 | S1400 |                0 |                0
 624683742 | S1400 |                0 | 128.528874268666
  85719343 | S1400 | 260.839270432962 | 260.839270432962
  85741826 | S1400 | 164.759294123275 | 260.839270432962
  85732032 | S1400 |           277.75 | 311.830282365264
  85735592 | S1400 |           222.25 | 311.830282365264
(10 rows)

Name

< < - > > — 返回A和B边界框质心之间的n-D距离。

Synopsis

double precision <<->>( geometry A , geometry B );

描述

这个 < < - > > 运算符返回两个几何图形的边界框的质心之间的n-D(欧几里得)距离。对做最近的邻居很有用 近似值 距离排序。

[Note]

该操作数将使用几何图形上可用的n维Gist索引。它与其他使用空间索引的运算符的不同之处在于,仅当运算符位于ORDER BY子句中时才使用空间索引。

[Note]

仅当其中一个几何图形是常量(不在子查询/CTE中)时,索引才起作用。例如:‘SRID=3005;POINT(1011102 450541)’::几何图形而不是a.geom

可用性:2.2.0--KNN仅适用于PostgreSQL 9.1+

另请参阅

< < # > >, < - >


Name

< < # > > — 返回A和B边界框之间的n-D距离。

Synopsis

double precision <<#>>( geometry A , geometry B );

描述

这个 < < # > > 运算符返回两个浮点边界框之间的距离,可能从空间索引中读取它们(需要PostgreSQL 9.1+)。对做最近的邻居很有用 近似值 距离排序。

[Note]

此操作数将使用几何图形上可用的任何索引。它与其他使用空间索引的运算符的不同之处在于,仅当运算符位于ORDER BY子句中时才使用空间索引。

[Note]

索引仅在其中一个几何为常量时才起作用,例如ORDER BY(ST_GeomFromText(‘point(1 2)’)) < < # > > Geom)而不是g1.geom < < # > > 。

可用性:2.2.0--KNN仅适用于PostgreSQL 9.1+

另请参阅

< < - > >, < # >

8.11. 空间关系

Abstract

这些函数确定几何图形之间的空间关系。

8.11.1. 拓扑关系

ST_3DIntersects — 如果两个几何图形在三维空间上相交,则返回TRUE-仅对于点、线串、多边形、多面体曲面(面积)。
ST_Contains — 如果B的点都不在A的外部,并且A和B至少有一个内点相同,则返回TRUE。
ST_ContainsProperly — 如果B与A的内部相交,但不与边界或外部相交,则返回TRUE。
ST_CoveredBy — 如果A中没有点在B之外,则返回TRUE
ST_Covers — 如果B中没有点在A之外,则返回TRUE
ST_Crosses — 如果两个几何图形有一些(但不是全部)共有的内部点,则返回True。
ST_Disjoint — 如果两个几何图形不相交(它们没有共同点),则返回True。
ST_Equals — 如果两个几何图形包含相同的点集,则返回True。
ST_Intersects — 如果两个几何图形相交(它们至少有一个共同点),则返回True。
ST_LineCrossingDirection — 返回一个数字,该数字指示两个LineStrings的交叉行为。
ST_OrderingEquals — 如果两个几何图形表示相同的几何图形并且具有相同方向顺序的点,则返回True。
ST_Overlaps — 如果两个几何图形相交且具有相同的尺寸,但不完全包含在彼此之间,则返回True。
ST_Relate — 测试两个几何图形是否具有匹配相交矩阵模式的拓扑关系,或计算其相交矩阵
ST_RelateMatch — 测试DE-9IM交集矩阵是否与交集矩阵模式匹配
ST_Touches — 如果两个几何图形至少有一个共同点,但其内部不相交,则返回True。
ST_Within — 如果A的点都不在B的外部,并且A和B至少有一个内点相同,则返回TRUE。

Name

ST_3DIntersects — 如果两个几何图形在三维空间上相交,则返回TRUE-仅对于点、线串、多边形、多面体曲面(面积)。

Synopsis

boolean ST_3DIntersects( geometry geomA , geometry geomB );

描述

重叠、接触、内部都暗示着空间的交集。如果上述任一项返回TRUE,则这些几何图形在空间上也相交。对于空间相交,不相交意味着FALSE。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

更改:3.0.0 SFCGAL后端已删除,GEOS后端支持TIN。

可用性:2.0.0

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This method is also provided by SFCGAL backend.

This method implements the SQL/MM specification. SQL-MM 3:?

几何图形示例

SELECT ST_3DIntersects(pt, line), ST_Intersects(pt, line)
  FROM (SELECT 'POINT(0 0 2)'::geometry As pt, 'LINESTRING (0 0 1, 0 2 3)'::geometry As line) As foo;
 st_3dintersects | st_intersects
-----------------+---------------
 f               | t
(1 row)
    

TIN示例

SELECT ST_3DIntersects('TIN(((0 0 0,1 0 0,0 1 0,0 0 0)))'::geometry, 'POINT(.1 .1 0)'::geometry);
 st_3dintersects
-----------------
 t

另请参阅

ST_Intersects


Name

ST_Contains — 如果B的点都不在A的外部,并且A和B至少有一个内点相同,则返回TRUE。

Synopsis

boolean ST_Contains(geometry geomA, geometry geomB);

描述

如果几何图形B完全在几何图形A中,则返回TRUE。当且仅当B的点不在A的外部且B的内部至少有一个点在A的内部时,A包含B。

这个定义的一个微妙之处在于,一个几何图形在其边界内不包含任何东西。因此,面和线可以 包含位于其边界内的线和点。有关更多详细信息,请参阅 OGC封面的精妙之处,包含,内 。( ST_Covers 谓词提供了更具包容性的关系。)但是,几何体确实包含其自身。(相比之下,在 ST_ContainsProperly 谓词几何体所做的 适当地控制自己。)

ST_CONTAINS是 ST_Within 。所以, ST_包含(A,B)=ST_在(B,A)内

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_Contains

由GEOS模块执行

增强:2.3.0对PIP短路的增强扩展到支持多点和少点。以前的版本仅支持多边形中的点。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3-与内(几何图形B、几何图形A)相同

This method implements the SQL/MM specification. SQL-MM 3:5.1.31

示例

ST_Contains 退货 TRUE 在下列情况下:

LINESTRING / MULTIPOINT

POLYGON / POINT

POLYGON / LINESTRING

POLYGON / POLYGON

这个 ST_Contains 谓词返回 FALSE 在下列情况下:

POLYGON / MULTIPOINT

POLYGON / LINESTRING

-- A circle within a circle
SELECT ST_Contains(smallc, bigc) As smallcontainsbig,
     ST_Contains(bigc,smallc) As bigcontainssmall,
     ST_Contains(bigc, ST_Union(smallc, bigc)) as bigcontainsunion,
     ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,
     ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
     ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
       ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;

-- Result
  smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                | t                | t                | t          | t        | f

-- Example demonstrating difference between contains and contains properly
SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
   ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba
FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),
       ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),
       ( ST_Point(1,1) )
    ) As foo(geomA);

  geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f

 

Name

ST_ContainsProperly — 如果B与A的内部相交,但不与边界或外部相交,则返回TRUE。

Synopsis

boolean ST_ContainsProperly(geometry geomA, geometry geomB);

描述

如果B与A的内部相交,但不与边界或外部相交,则返回TRUE。

A没有适当地包含它自己,但它确实包含它自己。

其他几何体的每个点都是该几何体内部的一个点。两个几何的DE-9IM交集矩阵与中使用的[T**FF*FF*]匹配 ST_Relate

此谓词的一个示例用例是计算一组几何图形与一个大型多边形几何图形的交集。由于交集是一个相当慢的操作,因此使用ContainsProperly过滤掉完全位于区域内的测试几何图形可能会更有效。在这些情况下,交点是已知的先验精确的原始测试几何图形。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_ContainsProperly

[Note]

这个谓词的优点是 ST_ContainsST_Intersects 它可以更有效地计算,而不需要计算单个点处的拓扑。

由GEOS模块执行。

可用性:1.4.0

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

示例

--a circle within a circle
  SELECT ST_ContainsProperly(smallc, bigc) As smallcontainspropbig,
  ST_ContainsProperly(bigc,smallc) As bigcontainspropsmall,
  ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) as bigcontainspropunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
  ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
  FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
  --Result
  smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
 f                     | t                    | f                    | t          | t                 | f

 --example demonstrating difference between contains and contains properly
 SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
 ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba
 FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),
      ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),
      ( ST_Point(1,1) )
  ) As foo(geomA);

  geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f
 

Name

ST_CoveredBy — 如果A中没有点在B之外,则返回TRUE

Synopsis

boolean ST_CoveredBy(geometry geomA, geometry geomB);

boolean ST_CoveredBy(geography geogA, geography geogB);

描述

退货 真的 如果几何图形/地理图形A中没有点位于几何图形/地理图形B的外部,则测试几何图形A的每个点是否都在几何图形B的内部(即,与几何图形B的内部或边界相交)。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_CoveredBy

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

由GEOS模块执行

可用性:1.2.2

注意:这是“允许的”版本,返回布尔值,而不是整数。

不是OGC标准,但甲骨文也有。

示例

--a circle coveredby a circle
SELECT ST_CoveredBy(smallc,smallc) As smallinsmall,
  ST_CoveredBy(smallc, bigc) As smallcoveredbybig,
  ST_CoveredBy(ST_ExteriorRing(bigc), bigc) As exteriorcoveredbybig,
  ST_Within(ST_ExteriorRing(bigc),bigc) As exeriorwithinbig
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
  --Result
 smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig
--------------+-------------------+----------------------+------------------
 t            | t                 | t                    | f
(1 row) 

Name

ST_Covers — 如果B中没有点在A之外,则返回TRUE

Synopsis

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

描述

退货 真的 如果几何图形/地理图形B中没有点在几何图形/地理图形A的外部,则测试几何图形B的每个点是否都在几何图形A的内部(即,与几何图形A的内部或边界相交)。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_Covers

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

由GEOS模块执行

增强:2.4.0为地理类型添加了对面中的面和面中的线的支持

增强:2.3.0增强到PIP短路,几何体扩展到支持多点和少点。以前的版本仅支持多边形中的点。

可用性:1.5-引入了对地理位置的支持。

可用性:1.2.2

注意:这是“允许的”版本,返回布尔值,而不是整数。

不是OGC标准,但甲骨文也有。

示例

几何图形示例

--a circle covering a circle
SELECT ST_Covers(smallc,smallc) As smallinsmall,
  ST_Covers(smallc, bigc) As smallcoversbig,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
  ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
  --Result
 smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 

地理示例

-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer
SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt,
  ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent
  FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly,
        ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo;

 poly_covers_pt | buff_10m_covers_cent
----------------+------------------
 f              | t
    

Name

ST_Crosses — 如果两个几何图形有一些(但不是全部)共有的内部点,则返回True。

Synopsis

boolean ST_Crosses(geometry g1, geometry g2);

描述

ST_Crosses 获取两个几何对象并返回 真的 如果它们的交叉点在空间上是交叉的,也就是说,几何图形有一些但不是所有的内部点是共同的。几何图形内部的交点不能是空集,并且其维度必须小于两个输入几何图形的最大尺寸。此外,两个几何图形的交点不能等于任何一个源几何图形。否则,它将返回 错误

用数学术语来说,这是:

如果几何的DE-9IM交阵满足以下条件,则它们相交:

  • T*T* (适用于点/线、点/面和线/面情况)

  • T*T** (适用于线/点、面/点和面/线情况)

  • 0* (适用于线路/线路情况)

对于点/点和面/面的情况,此谓词返回 错误

OpenGIS简单要素规范仅为点/线、点/面、线/线和线/面情况定义了此谓词。JTS/GEOS将该定义扩展到适用于线/点、面/点和面/线的情况。这使关系成为对称的。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.29

示例

以下所有情况都会返回 TRUE

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

考虑用户有两个表的情况:一个道路表和一个高速公路表。

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

要确定穿过高速公路的道路列表,请使用类似于以下内容的查询:

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);

Name

ST_Disjoint — 如果两个几何图形不相交(它们没有共同点),则返回True。

Synopsis

boolean ST_Disjoint( geometry A , geometry B );

描述

重叠、接触,所有这些都意味着几何图形在空间上不是不相交的。如果上述任一项返回TRUE,则这些几何图形在空间上不是不相交的。对于空间相交,不相交意味着FALSE。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

由GEOS模块执行

[Note]

此函数调用不使用索引

[Note]

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3-a.Relate(b,‘Ff*Ff*’)

This method implements the SQL/MM specification. SQL-MM 3:5.1.26

示例

SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
 st_disjoint
---------------
 t
(1 row)
SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
 st_disjoint
---------------
 f
(1 row)
    

另请参阅

ST_Intersects


Name

ST_Equals — 如果两个几何图形包含相同的点集,则返回True。

Synopsis

boolean ST_Equals(geometry A, geometry B);

描述

如果给定的几何图形“在空间上相等”,则返回True。使用此选项可以得到比‘=’更好的答案。注意,我们所说的空间相等是指ST_WITHING(A,B)=TRUE和ST_WITHING(B,A)=TRUE,并且点的平均排序可以是不同的,但表示相同的几何结构。要验证点的顺序是否一致,请使用ST_OrderingEquals(必须注意,ST_OrderingEquals比简单地验证点的顺序相同稍微严格一些)。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2

This method implements the SQL/MM specification. SQL-MM 3:5.1.24

已更改:即使对于无效几何,如果它们是二进制相等的,2.2.0也会返回TRUE

示例

SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),
    ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
 st_equals
-----------
 t
(1 row)

SELECT ST_Equals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),
    ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
 st_equals
-----------
 t
(1 row)

Name

ST_Intersects — 如果两个几何图形相交(它们至少有一个共同点),则返回True。

Synopsis

boolean ST_Intersects( geometry geomA , geometry geomB );

boolean ST_Intersects( geography geogA , geography geogB );

描述

如果几何图形或地理图形共享任何部分的空间,则它们相交。对于地理位置--公差为0.00001米(因此任何接近的点都被认为是相交的)

ST_Overlaps、ST_Touches、ST_In都隐含着空间交集。如果上述任一项返回TRUE,则这些几何图形在空间上也相交。对于空间相交,不相交意味着FALSE。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

更改:删除了3.0.0 SFCGAL版本,并添加了对2D TIN的本地支持。

增强:2.5.0支持GEOMETRYCOLLECTION。

增强:2.3.0对PIP短路的增强扩展到支持多点和少点。以前的版本仅支持多边形中的点。

由GEOS模块(用于几何)执行,地理是原生的

可用性:1.5引入了对地理位置的支持。

[Note]

对于地理,此函数的距离公差约为0.00001米,并使用球体而不是椭球体计算。

[Note]

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3-ST_Intersects(G1,G2)-- > NOT(ST_DISCOCT(G1,G2))

This method implements the SQL/MM specification. SQL-MM 3:5.1.27

This method supports Circular Strings and Curves

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

几何图形示例

SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
 st_intersects
---------------
 f
(1 row)
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
 st_intersects
---------------
 t
(1 row)

-- Look up in table. Make sure table has a GiST index on geometry column for faster lookup.
SELECT id, name FROM cities WHERE ST_Intersects(geom, 'SRID=4326;POLYGON((28 53,27.707 52.293,27 52,26.293 52.293,26 53,26.293 53.707,27 54,27.707 53.707,28 53))');
 id | name
----+-------
  2 | Minsk
(1 row)

地理例子

SELECT ST_Intersects(
    'SRID=4326;LINESTRING(-43.23456 72.4567,-43.23456 72.4568)'::geography,
    'SRID=4326;POINT(-43.23456 72.4567772)'::geography
    );

 st_intersects
---------------
t

Name

ST_LineCrossingDirection — 返回一个数字,该数字指示两个LineStrings的交叉行为。

Synopsis

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

描述

给定的两个行字符串返回一个介于-3和3之间的整数,指示它们之间存在哪种交叉行为。0表示无交叉。仅在以下情况下才支持 LINESTRING s.

交叉号的含义如下:

  • 0:无交叉线

  • -1:线条向左交叉

  • 1:线向右交叉

  • -2:线条多点左端

  • 2:直线多点向右结束

  • -3:线条多点结束相同的第一个左侧

  • 3:线多点结束相同的第一个右侧

可用性:1.4

示例

示例: 左交叉直线和右交叉直线

蓝色:A行;绿色:B行

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
        -1 |         1

示例: 行多点结束相同的第一个左侧和行多点结束相同的第一个右

蓝色:A行;绿色:B行

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
 ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
 ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
         3 |        -3

示例: 线多点左端和线多点右端

蓝色:A行;绿色:B行

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING(5 90, 71 74, 20 140, 171 154)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
        -2 |         2

示例: 线多点左端和线多点右端

蓝色:A行;绿色:B行

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING (171 154, 20 140, 71 74, 2.99 90.16)') As lineB
) As foo;

 A_cross_B | B_cross_A
-----------+-----------
         2 |        -2
SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.geom, s2.geom)
  FROM streets s1 CROSS JOIN streets s2
         ON (s1.gid != s2.gid AND s1.geom && s2.geom )
WHERE ST_LineCrossingDirection(s1.geom, s2.geom) > 0;

另请参阅

ST_Crosses


Name

ST_OrderingEquals — 如果两个几何图形表示相同的几何图形并且具有相同方向顺序的点,则返回True。

Synopsis

boolean ST_OrderingEquals(geometry A, geometry B);

描述

ST_OrderingEquals比较两个几何图形,如果两个几何图形相等且坐标顺序相同,则返回t(True);否则返回f(False)。

[Note]

此函数按照ArcSDE SQL规范而不是SQL-MM来实现。Http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals

This method implements the SQL/MM specification. SQL-MM 3:5.1.43

示例

SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),
    ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
 st_orderingequals
-----------
 f
(1 row)

SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),
    ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));
 st_orderingequals
-----------
 t
(1 row)

SELECT ST_OrderingEquals(ST_Reverse(ST_GeomFromText('LINESTRING(0 0, 10 10)')),
    ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));
 st_orderingequals
-----------
 f
(1 row)

另请参阅

& &, ST_Equals, ST_Reverse


Name

ST_Overlaps — 如果两个几何图形相交且具有相同的尺寸,但不完全包含在彼此之间,则返回True。

Synopsis

boolean ST_Overlaps(geometry A, geometry B);

描述

如果几何图形A和B在空间上重叠,则返回TRUE。如果两个几何图形具有相同的尺寸,每个几何图形至少有一个点不被另一个几何图形共享(或者等价地,两个几何图形都不覆盖另一个),并且它们内部的交点具有相同的尺寸,则两个几何图形重叠。这种重叠关系是对称的。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_Overlaps

由GEOS模块执行

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.32

示例

ST_Overlaps 退货 TRUE 在下列情况下:

MULTIPOINT / MULTIPOINT

LINESTRING / LINESTRING

POLYGON / POLYGON

包含线串上的点,但由于它的尺寸较低,因此不会重叠或交叉。

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  ST_Contains(b,a) AS b_contains_a
FROM (SELECT ST_GeomFromText('POINT (100 100)') As a,
             ST_GeomFromText('LINESTRING (30 50, 40 160, 160 40, 180 160)')  AS b) AS t

overlaps | crosses | intersects | b_contains_a
---------+----------------------+--------------
f        | f       | t          | t

部分覆盖多边形的线串相交和交叉,但不重叠,因为它具有不同的标注。

SELECT ST_Overlaps(a,b) AS overlaps,        ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,   ST_Contains(a,b) AS contains
FROM (SELECT ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('LINESTRING(10 10, 190 190)') AS b) AS t;

 overlap | crosses | intersects | contains
---------+---------+------------+--------------
 f       | t       | t          | f

两个相交但都不包含在另一个中的多边形重叠,但不相交,因为它们的交点具有相同的尺寸。

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  ST_Contains(b, a) AS b_contains_a,
       ST_Dimension(a) AS dim_a, ST_Dimension(b) AS dim_b,
       ST_Dimension(ST_Intersection(a,b)) AS dim_int
FROM (SELECT ST_GeomFromText('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
             ST_GeomFromText('POLYGON ((110 180, 20 60, 130 90, 110 180))') AS b) As t;

 overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int
----------+---------+------------+--------------+-------+-------+-----------
 t        | f       | t          | f            |     2 |     2 |       2

Name

ST_Relate — 测试两个几何图形是否具有匹配相交矩阵模式的拓扑关系,或计算其相交矩阵

Synopsis

boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);

text ST_Relate(geometry geomA, geometry geomB);

text ST_Relate(geometry geomA, geometry geomB, integer boundaryNodeRule);

描述

这些函数允许测试和评估两个几何之间的空间(拓扑)关系,如 量纲扩展的9交点模型 (de-9IM)。

DE-9IM被指定为9元素矩阵,指示两个几何图形的内部、边界和外部的交点的尺寸。它由9个字符的文本字符串表示,使用符号‘F’、‘0’、‘1’、‘2’(例如 ‘FF1FF0102’ )。

通过将交集矩阵与 交集矩阵模式 。模式可以包括附加符号‘T’和‘*’。通用空间关系由命名函数提供 ST_ContainsST_ContainsProperlyST_CoversST_CoveredByST_CrossesST_DisjointST_EqualsST_IntersectsST_OverlapsST_Touches ,以及 ST_Within 。使用显式模式允许在一步中测试交叉点、十字等的多个条件。它还允许测试不具有命名空间关系功能的空间关系。例如,关系“Internal-Intersects”具有DE-9IM模式 T* ,它不会由任何命名谓词求值。

有关更多信息,请参阅 Section 5.1, “确定空间关系”

变体1: 测试两个几何图形是否根据给定的 交集MatrixPattern

[Note]

与大多数命名空间关系谓词不同,这不会自动包括索引调用。原因是某些关系对于不相交的几何图形是正确的(例如,不相交)。如果您正在使用需要交集的关系模式,则包括 & & 索引调用。

[Note]

最好使用命名关系函数(如果可用),因为它们会自动使用存在的空间索引。此外,它们可能会实现完全关联计算中不可用的性能优化。

变体2: 返回两个输入几何图形之间的空间关系的DE-9IM矩阵字符串。可以使用以下命令测试矩阵字符串是否与DE-9IM模式匹配 ST_RelateMatch

变体3: 与变体2类似,但允许指定 边界结点规则 。边界节点规则允许更精细地控制几何图形边界点是否被视为位于DE-9IM内部或边界。这个 边界结点规则 代码为:1:OGC/MOD2,2:Endpoint,3:MultivalentEndpoint,4:MonovalentEndpoint。

此功能不在OGC规范中,但是隐含的。见s2.1.13.2

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.25

由GEOS模块执行

增强:2.0.0-增加了对指定边界节点规则的支持。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

示例

使用布尔值函数测试空间关系。

SELECT ST_Relate('POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '0FFFFF212');
st_relate
-----------
t

SELECT ST_Relate(POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '*FF*FF212');
st_relate
-----------
t

测试自定义空间关系模式作为查询条件,使用 & & 要启用空间索引,请执行以下操作。

-- Find compounds that properly intersect (not just touch) a poly (Interior Intersects)

SELECT c.* , p.name As poly_name
    FROM polys AS p
    INNER JOIN compounds As c
          ON c.geom && p.geom
             AND ST_Relate(p.geom, c.geom,'T********');

计算空间关系的交集矩阵。

SELECT ST_Relate( 'POINT(1 2)',
                  ST_Buffer( 'POINT(1 2)', 2));
st_relate
-----------
0FFFFF212

SELECT ST_Relate( 'LINESTRING(1 2, 3 4)',
                  'LINESTRING(5 6, 7 8)' );
st_relate
-----------
FF1FF0102

Name

ST_RelateMatch — 测试DE-9IM交集矩阵是否与交集矩阵模式匹配

Synopsis

boolean ST_RelateMatch(text intersectionMatrix, text intersectionMatrixPattern);

描述

测试是否存在 量纲扩展的9交点模型 (De-9IM) 交集矩阵 值满足 交集MatrixPattern 。交集矩阵值可以通过以下方式计算 ST_Relate

有关更多信息,请参阅 Section 5.1, “确定空间关系”

由GEOS模块执行

可用性:2.0.0

示例

SELECT ST_RelateMatch('101202FFF', 'TTTTTTFFF') ;
-- result --
t

与相交矩阵值匹配的常见空间关系模式,用于相对于面的不同位置的线

SELECT pat.name AS relationship, pat.val AS pattern,
       mat.name AS position, mat.val AS matrix,
       ST_RelateMatch(mat.val, pat.val) AS match
    FROM (VALUES ( 'Equality', 'T1FF1FFF1' ),
                 ( 'Overlaps', 'T*T***T**' ),
                 ( 'Within',   'T*F**F***' ),
                 ( 'Disjoint', 'FF*FF****' )) AS pat(name,val)
    CROSS JOIN
        (VALUES  ('non-intersecting', 'FF1FF0212'),
                 ('overlapping',      '1010F0212'),
                 ('inside',           '1FF0FF212')) AS mat(name,val);

 relationship |  pattern  |     position     |  matrix   | match
--------------+-----------+------------------+-----------+-------
 Equality     | T1FF1FFF1 | non-intersecting | FF1FF0212 | f
 Equality     | T1FF1FFF1 | overlapping      | 1010F0212 | f
 Equality     | T1FF1FFF1 | inside           | 1FF0FF212 | f
 Overlaps     | T*T***T** | non-intersecting | FF1FF0212 | f
 Overlaps     | T*T***T** | overlapping      | 1010F0212 | t
 Overlaps     | T*T***T** | inside           | 1FF0FF212 | f
 Within       | T*F**F*** | non-intersecting | FF1FF0212 | f
 Within       | T*F**F*** | overlapping      | 1010F0212 | f
 Within       | T*F**F*** | inside           | 1FF0FF212 | t
 Disjoint     | FF*FF**** | non-intersecting | FF1FF0212 | t
 Disjoint     | FF*FF**** | overlapping      | 1010F0212 | f
 Disjoint     | FF*FF**** | inside           | 1FF0FF212 | f

Name

ST_Touches — 如果两个几何图形至少有一个共同点,但其内部不相交,则返回True。

Synopsis

boolean ST_Touches(geometry A, geometry B);

描述

退货 TRUE 如果A和B相交,但它们的内部不相交。等价地,A和B至少有一个共同点,并且公共点位于至少一个边界内。对于点/点输入,关系始终为 FALSE ,因为点没有边界。

用数学术语来说,这种关系是:

如果两个几何图形的DE-9IM交集矩阵与以下其中之一匹配,则此关系成立:

  • FT*

  • F**T*

  • F*T*

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 若要避免使用索引,请使用 _ST_Touches 取而代之的是。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.28

示例

这个 ST_Touches 谓词返回 TRUE 在下面的示例中。

POLYGON / POLYGON

POLYGON / POLYGON

POLYGON / LINESTRING

LINESTRING / LINESTRING

LINESTRING / LINESTRING

POLYGON / POINT

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
 st_touches
------------
 f
(1 row)

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry);
 st_touches
------------
 t
(1 row)

Name

ST_Within — 如果A的点都不在B的外部,并且A和B至少有一个内点相同,则返回TRUE。

Synopsis

boolean ST_Within(geometry A, geometry B);

描述

如果几何图形A完全位于几何图形B内,则返回TRUE。要使此函数有意义,源几何图形必须具有相同的坐标投影,且具有相同的SRID。可以肯定的是,如果ST_in(A,B)为真,ST_in(B,A)为真,则认为这两个几何空间相等。

此定义的一个微妙之处在于,几何体的边界不在该几何体内。这意味着位于面或线边界内的线和点 在几何体内。有关更多详细信息,请参阅 OGC封面的精妙之处,包含,内 。( ST_CoveredBy 谓词提供了更具包容性的关系)。

ST_WITHING是的反方向 ST_Contains 。所以, ST_WINDOWS(A,B)=ST_CONTAINS(B,A)

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. 要避免使用索引,请使用函数 _ST_Within

由GEOS模块执行

增强:2.3.0增强到PIP短路,几何体扩展到支持多点和少点。以前的版本仅支持多边形中的点。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

[Important]

请勿对无效的几何图形使用此函数。你会得到意想不到的结果。

注意:这是“允许的”版本,返回布尔值,而不是整数。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3-a.Relate(b,‘T*F**F*’)

This method implements the SQL/MM specification. SQL-MM 3:5.1.30

示例

--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
  ST_Within(smallc, bigc) As smallinbig,
  ST_Within(bigc,smallc) As biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
FROM
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
--Result
 smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
 t            | t          | f          | t          | t          | t
(1 row)
    

8.11.2. 距离关系

ST_3DDWithin — 如果两个3D几何在给定的3D距离内,则返回True
ST_3DDFullyWithin — 如果两个3D几何完全在给定的3D距离内,则返回True
ST_DFullyWithin — 如果两个几何完全在给定距离内,则返回True
ST_DWithin — 如果两个几何在给定距离内,则返回True
ST_PointInsideCircle — 测试点几何图形是否位于由圆心和半径定义的圆内。

Name

ST_3DDWithin — 如果两个3D几何在给定的3D距离内,则返回True

Synopsis

boolean ST_3DDWithin(geometry g1, geometry g2, double precision distance_of_srid);

描述

如果两个几何值之间的3D距离不大于距离,则返回True distance_of_srid 。距离以几何图形的空间参考系定义的单位指定。要使此函数有意义,源几何图形必须位于相同的坐标系中(具有相同的SRID)。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This method implements the SQL/MM specification. SQL-MM?

可用性:2.0.0

示例

-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line)
-- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final.
SELECT ST_3DDWithin(
      ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163),
      ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),
      126.8
    ) As within_dist_3d,
ST_DWithin(
      ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 4)'),2163),
      ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163),
      126.8
    ) As within_dist_2d;

 within_dist_3d | within_dist_2d
----------------+----------------
 f              | t

Name

ST_3DDFullyWithin — 如果两个3D几何完全在给定的3D距离内,则返回True

Synopsis

boolean ST_3DDFullyWithin(geometry g1, geometry g2, double precision distance);

描述

如果3D几何图形完全在彼此的指定距离内,则返回True。距离以几何图形的空间参考系定义的单位指定。要使此函数有意义,源几何图形必须具有相同的坐标投影,并且具有相同的SRID。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

可用性:2.0.0

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

-- This compares the difference between fully within and distance within as well
    -- as the distance fully within for the 2D footprint of the line/point vs. the 3d fully within
    SELECT ST_3DDFullyWithin(geom_a, geom_b, 10) as D3DFullyWithin10, ST_3DDWithin(geom_a, geom_b, 10) as D3DWithin10,
  ST_DFullyWithin(geom_a, geom_b, 20) as D2DFullyWithin20,
  ST_3DDFullyWithin(geom_a, geom_b, 20) as D3DFullyWithin20 from
    (select ST_GeomFromEWKT('POINT(1 1 2)') as geom_a,
    ST_GeomFromEWKT('LINESTRING(1 5 2, 2 7 20, 1 9 100, 14 12 3)') as geom_b) t1;
 d3dfullywithin10 | d3dwithin10 | d2dfullywithin20 | d3dfullywithin20
------------------+-------------+------------------+------------------
 f                | t           | t                | f 

Name

ST_DFullyWithin — 如果两个几何完全在给定距离内,则返回True

Synopsis

boolean ST_DFullyWithin(geometry g1, geometry g2, double precision distance);

描述

如果几何图形完全在彼此的指定距离内,则返回True。距离以几何图形的空间参考系定义的单位指定。要使此函数有意义,源几何图形必须具有相同的坐标投影,并且具有相同的SRID。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

可用性:1.5.0

示例

postgis=# SELECT ST_DFullyWithin(geom_a, geom_b, 10) as DFullyWithin10, ST_DWithin(geom_a, geom_b, 10) as DWithin10, ST_DFullyWithin(geom_a, geom_b, 20) as DFullyWithin20 from
    (select ST_GeomFromText('POINT(1 1)') as geom_a,ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') as geom_b) t1;

-----------------
 DFullyWithin10 | DWithin10 | DFullyWithin20 |
---------------+----------+---------------+
 f             | t        | t             |  

Name

ST_DWithin — 如果两个几何在给定距离内,则返回True

Synopsis

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid = true);

描述

如果几何在给定距离内,则返回True

几何体 :距离以几何图形的空间参考系定义的单位指定。要使此函数有意义,源几何图形必须位于相同的坐标系中(具有相同的SRID)。

地理学 :单位以米为单位,距离测量默认为 use_spheroid =真。用于更快的评估使用 use_spheroid =False以在球体上测量。

[Note]

使用 ST_3DDWithin 用于3D几何图形。

[Note]

此函数调用包括一个边界框比较,它利用几何图形上可用的任何索引。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

可用性:引入了1.5.0地理位置支持

增强:2.1.0提高了地理位置的速度。看见 让地理操作更快捷 有关详细信息,请参阅。

增强:2.1.0引入了对曲线几何图形的支持。

在1.3之前, ST_Expand 通常与以下词结合使用 & & 和ST_Distance来测试距离,在1.3.4之前的版本中,此函数使用该逻辑。从1.3.4开始,ST_DWiThin使用更快的短路距离函数。

示例

-- Find the nearest hospital to each school
-- that is within 3000 units of the school.
--  We do an ST_DWithin search to utilize indexes to limit our search list
--  that the non-indexable ST_Distance needs to process
-- If the units of the spatial reference is meters then units would be meters
SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.geom, h.hospital_name
  FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.geom, h.geom, 3000)
  ORDER BY s.gid, ST_Distance(s.geom, h.geom);

-- The schools with no close hospitals
-- Find all schools with no hospital within 3000 units
-- away from the school.  Units is in units of spatial ref (e.g. meters, feet, degrees)
SELECT s.gid, s.school_name
  FROM schools s
    LEFT JOIN hospitals h ON ST_DWithin(s.geom, h.geom, 3000)
  WHERE h.gid IS NULL;

-- Find broadcasting towers that receiver with limited range can receive.
-- Data is geometry in Spherical Mercator (SRID=3857), ranges are approximate.

-- Create geometry index that will check proximity limit of user to tower
CREATE INDEX ON broadcasting_towers using gist (geom);

-- Create geometry index that will check proximity limit of tower to user
CREATE INDEX ON broadcasting_towers using gist (ST_Expand(geom, sending_range));

-- Query towers that 4-kilometer receiver in Minsk Hackerspace can get
-- Note: two conditions, because shorter LEAST(b.sending_range, 4000) will not use index.
SELECT b.tower_id, b.geom
  FROM broadcasting_towers b
  WHERE ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', 4000)
    AND ST_DWithin(b.geom, 'SRID=3857;POINT(3072163.4 7159374.1)', b.sending_range);

        

Name

ST_PointInsideCircle — 测试点几何图形是否位于由圆心和半径定义的圆内。

Synopsis

boolean ST_PointInsideCircle(geometry a_point, float center_x, float center_y, float radius);

描述

如果几何是点并且位于圆心的圆内,则返回True center_x center_y 和半径 半径

[Warning]

不使用空间索引。使用 ST_DWithin 取而代之的是。

可用性:1.2

已更改:2.2.0在以前的版本中,这称为ST_Point_Inside_Circle

示例

SELECT ST_PointInsideCircle(ST_Point(1,2), 0.5, 2, 3);
 st_pointinsidecircle
------------------------
 t

另请参阅

ST_DWithin

8.12. 测量函数

Abstract

这些函数计算距离、面积和角度的测量值。还有一些函数可以计算由测量确定的几何值。

ST_Area — 返回多边形几何体的面积。
ST_Azimuth — 返回两点之间直线的北向方位角。
ST_Angle — 返回由3个或4个点或2条直线定义的两个向量之间的角度。
ST_ClosestPoint — 返回G1上最接近G2的二维点。这是从一个几何图形到另一个几何图形的最短直线的第一个点。
ST_3DClosestPoint — 返回G1上最接近G2的三维点。这是3D最短直线的第一个点。
ST_Distance — 返回两个几何图形或地理值之间的距离。
ST_3DDistance — 以投影单位返回两个几何图形之间的3D笛卡尔最小距离(基于空间参考)。
ST_DistanceSphere — 使用球形地球模型返回两个经度/纬度几何图形之间的最小距离(以米为单位)。
ST_DistanceSpheroid — 使用球体地球模型返回两个经度/纬度几何图形之间的最小距离。
ST_FrechetDistance — 返回两个几何图形之间的Fréchet距离。
ST_HausdorffDistance — 返回两个几何图形之间的Hausdorff距离。
ST_Length — 返回线性几何图形的二维长度。
ST_Length2D — 返回线性几何图形的二维长度。的别名 ST_Length
ST_3DLength — 返回线性几何图形的三维长度。
ST_LengthSpheroid — 返回椭球体上经度/纬度几何图形的二维或三维长度/周长。
ST_LongestLine — 返回两个几何图形之间的二维最长直线。
ST_3DLongestLine — 返回两个几何之间的3D最长线
ST_MaxDistance — 以投影单位返回两个几何图形之间的二维最大距离。
ST_3DMaxDistance — 以投影单位返回两个几何图形之间的3D笛卡尔最大距离(基于空间参考)。
ST_MinimumClearance — 返回几何体的最小间隙,这是几何体稳健性的度量。
ST_MinimumClearanceLine — 返回跨越几何图形的最小间隙的两点线串。
ST_Perimeter — 返回多边形几何图形或地理区域的边界长度。
ST_Perimeter2D — 返回多边形几何体的2D周长。的别名 ST_Perimeter
ST_3DPerimeter — 返回多边形几何体的3D周长。
ST_Project — 返回从起点按距离和方位角(方位角)投影的点。
ST_ShortestLine — 返回两个几何之间的2D最短线
ST_3DShortestLine — 返回两个几何之间的3D最短线

Name

ST_Area — 返回多边形几何体的面积。

Synopsis

float ST_Area(geometry g1);

float ST_Area(geography geog, boolean use_spheroid=true);

描述

返回多边形几何体的面积。对于几何图形类型,计算二维笛卡尔(平面)面积,单位由SRID指定。对于地理类型,默认情况下,面积是在单位为平方米的椭球体上确定的。要使用速度较快但精度较低的球形模型计算面积,请使用 ST_Area(Geog,False)

增强:2.0.0-引入了对2D多面体曲面的支持。

增强版:2.2.0-使用GeogicLib对椭球体进行测量,以提高精度和稳健性。需要项目 > =4.9.0以利用新功能。

更改:3.0.0-不再依赖SFCGAL。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:8.1.2、9.5.3

This function supports Polyhedral surfaces.

[Note]

对于多面体曲面,仅支持2D多面体曲面(不支持2.5D)。对于2.5D,可能会给出非零的答案,但仅适用于完全位于XY平面中的面。

示例

马萨诸塞州一块土地的面积以平方英尺为单位,乘以换算得到平方米。请注意,这是以平方英尺为单位的,因为EPSG:2249是马萨诸塞州平面英尺

select ST_Area(geom) sqft,
    ST_Area(geom) * 0.3048 ^ 2 sqm
from (
         select 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
                                 743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
     ) subquery;
┌─────────┬─────────────┐
│  sqft   │     sqm     │
├─────────┼─────────────┤
│ 928.625 │ 86.27208552 │
└─────────┴─────────────┘

返回面积平方英尺并转换为马萨诸塞州平面米(EPSG:26986)以获得平方米。注意,这是以平方英尺为单位的,因为2249是马萨诸塞州平面英尺,而变换面积是以平方米为单位的,因为EPSG:26986是马萨诸塞州的州平面米

select ST_Area(geom) sqft,
    ST_Area(ST_Transform(geom, 26986)) As sqm
from (
         select
             'SRID=2249;POLYGON((743238 2967416,743238 2967450,
             743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
     ) subquery;
┌─────────┬─────────────────┐
│  sqft   │       sqm       │
├─────────┼─────────────────┤
│ 928.625 │ 86.272430607008 │
└─────────┴─────────────────┘

使用地理数据类型返回面积平方英尺和平方米。请注意,我们将几何体转换为地理(在此之前,请确保您的几何体在WGS 84经纬度4326)。地理总是以米为单位。这只是为了进行演示比较。通常情况下,您的表将已经以地理数据类型存储。

select ST_Area(geog) / 0.3048 ^ 2 sqft_spheroid,
    ST_Area(geog, false) / 0.3048 ^ 2 sqft_sphere,
    ST_Area(geog) sqm_spheroid
from (
         select ST_Transform(
                    'SRID=2249;POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
                    4326
             ) :: geography geog
     ) as subquery;
┌──────────────────┬──────────────────┬──────────────────┐
│  sqft_spheroid   │   sqft_sphere    │   sqm_spheroid   │
├──────────────────┼──────────────────┼──────────────────┤
│ 928.684405784452 │ 927.049336105925 │ 86.2776044979692 │
└──────────────────┴──────────────────┴──────────────────┘

如果您的数据已经在地理位置上:

select ST_Area(geog) / 0.3048 ^ 2 sqft,
    ST_Area(the_geog) sqm
from somegeogtable;

Name

ST_Azimuth — 返回两点之间直线的北向方位角。

Synopsis

float ST_Azimuth(geometry origin, geometry target);

float ST_Azimuth(geography origin, geography target);

描述

返回目标点相对于原点的方位角(以弧度表示),如果两点重合,则返回NULL。方位角是从正Y轴(几何图形)或北子午线(地理位置)参考的正顺时针角度:北向=0;东北= π /4;东部= π /2;东南=3 π /4;南方= π ;西南5 π /4;West=3 π /2;西北=7 π /4.

对于地理类型,方位角解称为 测地线反问题

方位角是一个数学概念,定义为参考矢量和点之间的角度,角度单位为弧度。可以使用PostgreSQL函数将以弧度为单位的结果值转换为度 度()

方位角可以与 ST_Translate 沿垂直轴移动对象。请参阅 Upgis_linesShift() 中的函数 PostGIS维基 来实现这一点。

可用性:1.1.0

增强:引入了对地理位置的2.0.0支持。

增强:2.2.0使用Gegraph Lib对椭球体进行测量,以提高精度和稳健性。需要项目 > =4.9.0以利用新功能。

示例

几何方位角(以度为单位)

SELECT degrees(ST_Azimuth( ST_Point(25, 45),  ST_Point(75, 100))) AS degA_B,
       degrees(ST_Azimuth( ST_Point(75, 100), ST_Point(25, 45) )) AS degB_A;

      dega_b       |     degb_a
------------------+------------------
 42.2736890060937 | 222.273689006094

蓝色:原点(25,45);绿色:目标点(75,100);黄色:Y轴或北;红色:方位角。

蓝色:原点(75,100);绿色:目标点(25,45);黄色:Y轴或北;红色:方位角。


Name

ST_Angle — 返回由3个或4个点或2条直线定义的两个向量之间的角度。

Synopsis

float ST_Angle(geometry point1, geometry point2, geometry point3, geometry point4);

float ST_Angle(geometry line1, geometry line2);

描述

计算两个矢量之间的顺时针角度。

变体1: 计算点P1-P2-P3所包围的角度。如果提供第四个点,则计算角点P1-P2和P3-P4

变体2: 计算由输入线的起点和终点定义的两个矢量s1-e1和s2-e2之间的角度

结果是介于0和2之间的正角度 π 弧度。可以使用PostgreSQL函数将弧度结果转换为度 度()

请注意, ST_角度(P1、P2、P3)=ST_角度(P2、P1、P2、P3)

可用性:2.5.0

示例

三点之间的夹角

SELECT degrees( ST_Angle('POINT(0 0)', 'POINT(10 10)', 'POINT(20 0)') );

 degrees
---------
     270

由四个点定义的矢量之间的角度

SELECT degrees( ST_Angle('POINT (10 10)', 'POINT (0 0)', 'POINT(90 90)', 'POINT (100 80)') );

      degrees
-------------------
 269.9999999999999

由直线的起点和终点定义的矢量之间的角度

SELECT degrees( ST_Angle('LINESTRING(0 0, 0.3 0.7, 1 1)', 'LINESTRING(0 0, 0.2 0.5, 1 0)') );

      degrees
--------------
           45

另请参阅

ST_Azimuth


Name

ST_ClosestPoint — 返回G1上最接近G2的二维点。这是从一个几何图形到另一个几何图形的最短直线的第一个点。

Synopsis

geometry ST_ClosestPoint(geometry geom1, geometry geom2);

描述

返回上的二维点 地理位置1 最接近于 地貌2 。这是几何之间最短直线的第一个点(计算方式为 ST_ShortestLine )。

[Note]

如果您有3D几何,您可能更喜欢使用 ST_3DClosestPoint

可用性:1.5.0

示例

点和线串的最近点是点本身。直线串和点的最近点是直线上的点。

SELECT ST_AsText( ST_ClosestPoint(pt,line)) AS cp_pt_line,
       ST_AsText( ST_ClosestPoint(line,pt)) AS cp_line_pt
    FROM (SELECT 'POINT (160 40)'::geometry AS pt,
                 'LINESTRING (10 30, 50 50, 30 110, 70 90, 180 140, 130 190)'::geometry AS line ) AS t;

   cp_pt_line   |                cp_line_pt
----------------+------------------------------------------
 POINT(160 40)  | POINT(125.75342465753425 115.34246575342466)

多边形A上与多边形B最近的点

SELECT ST_AsText( ST_ClosestPoint(
                'POLYGON ((190 150, 20 10, 160 70, 190 150))',
                ST_Buffer('POINT(80 160)', 30)        )) As ptwkt;
------------------------------------------
 POINT(131.59149149528952 101.89887534906197)


Name

ST_3DClosestPoint — 返回G1上最接近G2的三维点。这是3D最短直线的第一个点。

Synopsis

geometry ST_3DClosestPoint(geometry g1, geometry g2);

描述

返回G1上最接近G2的三维点。这是3D最短直线的第一个点。3D最短直线的3D长度是3D距离。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

可用性:2.0.0

已更改:2.2.0-如果输入2个2D几何图形,则返回2D点(而不是假设缺少Z的行为为0)。在2D和3D的情况下,对于缺失的Z,不再假定Z为0。

示例

线串和点--三维和二维最近点

SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
                ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt
        FROM (SELECT 'POINT(100 100 30)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
                ) As foo;


 cp3d_line_pt                                                |               cp2d_line_pt
-----------------------------------------------------------+------------------------------------------
 POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(73.0769230769231 115.384615384615)
                                        

线串和多点--三维和二维最近点

SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
                ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_line_pt
        FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line
                ) As foo;


                       cp3d_line_pt                        | cp2d_line_pt
-----------------------------------------------------------+--------------
 POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(50 75)
                                        

三维和二维最近点的多线串和多边形

SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d,
    ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d
        FROM (SELECT  ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly,
                ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1),
                (1 10 2, 5 20 1))') As mline ) As foo;
                   cp3d                    |     cp2d
-------------------------------------------+--------------
 POINT(39.993580415989 54.1889925532825 5) | POINT(20 40)
             


Name

ST_Distance — 返回两个几何图形或地理值之间的距离。

Synopsis

float ST_Distance(geometry g1, geometry g2);

float ST_Distance(geography geog1, geography geog2, boolean use_spheroid=true);

描述

几何体 TYPE以投影单位(空间参考单位)返回两个几何图形之间的最小二维笛卡尔(平面)距离。

地理学 类型默认为返回两个地理位置之间的最小测地线距离(以米为单位),并根据SRID确定的椭球体进行计算。如果 use_spheroid 为False,则使用更快的球面计算。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:5.1.23

This method supports Circular Strings and Curves

可用性:1.5.0地理支持是在1.5中引入的。改进了平面的速度,以便更好地处理大型或多个顶点几何图形

增强:2.1.0提高了地理位置的速度。看见 让地理操作更快捷 有关详细信息,请参阅。

增强:2.1.0-引入了对曲线几何图形的支持。

增强版:2.2.0-使用GeogicLib对椭球体进行测量,以提高精度和稳健性。需要项目 > =4.9.0以利用新功能。

更改:3.0.0-不再依赖SFCGAL。

几何图形示例

几何图形示例-以平面度4326表示的单位是WGS 84经度,单位是度。

SELECT ST_Distance(
    'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
    'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry );
-----------------
0.00150567726382282

几何图形示例-单位为米(SRID:3857,与流行的Web地图上的像素成比例)。虽然它的值是OFF,但可以正确地比较附近的值,这使得它成为KNN或KMeans等算法的良好选择。

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 3857) );
-----------------
167.441410065196

几何图形示例-以米为单位(SRID:3857,如上所述,但已由cos(稍后)更正以考虑变形)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 3857),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 3857)
                ) * cosd(42.3521);
-----------------
123.742351254151

几何图形示例-单位为米(SRID:26986马萨诸塞州平面米)(马萨诸塞州最准确)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 26986),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 26986) );
-----------------
123.797937878454

几何图形示例-单位为米(SRID:2163美国国家地图集等面积)(最不精确)

SELECT ST_Distance(
    ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry, 2163),
    ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry, 2163) );
------------------
126.664256056812

地理例子

与几何体示例相同,但以米为单位-使用球体可以稍微加快计算速度,但不太准确。

SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
    'SRID=4326;POINT(-72.1235 42.3521)'::geography as gg1,
    'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geography as gg2
        ) As foo  ;

  spheroid_dist   |   sphere_dist
------------------+------------------
 123.802076746848 | 123.475736916397

Name

ST_3DDistance — 以投影单位返回两个几何图形之间的3D笛卡尔最小距离(基于空间参考)。

Synopsis

float ST_3DDistance(geometry g1, geometry g2);

描述

以投影单位(空间参考单位)返回两个几何图形之间的三维最小笛卡尔距离。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This method implements the SQL/MM specification. SQL-MM?

可用性:2.0.0

已更改:2.2.0-在2D和3D的情况下,对于缺失的Z,不再假定Z为0。

已更改:3.0.0-已删除SFCGAL版本

示例

-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line)
-- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final.
SELECT ST_3DDistance(
                        ST_Transform('SRID=4326;POINT(-72.1235 42.3521 4)'::geometry,2163),
                        ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'::geometry,2163)
                ) As dist_3d,
                ST_Distance(
                        ST_Transform('SRID=4326;POINT(-72.1235 42.3521)'::geometry,2163),
                        ST_Transform('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry,2163)
                ) As dist_2d;

     dist_3d      |     dist_2d
------------------+-----------------
 127.295059324629 | 126.66425605671
-- Multilinestring and polygon both 3d and 2d distance
-- Same example as 3D closest point example
SELECT ST_3DDistance(poly, mline) As dist3d,
    ST_Distance(poly, mline) As dist2d
        FROM (SELECT  'POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))'::geometry as poly,
               'MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1), (1 10 2, 5 20 1))'::geometry as mline) as foo;
      dist3d       | dist2d
-------------------+--------
 0.716635696066337 |      0

Name

ST_DistanceSphere — 使用球形地球模型返回两个经度/纬度几何图形之间的最小距离(以米为单位)。

Synopsis

float ST_DistanceSphere(geometry geomlonlatA, geometry geomlonlatB);

描述

返回两个经纬点之间的最小距离(以米为单位)。使用球形地球和从SRID定义的椭球体派生的半径。比 ST_DistanceSpheroid ,但不太准确。PostGIS 1.5之前的版本仅针对点实施。

可用性:1.5-引入了对除点之外的其他几何类型的支持。以前的版本仅适用于点。

已更改:2.2.0在以前的版本中,这过去称为ST_Distance_Sphere

示例

SELECT round(CAST(ST_DistanceSphere(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters,
round(CAST(ST_Distance(ST_Transform(ST_Centroid(geom),32611),
                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters,
round(CAST(ST_Distance(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)', 4326)) As numeric),5) As dist_degrees,
round(CAST(ST_Distance(ST_Transform(geom,32611),
                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As min_dist_line_point_meters
FROM
        (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As geom) as foo;
         dist_meters | dist_utm11_meters | dist_degrees | min_dist_line_point_meters
        -------------+-------------------+--------------+----------------------------
                70424.47 |          70438.00 |      0.72900 |                   65871.18

        

Name

ST_DistanceSpheroid — 使用球体地球模型返回两个经度/纬度几何图形之间的最小距离。

Synopsis

float ST_DistanceSpheroid(geometry geomlonlatA, geometry geomlonlatB, spheroid measurement_spheroid);

描述

返回给定特定椭球体的两个经度/纬度几何图形之间的最小距离(以米为单位)。有关椭球体的说明,请参阅 ST_LengthSpheroid

[Note]

此函数不查看几何体的SRID。它假定几何图形坐标基于提供的椭球体。

可用性:1.5-引入了对除点之外的其他几何类型的支持。以前的版本仅适用于点。

已更改:2.2.0在以前的版本中,这称为ST_DISTANCE_ESPOID

示例

SELECT round(CAST(
                ST_DistanceSpheroid(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326), 'SPHEROID["WGS 84",6378137,298.257223563]')
                        As numeric),2) As dist_meters_spheroid,
                round(CAST(ST_DistanceSphere(ST_Centroid(geom), ST_GeomFromText('POINT(-118 38)',4326)) As numeric),2) As dist_meters_sphere,
round(CAST(ST_Distance(ST_Transform(ST_Centroid(geom),32611),
                ST_Transform(ST_GeomFromText('POINT(-118 38)', 4326),32611)) As numeric),2) As dist_utm11_meters
FROM
        (SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As geom) as foo;
 dist_meters_spheroid | dist_meters_sphere | dist_utm11_meters
----------------------+--------------------+-------------------
                         70454.92 |           70424.47 |          70438.00

        

Name

ST_FrechetDistance — 返回两个几何图形之间的Fréchet距离。

Synopsis

float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);

描述

实现了计算两个几何形状的离散点的Fréchet距离的算法,基于 离散Fréchet距离的计算 。Fréchet距离是曲线之间的相似性度量,它考虑了曲线上点的位置和顺序。因此,它往往比Hausdorff距离更好。

如果指定了可选的densifyFrac,则此函数会在计算离散Fréchet距离之前执行线段加密。DensifyFrac参数设置用于加密每个线段的分数。每个分段将被分成多个等长子分段,其在总长度中的分段最接近给定分段。

单位是几何图形的空间参考系的单位。

[Note]

当前的实现只支持顶点作为离散位置。这可以扩展到允许使用任意密度的点。

[Note]

我们指定的密度越小,得到的Fréchet距离就越精确。但是,计算时间和内存使用量随子段数目的平方而增加。

由GEOS模块执行。

可用性:2.4.0-需要GEOS > =3.7.0

示例

postgres=# SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry);
 st_frechetdistance
--------------------
   70.7106781186548
(1 row)
                        
SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry, 0.5);
 st_frechetdistance
--------------------
                 50
(1 row)
                        

Name

ST_HausdorffDistance — 返回两个几何图形之间的Hausdorff距离。

Synopsis

float ST_HausdorffDistance(geometry g1, geometry g2);

float ST_HausdorffDistance(geometry g1, geometry g2, float densifyFrac);

描述

返回 Hausdorff距离 在两个几何图形之间。Hausdorff距离是对两个几何图形相似或不相似程度的度量。

该函数实际计算的是“离散Hausdorff距离”。这是在几何图形上的离散点计算的Hausdorff距离。这个 密纹 参数,以便在计算离散Hausdorff距离之前通过加密线段来提供更准确的答案。每个分段被分成多个等长子分段,其分段长度的分段最接近给定分段。

单位是几何图形的空间参考系的单位。

[Note]

该算法不等同于标准的Hausdorff距离。但是,它计算的近似值对于大部分有用的情况都是正确的。一个重要的例子是线串,它们彼此大致平行,长度大致相等。这是行匹配的有用度量。

可用性:1.5.0

示例

两条线之间的Hausdorff距离(红色)和距离(黄色)

SELECT ST_HausdorffDistance(geomA, geomB),
       ST_Distance(geomA, geomB)
    FROM (SELECT 'LINESTRING (20 70, 70 60, 110 70, 170 70)'::geometry AS geomA,
                 'LINESTRING (20 90, 130 90, 60 100, 190 100)'::geometry AS geomB) AS t;
 st_hausdorffdistance | st_distance
----------------------+-------------
    37.26206567625497 |          20

示例: 与密化的Hausdorff距离。

SELECT ST_HausdorffDistance(
            'LINESTRING (130 0, 0 0, 0 150)'::geometry,
            'LINESTRING (10 10, 10 150, 130 10)'::geometry,
            0.5);
 ----------------------
          70

示例: 对于每栋建筑,找到最能代表它的地块。首先,我们要求地块与建筑几何图形相交。 DISTINCT ON 我们保证每栋楼只列出一次。 排序依据..ST_Hausdorff距离 选择与建筑最相似的地块。

SELECT DISTINCT ON (buildings.gid) buildings.gid, parcels.parcel_id
   FROM buildings
       INNER JOIN parcels
       ON ST_Intersects(buildings.geom, parcels.geom)
   ORDER BY buildings.gid, ST_HausdorffDistance(buildings.geom, parcels.geom);

另请参阅

ST_FrechetDistance


Name

ST_Length — 返回线性几何图形的二维长度。

Synopsis

float ST_Length(geometry a_2dlinestring);

float ST_Length(geography geog, boolean use_spheroid=true);

描述

对于几何图形类型:如果几何图形是线串、多重线串、ST_Curve、ST_MultiCurve,则返回该几何图形的二维笛卡尔长度。对于面状几何图形,返回0;使用 ST_Perimeter 取而代之的是。长度单位由几何图形的空间参考系确定。

对于地理类型:使用反测地线计算执行计算。长度单位以米为单位。如果PostGIS是使用Proj版本4.8.0或更高版本编译的,则椭球体由SRID指定,否则由WGS84独占。如果 use_spheroid=false ,则计算基于球体而不是椭球体。

目前,对于几何体,这是ST_Length2D的别名,但这可能会更改以支持更高的维度。

[Warning]

已更改:2.0.0突破性更改--在以前的版本中,将此选项应用于地理类型的多维/多边形将为您提供多边形/多维/多维OLYGON的周长。在2.0.0中,将其更改为返回0以与几何体行为保持一致。如果需要面的周长,请使用ST_PERIMETER

[Note]

对于地理学,计算默认使用椭圆形模型。若要使用速度更快但精度较低的球面计算,请使用ST_LENGTH(gg,FALSE);

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3:7.1.2、9.3.4

可用性:1.5.0地理支持是在1.5中引入的。

This method is also provided by SFCGAL backend.

几何图形示例

返回以英尺为单位的线条长度。请注意,这是以英尺为单位的,因为EPSG:2249是马萨诸塞州平面英尺

SELECT ST_Length(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416)',2249));

st_length
---------
 122.630744000095


--Transforming WGS 84 LineString to Massachusetts state plane meters
SELECT ST_Length(
        ST_Transform(
                ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)'),
                26986
        )
);

st_length
---------
34309.4563576191
                        

地理例子

WGS 84地理线的回程长度

-- the default calculation uses a spheroid
SELECT ST_Length(the_geog) As length_spheroid,  ST_Length(the_geog,false) As length_sphere
FROM (SELECT ST_GeographyFromText(
'SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)') As the_geog)
 As foo;

 length_spheroid  |  length_sphere
------------------+------------------
 34310.5703627288 | 34346.2060960742
                        

Name

ST_Length2D — 返回线性几何图形的二维长度。的别名 ST_Length

Synopsis

float ST_Length2D(geometry a_2dlinestring);

描述

如果几何图形是线串或多线串,则返回该几何图形的二维长度。这是的别名 ST_Length

另请参阅

ST_Length, ST_3DLength


Name

ST_3DLength — 返回线性几何图形的三维长度。

Synopsis

float ST_3DLength(geometry a_3dlinestring);

描述

如果几何图形是线串或多重线串,则返回几何图形的三维或二维长度。对于2D行,它将仅返回2D长度(与ST_Length2D和ST_Length2D相同)

This function supports 3d and will not drop the z-index.

已更改:2.0.0在以前的版本中,这过去称为ST_Length3D

示例

以英尺为单位返回3D电缆的长度。请注意,这是以英尺为单位的,因为EPSG:2249是马萨诸塞州平面英尺

SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416 1,743238 2967450 1,743265 2967450 3,
743265.625 2967416 3,743238 2967416 3)',2249));
ST_3DLength
-----------
122.704716741457
                

另请参阅

ST_Length, ST_Length2D


Name

ST_LengthSpheroid — 返回椭球体上经度/纬度几何图形的二维或三维长度/周长。

Synopsis

float ST_LengthSpheroid(geometry a_geometry, spheroid a_spheroid);

描述

计算椭球体上几何图形的长度或周长。如果几何图形的坐标位于经度/纬度,并且需要长度而不需要重新投影,则此选项非常有用。椭球体由文本值指定,如下所示:

椭球体[ < NAME > , < 半长轴 > , < 反展平 > ]

例如:

SPHEROID["GRS_1980",6378137,298.257222101]

可用性:1.2.2

已更改:2.2.0在以前的版本中,该名称称为ST_LENGTH_ESPOIDID,别名为ST_3DLength_ESPOIDID

This function supports 3d and will not drop the z-index.

示例

SELECT ST_LengthSpheroid( geometry_column,
                          'SPHEROID["GRS_1980",6378137,298.257222101]' )
                          FROM geometry_table;

SELECT ST_LengthSpheroid( geom, sph_m ) As tot_len,
ST_LengthSpheroid(ST_GeometryN(geom,1), sph_m) As len_line1,
ST_LengthSpheroid(ST_GeometryN(geom,2), sph_m) As len_line2
                          FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5),
        (-71.05957 42.3589 , -71.061 43))') As geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m)  as foo;
        tot_len      |    len_line1     |    len_line2
------------------+------------------+------------------
 85204.5207562955 | 13986.8725229309 | 71217.6482333646

 --3D
SELECT ST_LengthSpheroid( geom, sph_m ) As tot_len,
ST_LengthSpheroid(ST_GeometryN(geom,1), sph_m) As len_line1,
ST_LengthSpheroid(ST_GeometryN(geom,2), sph_m) As len_line2
                          FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30),
        (-71.05957 42.3589 75, -71.061 43 90))') As geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m)  as foo;

         tot_len      |    len_line1    |    len_line2
------------------+-----------------+------------------
 85204.5259107402 | 13986.876097711 | 71217.6498130292

另请参阅

ST_GeometryN, ST_Length


Name

ST_LongestLine — 返回两个几何图形之间的二维最长直线。

Synopsis

geometry ST_LongestLine(geometry g1, geometry g2);

描述

返回两个几何图形的点之间的二维最长直线。返回的行开始于 G1 并在以下日期结束 G2

最长的线始终出现在两个顶点之间。如果找到多行,则该函数返回第一个最长的行。线的长度等于 ST_MaxDistance

如果G1和G2是相同的几何体,则返回几何体中距离最远的两个顶点之间的线。这是由以下公式计算的圆的直径 ST_MinimumBoundingCircle

可用性:1.5.0

示例

点和线之间的最长直线

SELECT ST_AsText( ST_LongestLine(
        'POINT (160 40)',
        'LINESTRING (10 30, 50 50, 30 110, 70 90, 180 140, 130 190)' )
        ) AS lline;
-----------------
LINESTRING(160 40,130 190)

两个多边形之间的最长直线

SELECT ST_AsText( ST_LongestLine(
        'POLYGON ((190 150, 20 10, 160 70, 190 150))',
        ST_Buffer('POINT(80 160)', 30)
            ) ) AS llinewkt;
-----------------
LINESTRING(20 10,105.3073372946034 186.95518130045156)

横跨单个几何体的最长线。这条线的长度等于最大距离。这条线是最小边界圆的直径。

SELECT ST_AsText( ST_LongestLine( geom, geom)) AS llinewkt,
                  ST_MaxDistance( geom, geom) AS max_dist,
                  ST_Length( ST_LongestLine(geom, geom)) AS lenll
FROM (SELECT 'POLYGON ((40 180, 110 160, 180 180, 180 120, 140 90, 160 40, 80 10, 70 40, 20 50, 40 180),
              (60 140, 99 77.5, 90 140, 60 140))'::geometry AS geom) AS t;

         llinewkt          |      max_dist      |       lenll
---------------------------+--------------------+--------------------
 LINESTRING(20 50,180 180) | 206.15528128088303 | 206.15528128088303


Name

ST_3DLongestLine — 返回两个几何之间的3D最长线

Synopsis

geometry ST_3DLongestLine(geometry g1, geometry g2);

描述

返回两个几何图形之间的三维最长直线。如果超过一行,该函数将返回第一行。返回的行从G1开始,以G2结束。线的3D长度等于返回的距离 ST_3DMaxDistance

可用性:2.0.0

已更改:2.2.0-如果输入2个2D几何图形,则返回2D点(而不是假设缺少Z的行为为0)。在2D和3D的情况下,对于缺失的Z,不再假定Z为0。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

线串和点--3D和2D最长的线

SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt
        FROM (SELECT 'POINT(100 100 30)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
                ) As foo;


           lol3d_line_pt           |       lol2d_line_pt
-----------------------------------+----------------------------
 LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100)
                                        

线串和多点--3D和2D最长线

SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt
        FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line
                ) As foo;


          lol3d_line_pt          |      lol2d_line_pt
---------------------------------+--------------------------
 LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74)
                                        

三维和二维最长线的多重线串和面

SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d,
    ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d
        FROM (SELECT  ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly,
                ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1),
                (1 10 2, 5 20 1))') As mline ) As foo;
            lol3d             |          lol2d
------------------------------+--------------------------
 LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10)
             


Name

ST_MaxDistance — 以投影单位返回两个几何图形之间的二维最大距离。

Synopsis

float ST_MaxDistance(geometry g1, geometry g2);

描述

返回两个几何图形之间的二维最大距离(以投影单位表示)。最大距离始终出现在两个顶点之间。这是返回的行的长度 ST_LongestLine

如果G1和G2是相同的几何体,则返回该几何体中距离最远的两个顶点之间的距离。

可用性:1.5.0

示例

点和线之间的最大距离。

SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
-----------------
 2

SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2, 2 2 )'::geometry);
------------------
 2.82842712474619

单个几何体的顶点之间的最大距离。

SELECT ST_MaxDistance('POLYGON ((10 10, 10 0, 0 0, 10 10))'::geometry,
                      'POLYGON ((10 10, 10 0, 0 0, 10 10))'::geometry);
------------------
 14.142135623730951

Name

ST_3DMaxDistance — 以投影单位返回两个几何图形之间的3D笛卡尔最大距离(基于空间参考)。

Synopsis

float ST_3DMaxDistance(geometry g1, geometry g2);

描述

以投影单位(空间参考单位)返回两个几何图形之间的三维最大笛卡尔距离。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

可用性:2.0.0

已更改:2.2.0-在2D和3D的情况下,对于缺失的Z,不再假定Z为0。

示例

-- Geometry example - units in meters (SRID: 2163 US National Atlas Equal area) (3D point and line compared 2D point and line)
-- Note: currently no vertical datum support so Z is not transformed and assumed to be same units as final.
SELECT ST_3DMaxDistance(
                        ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163),
                        ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)
                ) As dist_3d,
                ST_MaxDistance(
                        ST_Transform(ST_GeomFromEWKT('SRID=4326;POINT(-72.1235 42.3521 10000)'),2163),
                        ST_Transform(ST_GeomFromEWKT('SRID=4326;LINESTRING(-72.1260 42.45 15, -72.123 42.1546 20)'),2163)
                ) As dist_2d;

     dist_3d      |     dist_2d
------------------+------------------
 24383.7467488441 | 22247.8472107251

Name

ST_MinimumClearance — 返回几何体的最小间隙,这是几何体稳健性的度量。

Synopsis

float ST_MinimumClearance(geometry g);

描述

几何可能满足根据的有效性标准 ST_IsValid (多边形)或 ST_IsSimple (线条),但如果其中一个顶点移动了一小段距离,则无效。这可能是由于在转换为文本格式(如WKT、KML、GML、GeoJSON)或不使用双精度浮点坐标的二进制格式(如MapInfo TAB)时精度降低所致。

最小间隙是几何图形对坐标精度变化的稳健性的定量测量。这是可以在不创建无效几何体的情况下移动几何体顶点的最大距离。最小间隙的值越大,表示健壮性越强。

如果几何图形的最小间隙为 E ,然后:

  • 几何图形中没有两个不同的折点比距离更近 E

  • 没有比这更近的顶点 E 到它不是其端点的线段。

如果几何(例如,单点或点相同的多点)不存在最小间隙,则返回值为 无穷大

为了避免因精度损失而导致的有效性问题, ST_ReducePrecision 可以降低坐标精度,同时确保多边形几何体保持有效。

可用性:2.3.0

示例

SELECT ST_MinimumClearance('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))');
 st_minimumclearance
---------------------
             0.00032
     

Name

ST_MinimumClearanceLine — 返回跨越几何图形的最小间隙的两点线串。

Synopsis

Geometry ST_MinimumClearanceLine(geometry g);

描述

返回跨越几何图形的最小间隙的两点线串。如果几何图形没有最小间隙, 线路设置为空 返回。

由GEOS模块执行。

可用性:2.3.0-需要GEOS > =3.6.0

示例

SELECT ST_AsText(ST_MinimumClearanceLine('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))'));
-------------------------------
LINESTRING(0.5 0.00032,0.5 0)
                  

Name

ST_Perimeter — 返回多边形几何图形或地理区域的边界长度。

Synopsis

float ST_Perimeter(geometry g1);

float ST_Perimeter(geography geog, boolean use_spheroid=true);

描述

如果几何体/地理是ST_Surface、ST_MultiSurface(Polygon、MultiPolygon),则返回该几何体/地理的2D周长。对于非区域几何图形,返回0。对于线性几何图形,请使用 ST_Length 。对于几何图形类型,周长测量单位由几何图形的空间参考系指定。

对于地理类型,使用反测地线问题执行计算,其中周长单位以米为单位。如果PostGIS是使用Proj版本4.8.0或更高版本编译的,则椭球体由SRID指定,否则由WGS84独占。如果 use_spheroid=false ,则计算将近似为球体而不是椭球体。

目前,这是ST_Perimeter2D的别名,但可能会更改以支持更高的维度。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.5.1

This method implements the SQL/MM specification. SQL-MM 3:8.1.3、9.5.4

可用性2.0.0:引入了地理支持

示例:几何体

对于多边形和多重多边形,以英尺为单位返回周长。请注意,这是以英尺为单位的,因为EPSG:2249是马萨诸塞州平面英尺

SELECT ST_Perimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,
743265.625 2967416,743238 2967416))', 2249));
st_perimeter
---------
 122.630744000095
(1 row)

SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((763104.471273676 2949418.44119003,
763104.477769673 2949418.42538203,
763104.189609677 2949418.22343004,763104.471273676 2949418.44119003)),
((763104.471273676 2949418.44119003,763095.804579742 2949436.33850239,
763086.132105649 2949451.46730207,763078.452329651 2949462.11549407,
763075.354136904 2949466.17407812,763064.362142565 2949477.64291974,
763059.953961626 2949481.28983009,762994.637609571 2949532.04103014,
762990.568508415 2949535.06640477,762986.710889563 2949539.61421415,
763117.237897679 2949709.50493431,763235.236617789 2949617.95619822,
763287.718121842 2949562.20592617,763111.553321674 2949423.91664605,
763104.471273676 2949418.44119003)))', 2249));
st_perimeter
---------
 845.227713366825
(1 row)
                        

示例:地理

对于多边形和多重多边形,返回以米和英尺为单位的周长。请注意,这是地理信息(WGS 84经度)

SELECT  ST_Perimeter(geog) As per_meters, ST_Perimeter(geog)/0.3048 As per_ft
FROM ST_GeogFromText('POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.1776848522251 42.3902896512902))') As geog;

   per_meters    |      per_ft
-----------------+------------------
37.3790462565251 | 122.634666195949


-- MultiPolygon example --
SELECT  ST_Perimeter(geog) As per_meters, ST_Perimeter(geog,false) As per_sphere_meters,  ST_Perimeter(geog)/0.3048 As per_ft
FROM ST_GeogFromText('MULTIPOLYGON(((-71.1044543107478 42.340674480411,-71.1044542869917 42.3406744369506,
-71.1044553562977 42.340673886454,-71.1044543107478 42.340674480411)),
((-71.1044543107478 42.340674480411,-71.1044860600303 42.3407237015564,-71.1045215770124 42.3407653385914,
-71.1045498002983 42.3407946553165,-71.1045611902745 42.3408058316308,-71.1046016507427 42.340837442371,
-71.104617893173 42.3408475056957,-71.1048586153981 42.3409875993595,-71.1048736143677 42.3409959528211,
-71.1048878050242 42.3410084812078,-71.1044020965803 42.3414730072048,
-71.1039672113619 42.3412202916693,-71.1037740497748 42.3410666421308,
-71.1044280218456 42.3406894151355,-71.1044543107478 42.340674480411)))') As geog;

    per_meters    | per_sphere_meters |      per_ft
------------------+-------------------+------------------
 257.634283683311 |  257.412311446337 | 845.256836231335
                        

Name

ST_Perimeter2D — 返回多边形几何体的2D周长。的别名 ST_Perimeter

Synopsis

float ST_Perimeter2D(geometry geomA);

描述

返回多边形几何体的二维周长。

[Note]

这当前是ST_PERIMETER的别名。在将来的版本中,ST_PERIMETER可能会返回几何体的最高尺寸周长。这一点仍在考虑之中

另请参阅

ST_Perimeter


Name

ST_3DPerimeter — 返回多边形几何体的3D周长。

Synopsis

float ST_3DPerimeter(geometry geomA);

描述

返回几何体的三维周长(如果它是一个多边形或多个多边形)。如果几何图形是二维的,则返回二维周长。

This function supports 3d and will not drop the z-index.

已更改:2.0.0在以前的版本中,这通常称为ST_Perimeter3D

示例

马萨诸塞州平面英尺空中略高的多边形周长

SELECT ST_3DPerimeter(geom), ST_Perimeter2d(geom), ST_Perimeter(geom) FROM
                        (SELECT ST_GeomFromEWKT('SRID=2249;POLYGON((743238 2967416 2,743238 2967450 1,
743265.625 2967416 1,743238 2967416 2))') As geom) As foo;

  ST_3DPerimeter  |  st_perimeter2d  |   st_perimeter
------------------+------------------+------------------
 105.465793597674 | 105.432997272188 | 105.432997272188


Name

ST_Project — 返回从起点按距离和方位角(方位角)投影的点。

Synopsis

geography ST_Project(geography g1, float distance, float azimuth);

描述

使用给定的距离和方位角(方位角)返回从起点沿测地线投影的点。这就是所谓的直接测地问题。

距离是以米为单位的。支持负值。

方位角(也称为航向或方位角)以弧度表示。它是从正北(方位角为零)顺时针测量的。东方位角 π /2(90度);南方为方位角 π (180度);西方位角为3 π /2(270度)。负方位角值和大于2的值 π (360度)。

可用性:2.0.0

增强:2.4.0允许负距离和非归一化方位角。

示例:投影点位于100,000米处,方位角为45度

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
--------------------------------------------
 POINT(0.635231029125537 0.639472334729198)

Name

ST_ShortestLine — 返回两个几何之间的2D最短线

Synopsis

geometry ST_ShortestLine(geometry geom1, geometry geom2);

描述

返回两个几何图形之间的二维最短直线。返回的行开始于 地理位置1 并以 地貌2 。如果 地理位置1 地貌2 相交结果是一条起点和终点在交点处的直线。这条线的长度与 ST_Distance G1和G2的退货。

可用性:1.5.0

示例

点和线串之间的最短直线

SELECT ST_AsText(  ST_ShortestLine(
        'POINT (160 40)',
        'LINESTRING (10 30, 50 50, 30 110, 70 90, 180 140, 130 190)')
        ) As sline;
---------------------------------------------------------
 LINESTRING(160 40,125.75342465753425 115.34246575342466)

多边形之间的最短直线

SELECT ST_AsText( ST_ShortestLine(
         'POLYGON ((190 150, 20 10, 160 70, 190 150))',
         ST_Buffer('POINT(80 160)', 30)
              ) ) AS llinewkt;
-----------------
LINESTRING(131.59149149528952 101.89887534906197,101.21320343559644 138.78679656440357)


Name

ST_3DShortestLine — 返回两个几何之间的3D最短线

Synopsis

geometry ST_3DShortestLine(geometry g1, geometry g2);

描述

返回两个几何图形之间的三维最短直线。如果找到多行,则该函数只返回第一个最短的行。如果G1和G2仅在一点相交,该函数将返回一条起点和终点都在该交点的直线。如果G1和G2与多个点相交,该函数将返回一条起点和终点在同一点的直线,但它可以是任何交点。返回的行将始终以G1开始,以G2结束。此函数返回的线的3D长度将始终与 ST_3DDistance G1和G2的退货。

可用性:2.0.0

已更改:2.2.0-如果输入2个2D几何图形,则返回2D点(而不是假设缺少Z的行为为0)。在2D和3D的情况下,对于缺失的Z,不再假定Z为0。

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

示例

线串和点--三维和二维最短直线

SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt
        FROM (SELECT 'POINT(100 100 30)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
                ) As foo;


 shl3d_line_pt                                                                 |               shl2d_line_pt
----------------------------------------------------------------------------+------------------------------------------------------
 LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30)  | LINESTRING(73.0769230769231 115.384615384615,100 100)
                                        

线串和多点--三维和二维最短直线

SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt
        FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line
                ) As foo;


                       shl3d_line_pt                                       | shl2d_line_pt
---------------------------------------------------------------------------+------------------------
 LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30) | LINESTRING(50 75,50 74)
                                        

三维和二维最短直线的多重线串和面

SELECT ST_AsEWKT(ST_3DShortestLine(poly, mline)) As shl3d,
    ST_AsEWKT(ST_ShortestLine(poly, mline)) As shl2d
        FROM (SELECT  ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly,
                ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1),
                (1 10 2, 5 20 1))') As mline ) As foo;
                   shl3d                                                                           |     shl2d
---------------------------------------------------------------------------------------------------+------------------------
 LINESTRING(39.993580415989 54.1889925532825 5,40.4078575708294 53.6052383805529 5.03423778139177) | LINESTRING(20 40,20 40)
             

8.13. 覆盖功能

Abstract

这些函数计算由两个几何图形叠加产生的结果。这些运算也称为点集理论布尔运算。并提供了一些相关的功能。

ST_ClipByBox2D — 计算落在矩形内的几何图形部分。
ST_Difference — 计算表示几何图形A中不与几何图形B相交的部分的几何图形。
ST_Intersection — 计算表示几何图形A和B的共享部分的几何图形。
ST_MemUnion — 以内存效率较高但速度较慢的方式合并几何图形的聚合函数
ST_Node — 节点是线条的集合.
ST_Split — 返回通过将一个几何图形拆分为另一个几何图形而创建的几何图形的集合。
ST_Subdivide — 计算几何图形的直线细分。
ST_SymDifference — 计算表示几何图形A和B不相交部分的几何图形。
ST_UnaryUnion — 计算单个几何图形的组件的并集。
ST_Union — 计算表示输入几何图形的点集并集的几何图形。

Name

ST_ClipByBox2D — 计算落在矩形内的几何图形部分。

Synopsis

geometry ST_ClipByBox2D(geometry geom, box2d box);

描述

以快速、宽容但可能无效的方式按2D长方体剪裁几何图形。拓扑上无效的输入几何图形不会导致抛出异常。不能保证输出几何体有效(特别是可能会引入多边形的自交)。

由GEOS模块执行。

可用性:2.2.0

示例

-- Rely on implicit cast from geometry to box2d for the second parameter
SELECT ST_ClipByBox2D(geom, ST_MakeEnvelope(0,0,10,10)) FROM mytab;
      

Name

ST_Difference — 计算表示几何图形A中不与几何图形B相交的部分的几何图形。

Synopsis

geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);

描述

返回表示几何A中不与几何B相交的部分的几何。这等效于 A-ST_交集(A,B) 。如果A完全包含在B中,则返回适当类型的空原子几何。

[Note]

这是输入顺序很重要的唯一覆盖函数。ST_Difference(A,B)总是返回A的一部分。

如果可选的 网格大小 参数,则将输入捕捉到给定大小的栅格,并在该栅格上计算结果顶点。(需要GEOS-3.9.0或更高版本)

由GEOS模块执行

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.20

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

示例

输入的线串

两条线串的区别

二维线串的区别。

SELECT ST_AsText(
    ST_Difference(
            'LINESTRING(50 100, 50 200)'::geometry,
            'LINESTRING(50 50, 50 150)'::geometry
        )
    );

st_astext
---------
LINESTRING(50 150,50 200)

三维点的差异。

SELECT ST_AsEWKT( ST_Difference(
                   'MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)' :: geometry,
                   'POINT(-118.614 38.281 5)' :: geometry
                  ) );

st_asewkt
---------
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)

Name

ST_Intersection — 计算表示几何图形A和B的共享部分的几何图形。

Synopsis

geometry ST_Intersection( geometry geomA , geometry geomB , float8 gridSize = -1 );

geography ST_Intersection( geography geogA , geography geogB );

描述

返回表示两个几何图形的点集交集的几何图形。换句话说,几何图形A和几何图形B在这两个几何图形之间共享的部分。

如果几何图形没有公共点(即不相交),则返回适当类型的空原子几何图形。

如果可选的 网格大小 参数,则将输入捕捉到给定大小的栅格,并在该栅格上计算结果顶点。(需要GEOS-3.9.0或更高版本)

ST_交叉口与 ST_Intersects 对于剪裁几何图形非常有用,例如在边界框、缓冲区或区域查询中,其中您只需要几何图形在感兴趣的国家或区域内的部分。

[Note]

地理:对于地理来说,这实际上是对几何实现的简单包装。它首先确定适合两个地理对象的边界框的最佳SRID(如果地理对象在半个区域内UTM,但不是相同的UTM将拾取其中之一)(倾向于UTM或Lambert方位等面积(LAEA)北/南极,在最坏的情况下退回到墨卡托),然后在最佳匹配的平面空间参考中相交,并重新转换回WGS84地理。

[Warning]

此函数将删除M坐标值(如果存在)。

[Warning]

如果使用3D几何,则可能需要使用基于SFGCAL ST_3DIntersection 它为3D几何图形进行了适当的3D相交。尽管此函数适用于Z坐标,但它会对Z坐标进行平均。

由GEOS模块执行

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

已更改:3.0.0不依赖于SFCGAL。

可用性:1.5引入了对地理数据类型的支持。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.18

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

示例

SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry));
 st_astext
---------------
GEOMETRYCOLLECTION EMPTY

SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry));
 st_astext
---------------
POINT(0 0)

按国家/地区剪裁所有线路(路线)。在这里,我们假设国家地理是多边形或多重几何。注意:我们只保留产生LINESTRING或MULTILINESTRING的交叉点,因为我们不关心只共享一个点的轨迹。需要转储来将几何图形集合扩展为单个多个*零件。下面的代码非常通用,只需更改WHERE子句即可适用于POLY等。

select clipped.gid, clipped.f_name, clipped_geom
from (
         select trails.gid, trails.f_name,
             (ST_Dump(ST_Intersection(country.geom, trails.geom))).geom clipped_geom
         from country
              inner join trails on ST_Intersects(country.geom, trails.geom)
     ) as clipped
where ST_Dimension(clipped.clipped_geom) = 1;

对于多边形,例如多边形地标,您还可以使用有时速度更快的技巧,即将除多边形以外的任何内容缓冲到0.0会导致空的几何体集合。(因此,包含由0.0缓冲的多边形、直线和点的几何体集合将仅保留多边形并融合集合外壳。)

select poly.gid,
    ST_Multi(
        ST_Buffer(
            ST_Intersection(country.geom, poly.geom),
            0.0
        )
    ) clipped_geom
from country
     inner join poly on ST_Intersects(country.geom, poly.geom)
where not ST_IsEmpty(ST_Buffer(ST_Intersection(country.geom, poly.geom), 0.0));

示例:2.5Dish

请注意,这不是真正的交叉点,与使用 ST_3DIntersection

select ST_AsText(ST_Intersection(linestring, polygon)) As wkt
from  ST_GeomFromText('LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)') AS linestring
 CROSS JOIN ST_GeomFromText('POLYGON((0 0 8, 0 1 8, 1 1 8, 1 0 8, 0 0 8))') AS polygon;

               st_astext
---------------------------------------
 LINESTRING Z (1 1 8,0.5 0.5 8,0 0 10)
        

Name

ST_MemUnion — 以内存效率较高但速度较慢的方式合并几何图形的聚合函数

Synopsis

geometry ST_MemUnion(geometry set geomfield);

描述

一种聚合函数,用于合并输入几何图形,合并它们以生成没有重叠的结果几何图形。输出可以是单个几何图形、多几何图形或几何图形集合。

[Note]

产生的结果与 ST_Union ,但使用更少的内存和更多的处理器时间。这个聚合函数的工作方式是递增地合并几何图形,这与ST_UNION聚合相反,ST_UNION聚合首先累加一个数组,然后使用快速算法合并内容。

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

示例

SELECT id,
       ST_MemUnion(geom) as singlegeom
FROM sometable f
GROUP BY id;

另请参阅

ST_Union


Name

ST_Node — 节点是线条的集合.

Synopsis

geometry ST_Node(geometry geom);

描述

返回表示线串集合的完全节点版本的(多)线串。节点保留所有输入节点,并引入尽可能少的新节点。生成的线条将被融合(删除重复的线)。

这是创建适合用作输入的全结点线条的好方法 ST_Polygonize

This function supports 3d and will not drop the z-index.

由GEOS模块执行。

可用性:2.0.0

已更改:2.4.0此函数在内部使用GEOSNode,而不是GEOSUnaryUnion。这可能会导致生成的线串具有与PostGIS不同的顺序和方向 < 2.4.

示例

对自相交的三维线串进行节点

SELECT ST_AsText(
        ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::geometry)
    ) As  output;
output
-----------
MULTILINESTRING Z ((0 0 0,5 5 4.5),(5 5 4.5,10 10 10,0 10 5,5 5 4.5),(5 5 4.5,10 0 3))
        

连接共享公共线条的两条线串。请注意,结果线条将被融合。

SELECT ST_AsText(
        ST_Node('MULTILINESTRING ((2 5, 2 1, 7 1), (6 1, 4 1, 2 3, 2 5))'::geometry)
    ) As  output;
output
-----------
MULTILINESTRING((2 5,2 3),(2 3,2 1,4 1),(4 1,2 3),(4 1,6 1),(6 1,7 1))
        

另请参阅

ST_UnaryUnion


Name

ST_Split — 返回通过将一个几何图形拆分为另一个几何图形而创建的几何图形的集合。

Synopsis

geometry ST_Split(geometry input, geometry blade);

描述

该函数支持按(多)点、(多)线串或(多)多边形边界拆分线串,或按线串拆分(多)多边形。结果几何图形始终是一个集合。

此函数在某种意义上与 ST_Union 。将ST_UNION应用于返回的集合理论上应该会生成原始几何图形(尽管由于数字舍入,情况可能并非如此)。

可用性:2.0.0需要GEOS

增强:2.2.0引入了对由多线、多点或(多)多边形边界拆分直线的支持。

增强:2.5.0引入了对通过多线分割多边形的支持。

[Note]

为了提高ST_Split的健壮性,可以方便地 ST_Snap 将输入的刀片提前使用极低的公差。否则,内部使用的坐标格网可能会导致容差问题,即输入和刀片的坐标不会彼此落在一起,并且输入未被正确分割(请参见 #2192 )。

[Note]

当(多个)多边形作为刀片传递时,其线性组件(边界)用于切割输入。

示例

按线切割的多边形

拆分前

拆分后

-- this creates a geometry collection consisting of the 2 halves of the polygon
-- this is similar to the example we demonstrated in ST_BuildArea
SELECT ST_Split(circle, line)
FROM (SELECT
    ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) As line,
    ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;

-- result --
 GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..)))

-- To convert to individual polygons, you can use ST_Dump or ST_GeometryN
SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt
FROM (SELECT
    ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) As line,
    ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;

-- result --
wkt
---------------
POLYGON((150 90,149.039264020162 80.2454838991936,..))
POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 ..))
            

按点剪切的多线串

拆分前

拆分后

SELECT ST_AsText(ST_Split(mline, pt)) As wktcut
        FROM (SELECT
    ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))') As mline,
    ST_Point(30,30) As pt) As foo;

wktcut
------
GEOMETRYCOLLECTION(
    LINESTRING(10 10,30 30),
    LINESTRING(30 30,190 190),
    LINESTRING(15 15,30 30),
    LINESTRING(30 30,100 90)
)
            

Name

ST_Subdivide — 计算几何图形的直线细分。

Synopsis

setof geometry ST_Subdivide(geometry geom, integer max_vertices=256, float8 gridSize = -1);

描述

返回一组作为分割结果的几何图形 几何图形 使用直线划分为多个部分,每个部分包含不超过 max_vertices

max_vertices 必须为5或更大,因为需要5个点来表示封闭的方框。 网格大小 可以指定在固定精度空间中进行剪裁工作(需要GEOS-3.9.0+)。

对于索引的细分数据集,多边形中点和其他空间操作通常更快。由于部件的边界框通常比原始几何BBox覆盖更小的区域,因此索引查询产生的“命中”案例较少。“命中”情况更快,因为索引重新检查执行的空间操作处理的点数更少。

[Note]

这是一个 集合返回函数 (SRF),它返回一组包含单个几何值的行。可以在选择列表或FROM子句中使用它来生成一个结果集,其中每个结果几何图形都有一条记录。

由GEOS模块执行。

可用性:2.2.0

增强:2.5.0重新使用多边形分割上的现有点,顶点数从8降低到5。

增强:3.1.0接受GRIDSIZE参数,需要GEOS > =3.9.0才能使用此新功能。

示例

示例: 将一个多边形细分为不超过10个顶点的部分,并为每个部分指定唯一的ID。

细分到最多10个顶点

SELECT row_number() OVER() As rn, ST_AsText(geom) As wkt
    FROM (SELECT ST_SubDivide(
        'POLYGON((132 10,119 23,85 35,68 29,66 28,49 42,32 56,22 64,32 110,40 119,36 150,
        57 158,75 171,92 182,114 184,132 186,146 178,176 184,179 162,184 141,190 122,
        190 100,185 79,186 56,186 52,178 34,168 18,147 13,132 10))'::geometry,10))  AS f(geom);
rn │                                                      wkt
────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  1 │ POLYGON((119 23,85 35,68 29,66 28,32 56,22 64,29.8260869565217 100,119 100,119 23))
  2 │ POLYGON((132 10,119 23,119 56,186 56,186 52,178 34,168 18,147 13,132 10))
  3 │ POLYGON((119 56,119 100,190 100,185 79,186 56,119 56))
  4 │ POLYGON((29.8260869565217 100,32 110,40 119,36 150,57 158,75 171,92 182,114 184,114 100,29.8260869565217 100))
  5 │ POLYGON((114 184,132 186,146 178,176 184,179 162,184 141,190 122,190 100,114 100,114 184))
  

示例: 使用ST_Segentize(地理,距离)加密长的地理位置线,然后使用ST_SubDivide将生成的线分割为包含8个顶点的子线。

密实线和分割线。

SELECT ST_AsText( ST_Subdivide(
            ST_Segmentize('LINESTRING(0 0, 85 85)'::geography,
                          1200000)::geometry,    8));
LINESTRING(0 0,0.487578359029357 5.57659056746196,0.984542144675897 11.1527721155093,1.50101059639722 16.7281035483571,1.94532113630331 21.25)
LINESTRING(1.94532113630331 21.25,2.04869538062779 22.3020741387339,2.64204641967673 27.8740533545155,3.29994062412787 33.443216802941,4.04836719489742 39.0084282520239,4.59890468420694 42.5)
LINESTRING(4.59890468420694 42.5,4.92498503922732 44.5680389206321,5.98737409390639 50.1195229244701,7.3290919767674 55.6587646879025,8.79638749938413 60.1969505994924)
LINESTRING(8.79638749938413 60.1969505994924,9.11375579533779 61.1785363177625,11.6558166691368 66.6648504160202,15.642041247655 72.0867690601745,22.8716627200212 77.3609628116894,24.6991785131552 77.8939011989848)
LINESTRING(24.6991785131552 77.8939011989848,39.4046096622744 82.1822848017636,44.7994523421035 82.5156766227011)
LINESTRING(44.7994523421035 82.5156766227011,85 85)

示例: 在位细分桌子的复杂几何图形。原始几何图形记录将从源表中删除,并为每个细分的结果几何图形插入新记录。

WITH complex_areas_to_subdivide AS (
    DELETE from polygons_table
    WHERE ST_NPoints(geom) > 255
    RETURNING id, column1, column2, column3, geom
)
INSERT INTO polygons_table (fid, column1, column2, column3, geom)
    SELECT fid, column1, column2, column3,
           ST_Subdivide(geom, 255) as geom
    FROM complex_areas_to_subdivide;

示例: 创建包含细分几何图形的新表,保留原始几何图形的键,以便可以将新表关联到源表。由于ST_SUBDIVE是返回一组单值行的集合返回(表)函数,因此此语法自动生成一个表,每个结果部分对应一行。

CREATE TABLE subdivided_geoms AS
    SELECT pkey, ST_Subdivide(geom) AS geom
    FROM original_geoms;

Name

ST_SymDifference — 计算表示几何图形A和B不相交部分的几何图形。

Synopsis

geometry ST_SymDifference(geometry geomA, geometry geomB, float8 gridSize = -1);

描述

返回一个几何图形,该几何图形表示几何网格A和B的不相交部分。这相当于 ST_UNION(A,B)-ST_INTERCESS(A,B) 。它被称为对称差是因为 ST_SymDifference(A,B)=ST_SymDifference(B,A)

如果可选的 网格大小 参数,则将输入捕捉到给定大小的栅格,并在该栅格上计算结果顶点。(需要GEOS-3.9.0或更高版本)

由GEOS模块执行

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.21

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

示例

原始线串显示在一起

两条线串的对称差

--Safe for 2d - symmetric difference of 2 linestrings
SELECT ST_AsText(
    ST_SymDifference(
        ST_GeomFromText('LINESTRING(50 100, 50 200)'),
        ST_GeomFromText('LINESTRING(50 50, 50 150)')
    )
);

st_astext
---------
MULTILINESTRING((50 150,50 200),(50 50,50 100))
--When used in 3d doesn't quite do the right thing
SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),
    ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))

st_astext
------------
MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25))
        

Name

ST_UnaryUnion — 计算单个几何图形的组件的并集。

Synopsis

geometry ST_UnaryUnion(geometry geom, float8 gridSize = -1);

描述

的单输入变量 ST_Union 。输入可以是单个几何图形、多几何图形或GeometryCollection。该并集应用于输入的各个元素。

此功能可用于修复因组件重叠而无效的多重多边形。但是,每个输入组件都必须有效。无效的输入组件(如蝴蝶结多边形)可能会导致错误。因此,可能更好地使用 ST_MakeValid

此函数的另一个用途是对交叉或重叠的线串集合进行结点和融合,以使它们 简单 。(要添加节点但不融合重复的线条,请使用 ST_Node 。)

可以将ST_UnaryUnion与 ST_Collect 微调一次联合多少个几何体。这允许在内存使用和计算时间之间进行权衡,从而在ST_UNION和 ST_MemUnion

如果可选的 网格大小 参数,则将输入捕捉到给定大小的栅格,并在该栅格上计算结果顶点。(需要GEOS-3.9.0或更高版本)

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

可用性:2.0.0


Name

ST_Union — 计算表示输入几何图形的点集并集的几何图形。

Synopsis

geometry ST_Union(geometry g1, geometry g2);

geometry ST_Union(geometry g1, geometry g2, float8 gridSize);

geometry ST_Union(geometry[] g1_array);

geometry ST_Union(geometry set g1field);

geometry ST_Union(geometry set g1field, float8 gridSize);

描述

合并输入几何体,合并几何体以生成没有重叠的结果几何体。输出可以是原子几何图形、多重几何图形或几何图形集合。有几个变种:

双输入变量: 返回由两个输入几何图形并集的几何图形。如果任一输入为NULL,则返回NULL。

数组变体: 返回一个几何体,它是几何体数组的并集。

聚合变量: 返回几何图形行集的并集的几何图形。在PostgreSQL的术语中,ST_Union()函数是一个“聚合”函数。这意味着它对数据行进行操作,与sum()和avg()函数操作的方式相同,并且像大多数聚合一样,它也忽略空几何图形。

看见 ST_UnaryUnion 用于非聚合、单输入变量。

ST_UNION数组和集合变量使用中介绍的快速级联UNION算法 http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html

A 网格大小 可以指定在固定精度空间中工作。输入捕捉到给定大小的栅格,并在同一栅格上计算结果顶点。(需要GEOS-3.9.0或更高版本)

[Note]

ST_Collect 如果不要求结果不重叠,有时可以用来代替ST_UNION。ST_Collect通常比ST_Union快,因为它不对收集的几何图形执行处理。

由GEOS模块执行。

ST_UNION将创建多重线串,而不会将线串缝合成单个线串。使用 ST_LineMerge 缝制线条。

注意:该函数以前称为GeomUnion(),因为Union是一个SQL保留字,所以将其从“Union”重命名。

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

已更改:3.0.0不依赖于SFCGAL。

可用性:1.4.0-ST_Union得到增强。引入了ST_UNION(地理阵列),并在PostgreSQL中实现了更快的聚合收集。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

[Note]

OGC规范中没有明确定义聚合版本。

This method implements the SQL/MM specification. SQL-MM 3:5.1.19涉及多边形时的z索引(高程)。

This function supports 3d and will not drop the z-index. 但是,结果仅使用XY计算。结果Z值被复制、平均或内插。

示例

聚合示例

SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

非聚合示例

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(-2 3)' :: geometry))

st_astext
----------
MULTIPOINT(-2 3,1 2)

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(1 2)' :: geometry))

st_astext
----------
POINT(1 2)

3D示例--某种程度上支持3D(并且具有混合维度!)

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3, -7 4.2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));

未混合尺寸的3D示例

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2, -7 4.2 2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))

--Examples using new Array construct
SELECT ST_Union(ARRAY(SELECT geom FROM sometable));

SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),
            ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;

--wktunion---
MULTILINESTRING((3 4,4 5),(1 2,3 4))

              

8.14. 几何处理

Abstract

这些函数计算几何结构,或更改几何大小或形状。

ST_Buffer — 计算覆盖距几何图形给定距离内的所有点的几何图形。
ST_BuildArea — 创建由几何图形的线条形成的多边形几何图形。
ST_Centroid — 返回几何图形的几何中心。
ST_ConcaveHull — 计算封闭所有输入几何折点的可能凹的几何
ST_ConvexHull — 计算几何体的凸包。
ST_DelaunayTriangles — 返回几何体顶点的Delaunay三角剖分。
ST_FilterByM — 根据顶点的M值移除顶点
ST_GeneratePoints — 生成包含在多边形或多重多边形中的随机点。
ST_GeometricMedian — 返回多点的几何中值。
ST_LineMerge — 返回由缝合在一起的多重线串形成的线条。
ST_MaximumInscribedCircle — 计算完全包含在几何图形中的最大圆。
ST_MinimumBoundingCircle — 返回包含几何图形的最小圆形多边形。
ST_MinimumBoundingRadius — 返回包含几何图形的最小圆的中心点和半径。
ST_OrientedEnvelope — 返回包含几何图形的最小面积矩形。
ST_OffsetCurve — 返回从输入线到给定距离和侧边的偏移线。
ST_PointOnSurface — 计算保证位于多边形内或几何体上的点。
ST_Polygonize — 计算由一组几何图形的线条形成的多边形集合。
ST_ReducePrecision — 返回点四舍五入为栅格公差的有效几何图形。
ST_SharedPaths — 返回一个集合,其中包含两个输入线串/多线串共享的路径。
ST_Simplify — 使用Douglas-Peucker算法返回几何体的简化版本。
ST_SimplifyPreserveTopology — 使用Douglas-Peucker算法返回几何图形的简化和有效版本。
ST_SimplifyVW — 使用Visvalingam-Whyatt算法返回几何的简化版本
ST_ChaikinSmoothing — 使用Chaikin算法返回几何的平滑版本
ST_SetEffectiveArea — 使用Visvalingam-Whyatt算法设置每个顶点的有效面积。
ST_VoronoiLines — 返回几何体顶点的Voronoi图的边界。
ST_VoronoiPolygons — 返回几何体顶点的Voronoi图的单元格。

Name

ST_Buffer — 计算覆盖距几何图形给定距离内的所有点的几何图形。

Synopsis

geometry ST_Buffer(geometry g1, float radius_of_buffer, text buffer_style_parameters = '');

geometry ST_Buffer(geometry g1, float radius_of_buffer, integer num_seg_quarter_circle);

geography ST_Buffer(geography g1, float radius_of_buffer, text buffer_style_parameters);

geography ST_Buffer(geography g1, float radius_of_buffer, integer num_seg_quarter_circle);

描述

计算表示与几何图形/地理位置的距离小于或等于给定距离的所有点的多边形或多重几何图形。负距离会缩小几何体,而不是将其展开。负距离可能会完全收缩多边形,在这种情况下,将返回Polygon Empty。对于点和线,负距离始终返回空结果。

对于几何图形,距离以几何图形的空间参考系的单位指定。对于地理位置,距离以米为单位指定。

可选的第三个参数控制缓冲区精度和样式。缓冲区中圆弧的精度指定为用于近似四分之一圆的线段数(默认为8)。可以通过提供以空格分隔的键=值对列表来指定缓冲区样式,如下所示:

  • ‘quad_segs=#’:用于近似四分之一圆的线段数(默认为8)。

  • ‘endCap=圆形|扁平|正方形’:收头样式(默认为“圆形”)。‘Butt’被认为是‘Flat’的同义词。

  • ‘JOIN=ROUND|MITRE|BEVELL’:连接样式(默认为“ROUND”)。‘miter’被认为是‘mitre’的同义词。

  • ‘Mitre_Limit=#.#’:斜接比例限制(仅影响斜接样式)。‘Miter_Limit’被接受为‘Mitre_Limit’的同义词。

  • ‘side=Both|Left|Right’:‘Left’或‘Right’在几何体上执行单面缓冲区,缓冲区的一侧相对于直线的方向。这仅适用于LINESTRING几何图形,不影响点几何图形或多边形几何图形。默认情况下,末端封口为正方形。

[Note]

对于地理,这是几何实现的包装器。它确定最适合地理对象边界框的平面空间参考系(尝试UTM、Lambert方位等面积(LAEA)北/南极,最后尝试墨卡托)。缓冲区在平面空间中计算,然后转换回WGS84。如果输入对象远大于UTM区域或跨越日期线,这可能不会产生所需的行为

[Note]

缓冲区输出始终是有效的多边形几何体。缓冲区可以处理无效输入,因此按距离0进行缓冲区有时用作修复无效多边形的一种方法。 ST_MakeValid 也可用于此目的。

[Note]

缓冲有时用于执行距离内搜索。对于这个用例,使用它会更有效 ST_DWithin

[Note]

此函数忽略Z尺寸。即使在3D几何体上使用,它也始终提供2D结果。

增强:2.5.0-增强了ST_BUFFER几何支持,以支持端缓冲规范 Side=Both|Left|Right

可用性:增强了1.5-ST_BUFFER,以支持不同的EndCaps和Join类型。例如,在将道路线串转换为具有平边或方形边而不是圆边的多边形道路时,这些选项非常有用。添加了地理的薄包装器。

由GEOS模块执行。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.17

示例

Quad_segs=8(默认)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=8');
                

Quad_segs=2(跛行)

SELECT ST_Buffer(
 ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2');
                

端盖=圆形连接=圆形(默认)

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=round join=round');
                

收头=正方形

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=square join=round');
                

收头=平面

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=flat join=round');
                

连接=倒角

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=bevel');
                

JOIN=斜接限制=5.0(默认斜接限制)

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=5.0');
                

连接=斜接_限制=1

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'join=mitre mitre_limit=1.0');
                

侧边=左侧

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left');
                

侧=右

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=right');
                

侧=左连接=斜接

SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'side=left join=mitre');
                

右侧缠绕,多边形边界边=左侧

SELECT ST_Buffer(
ST_ForceRHR(
ST_Boundary(
 ST_GeomFromText(
'POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))),
 ), 20, 'side=left');
                

右侧缠绕,多边形边界边=右侧

SELECT ST_Buffer(
ST_ForceRHR(
ST_Boundary(
 ST_GeomFromText(
'POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))
), 20,'side=right')
                

--A buffered point approximates a circle
-- A buffered point forcing approximation of (see diagram)
-- 2 points per quarter circle is poly with 8 sides (see diagram)
SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As promisingcircle_pcount,
ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount;

promisingcircle_pcount | lamecircle_pcount
------------------------+-------------------
             33 |                9

--A lighter but lamer circle
-- only 2 points per quarter circle is an octagon
--Below is a 100 meter octagon
-- Note coordinates are in NAD 83 long lat which we transform
to Mass state plane meter and then buffer to get measurements in meters;
SELECT ST_AsText(ST_Buffer(
ST_Transform(
ST_SetSRID(ST_Point(-71.063526, 42.35785),4269), 26986)
,100,2)) As octagon;
----------------------
POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235
957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465
900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918
696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))
        

Name

ST_BuildArea — 创建由几何图形的线条形成的多边形几何图形。

Synopsis

geometry ST_BuildArea(geometry geom);

描述

创建由输入几何图形的组成线条形成的区域几何图形。输入可以是LINESTRINGS、MULTILINESTRINGS、POLGON、MULTIPOLYGONS和GeometryColltions。结果是一个多边形或多重多边形,具体取决于输入。如果输入线条不形成多边形,则返回NULL。

此函数假定所有内部几何图形都表示孔

[Note]

必须正确结点输入线条,此功能才能正常工作

可用性:1.1.0

示例

这些将创造一个甜甜圈

--using polygons
SELECT ST_BuildArea(ST_Collect(smallc,bigc))
FROM (SELECT
    ST_Buffer(
      ST_GeomFromText('POINT(100 90)'), 25) As smallc,
    ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo;
                

--using linestrings
SELECT ST_BuildArea(ST_Collect(smallc,bigc))
FROM (SELECT
    ST_ExteriorRing(ST_Buffer(
      ST_GeomFromText('POINT(100 90)'), 25)) As smallc,
    ST_ExteriorRing(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As bigc) As foo;

另请参阅

ST_Node, ST_MakePolygon, ST_MakeValid, ST_BdPolyFromText, ST_BdMPolyFromText (wrappers to this function with standard OGC interface)


Name

ST_Centroid — 返回几何图形的几何中心。

Synopsis

geometry ST_Centroid(geometry g1);

geography ST_Centroid(geography g1, boolean use_spheroid=true);

描述

计算点,该点是几何体的几何质心。适用于[ MULTI ] POINT S,则质心是输入坐标的算术平均值。适用于[ MULTI ] LINESTRING S,则使用每条直线段的加权长度来计算质心。适用于[ MULTI ] POLYGON S,则按面积计算质心。如果提供的是空几何图形,则一个空的 GEOMETRYCOLLECTION 返回。如果 NULL 是提供的, NULL 返回。如果 CIRCULARSTRING COMPOUNDCURVE ,则首先使用CurveToLine将它们转换为线串,然后与 LINESTRING

对于混合维度输入,结果等于最高维度的组件几何的质心(因为较低维度的几何为质心提供了零个“权重”)。

请注意,对于多边形几何体,质心不一定位于多边形的内部。例如,请参见下图所示的C形多边形的质心。要构造保证位于多边形内部的点,请使用 ST_PointOnSurface

2.3.0中的新功能:支持 CIRCULARSTRING COMPOUNDCURVE (使用CurveToLine)

可用性:引入了2.4.0对地理的支持。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1.

This method implements the SQL/MM specification. SQL-MM 3:8.1.4、9.5.5

示例

在下图中,红点是源几何图形的质心。

A的质心 MULTIPOINT

A的质心 LINESTRING

A的质心 POLYGON

A的质心 GEOMETRYCOLLECTION

SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )'));
                st_astext
------------------------------------------
 POINT(2.30769230769231 3.30769230769231)
(1 row)

SELECT ST_AsText(ST_centroid(g))
FROM  ST_GeomFromText('CIRCULARSTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)')  AS g ;
------------------------------------------
POINT(0.5 1)


SELECT ST_AsText(ST_centroid(g))
FROM  ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 2, -1 1,0 0),(0 0, 0.5 0, 1 0),CIRCULARSTRING( 1 0, 2 1, 1 2),(1 2, 0.5 2, 0 2))' ) AS g;
------------------------------------------
POINT(0.5 1)


Name

ST_ConcaveHull — 计算封闭所有输入几何折点的可能凹的几何

Synopsis

geometry ST_ConcaveHull(geometry param_geom, float param_pctconvex, boolean param_allow_holes = false);

描述

几何体的凹面外壳是封闭输入几何体顶点的可能凹面几何体。在一般情况下,凹面外壳是一个多边形。面将不包含洞,除非可选 param_allow_holes 参数被指定为True。两个或多个共线点的凹面外壳线是两点线串。一个或多个相同点的凹壳称为点。

人们可以把凹面船壳想象成“收缩包装”一组点。这不同于 凸壳 ,这更像是在点上缠上橡皮筋。凹面外壳通常具有较小的面积,并代表输入点更自然的边界。与凸壳类似,凹壳的顶点是输入点的子集,所有其他输入点都包含在其中。

这个 param_pctconvex 控制计算外壳线的凹陷度。值为1将生成凸面外壳线。值为0会生成具有最大凹度的外壳线(但仍为单个多边形)。介于1和0之间的值会产生凹凸度增加的外壳。选择合适的值取决于输入数据的性质,但介于0.3和0.1之间的值通常会产生合理的结果。

从技术上讲,目标百分比将长度确定为输入点的Delaunay三角剖分中最长和最短边之间的差值的一部分。超过此长度的边将从三角剖分中被“侵蚀”。剩下的三角形形成了凹面船体。

这不是聚合函数。要计算一组几何图形的凹壳,请使用 ST_Collect (例如 ST_ConaveHull(ST_Collect(Geom),0.80)

可用性:2.0.0

增强版:3.3.0,针对GEOS 3.11+启用了GEOS本机实施

示例

多点曲面的凹壳

SELECT ST_AsText( ST_ConcaveHull(
        'MULTIPOINT ((10 72), (53 76), (56 66), (63 58), (71 51), (81 48), (91 46), (101 45), (111 46), (121 47), (131 50), (140 55), (145 64), (144 74), (135 80), (125 83), (115 85), (105 87), (95 89), (85 91), (75 93), (65 95), (55 98), (45 102), (37 107), (29 114), (22 122), (19 132), (18 142), (21 151), (27 160), (35 167), (44 172), (54 175), (64 178), (74 180), (84 181), (94 181), (104 181), (114 181), (124 181), (134 179), (144 177), (153 173), (162 168), (171 162), (177 154), (182 145), (184 135), (139 132), (136 142), (128 149), (119 153), (109 155), (99 155), (89 155), (79 153), (69 150), (61 144), (63 134), (72 128), (82 125), (92 123), (102 121), (112 119), (122 118), (132 116), (142 113), (151 110), (161 106), (170 102), (178 96), (185 88), (189 78), (190 68), (189 58), (185 49), (179 41), (171 34), (162 29), (153 25), (143 23), (133 21), (123 19), (113 19), (102 19), (92 19), (82 19), (72 21), (62 22), (52 25), (43 29), (33 34), (25 41), (19 49), (14 58), (21 73), (31 74), (42 74), (173 134), (161 134), (150 133), (97 104), (52 117), (157 156), (94 171), (112 106), (169 73), (58 165), (149 40), (70 33), (147 157), (48 153), (140 96), (47 129), (173 55), (144 86), (159 67), (150 146), (38 136), (111 170), (124 94), (26 59), (60 41), (71 162), (41 64), (88 110), (122 34), (151 97), (157 56), (39 146), (88 33), (159 45), (47 56), (138 40), (129 165), (33 48), (106 31), (169 147), (37 122), (71 109), (163 89), (37 156), (82 170), (180 72), (29 142), (46 41), (59 155), (124 106), (157 80), (175 82), (56 50), (62 116), (113 95), (144 167))',
         0.1 ) );
---st_astext--
POLYGON ((18 142, 21 151, 27 160, 35 167, 44 172, 54 175, 64 178, 74 180, 84 181, 94 181, 104 181, 114 181, 124 181, 134 179, 144 177, 153 173, 162 168, 171 162, 177 154, 182 145, 184 135, 173 134, 161 134, 150 133, 139 132, 136 142, 128 149, 119 153, 109 155, 99 155, 89 155, 79 153, 69 150, 61 144, 63 134, 72 128, 82 125, 92 123, 102 121, 112 119, 122 118, 132 116, 142 113, 151 110, 161 106, 170 102, 178 96, 185 88, 189 78, 190 68, 189 58, 185 49, 179 41, 171 34, 162 29, 153 25, 143 23, 133 21, 123 19, 113 19, 102 19, 92 19, 82 19, 72 21, 62 22, 52 25, 43 29, 33 34, 25 41, 19 49, 14 58, 10 72, 21 73, 31 74, 42 74, 53 76, 56 66, 63 58, 71 51, 81 48, 91 46, 101 45, 111 46, 121 47, 131 50, 140 55, 145 64, 144 74, 135 80, 125 83, 115 85, 105 87, 95 89, 85 91, 75 93, 65 95, 55 98, 45 102, 37 107, 29 114, 22 122, 19 132, 18 142))
    

多点的凹壳,允许有孔

SELECT ST_AsText( ST_ConcaveHull(
        'MULTIPOINT ((132 64), (114 64), (99 64), (81 64), (63 64), (57 49), (52 36), (46 20), (37 20), (26 20), (32 36), (39 55), (43 69), (50 84), (57 100), (63 118), (68 133), (74 149), (81 164), (88 180), (101 180), (112 180), (119 164), (126 149), (132 131), (139 113), (143 100), (150 84), (157 69), (163 51), (168 36), (174 20), (163 20), (150 20), (143 36), (139 49), (132 64), (99 151), (92 138), (88 124), (81 109), (74 93), (70 82), (83 82), (99 82), (112 82), (126 82), (121 96), (114 109), (110 122), (103 138), (99 151), (34 27), (43 31), (48 44), (46 58), (52 73), (63 73), (61 84), (72 71), (90 69), (101 76), (123 71), (141 62), (166 27), (150 33), (159 36), (146 44), (154 53), (152 62), (146 73), (134 76), (143 82), (141 91), (130 98), (126 104), (132 113), (128 127), (117 122), (112 133), (119 144), (108 147), (119 153), (110 171), (103 164), (92 171), (86 160), (88 142), (79 140), (72 124), (83 131), (79 118), (68 113), (63 102), (68 93), (35 45))',
         0.15, true ) );
---st_astext--
POLYGON ((43 69, 50 84, 57 100, 63 118, 68 133, 74 149, 81 164, 88 180, 101 180, 112 180, 119 164, 126 149, 132 131, 139 113, 143 100, 150 84, 157 69, 163 51, 168 36, 174 20, 163 20, 150 20, 143 36, 139 49, 132 64, 114 64, 99 64, 81 64, 63 64, 57 49, 52 36, 46 20, 37 20, 26 20, 32 36, 35 45, 39 55, 43 69), (88 124, 81 109, 74 93, 83 82, 99 82, 112 82, 121 96, 114 109, 110 122, 103 138, 92 138, 88 124))
    

使用WITH ST_COLLECT计算几何图形集的凹壳。

-- Compute estimate of infected area based on point observations
SELECT disease_type,
    ST_ConcaveHull( ST_Collect(obs_pnt), 0.3 ) AS geom
  FROM disease_obs
  GROUP BY disease_type;

Name

ST_ConvexHull — 计算几何体的凸包。

Synopsis

geometry ST_ConvexHull(geometry geomA);

描述

计算几何体的凸包。凸包是包含输入中所有几何体的最小凸几何体。

人们可以将凸壳看作是通过将橡皮筋包裹在一组几何图形上而获得的几何图形。这不同于 凹形船体 这类似于对几何图形进行“收缩包装”。凸壳通常用于根据一组点观测来确定受影响的区域。

在一般情况下,凸壳是一个多边形。两个或多个共线点的凸包是两点直线串。一个或多个相同点的凸包称为点。

这不是聚合函数。要计算一组几何图形的凸包,请使用 ST_Collect 要将它们聚合到几何图形集合中(例如 ST_ConvexHull(ST_Collect(Geom))

由GEOS模块执行

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3:5.1.16

This function supports 3d and will not drop the z-index.

示例

多线弦和多点的凸包

SELECT ST_AsText(ST_ConvexHull(
    ST_Collect(
        ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10, 20 30))'),
            ST_GeomFromText('MULTIPOINT(50 5, 150 30, 50 10, 10 10)')
            )) );
---st_astext--
POLYGON((50 5,10 8,10 10,100 190,150 30,150 10,50 5))
    

使用WITH ST_COLLECT计算几何集合的凸包。

--Get estimate of infected area based on point observations
SELECT d.disease_type,
    ST_ConvexHull(ST_Collect(d.geom)) As geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

Name

ST_DelaunayTriangles — 返回几何体顶点的Delaunay三角剖分。

Synopsis

geometry ST_DelaunayTriangles(geometry g1, float tolerance, int4 flags);

描述

返回 Delaunay三角测量 输入几何图形的顶点的。输出是一个多边形集合(当标志=0时),或者是一个MULTILINESTRING(当标志=1)或三角网(当标志=2)。公差(如果有)用于将输入顶点捕捉到一起。

由GEOS模块执行。

可用性:2.1.0

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

2D示例

原始多边形

-- our original geometry --
    ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        )

两个面的ST_Delaunay三角形:Delaunay三角形面,每个三角形以不同的颜色为主题

-- geometries overlaid multilinestring triangles
SELECT
    ST_DelaunayTriangles(
        ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        ))
     As  dtriag;
                

-- delaunay triangles as multilinestring

SELECT
    ST_DelaunayTriangles(
        ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
            50 60, 125 100, 175 150))'),
        ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
        ),0.001,1)
     As  dtriag;

-- delaunay triangles of 45 points as 55 triangle polygons

-- this produces a table of 42 points that form an L shape
SELECT (ST_DumpPoints(ST_GeomFromText(
'MULTIPOINT(14 14,34 14,54 14,74 14,94 14,114 14,134 14,
150 14,154 14,154 6,134 6,114 6,94 6,74 6,54 6,34 6,
14 6,10 6,8 6,7 7,6 8,6 10,6 30,6 50,6 70,6 90,6 110,6 130,
6 150,6 170,6 190,6 194,14 194,14 174,14 154,14 134,14 114,
14 94,14 74,14 54,14 34,14 14)'))).geom
    INTO TABLE l_shape;
-- output as individual polygon triangles
SELECT ST_AsText((ST_Dump(geom)).geom) As wkt
FROM ( SELECT ST_DelaunayTriangles(ST_Collect(geom)) As geom
FROM l_shape) As foo;

---wkt ---
POLYGON((6 194,6 190,14 194,6 194))
POLYGON((14 194,6 190,14 174,14 194))
POLYGON((14 194,14 174,154 14,14 194))
POLYGON((154 14,14 174,14 154,154 14))
POLYGON((154 14,14 154,150 14,154 14))
POLYGON((154 14,150 14,154 6,154 14))
:
:

3D示例

-- 3D multipoint --
SELECT ST_AsText(ST_DelaunayTriangles(ST_GeomFromText(
'MULTIPOINT Z(14 14 10,
150 14 100,34 6 25, 20 10 150)'))) As wkt;

-----wkt----
GEOMETRYCOLLECTION Z (POLYGON Z ((14 14 10,20 10 150,34 6 25,14 14 10))
 ,POLYGON Z ((14 14 10,34 6 25,150 14 100,14 14 10)))

Name

ST_FilterByM — 根据顶点的M值移除顶点

Synopsis

geometry ST_FilterByM(geometry geom, double precision min, double precision max = null, boolean returnM = false);

描述

根据顶点的M值过滤掉顶点。返回仅具有M值大于或等于最小值且小于或等于最大值的顶点的几何体。如果省略了max-value参数,则只考虑最小值。如果省略了第四个参数,m值将不会出现在生成的几何图形中。如果生成的几何体对于其几何体类型剩余的顶点太少,则将返回空的几何体。在几何图形集合中,没有足够点的几何图形将被静默删除。

此函数主要与ST_SetEffectiveArea配合使用。ST_EffectiveArea以其m值设置顶点的有效面积。使用ST_FilterByM后,只需进行过滤即可获得几何的简化版本,而无需任何计算

[Note]

与ST_FilterByM相比,当没有足够的点数满足标准时,ST_SimplifyVW返回的结果与ST_FilterByM不同。ST_SimplifyVW返回具有足够点的几何,而ST_FilterByM返回空几何

[Note]

请注意,返回的几何可能无效

[Note]

此函数返回所有尺寸,包括Z值和M值

可用性:2.5.0

示例

对线串进行过滤

SELECT ST_AsText(ST_FilterByM(geom,30)) simplified
FROM (SELECT  ST_SetEffectiveArea('LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry) geom) As foo;
-result
         simplified
----------------------------
 LINESTRING(5 2,7 25,10 10)
                

Name

ST_GeneratePoints — 生成包含在多边形或多重多边形中的随机点。

Synopsis

geometry ST_GeneratePoints( g geometry , npoints integer );

geometry ST_GeneratePoints( geometry g , integer npoints , integer seed );

描述

ST_GeneratePoints生成位于输入区域内的给定数量的伪随机点。可选的 种子 用于重新生成确定性的点序列,并且必须大于零。

可用性:2.3.0

增强:3.0.0,添加种子参数

示例

使用随机种子值1996生成了覆盖在原始面顶部的12个点

SELECT ST_GeneratePoints(geom, 12, 1996)
FROM (
    SELECT ST_Buffer(
        ST_GeomFromText(
        'LINESTRING(50 50,150 150,150 50)'),
        10, 'endcap=round join=round') AS geom
) AS s;


Name

ST_GeometricMedian — 返回多点的几何中值。

Synopsis

geometry ST_GeometricMedian ( geometry geom, float8 tolerance = NULL, int max_iter = 10000, boolean fail_if_not_converged = false);

描述

使用Weiszfeld算法计算多点几何图形的近似几何中值。几何中值是使到输入点的距离之和最小的点。它提供了一种中心性度量,与质心(质心)相比,它对异常点的敏感度较低。

算法进行迭代,直到连续迭代之间的距离变化小于提供的 容忍度 参数。如果在此之后未满足此条件 max_iterations 迭代时,该函数会产生错误并退出,除非 fail_if_not_converged 设置为 错误 (默认设置)。

如果一个 容忍度 参数,则根据输入几何图形的范围计算公差值。

如果存在输入点M值,则将其解释为其相对权重。

可用性:2.3.0

增强:2.5.0增加了对M作为点数权重的支持。

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

示例

多点的几何中值(红色)和质心(绿松石)的比较。

WITH test AS (
SELECT 'MULTIPOINT((10 10), (10 40), (40 10), (190 190))'::geometry geom)
SELECT
  ST_AsText(ST_Centroid(geom)) centroid,
  ST_AsText(ST_GeometricMedian(geom)) median
FROM test;

      centroid      |                 median
--------------------+----------------------------------------
   POINT(62.5 62.5) | POINT(25.01778421249728 25.01778421249728)
(1 row)
      

另请参阅

ST_Centroid


Name

ST_LineMerge — 返回由缝合在一起的多重线串形成的线条。

Synopsis

geometry ST_LineMerge(geometry amultilinestring);

描述

返回通过将多重线串的组成线条连接在一起而形成的线串或多重线串。线在双向交点处的端点处连接。线不会跨三向或更大角度的交点连接。

[Note]

仅与多重线串/线串一起使用。如果将面或GeometryCollection传递给此函数,它将返回空的GeometryCollection

由GEOS模块执行。

可用性:1.1.0

[Warning]

此函数将剥离M维度。

示例

SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))'
                ));
st_astext
--------------------------------------------------------------------------------------------------
LINESTRING(-29 -27,-30 -29.7,-36 -31,-45 -33,-46 -32)

如果由于非接触线而无法合并,则返回原始的多行字符串。

SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))'
));
st_astext
----------------
MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))

显示Z维度处理的示例。

SELECT ST_AsText(ST_LineMerge(
      'MULTILINESTRING((-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 6), (-29 -27 12,-30 -29.7 5), (-45 -33 1,-46 -32 11))'
        ));
st_astext
--------------------------------------------------------------------------------------------------
LINESTRING Z (-30 -29.7 5,-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 1,-46 -32 11)

Name

ST_MaximumInscribedCircle — 计算完全包含在几何图形中的最大圆。

Synopsis

(geometry, geometry, double precision) ST_MaximumInscribedCircle(geometry geom);

描述

查找完全包含在几何图形中的最大圆。返回一个记录,其中包含圆的中心点、几何图形上最接近圆心的点以及圆的半径。

对于多边形输入,圆内接在外环内,使用内环作为边界。对于线性和点输入,圆内接在输入的凸包内,使用输入作为进一步的边界。

可用性:3.1.0-需要GEOS > =3.9.0。

示例

多边形的最大内接圆。返回圆心、最近点和半径。

SELECT radius, ST_AsText(center) AS center, ST_AsText(nearest) AS nearest
    FROM ST_MaximumInscribedCircle(
        'POLYGON ((40 180, 110 160, 180 180, 180 120, 140 90, 160 40, 80 10, 70 40, 20 50, 40 180),
        (60 140, 50 90, 90 140, 60 140))');

     radius      |           center           |    nearest
-----------------+----------------------------+---------------
 45.165845650018 | POINT(96.953125 76.328125) | POINT(140 90)

多线串的最大内接圆。返回圆心、最近点和半径。


Name

ST_MinimumBoundingCircle — 返回包含几何图形的最小圆形多边形。

Synopsis

geometry ST_MinimumBoundingCircle(geometry geomA, integer num_segs_per_qt_circ=48);

描述

返回包含几何图形的最小圆形多边形。

[Note]

该圆由一个多边形近似,默认为每个四分之一圆48个线段。由于该多边形是最小边界圆的近似值,因此输入几何体中的某些点可能不包含在该多边形内。可以通过增加分段数来提高近似值,而几乎不会对性能造成影响。对于不适合使用多边形近似的应用程序,可以使用ST_MinimumBordingRadius。

它通常与多个和几何体集合一起使用。尽管它不是聚集体,但您可以将其与ST_Collect结合使用,以获得一组几何图形的最小边界圆。ST_MinimumBoundingCircle(ST_Collect(somepointfield)).

多边形面积除以其最小边界圆面积的比率通常称为Roeck检验。

由GEOS模块执行。

可用性:1.4.0

示例

SELECT d.disease_type,
    ST_MinimumBoundingCircle(ST_Collect(d.geom)) As geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

点和线串的最小边界圆。用8段曲线逼近四分之一圆

SELECT ST_AsText(ST_MinimumBoundingCircle(
        ST_Collect(
            ST_GeomFromText('LINESTRING(55 75,125 150)'),
                ST_Point(20, 80)), 8
                )) As wktmbc;
wktmbc
-----------
POLYGON((135.59714732062 115,134.384753327498 102.690357210921,130.79416296937 90.8537670908995,124.963360620072 79.9451031602111,117.116420743937 70.3835792560632,107.554896839789 62.5366393799277,96.6462329091006 56.70583703063,84.8096427890789 53.115246672502,72.5000000000001 51.9028526793802,60.1903572109213 53.1152466725019,48.3537670908996 56.7058370306299,37.4451031602112 62.5366393799276,27.8835792560632 70.383579256063,20.0366393799278 79.9451031602109,14.20583703063 90.8537670908993,10.615246672502 102.690357210921,9.40285267938019 115,10.6152466725019 127.309642789079,14.2058370306299 139.1462329091,20.0366393799275 150.054896839789,27.883579256063 159.616420743937,
37.4451031602108 167.463360620072,48.3537670908992 173.29416296937,60.190357210921 176.884753327498,
72.4999999999998 178.09714732062,84.8096427890786 176.884753327498,96.6462329091003 173.29416296937,107.554896839789 167.463360620072,
117.116420743937 159.616420743937,124.963360620072 150.054896839789,130.79416296937 139.146232909101,134.384753327498 127.309642789079,135.59714732062 115))
                

Name

ST_MinimumBoundingRadius — 返回包含几何图形的最小圆的中心点和半径。

Synopsis

(geometry, double precision) ST_MinimumBoundingRadius(geometry geom);

描述

返回包含几何图形的最小圆的中心点和半径的记录。

与一起使用 ST_Collect 以获得一组几何图形的最小边界圆。

可用性-2.3.0

示例

SELECT ST_AsText(center), radius FROM ST_MinimumBoundingRadius('POLYGON((26426 65078,26531 65242,26075 65136,26096 65427,26426 65078))');

                st_astext                 |      radius
------------------------------------------+------------------
 POINT(26284.8418027133 65267.1145090825) | 247.436045591407

Name

ST_OrientedEnvelope — 返回包含几何图形的最小面积矩形。

Synopsis

geometry ST_OrientedEnvelope( geometry geom );

描述

返回包围几何图形的最小面积旋转矩形。请注意,可能存在多个这样的矩形。在退化输入的情况下,可能会返回Point或LineString。

可用性:2.5.0

示例

SELECT ST_AsText(ST_OrientedEnvelope('MULTIPOINT ((0 0), (-1 -1), (3 2))'));

                st_astext
                ------------------------------------------------
                POLYGON((3 2,2.88 2.16,-1.12 -0.84,-1 -1,3 2))
            

点和线串的定向包络。

SELECT ST_AsText(ST_OrientedEnvelope(
        ST_Collect(
            ST_GeomFromText('LINESTRING(55 75,125 150)'),
                ST_Point(20, 80))
                )) As wktenv;
wktenv
-----------
POLYGON((19.9999999999997 79.9999999999999,33.0769230769229 60.3846153846152,138.076923076924 130.384615384616,125.000000000001 150.000000000001,19.9999999999997 79.9999999999999))

Name

ST_OffsetCurve — 返回从输入线到给定距离和侧边的偏移线。

Synopsis

geometry ST_OffsetCurve(geometry line, float signed_distance, text style_parameters='');

描述

从输入线返回给定距离和边上的偏移线。返回的几何图形的所有点与输入几何图形之间的距离不超过给定距离。用于计算围绕中心线的平行线。

对于正距离,偏移位于输入线的左侧,并保持相同的方向。对于负距离,它位于右侧,方向相反。

距离单位是以空间参考系为单位来测量的。

请注意,对于某些拼图形状的输入几何图形,输出可以是MULTILINESTRING或空。

可选的第三个参数允许指定一组空格分隔的键=值对来调整操作,如下所示:

  • ‘quad_segs=#’:用于近似四分之一圆的线段数(默认为8)。

  • ‘JOIN=ROUND|MITRE|BEVELL’:连接样式(默认为“ROUND”)。‘miter’也被认为是‘mitre’的同义词。

  • ‘Mitre_Limit=#.#’:斜接比例限制(仅影响斜接样式)。‘MITER_LIMIT’也可以作为‘MITRE_LIMIT’的同义词。

由GEOS模块执行。

可用性:2.0

增强版:增加了2.5版对地球测量组合和多线串接的支持

[Note]

此函数忽略Z尺寸。即使在3D几何体上使用,它也始终提供2D结果。

示例

计算道路周围的开放缓冲区

SELECT ST_Union(
 ST_OffsetCurve(f.geom,  f.width/2, 'quad_segs=4 join=round'),
 ST_OffsetCurve(f.geom, -f.width/2, 'quad_segs=4 join=round')
) as track
FROM someroadstable;

                

15,‘quad_segs=4 JOIN=ROUND’原始线及其偏移15个单位。

SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
    15, 'quad_segs=4 join=round'));
--output --
LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307,
    7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,
    2.14180701233067 12.2597485145237,1 18,1 195)
                

-15,‘quad_segs=4 JOIN=圆形’原始线及其偏移单位

SELECT ST_AsText(ST_OffsetCurve(geom,
    -15, 'quad_segs=4 join=round')) As notsocurvy
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
-- notsocurvy --
LINESTRING(31 195,31 31,164 31)
                

双偏移要获得更多曲线,请注意第一个方向相反,因此-30+15=-15

SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom,
    -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As morecurvy
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
-- morecurvy --
LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,
35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195)
                

双偏移可获得更多曲线,与常规偏移量15相结合可获得平行线。覆盖着原始的。

SELECT ST_AsText(ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'),
    ST_OffsetCurve(ST_OffsetCurve(geom,
    -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')
    )
) As parallel_curves
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
-- parallel curves  --
MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307,
7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,
2.14180701233067 12.2597485145237,1 18,1 195),
(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195))
                

15,‘quad_segs=4 Join=bevel’与原始行一起显示

SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
        15, 'quad_segs=4 join=bevel'));
-- output --
LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,1 18,1 195)
                

已收集15,-15,联接=斜接_限制=2.1

SELECT ST_AsText(ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'),
    ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2')
    ) )
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;
-- output --
MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195),
    (31 195,31 31,164 31))
                

另请参阅

ST_Buffer


Name

ST_PointOnSurface — 计算保证位于多边形内或几何体上的点。

Synopsis

geometry ST_PointOnSurface(geometry g1);

描述

返回一个 POINT 它保证位于曲面(多边形、多重曲面和弯曲多边形)的内部。在PostGIS中,此功能也适用于线和点几何图形。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. S3.2.14.2//s3.2.18.2

This method implements the SQL/MM specification. SQL-MM 3:8.1.5、9.5.6。规范仅为曲面几何图形定义ST_PointOnSurface。PostGIS扩展了该功能,以支持所有常见的几何类型。其他数据库(Oracle、DB2、ArcSDE)似乎仅支持曲面的此功能。SQL Server 2008支持所有常见几何图形类型。

This function supports 3d and will not drop the z-index.

示例

曲面上的点 MULTIPOINT

曲面上的点 LINESTRING

曲面上的点 POLYGON

曲面上的点 GEOMETRYCOLLECTION

SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
------------
 POINT(0 5)

SELECT ST_AsText(ST_PointOnSurface('LINESTRING(0 5, 0 10)'::geometry));
------------
 POINT(0 5)

SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
----------------
 POINT(2.5 2.5)

SELECT ST_AsEWKT(ST_PointOnSurface(ST_GeomFromEWKT('LINESTRING(0 5 1, 0 0 1, 0 10 2)')));
----------------
 POINT(0 0 1)

示例: ST_PointOnSurface的结果保证位于面内,而由计算的点 ST_Centroid 可能在外面。

红色:面上的点;绿色:质心

SELECT ST_AsText(ST_PointOnSurface(geom)) AS pt_on_surf,
       ST_AsText(ST_Centroid(geom)) AS centroid
    FROM (SELECT 'POLYGON ((130 120, 120 190, 30 140, 50 20, 190 20,
                      170 100, 90 60, 90 130, 130 120))'::geometry AS geom) AS t;

   pt_on_surf    |                  centroid
-----------------+---------------------------------------------
 POINT(62.5 110) | POINT(100.18264840182648 85.11415525114155)

Name

ST_Polygonize — 计算由一组几何图形的线条形成的多边形集合。

Synopsis

geometry ST_Polygonize(geometry set geomfield);

geometry ST_Polygonize(geometry[] geom_array);

描述

创建包含由一组几何图形的组成线条形成的多边形的GeometryCollection。必须正确标记输入线条,此功能才能正常工作。

[Note]

要确保输入是完全节点的,请使用 ST_Node 在多边形化之前的输入几何体上。

[Note]

GeometryCollection通常很难用第三方工具来处理。使用 ST_Dump 若要将多边形化结果转化为单独的多边形,请执行以下操作。

由GEOS模块执行。

可用性:1.0.0RC1

示例:多边形化单线串

SELECT ST_AsEWKT(ST_Polygonize(geom_4269)) As geomtextrep
FROM (SELECT geom_4269 FROM ma.suffolk_edges ORDER BY tlid LIMIT 45) As foo;

geomtextrep
-------------------------------------
 SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)),
 POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855,
 -71.17112 42.354238,-71.17166 42.353675)))
(1 row)

--Use ST_Dump to dump out the polygonize geoms into individual polygons
SELECT ST_AsEWKT((ST_Dump(foofoo.polycoll)).geom) As geomtextrep
FROM (SELECT ST_Polygonize(geom_4269) As polycoll
    FROM (SELECT geom_4269 FROM ma.suffolk_edges
        ORDER BY tlid LIMIT 45) As foo) As foofoo;

geomtextrep
------------------------
 SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,
-71.040878 42.285678))
 SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358
,-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675))
(2 rows)

              

另请参阅

ST_Node, ST_Dump


Name

ST_ReducePrecision — 返回点四舍五入为栅格公差的有效几何图形。

Synopsis

geometry ST_ReducePrecision(geometry g, float8 gridsize);

描述

返回一个有效的几何图形,其中所有点舍入到提供的栅格公差,并删除低于该公差的要素。

不像 ST_SnapToGrid 返回的几何图形将是有效的,没有环形自相交或折叠的零部件。

精度缩减可用于:

  • 将坐标精度与数据精度匹配

  • 减少表示几何图形所需的坐标数量

  • 确保有效的几何图形输出为使用较低精度的格式(例如,当输出小数位数有限时,文本格式,如WKT、GeoJSON或KML)。

  • 将有效几何图形导出到使用较低或有限精度的系统(例如SDE、Oracle公差值)

可用性:3.1.0-需要GEOS > =3.9.0。

示例

SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 0.1));
    st_astext
-----------------
 POINT(1.4 19.3)

SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 1.0));
  st_astext
-------------
 POINT(1 19)

SELECT ST_AsText(ST_ReducePrecision('POINT(1.412 19.323)', 10));
  st_astext
-------------
 POINT(0 20)

减少精度可以减少折点数

SELECT ST_AsText(ST_ReducePrecision('LINESTRING (10 10, 19.6 30.1, 20 30, 20.3 30, 40 40)', 1));
  st_astext
-------------
 LINESTRING (10 10, 20 30, 40 40)

如果需要,精度缩减会拆分面,以确保有效性

SELECT ST_AsText(ST_ReducePrecision('POLYGON ((10 10, 60 60.1, 70 30, 40 40, 50 10, 10 10))', 10));
  st_astext
-------------
 MULTIPOLYGON (((60 60, 70 30, 40 40, 60 60)), ((40 40, 50 10, 10 10, 40 40)))

Name

ST_SharedPaths — 返回一个集合,其中包含两个输入线串/多线串共享的路径。

Synopsis

geometry ST_SharedPaths(geometry lineal1, geometry lineal2);

描述

返回包含由两个输入几何图形共享的路径的集合。方向相同的元素位于集合的第一个元素中,而方向相反的元素位于第二个元素中。路径本身是在第一个几何图形的方向上指定的。

由GEOS模块执行。

可用性:2.0.0

示例:查找共享路径

多线串和线串

用原始几何图形叠加的多线串和线串的共享路径。

SELECT ST_AsText(
  ST_SharedPaths(
    ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),
       (51 150,101 150,76 175,51 150))'),
    ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)')
    )
  ) As wkt

                                wkt
-------------------------------------------------------------
GEOMETRYCOLLECTION(MULTILINESTRING((126 156.25,126 125),
 (101 150,90 161),(90 161,76 175)),MULTILINESTRING EMPTY)
              

-- same example but linestring orientation flipped
SELECT ST_AsText(
  ST_SharedPaths(
   ST_GeomFromText('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'),
   ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),
       (51 150,101 150,76 175,51 150))')
    )
  ) As wkt

                                wkt
-------------------------------------------------------------
GEOMETRYCOLLECTION(MULTILINESTRING EMPTY,
MULTILINESTRING((76 175,90 161),(90 161,101 150),(126 125,126 156.25)))
              


Name

ST_Simplify — 使用Douglas-Peucker算法返回几何体的简化版本。

Synopsis

geometry ST_Simplify(geometry geomA, float tolerance);

geometry ST_Simplify(geometry geomA, float tolerance, boolean preserveCollapsed);

描述

使用Douglas-Peucker算法返回给定几何体的简化版本。我实际上只对(多)线和(多)多边形做了一些事情,但你可以安全地用任何类型的几何体调用它。由于简化是在逐个对象的基础上进行的,因此您还可以将GeometryCollection提供给此函数。

“保留折叠”标志将保留原本会在给定公差的情况下太小的对象。例如,一条1米长的线路简化为10M公差。如果 保留折叠 参数指定为True,则该行不会消失。此标志对于渲染引擎非常有用,以避免大量非常小的对象从地图上消失,留下令人惊讶的间隙。

[Note]

请注意,返回的几何可能会失去简单性(请参见 ST_IsSimple )

[Note]

注意:拓扑可能不会保留,并可能导致无效的几何图形。使用(请参见 ST_SimplifyPreserveTopology )以保持拓扑结构。

可用性:1.2.2

示例

过于简化的圆变成了三角形,中间是八角形,

SELECT ST_Npoints(geom) AS np_before,
       ST_NPoints(ST_Simplify(geom,0.1)) AS np01_notbadcircle,
       ST_NPoints(ST_Simplify(geom,0.5)) AS np05_notquitecircle,
       ST_NPoints(ST_Simplify(geom,1)) AS np1_octagon,
       ST_NPoints(ST_Simplify(geom,10)) AS np10_triangle,
       (ST_Simplify(geom,100) is null) AS  np100_geometrygoesaway
  FROM
    (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) AS foo;

 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway
-----------+-------------------+---------------------+-------------+---------------+------------------------
        49 |                33 |                  17 |           9 |             4 | t
      

Name

ST_SimplifyPreserveTopology — 使用Douglas-Peucker算法返回几何图形的简化和有效版本。

Synopsis

geometry ST_SimplifyPreserveTopology(geometry geomA, float tolerance);

描述

使用Douglas-Peucker算法返回给定几何体的简化版本。将避免创建无效的衍生几何图形(特别是多边形)。我实际上只对(多)线和(多)多边形做了一些事情,但你可以安全地用任何类型的几何体调用它。由于简化是在逐个对象的基础上进行的,因此您还可以将GeometryCollection提供给此函数。

由GEOS模块执行。

可用性:1.3.3

示例

与简化相同的示例,但我们看到保留拓扑可防止过度简化。这个圆最多只能变成一个正方形。

SELECT ST_Npoints(geom) As np_before, ST_NPoints(ST_SimplifyPreserveTopology(geom,0.1)) As np01_notbadcircle, ST_NPoints(ST_SimplifyPreserveTopology(geom,0.5)) As np05_notquitecircle,
ST_NPoints(ST_SimplifyPreserveTopology(geom,1)) As np1_octagon, ST_NPoints(ST_SimplifyPreserveTopology(geom,10)) As np10_square,
ST_NPoints(ST_SimplifyPreserveTopology(geom,100)) As  np100_stillsquare
FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) As foo;

--result--
 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare
-----------+-------------------+---------------------+-------------+---------------+-------------------
        49 |                33 |                  17 |           9 |             5 |                 5
                

另请参阅

ST_Simplify


Name

ST_SimplifyVW — 使用Visvalingam-Whyatt算法返回几何的简化版本

Synopsis

geometry ST_SimplifyVW(geometry geomA, float tolerance);

描述

使用Visvalingam-Whyatt算法返回给定几何体的简化版本。我实际上只对(多)线和(多)多边形做了一些事情,但你可以安全地用任何类型的几何体调用它。由于简化是在逐个对象的基础上进行的,因此您还可以将GeometryCollection提供给此函数。

[Note]

请注意,返回的几何可能会失去简单性(请参见 ST_IsSimple )

[Note]

注意:拓扑可能不会保留,并可能导致无效的几何图形。使用(请参见 ST_SimplifyPreserveTopology )以保持拓扑结构。

[Note]

此函数处理3D,第三维将影响结果。

可用性:2.2.0

示例

简化了线串,最小面积阈值为30。

select ST_AsText(ST_SimplifyVW(geom,30)) simplified
FROM (SELECT  'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
-result
 simplified
------------------------------
LINESTRING(5 2,7 25,10 10)

                

Name

ST_ChaikinSmoothing — 使用Chaikin算法返回几何的平滑版本

Synopsis

geometry ST_ChaikinSmoothing(geometry geom, integer nIterations = 1, boolean preserveEndPoints = false);

描述

使用Chaikin算法返回给定几何体的“平滑”版本。看见 查金斯算法 寻求对这一过程的解释。对于每一次迭代,顶点的数量将增加一倍。该函数将新顶点放置在每个点之前和之后直线的1/4处,并删除原始点。要减少点数,请在结果上使用其中一个简化函数。新点获得所有包含的维度的插值值,也包括z和m。

第二个参数,迭代次数限制为最多5次

注意第三个参数仅对面有效,对于线串将被忽略

此函数处理3D,第三维将影响结果。

[Note]

请注意,返回的几何体将比原始几何体获得更多的点。要再次减少点数,请对结果使用其中一个简化函数。(见 ST_SimplifyST_SimplifyVW )

可用性:2.5.0

示例

对三角形进行平滑处理

select ST_AsText(ST_ChaikinSmoothing(geom)) smoothed
FROM (SELECT  'POLYGON((0 0, 8 8, 0 16, 0 0))'::geometry geom) As foo;
┌───────────────────────────────────────────┐
│                 smoothed                  │
├───────────────────────────────────────────┤
│ POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2)) │
└───────────────────────────────────────────┘
                

Name

ST_SetEffectiveArea — 使用Visvalingam-Whyatt算法设置每个顶点的有效面积。

Synopsis

geometry ST_SetEffectiveArea(geometry geomA, float threshold = 0, integer set_area = 1);

描述

使用Visvalingam-Whyatt算法设置每个顶点的有效面积。将有效面积存储为顶点的M值。如果使用可选的“thhold”参数,将返回一个简化的几何体,其中只包含有效面积大于或等于阈值的顶点。

当指定阈值时,此函数可用于服务器端简化。另一种选择是使用零的阈值。在这种情况下,完整的几何体将返回有效区域作为M值,客户端可以使用它来非常快速地简化。

我实际上只对(多)线和(多)多边形做了一些事情,但你可以安全地用任何类型的几何体调用它。由于简化是在逐个对象的基础上进行的,因此您还可以将GeometryCollection提供给此函数。

[Note]

请注意,返回的几何可能会失去简单性(请参见 ST_IsSimple )

[Note]

注意:拓扑可能不会保留,并可能导致无效的几何图形。使用(请参见 ST_SimplifyPreserveTopology )以保持拓扑结构。

[Note]

输出几何将丢失M值中的所有先前信息

[Note]

此函数处理3D和第三个维度将影响有效区域

可用性:2.2.0

示例

计算线条的有效面积。由于我们使用的阈值为零,因此将返回输入几何体中的所有顶点。

select ST_AsText(ST_SetEffectiveArea(geom)) all_pts, ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30
FROM (SELECT  'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
-result
 all_pts | thrshld_30
-----------+-------------------+
LINESTRING M (5 2 3.40282346638529e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.40282346638529e+38) | LINESTRING M (5 2 3.40282346638529e+38,7 25 49.5,10 10 3.40282346638529e+38)

                

另请参阅

ST_SimplifyVW


Name

ST_VoronoiLines — 返回几何体顶点的Voronoi图的边界。

Synopsis

geometry ST_VoronoiLines( g1 geometry , tolerance float8 , extend_to geometry );

描述

ST_VoronoiLines计算二维 沃罗诺伊图 从提供的几何图形的顶点返回,并将该关系图中的单元格之间的边界作为多行字符串返回。如果输入几何图形为空,则返回空。如果输入几何只包含一个顶点,则返回空几何集合。如果EXTEND_TO封套的面积为零,则返回空的几何图形集合。

可选参数:

  • “公差”:顶点被视为相等的距离。通过提供一个非零的容差距离,可以提高算法的鲁棒性。(默认值=0.0)

  • ‘EXTEND_TO’:如果提供一个几何图形作为“EXTEND_TO”参数,则图表将扩展到覆盖“EXTEND_TO”几何图形的包络,除非该包络小于默认包络(默认=NULL,默认包络是输入几何图形的边界框,每个方向扩展约50%)。

由GEOS模块执行。

可用性:2.3.0

示例

公差为30个单位的Voronoi系列

SELECT ST_VoronoiLines(geom, 30) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) As g

-- ST_AsText output
MULTILINESTRING((135.555555555556 270,36.8181818181818 92.2727272727273),(36.8181818181818 92.2727272727273,-110 43.3333333333333),(230 -45.7142857142858,36.8181818181818 92.2727272727273))


Name

ST_VoronoiPolygons — 返回几何体顶点的Voronoi图的单元格。

Synopsis

geometry ST_VoronoiPolygons( g1 geometry , tolerance float8 , extend_to geometry );

描述

ST_VoronoiPolygons计算二维 沃罗诺伊图 从提供的几何体的顶点。结果是一个覆盖比输入顶点范围更大的封套的几何体集合。如果输入几何图形为空,则返回空。如果输入几何只包含一个顶点,则返回空几何集合。如果EXTEND_TO封套的面积为零,则返回空的几何图形集合。

可选参数:

  • “公差”:顶点被视为相等的距离。通过提供一个非零的容差距离,可以提高算法的鲁棒性。(默认值=0.0)

  • ‘EXTEND_TO’:如果提供一个几何图形作为“EXTEND_TO”参数,则图表将扩展到覆盖“EXTEND_TO”几何图形的包络,除非该包络小于默认包络(默认=NULL,默认包络是输入几何图形的边界框,每个方向扩展约50%)。

由GEOS模块执行。

可用性:2.3.0

示例

叠加在Voronoi图顶部的点

SELECT
    ST_VoronoiPolygons(geom) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) As g;

-- ST_AsText output
GEOMETRYCOLLECTION(POLYGON((-110 43.3333333333333,-110 270,100.5 270,59.3478260869565 132.826086956522,36.8181818181818 92.2727272727273,-110 43.3333333333333)),
POLYGON((55 -90,-110 -90,-110 43.3333333333333,36.8181818181818 92.2727272727273,55 79.2857142857143,55 -90)),
POLYGON((230 47.5,230 -20.7142857142857,55 79.2857142857143,36.8181818181818 92.2727272727273,59.3478260869565 132.826086956522,230 47.5)),POLYGON((230 -20.7142857142857,230 -90,55 -90,55 79.2857142857143,230 -20.7142857142857)),
POLYGON((100.5 270,230 270,230 47.5,59.3478260869565 132.826086956522,100.5 270)))

Voronoi,公差30个单位

SELECT ST_VoronoiPolygons(geom, 30) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) As g;

-- ST_AsText output
GEOMETRYCOLLECTION(POLYGON((-110 43.3333333333333,-110 270,100.5 270,59.3478260869565 132.826086956522,36.8181818181818 92.2727272727273,-110 43.3333333333333)),
POLYGON((230 47.5,230 -45.7142857142858,36.8181818181818 92.2727272727273,59.3478260869565 132.826086956522,230 47.5)),POLYGON((230 -45.7142857142858,230 -90,-110 -90,-110 43.3333333333333,36.8181818181818 92.2727272727273,230 -45.7142857142858)),
POLYGON((100.5 270,230 270,230 47.5,59.3478260869565 132.826086956522,100.5 270)))

Voronoi,公差为30个单位,作为多线串

SELECT ST_VoronoiLines(geom, 30) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) As g

-- ST_AsText output
MULTILINESTRING((135.555555555556 270,36.8181818181818 92.2727272727273),(36.8181818181818 92.2727272727273,-110 43.3333333333333),(230 -45.7142857142858,36.8181818181818 92.2727272727273))

8.15. 仿射变换

Abstract

这些函数使用以下命令更改几何的位置和形状 仿射变换

ST_Affine — 将3D仿射变换应用于几何体。
ST_Rotate — 绕原点旋转几何图形。
ST_RotateX — 绕X轴旋转几何图形。
ST_RotateY — 绕Y轴旋转几何图形。
ST_RotateZ — 绕Z轴旋转几何图形。
ST_Scale — 按给定因子缩放几何图形。
ST_Translate — 按给定偏移平移几何图形。
ST_TransScale — 按给定的偏移和因子平移和缩放几何图形。

Name

ST_Affine — 将3D仿射变换应用于几何体。

Synopsis

geometry ST_Affine(geometry geomA, float a, float b, float c, float d, float e, float f, float g, float h, float i, float xoff, float yoff, float zoff);

geometry ST_Affine(geometry geomA, float a, float b, float d, float e, float xoff, float yoff);

描述

将3D仿射变换应用于几何体,一步完成平移、旋转、缩放等操作。

Version 1: The call

ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) 

represents the transformation matrix

/ a  b  c  xoff \
| d  e  f  yoff |
| g  h  i  zoff |
\ 0  0  0     1 /

and the vertices are transformed as follows:

x' = a*x + b*y + c*z + xoff
y' = d*x + e*y + f*z + yoff
z' = g*x + h*y + i*z + zoff

All of the translate / scale functions below are expressed via such an affine transformation.

Version 2: Applies a 2d affine transformation to the geometry. The call

ST_Affine(geom, a, b, d, e, xoff, yoff)

represents the transformation matrix

/  a  b  0  xoff  \       /  a  b  xoff  \
|  d  e  0  yoff  | rsp.  |  d  e  yoff  |
|  0  0  1     0  |       \  0  0     1  /
\  0  0  0     1  /

and the vertices are transformed as follows:

x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z 

This method is a subcase of the 3D method above.

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

可用性:1.1.2。1.2.2中将名称从Affine更改为ST_Affine

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

--Rotate a 3d line 180 degrees about the z axis.  Note this is long-hand for doing ST_Rotate();
 SELECT ST_AsEWKT(ST_Affine(geom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(pi()), 0,  0, 0, 1,  0, 0, 0)) As using_affine,
         ST_AsEWKT(ST_Rotate(geom, pi())) As using_rotate
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
        using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)

--Rotate a 3d line 180 degrees in both the x and z axis
SELECT ST_AsEWKT(ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
           st_asewkt
-------------------------------
 LINESTRING(-1 -2 -3,-1 -4 -3)
(1 row)
                

Name

ST_Rotate — 绕原点旋转几何图形。

Synopsis

geometry ST_Rotate(geometry geomA, float rotRadians);

geometry ST_Rotate(geometry geomA, float rotRadians, float x0, float y0);

geometry ST_Rotate(geometry geomA, float rotRadians, geometry pointOrigin);

描述

绕原点逆时针旋转几何图形弧度。旋转原点可以指定为点几何图形,也可以指定为x和y坐标。如果未指定原点,几何图形将绕点(0 0)旋转。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

增强:2.0.0添加了用于指定旋转原点的其他参数。

可用性:1.1.2。在1.2.2中将名称从Rotate更改为ST_Rotate

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--Rotate 180 degrees
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()));
               st_asewkt
---------------------------------------
 LINESTRING(-50 -160,-50 -50,-100 -50)
(1 row)

--Rotate 30 degrees counter-clockwise at x=50, y=160
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160));
                                 st_asewkt
---------------------------------------------------------------------------
 LINESTRING(50 160,105 64.7372055837117,148.301270189222 89.7372055837117)
(1 row)

--Rotate 60 degrees clockwise from centroid
SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom)))
FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo;
                           st_asewkt
--------------------------------------------------------------
 LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708)
(1 row)
                

Name

ST_RotateX — 绕X轴旋转几何图形。

Synopsis

geometry ST_RotateX(geometry geomA, float rotRadians);

描述

绕X轴旋转几何图形A-rotRadians。

[Note]

ST_RotateX(geomA,rotRadians) 是以下的缩写 ST_Affine(geomA,1,0,0,0,cos(RotRadians),-sin(RotRadians),0,sin(RotRadians),cos(RotRadians),0,0,0)

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

可用性:1.1.2。在1.2.2中将名称从RotateX更改为ST_RotateX

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--Rotate a line 90 degrees along x-axis
SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
                 st_asewkt
---------------------------
 LINESTRING(1 -3 2,1 -1 1)

Name

ST_RotateY — 绕Y轴旋转几何图形。

Synopsis

geometry ST_RotateY(geometry geomA, float rotRadians);

描述

绕y轴旋转几何图形A-rotRadians。

[Note]

ST_RotateY(几何A,旋转弧度) 是以下的缩写 ST_Affine(geomA,cos(RotRadians),0,sin(RotRadians),0,1,0,-sin(RotRadians),0,cos(RotRadians),0,0,0)

可用性:1.1.2。在1.2.2中将名称从RotateY更改为ST_RotateY

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--Rotate a line 90 degrees along y-axis
 SELECT ST_AsEWKT(ST_RotateY(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
                 st_asewkt
---------------------------
 LINESTRING(3 2 -1,1 1 -1)

Name

ST_RotateZ — 绕Z轴旋转几何图形。

Synopsis

geometry ST_RotateZ(geometry geomA, float rotRadians);

描述

绕Z轴旋转几何图形A-rotRadians。

[Note]

这是ST_Rotate的同义词

[Note]

ST_RotateZ(几何A,旋转弧度) 是以下的缩写 SELECT ST_Affine(geomA,cos(RotRadians),-sin(RotRadians),0,sin(RotRadians),cos(RotRadians),0,0,0,1,0,0,0)

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

可用性:1.1.2。在1.2.2中将名称从RotateZ更改为ST_RotateZ

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

--Rotate a line 90 degrees along z-axis
SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
                 st_asewkt
---------------------------
 LINESTRING(-2 1 3,-1 1 1)

 --Rotate a curved circle around z-axis
SELECT ST_AsEWKT(ST_RotateZ(geom, pi()/2))
FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) As geom) As foo;

                                                                                                           st_asewkt
----------------------------------------------------------------------------------------------------------------------------
 CURVEPOLYGON(CIRCULARSTRING(-567 237,-564.87867965644 236.12132034356,-564 234,-569.12132034356 231.87867965644,-567 237))


Name

ST_Scale — 按给定因子缩放几何图形。

Synopsis

geometry ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);

geometry ST_Scale(geometry geomA, float XFactor, float YFactor);

geometry ST_Scale(geometry geom, geometry factor);

geometry ST_Scale(geometry geom, geometry factor, geometry origin);

描述

通过将纵坐标与相应的系数参数相乘,将几何图形缩放到新尺寸。

将几何体作为 因素 参数允许传递2d、3dm、3dz或4d点来为所有支持的维度设置比例因子。中缺少的维度 因素 点等效于不缩放相应的尺寸。

三几何图形变量允许传入用于缩放的“假原点”。例如,使用几何体的质心作为假原点,这样就可以进行“原地缩放”。如果没有假原点,则会相对于实际原点进行缩放,因此所有坐标都将与比例因子相乘。

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

可用性:1.1.0。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

增强:2.2.0支持扩展所有维度( 因素 参数)。

增强:2.5.0支持相对于本地源进行缩放( 原点 参数)。

This function supports Polyhedral surfaces.

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports M coordinates.

示例

--Version 1: scale X, Y, Z
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75, 0.8));
                          st_asewkt
--------------------------------------
 LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8)

--Version 2: Scale X Y
 SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75));
                        st_asewkt
----------------------------------
 LINESTRING(0.5 1.5 3,0.5 0.75 1)

--Version 3: Scale X Y Z M
 SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'),
   ST_MakePoint(0.5, 0.75, 2, -1)));
                               st_asewkt
----------------------------------------
 LINESTRING(0.5 1.5 6 -4,0.5 0.75 2 -1)

--Version 4: Scale X Y using false origin
SELECT ST_AsText(ST_Scale('LINESTRING(1 1, 2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry));
      st_astext
---------------------
 LINESTRING(1 1,3 3)


Name

ST_Translate — 按给定偏移平移几何图形。

Synopsis

geometry ST_Translate(geometry g1, float deltax, float deltay);

geometry ST_Translate(geometry g1, float deltax, float deltay, float deltaz);

描述

返回坐标转换为增量x、增量y、增量z单位的新几何图形。单位基于此几何图形的空间参考(SRID)中定义的单位。

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

可用性:1.2.2

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

将一个点移动1度经度

SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) As wgs_transgeomtxt;

        wgs_transgeomtxt
        ---------------------
        POINT(-70.01 42.37)
                

将线串移动1度经度和1/2度纬度

SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)',4326),1,0.5)) As wgs_transgeomtxt;
                   wgs_transgeomtxt
        ---------------------------------------
        LINESTRING(-70.01 42.87,-70.11 42.88)
                

移动三维点

SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' As geometry), 5, 12,3));
        st_asewkt
        ---------
        POINT(5 12 3)
                

移动曲线和点

SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2));
                                                                                                                 st_astext
------------------------------------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 7.1213,7 9,9 11,5 5)),POINT(2 5))

Name

ST_TransScale — 按给定的偏移和因子平移和缩放几何图形。

Synopsis

geometry ST_TransScale(geometry geomA, float deltaX, float deltaY, float XFactor, float YFactor);

描述

使用增量X和增量Y参数转换几何图形,然后使用仅在二维中工作的X系数和Y系数参数对其进行缩放。

[Note]

ST_TransScale(geomA,增量X,增量Y,X因子,Y因子) 是以下的缩写 ST_Affine(geomA,X因子,0,0,0,Y因子,0,0,0,1,增量X*X因子,增量Y*Y因子,0)

[Note]

在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复

可用性:1.1.0。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2));
                  st_asewkt
-----------------------------
 LINESTRING(1.5 6 3,1.5 4 1)


--Buffer a point to get an approximation of a circle, convert to curve and then translate 1,2 and scale it 3,4
  SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4));
                                                                                                                  st_astext
------------------------------------------------------------------------------------------------------------------------------
 CURVEPOLYGON(CIRCULARSTRING(714 2276,711.363961030679 2267.51471862576,705 2264,698.636038969321 2284.48528137424,714 2276))

另请参阅

ST_Affine, ST_Translate

8.16. 聚类函数

Abstract

这些函数实现了几何体集合的集群算法。

ST_ClusterDBSCAN — 使用DBSCAN算法返回每个输入几何图形的群集ID的窗口函数。
ST_ClusterIntersecting — 聚合函数,用于将输入几何图形聚集到相连的集合中。
ST_ClusterKMeans — 窗口函数,使用K-Means算法返回每个输入几何图形的群集ID。
ST_ClusterWithin — 按分隔距离对输入几何图形进行聚类的聚合函数。

Name

ST_ClusterDBSCAN — 使用DBSCAN算法返回每个输入几何图形的群集ID的窗口函数。

Synopsis

integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints);

描述

根据的2D实现,返回每个输入几何的簇号 基于密度的噪声应用空间集群(DBSCAN) 算法。不像 ST_ClusterKMeans ,它不需要指定簇数,而是使用所需的 距离 ( 易办事 )和密度( MinPoints )参数来构建每个集群。

如果输入几何体符合以下任一条件,则会将其添加到簇中:

  • A "core" geometry, that is within eps distance of at least minpoints input geometries (including itself) or

  • A "border" geometry, that is within eps distance of a core geometry.

请注意,边界几何图形可能位于 易办事 多个簇中核心几何体的距离;在这种情况下,任一指定都是正确的,并且边界几何体将被任意分配给其中一个可用簇。在这些情况下,可以使用以下数量生成正确的集群 MinPoints 几何图形。当边界几何图形的分配不明确时,如果窗口定义中包括ORDER BY子句,则重复调用ST_ClusterDBSCAN将产生相同的结果,但群集分配可能不同于相同算法的其他实现。

[Note]

不满足加入任何其他聚类的条件的输入几何图形将被指定簇号为NULL。

可用性:2.3.0

示例

将簇号分配给彼此相距50米内的每个多边形。每个聚类至少需要2个面

在50米范围内,每个集群至少2个。单例的CID为空

SELECT name, ST_ClusterDBSCAN(geom, eps := 50, minpoints := 2) over () AS cid
FROM boston_polys
WHERE name > '' AND building > ''
        AND ST_DWithin(geom,
        ST_Transform(
            ST_GeomFromText('POINT(-71.04054 42.35141)', 4326), 26986),
           500);

                name                 | bucket
-------------------------------------+--------
 Manulife Tower                      |      0
 Park Lane Seaport I                 |      0
 Park Lane Seaport II                |      0
 Renaissance Boston Waterfront Hotel |      0
 Seaport Boston Hotel                |      0
 Seaport Hotel & World Trade Center  |      0
 Waterside Place                     |      0
 World Trade Center East             |      0
 100 Northern Avenue                 |      1
 100 Pier 4                          |      1
 The Institute of Contemporary Art   |      1
 101 Seaport                         |      2
 District Hall                       |      2
 One Marina Park Drive               |      2
 Twenty Two Liberty                  |      2
 Vertex                              |      2
 Vertex                              |      2
 Watermark Seaport                   |      2
 Blue Hills Bank Pavilion            |   NULL
 World Trade Center West             |   NULL
(20 rows)

将具有相同簇号的地块合并为单个几何图形。它使用命名参数调用

SELECT cid, ST_Collect(geom) AS cluster_geom, array_agg(parcel_id) AS ids_in_cluster FROM (
    SELECT parcel_id, ST_ClusterDBSCAN(geom, eps := 0.5, minpoints := 5) over () AS cid, geom
    FROM parcels) sq
GROUP BY cid;
    

Name

ST_ClusterIntersecting — 聚合函数,用于将输入几何图形聚集到相连的集合中。

Synopsis

geometry[] ST_ClusterIntersecting(geometry set g);

描述

ST_ClusterIntersecting是一个聚合函数,它返回GeometryCollection数组,其中每个GeometryCollection表示一组相互连接的几何图形。

可用性:2.2.0

示例

WITH testdata AS
  (SELECT unnest(ARRAY['LINESTRING (0 0, 1 1)'::geometry,
                       'LINESTRING (5 5, 4 4)'::geometry,
                       'LINESTRING (6 6, 7 7)'::geometry,
                       'LINESTRING (0 0, -1 -1)'::geometry,
                       'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))'::geometry]) AS geom)

SELECT ST_AsText(unnest(ST_ClusterIntersecting(geom))) FROM testdata;

--result

st_astext
---------
GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),LINESTRING(5 5,4 4),LINESTRING(0 0,-1 -1),POLYGON((0 0,4 0,4 4,0 4,0 0)))
GEOMETRYCOLLECTION(LINESTRING(6 6,7 7))
        

Name

ST_ClusterKMeans — 窗口函数,使用K-Means算法返回每个输入几何图形的群集ID。

Synopsis

integer ST_ClusterKMeans(geometry winset geom, integer number_of_clusters, float max_radius);

描述

退货 K-均值 每个输入几何体的簇号。用于聚集的距离是二维几何图形的质心之间的距离,以及三维几何图形的边界框中心之间的距离。对于点输入,M坐标将被视为输入的权重,并且必须大于0。

max_radius 如果设置,将导致ST_ClusterKMeans生成比 K 确保输出中没有任何群集的半径大于 max_radius 。这在可达性分析中很有用。

增强:3.2.0支持 max_radius

增强:3.1.0对3D几何图形和权重的支持

可用性:2.3.0

示例

生成虚拟地块集,例如:

CREATE TABLE parcels AS
SELECT lpad((row_number() over())::text,3,'0') As parcel_id, geom,
('{residential, commercial}'::text[])[1 + mod(row_number()OVER(),2)] As type
FROM
    ST_Subdivide(ST_Buffer('SRID=3857;LINESTRING(40 100, 98 100, 100 150, 60 90)'::geometry,
    40, 'endcap=square'),12) As geom;

按聚类编号(CID)进行颜色编码的地块

SELECT ST_ClusterKMeans(geom, 3) OVER() AS cid, parcel_id, geom
    FROM parcels;

cid | parcel_id |   geom
-----+-----------+---------------
   0 | 001       | 0103000000...
   0 | 002       | 0103000000...
   1 | 003       | 0103000000...
   0 | 004       | 0103000000...
   1 | 005       | 0103000000...
   2 | 006       | 0103000000...
   2 | 007       | 0103000000...

按类型划分地块簇:

SELECT ST_ClusterKMeans(geom, 3) over (PARTITION BY type) AS cid, parcel_id, type
    FROM parcels;
cid | parcel_id |    type
-----+-----------+-------------
   1 | 005       | commercial
   1 | 003       | commercial
   2 | 007       | commercial
   0 | 001       | commercial
   1 | 004       | residential
   0 | 002       | residential
   2 | 006       | residential

例如:使用3D聚类和加权对预聚聚的行星规模的数据人口数据集进行聚类。根据以下条件确定至少20个地区 孔图尔人口数据 距离其中心不超过3000公里的区域:

create table kontur_population_3000km_clusters as
select
    geom,
    ST_ClusterKMeans(
        ST_Force4D(
            ST_Transform(ST_Force3D(geom), 4978), -- cluster in 3D XYZ CRS
            mvalue := population -- set clustering to be weighed by population
        ),
        20,                      -- aim to generate at least 20 clusters
        max_radius := 3000000    -- but generate more to make each under 3000 km radius
    ) over () as cid
from
    kontur_population;
    

聚集到以上规格的世界人口产生了46个集群。集群集中在人口稠密的地区(纽约、莫斯科)。格陵兰岛是一个星系团。有一些岛群横跨安蒂默里迪亚山脉。簇边遵循地球的曲率。


Name

ST_ClusterWithin — 按分隔距离对输入几何图形进行聚类的聚合函数。

Synopsis

geometry[] ST_ClusterWithin(geometry set g, float8 distance);

描述

ST_ClusterWiThin是一个聚合函数,它返回GeometryCollection数组,其中每个GeometryCollection表示一组相隔不超过指定距离的几何图形。(距离是以SRID为单位的笛卡尔距离。)

可用性:2.2.0

示例

WITH testdata AS
  (SELECT unnest(ARRAY['LINESTRING (0 0, 1 1)'::geometry,
                       'LINESTRING (5 5, 4 4)'::geometry,
                       'LINESTRING (6 6, 7 7)'::geometry,
                       'LINESTRING (0 0, -1 -1)'::geometry,
                       'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))'::geometry]) AS geom)

SELECT ST_AsText(unnest(ST_ClusterWithin(geom, 1.4))) FROM testdata;

--result

st_astext
---------
GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),LINESTRING(5 5,4 4),LINESTRING(0 0,-1 -1),POLYGON((0 0,4 0,4 4,0 4,0 0)))
GEOMETRYCOLLECTION(LINESTRING(6 6,7 7))
        

8.17. 边界框函数

Abstract

这些函数生成边界框或在边界框上操作。它们还可以通过使用自动或显式强制转换来提供和接受几何值。

另请参阅 Section 15.7, “PostGIS Box Functions”

方框2D — 返回表示几何图形的2D范围的BOX2D。
Box3D — 返回表示几何图形的3D范围的BOX3D。
ST_EstimatedExtent — 返回空间表的估计范围。
ST_Expand — 返回从另一个边框或几何图形展开的边框。
ST_Extent — 返回几何图形边界框的聚合函数。
ST_3DExtent — 返回几何图形的3D边界框的聚合函数。
ST_MakeBox2D — 创建由两个二维点几何图形定义的BOX2D。
ST_3DMakeBox — 创建由两个三维点几何图形定义的BOX3D。
ST_XMax — 返回二维或三维边界框或几何图形的X最大值。
ST_XMin — 返回二维或三维边界框或几何图形的X最小值。
ST_YMax — 返回二维或三维边界框或几何图形的Y最大值。
ST_YMin — 返回二维或三维边界框或几何图形的Y最小值。
ST_ZMax — 返回二维或三维边界框或几何图形的Z最大值。
ST_ZMin — 返回二维或三维边界框或几何图形的Z最小值。

Name

方框2D — 返回表示几何图形的2D范围的BOX2D。

Synopsis

box2d Box2D(geometry geom);

描述

返回一个 框2d 表示几何图形的二维范围。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));

box2d
---------
BOX(1 2,5 6)
SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));

box2d
--------
BOX(220186.984375 150406,220288.25 150506.140625)

另请参阅

Box3D, ST_GeomFromText


Name

Box3D — 返回表示几何图形的3D范围的BOX3D。

Synopsis

box3d Box3D(geometry geom);

描述

返回一个 方框3d 表示几何图形的3D范围。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

This function supports 3d and will not drop the z-index.

示例

SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));

Box3d
---------
BOX3D(1 2 3,5 6 5)
SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'));

Box3d
--------
BOX3D(220227 150406 1,220268 150415 1)

Name

ST_EstimatedExtent — 返回空间表的估计范围。

Synopsis

box2d ST_EstimatedExtent(text schema_name, text table_name, text geocolumn_name, boolean parent_only);

box2d ST_EstimatedExtent(text schema_name, text table_name, text geocolumn_name);

box2d ST_EstimatedExtent(text table_name, text geocolumn_name);

描述

将空间表的估计范围作为 框2d 。如果未指定,则使用当前架构。估计的范围取自几何列的统计数据。这通常比使用以下命令计算表的确切范围快得多 ST_ExtentST_3DExtent

默认行为是还使用从子表(带有继承的表)收集的统计信息(如果可用)。如果 parent_only 设置为True,则只使用给定表的统计信息,而忽略子表。

对于PostgreSQL > =8.0.0通过真空分析收集统计数据,结果程度约为实际的95%。对于PostgreSQL < 8.0.0通过运行以下命令收集统计信息 UPDATE_GEOMETRY_STATS() 且结果范围准确。

[Note]

如果没有统计数据(空表或未调用分析),则此函数返回NULL。在1.5.4版之前,抛出了一个异常。

可用性:1.0.0

更改:2.1.0。直到2.0.x版本,这被称为ST_ESTIMATED_EXTEND。

This method supports Circular Strings and Curves

示例

SELECT ST_EstimatedExtent('ny', 'edges', 'geom');
--result--
BOX(-8877653 4912316,-8010225.5 5589284)

SELECT ST_EstimatedExtent('feature_poly', 'geom');
--result--
BOX(-124.659652709961 24.6830825805664,-67.7798080444336 49.0012092590332)
                

另请参阅

ST_Extent, ST_3DExtent


Name

ST_Expand — 返回从另一个边框或几何图形展开的边框。

Synopsis

geometry ST_Expand(geometry geom, float units_to_expand);

geometry ST_Expand(geometry geom, float dx, float dy, float dz=0, float dm=0);

box2d ST_Expand(box2d box, float units_to_expand);

box2d ST_Expand(box2d box, float dx, float dy);

box3d ST_Expand(box3d box, float units_to_expand);

box3d ST_Expand(box3d box, float dx, float dy, float dz=0);

描述

通过指定框应在两个轴上展开的单个距离,或通过指定每个轴的展开距离,返回从输入的边框展开的边框。使用双精度。可用于距离查询,或用于向查询添加边界框筛选器以利用空间索引。

除了接受和返回几何的ST_Expand版本之外,还提供了接受和返回的变体 框2d 方框3d 数据类型。

距离以输入的空间参考系为单位。

ST_Expand类似于 ST_Buffer ,除非缓冲在所有方向上扩展几何体,而ST_Expand则沿每个轴扩展边界框。

[Note]

在1.3版之前,ST_Expand与 ST_Distance 以执行可索引距离查询。例如, 几何图形 & & ST_Expand(‘point(10 20)’,10)和ST_Distance(geom,‘point(10 20)’) < 10 。这已经被更简单、更高效的 ST_DWithin 功能。

可用性:1.5.0行为更改为输出双精度,而不是浮动4坐标。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

增强:增加2.3.0支持,可以在不同的维度以不同的数量扩展一个盒子。

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

[Note]

下面的示例使用美国国家地图集等面积(SRID=2163),这是一个米投影

--10 meter expanded box around bbox of a linestring
SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d);
                                         st_expand
------------------------------------
 BOX(2312882 110666,2312990 110724)

--10 meter expanded 3D box of a 3D box
SELECT ST_Expand(CAST('BOX3D(778783 2951741 1,794875 2970042.61545891 10)' As box3d),10)
                                                          st_expand
-----------------------------------------------------
 BOX3D(778773 2951731 -9,794885 2970052.61545891 20)

 --10 meter geometry astext rep of a expand box around a point geometry
 SELECT ST_AsEWKT(ST_Expand(ST_GeomFromEWKT('SRID=2163;POINT(2312980 110676)'),10));
                                                                                        st_asewkt
-------------------------------------------------------------------------------------------------
 SRID=2163;POLYGON((2312970 110666,2312970 110686,2312990 110686,2312990 110666,2312970 110666))

                

Name

ST_Extent — 返回几何图形边界框的聚合函数。

Synopsis

box2d ST_Extent(geometry set geomfield);

描述

一个聚合函数,它返回 框2d 包围一组几何图形的边界框。

边界框坐标位于输入几何图形的空间参考系中。

ST_EXTEND在概念上类似于Oracle Spatial/Locator的SDO_AGGR_MBR。

[Note]

ST_Extent返回仅包含X和Y坐标的长方体,即使是3D几何图形也是如此。要返回XYZ坐标,请使用 ST_3DExtent

[Note]

归来的人 方框3d 值不包括SRID。使用 ST_SetSRID 将其转换为具有SRID元数据的几何体。SRID与输入几何图形相同。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

[Note]

以下示例使用马萨诸塞州平面ft(SRID=2249)

SELECT ST_Extent(geom) as bextent FROM sometable;
                                         st_bextent
------------------------------------
BOX(739651.875 2908247.25,794875.8125 2970042.75)


--Return extent of each category of geometries
SELECT ST_Extent(geom) as bextent
FROM sometable
GROUP BY category ORDER BY category;

                                          bextent                       |         name
----------------------------------------------------+----------------
 BOX(778783.5625 2951741.25,794875.8125 2970042.75) | A
 BOX(751315.8125 2919164.75,765202.6875 2935417.25) | B
 BOX(739651.875 2917394.75,756688.375 2935866)      | C

 --Force back into a geometry
 -- and render the extended text representation of that geometry
SELECT ST_SetSRID(ST_Extent(geom),2249) as bextent FROM sometable;

                                bextent
--------------------------------------------------------------------------------
 SRID=2249;POLYGON((739651.875 2908247.25,739651.875 2970042.75,794875.8125 2970042.75,
 794875.8125 2908247.25,739651.875 2908247.25))
                

Name

ST_3DExtent — 返回几何图形的3D边界框的聚合函数。

Synopsis

box3d ST_3DExtent(geometry set geomfield);

描述

一个聚合函数,它返回 方框3d (包括Z坐标)边界一组几何图形的边界框。

边界框坐标位于输入几何图形的空间参考系中。

[Note]

归来的人 方框3d 值不包括SRID。使用 ST_SetSRID 将其转换为具有SRID元数据的几何体。SRID与输入几何图形相同。

增强:2.0.0引入了对多面体曲面、三角形和三角网的支持。

已更改:2.0.0在以前的版本中,这通常称为ST_Extent3D

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_3DExtent(foo.geom) As b3extent
FROM (SELECT ST_MakePoint(x,y,z) As geom
        FROM generate_series(1,3) As x
                CROSS JOIN generate_series(1,2) As y
                CROSS JOIN generate_series(0,2) As Z) As foo;
          b3extent
--------------------
 BOX3D(1 1 0,3 2 2)

--Get the extent of various elevated circular strings
SELECT ST_3DExtent(foo.geom) As b3extent
FROM (SELECT ST_Translate(ST_Force_3DZ(ST_LineToCurve(ST_Buffer(ST_Point(x,y),1))),0,0,z) As geom
        FROM generate_series(1,3) As x
                CROSS JOIN generate_series(1,2) As y
                CROSS JOIN generate_series(0,2) As Z) As foo;

        b3extent
--------------------
 BOX3D(1 0 0,4 2 2)
                

Name

ST_MakeBox2D — 创建由两个二维点几何图形定义的BOX2D。

Synopsis

box2d ST_MakeBox2D(geometry pointLowLeft, geometry pointUpRight);

描述

创建一个 框2d 由两个点几何图形定义。这对于执行范围查询很有用。

示例

--Return all features that fall reside or partly reside in a US national atlas coordinate bounding box
--It is assumed here that the geometries are stored with SRID = 2163 (US National atlas equal area)
SELECT feature_id, feature_name, geom
FROM features
WHERE geom && ST_SetSRID(ST_MakeBox2D(ST_Point(-989502.1875, 528439.5625),
        ST_Point(-987121.375 ,529933.1875)),2163)

Name

ST_3DMakeBox — 创建由两个三维点几何图形定义的BOX3D。

Synopsis

box3d ST_3DMakeBox(geometry point3DLowLeftBottom, geometry point3DUpRightTop);

描述

创建一个 方框3d 由两个三维点几何图形定义。

该函数支持3D,不会丢弃z索引。

已更改:2.0.0在以前的版本中,这过去称为ST_MakeBox3D

示例

SELECT ST_3DMakeBox(ST_MakePoint(-989502.1875, 528439.5625, 10),
        ST_MakePoint(-987121.375 ,529933.1875, 10)) As abb3d

--bb3d--
--------
BOX3D(-989502.1875 528439.5625 10,-987121.375 529933.1875 10)
        

Name

ST_XMax — 返回二维或三维边界框或几何图形的X最大值。

Synopsis

float ST_XMax(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的X最大值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)');
st_xmax
-------
4

SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
st_xmax
-------
5

SELECT ST_XMax(CAST('BOX(-3 2, 3 4)' As box2d));
st_xmax
-------
3
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_XMax('LINESTRING(1 3, 5 6)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_XMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_xmax
--------
220288.248780547
                

Name

ST_XMin — 返回二维或三维边界框或几何图形的X最小值。

Synopsis

float ST_XMin(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的X最小值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)');
st_xmin
-------
1

SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
st_xmin
-------
1

SELECT ST_XMin(CAST('BOX(-3 2, 3 4)' As box2d));
st_xmin
-------
-3
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_XMin('LINESTRING(1 3, 5 6)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_XMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_xmin
--------
220186.995121892
                

Name

ST_YMax — 返回二维或三维边界框或几何图形的Y最大值。

Synopsis

float ST_YMax(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的Y最大值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)');
st_ymax
-------
5

SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
st_ymax
-------
6

SELECT ST_YMax(CAST('BOX(-3 2, 3 4)' As box2d));
st_ymax
-------
4
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_YMax('LINESTRING(1 3, 5 6)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_YMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_ymax
--------
150506.126829327
                

Name

ST_YMin — 返回二维或三维边界框或几何图形的Y最小值。

Synopsis

float ST_YMin(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的Y最小值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)');
st_ymin
-------
2

SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
st_ymin
-------
3

SELECT ST_YMin(CAST('BOX(-3 2, 3 4)' As box2d));
st_ymin
-------
2
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_YMin('LINESTRING(1 3, 5 6)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_YMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_ymin
--------
150406
                

Name

ST_ZMax — 返回二维或三维边界框或几何图形的Z最大值。

Synopsis

float ST_ZMax(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的Z最大值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_ZMax('BOX3D(1 2 3, 4 5 6)');
st_zmax
-------
6

SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));
st_zmax
-------
7

SELECT ST_ZMax('BOX3D(-3 2 1, 3 4 1)' );
st_zmax
-------
1
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_ZMax('LINESTRING(1 3 4, 5 6 7)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_ZMax(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_zmax
--------
3
                

Name

ST_ZMin — 返回二维或三维边界框或几何图形的Z最小值。

Synopsis

float ST_ZMin(box3d aGeomorBox2DorBox3D);

描述

返回二维或三维边界框或几何图形的Z最小值。

[Note]

虽然该函数仅为box3d定义,但由于自动强制转换,它也适用于box2d和几何值。但是,它不会接受几何体或box2D文本表示,因为它们不会自动转换。

This function supports 3d and will not drop the z-index.

This method supports Circular Strings and Curves

示例

SELECT ST_ZMin('BOX3D(1 2 3, 4 5 6)');
st_zmin
-------
3

SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING(1 3 4, 5 6 7)'));
st_zmin
-------
4

SELECT ST_ZMin('BOX3D(-3 2 1, 3 4 1)' );
st_zmin
-------
1
--Observe THIS DOES NOT WORK because it will try to auto-cast the string representation to a BOX3D
SELECT ST_ZMin('LINESTRING(1 3 4, 5 6 7)');

--ERROR:  BOX3D parser - doesn't start with BOX3D(

SELECT ST_ZMin(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)'));
st_zmin
--------
1
                

8.18. 线性参考

ST_LineInterpolatePoint — 返回沿直线在分数位置处插补的点。
ST_3DLineInterpolatePoint — 返回沿3D直线在分数位置处内插的点。
ST_LineInterpolatePoints — 返回以分数间隔沿线插值点。
ST_LineLocatePoint — 返回直线上距离点最近的点的分数位置。
ST_LineSubstring — 返回两个小数位置之间的线的一部分。
ST_LocateAlong — 返回几何图形上与测量值匹配的点。
ST_LocateBetween — 返回几何图形中与测量范围匹配的部分。
ST_LocateBetweenElevations — 返回位于高程(Z)范围内的几何图形部分。
ST_InterpolatePoint — 返回最接近点的几何图形的内插度量。
ST_AddMeasure — 沿线性几何图形内插测量。

Name

ST_LineInterpolatePoint — 返回沿直线在分数位置处插补的点。

Synopsis

geometry ST_LineInterpolatePoint(geometry a_linestring, float8 a_fraction);

描述

返回沿直线在分数位置处插补的点。第一个参数必须是LINESTRING。第二个参数是一个介于0和1之间的浮点数,表示点所在的线长度的分数。如果存在Z值和M值,则会对其进行插补。

看见 ST_LineLocatePoint 用于计算距离点最近的线位置。

[Note]

此函数计算2D中的点,然后对Z和M的值进行内插,而 ST_3DLineInterpolatePoint 在3D中计算点,并且仅对M值进行内插。

[Note]

从1.1.1版开始,该函数还会插入M和Z值(如果存在),而以前的版本将它们设置为0.0。

可用性:1.1.1增加了对0.8.2、Z和M的支持

更改:2.1.0。直到2.0.x,这被称为ST_Line_Interpolate_Point。

This function supports 3d and will not drop the z-index.

示例

插值点位于20%位置(0.20)的线串

-- The point 20% along a line

SELECT ST_AsEWKT(  ST_LineInterpolatePoint(
        'LINESTRING(25 50, 100 125, 150 190)',
        0.2 ));
----------------
 POINT(51.5974135047432 76.5974135047432)

三维线的中点:

SELECT ST_AsEWKT(  ST_LineInterpolatePoint('
        LINESTRING(1 2 3, 4 5 6, 6 7 8)',
        0.5 ));
--------------------
 POINT(3.5 4.5 5.5)

直线上最接近一点的点:

SELECT ST_AsText( ST_LineInterpolatePoint( line.geom,
                      ST_LineLocatePoint( line.geom, 'POINT(4 3)')))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As geom) AS line;
------------
 POINT(3 4)

Name

ST_3DLineInterpolatePoint — 返回沿3D直线在分数位置处内插的点。

Synopsis

geometry ST_3DLineInterpolatePoint(geometry a_linestring, float8 a_fraction);

描述

返回沿3D直线在分数位置处内插的点。第一个参数必须是LINESTRING。第二个参数是介于0和1之间的浮点数,它将点位置表示为线长度的一部分。如果存在M值,则会对其进行内插。

[Note]

ST_LineInterpolatePoint 计算2D中的点,然后对Z和M的值进行内插,而此函数计算3D中的点,并仅内插M值。

可用性:3.0.0

示例

沿三维线的返回点20%

SELECT ST_AsText(
    ST_3DLineInterpolatePoint('LINESTRING(25 50 70, 100 125 90, 150 190 200)',
        0.20));

   st_asetext
----------------
 POINT Z (59.0675892910822 84.0675892910822 79.0846904776219)

Name

ST_LineInterpolatePoints — 返回以分数间隔沿线插值点。

Synopsis

geometry ST_LineInterpolatePoints(geometry a_linestring, float8 a_fraction, boolean repeat);

描述

返回以分数间隔沿直线插补的一个或多个点。第一个参数必须是LINESTRING。第二个参数是一个介于0和1之间的浮点数8,它将点之间的间距表示为线长度的一部分。如果第三个参数为假,则最多构造一个点(相当于 ST_LineInterpolatePoint 。)

如果结果有零个点或一个点,则作为点返回。如果它有两个或多个点,则作为多点返回。

可用性:2.5.0

This function supports 3d and will not drop the z-index.

This function supports M coordinates.

示例

点每隔20%内插的线串

--Return points each 20% along a 2D line
SELECT ST_AsText(ST_LineInterpolatePoints('LINESTRING(25 50, 100 125, 150 190)', 0.20))
----------------
 MULTIPOINT((51.5974135047432 76.5974135047432),(78.1948270094864 103.194827009486),(104.132163186446 130.37181214238),(127.066081593223 160.18590607119),(150 190))

Name

ST_LineLocatePoint — 返回直线上距离点最近的点的分数位置。

Synopsis

float8 ST_LineLocatePoint(geometry a_linestring, geometry a_point);

描述

返回一个介于0和1之间的浮点数,该浮点数表示线串上距离给定点最近的点的位置,作为 二维线 长度。

您可以使用返回的位置提取一个点( ST_LineInterpolatePoint )或子字符串( ST_LineSubstring )。

这对于近似地址数量很有用

可用性:1.1.0

更改:2.1.0。直到2.0.x,这被称为ST_Line_Locate_Point。

示例

--Rough approximation of finding the street number of a point along the street
--Note the whole foo thing is just to generate dummy data that looks
--like house centroids and street
--We use ST_DWithin to exclude
--houses too far away from the street to be considered on the street
SELECT ST_AsText(house_loc) As as_text_house_loc,
        startstreet_num +
                CAST( (endstreet_num - startstreet_num)
                        * ST_LineLocatePoint(street_line, house_loc) As integer) As street_num
FROM
(SELECT ST_GeomFromText('LINESTRING(1 2, 3 4)') As street_line,
        ST_Point(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,
                20 As endstreet_num
FROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)
As foo
WHERE ST_DWithin(street_line, house_loc, 0.2);

 as_text_house_loc | street_num
-------------------+------------
 POINT(1.01 2.06)  |         10
 POINT(2.02 3.09)  |         15
 POINT(3.03 4.12)  |         20

 --find closest point on a line to a point or other geometry
 SELECT ST_AsText(ST_LineInterpolatePoint(foo.the_line, ST_LineLocatePoint(foo.the_line, ST_GeomFromText('POINT(4 3)'))))
FROM (SELECT ST_GeomFromText('LINESTRING(1 2, 4 5, 6 7)') As the_line) As foo;
   st_astext
----------------
 POINT(3 4)


Name

ST_LineSubstring — 返回两个小数位置之间的线的一部分。

Synopsis

geometry ST_LineSubstring(geometry a_linestring, float8 startfraction, float8 endfraction);

描述

计算在给定分数位置开始和结束的输入行的部分。第一个参数必须是LINESTRING。第二个和第三个参数是范围[0,1]中的值,将开始和结束位置表示为线长度的分数。如果存在添加的端点,则会对Z值和M值进行内插。

如果 起始分数 尾馏分 具有与此等效值相同的值 ST_LineInterpolatePoint

[Note]

这仅适用于LINESTRING。要在连续的多行字符串上使用,请首先使用 ST_LineMerge

[Note]

从版本1.1.1开始,此函数对M值和Z值进行内插。以前的版本将Z和M设置为未指定的值。

可用性:1.1.1中增加了1.1.0、Z和M支持

更改:2.1.0。直到2.0.x,这被称为ST_Line_Substring。

This function supports 3d and will not drop the z-index.

示例

1/3中端叠加的线条(0.333,0.666)

SELECT ST_AsText(ST_LineSubstring( 'LINESTRING (20 180, 50 20, 90 80, 120 40, 180 150)', 0.333, 0.666));
------------------------------------------------------------------------------------------------
LINESTRING (45.17311810399485 45.74337011202746, 50 20, 90 80, 112.97593050157862 49.36542599789519)

如果起点位置和终点位置相同,则结果是一个点。

SELECT ST_AsText(ST_LineSubstring( 'LINESTRING(25 50, 100 125, 150 190)', 0.333, 0.333));
------------------------------------------
 POINT(69.2846934853974 94.2846934853974)

将线串剪切为长度为100或更短的部分的查询。它用 GENERATE_Series() 使用横向交叉联接来生成等同于for循环的内容。

WITH data(id, geom) AS (VALUES
        ( 'A', 'LINESTRING( 0 0, 200 0)'::geometry ),
        ( 'B', 'LINESTRING( 0 100, 350 100)'::geometry ),
        ( 'C', 'LINESTRING( 0 200, 50 200)'::geometry )
    )
SELECT id, i,
       ST_AsText( ST_LineSubstring( geom, startfrac, LEAST( endfrac, 1 )) ) AS geom
FROM (
    SELECT id, geom, ST_Length(geom) len, 100 sublen FROM data
    ) AS d
CROSS JOIN LATERAL (
    SELECT i, (sublen * i) / len AS startfrac,
              (sublen * (i+1)) / len AS endfrac
    FROM generate_series(0, floor( len / sublen )::integer ) AS t(i)
    -- skip last i if line length is exact multiple of sublen
    WHERE (sublen * i) / len <> 1.0
    ) AS d2;

 id | i |            geom
----+---+-----------------------------
 A  | 0 | LINESTRING(0 0,100 0)
 A  | 1 | LINESTRING(100 0,200 0)
 B  | 0 | LINESTRING(0 100,100 100)
 B  | 1 | LINESTRING(100 100,200 100)
 B  | 2 | LINESTRING(200 100,300 100)
 B  | 3 | LINESTRING(300 100,350 100)
 C  | 0 | LINESTRING(0 200,50 200)

Name

ST_LocateAlong — 返回几何图形上与测量值匹配的点。

Synopsis

geometry ST_LocateAlong(geometry geom_with_measure, float8 measure, float8 offset = 0);

描述

返回沿测量几何图形(作为点或多点)与测量值匹配的位置。不支持多边形元素。

如果 偏移 则结果将向输入行的左侧或右侧偏移指定的距离。正偏移量将位于左侧,负偏移量位于右侧。

[Note]

仅对具有M分量的几何使用此函数

语义由 ISO/IEC 13249-3SQL/MM空间 标准。

可用性:旧名称ST_LOCATE_LONG_MEASURE为1.1.0。

已更改:2.0.0在以前的版本中,这通常称为ST_LOCATE_ALOW_MEASURE。

This function supports M coordinates.

示例

SELECT ST_AsText(
  ST_LocateAlong(
    'MULTILINESTRINGM((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))'::geometry,
    3 ));

            st_astext
----------------------------------
 MULTIPOINT M ((1 2 3),(9 4 3),(1 2 3))

Name

ST_LocateBetween — 返回几何图形中与测量范围匹配的部分。

Synopsis

geometry ST_LocateBetween(geometry geom, float8 measure_start, float8 measure_end, float8 offset = 0);

描述

返回一个几何图形(集合),其中包含与指定测量范围匹配的输入测量几何图形部分(包括在内)。

如果 偏移 则结果将向输入行的左侧或右侧偏移指定的距离。正偏移量将位于左侧,负偏移量位于右侧。

剪裁非凸面多边形可能会产生无效的几何体。

语义由 ISO/IEC 13249-3SQL/MM空间 标准。

可用性:1.1.0旧名称为ST_LOCATE_BETWEEN_MEASURES。

已更改:2.0.0-在以前的版本中,这通常称为ST_LOCATE_BETWEEN_MEASURES。

增强:3.0.0-增加了对多边形、三角网、三角形的支持。

This function supports M coordinates.

示例

SELECT ST_AsText(
  ST_LocateBetween(
       'MULTILINESTRING M ((1 2 3, 3 4 2, 9 4 3),(1 2 3, 5 4 5))':: geometry,
       1.5, 3 ));
------------------------------------------------------------------------
 GEOMETRYCOLLECTION M (LINESTRING M (1 2 3,3 4 2,9 4 3),POINT M (1 2 3))

测量2和8之间的部分向左偏移的线串

SELECT ST_AsText( ST_LocateBetween(
  ST_AddMeasure('LINESTRING (20 180, 50 20, 100 120, 180 20)', 0, 10),
  2, 8,
  20
));
------------------------------------------------------------------------
MULTILINESTRING((54.49835019899045 104.53426957938231,58.70056060327303 82.12248075654186,69.16695286779743 103.05526528559065,82.11145618000168 128.94427190999915,84.24893681714357 132.32493442618113,87.01636951231555 135.21267035596549,90.30307285299679 137.49198684843182,93.97759758337769 139.07172433557758,97.89298381958797 139.8887023914453,101.89263860095893 139.9102465862721,105.81659870902816 139.13549527600819,109.50792827749828 137.5954340631298,112.81899532549731 135.351656550512,115.6173761888606 132.49390095108848,145.31017306064817 95.37790486135405))

Name

ST_LocateBetweenElevations — 返回位于高程(Z)范围内的几何图形部分。

Synopsis

geometry ST_LocateBetweenElevations(geometry geom, float8 elevation_start, float8 elevation_end);

描述

返回几何图形(集合),其中几何图形的部分位于高程(Z)范围内。

剪裁非凸面多边形可能会产生无效的几何体。

可用性:1.4.0

增强:3.0.0-增加了对多边形、三角网、三角形的支持。

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsText(
  ST_LocateBetweenElevations(
    'LINESTRING(1 2 3, 4 5 6)'::geometry,
    2, 4 ));

             st_astext
-----------------------------------
 MULTILINESTRING Z ((1 2 3,2 3 4))

SELECT ST_AsText(
    ST_LocateBetweenElevations(
      'LINESTRING(1 2 6, 4 5 -1, 7 8 9)',
      6, 9)) As ewelev;

                                ewelev
-----------------------------------------------------------------------
 GEOMETRYCOLLECTION Z (POINT Z (1 2 6),LINESTRING Z (6.1 7.1 6,7 8 9))

Name

ST_InterpolatePoint — 返回最接近点的几何图形的内插度量。

Synopsis

float8 ST_InterpolatePoint(geometry line, geometry point);

描述

返回几何图形在与所提供的点接近的点处的测量尺寸值。

可用性:2.0.0

This function supports 3d and will not drop the z-index.

示例

SELECT ST_InterpolatePoint('LINESTRING M (0 0 0, 10 0 20)', 'POINT(5 5)');
 st_interpolatepoint
 ---------------------
         10
        

Name

ST_AddMeasure — 沿线性几何图形内插测量。

Synopsis

geometry ST_AddMeasure(geometry geom_mline, float8 measure_start, float8 measure_end);

描述

返回在起点和终点之间线性插补测量值的衍生几何图形。如果几何图形没有测量尺寸,则会添加一个尺寸。如果几何图形具有测量尺寸,则会使用新值覆盖该尺寸。仅支持LINESTRINGS和MULTILINESTRINGS。

可用性:1.5.0

This function supports 3d and will not drop the z-index.

示例

SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('LINESTRING(1 0, 2 0, 4 0)'),1,4)) As ewelev;
           ewelev
--------------------------------
 LINESTRINGM(1 0 1,2 0 2,4 0 4)

SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('LINESTRING(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;
                 ewelev
----------------------------------------
 LINESTRING(1 0 4 10,2 0 4 20,4 0 4 40)

SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('LINESTRINGM(1 0 4, 2 0 4, 4 0 4)'),10,40)) As ewelev;
                 ewelev
----------------------------------------
 LINESTRINGM(1 0 10,2 0 20,4 0 40)

SELECT ST_AsText(ST_AddMeasure(
ST_GeomFromEWKT('MULTILINESTRINGM((1 0 4, 2 0 4, 4 0 4),(1 0 4, 2 0 4, 4 0 4))'),10,70)) As ewelev;
                             ewelev
-----------------------------------------------------------------
 MULTILINESTRINGM((1 0 10,2 0 20,4 0 40),(1 0 40,2 0 50,4 0 70))

8.19. 轨迹函数

Abstract

这些函数支持使用轨迹。轨迹是在每个坐标上具有递增度量值(M值)的线性几何图形。时空数据可以通过使用相对时间(如历元)作为度量值来建模。

ST_IsValidTrajectory — 测试几何图形是否为有效轨迹。
ST_ClosestPointOfApproach — 返回两个轨迹的最接近点处的度量值。
ST_DistanceCPA — 返回两个轨迹的最近接近点之间的距离。
ST_CPAWithin — 测试两个轨迹的最接近点是否在指定距离内。

Name

ST_IsValidTrajectory — 测试几何图形是否为有效轨迹。

Synopsis

boolean ST_IsValidTrajectory(geometry line);

描述

测试几何体是否编码了有效的轨迹。有效轨迹表示为 LINESTRING 具有度量(M值)。测量值必须从每个顶点增加到下一个顶点。

有效的轨迹应作为时空函数的输入,例如 ST_ClosestPointOfApproach

可用性:2.2.0

This function supports 3d and will not drop the z-index.

示例

-- A valid trajectory
SELECT ST_IsValidTrajectory(ST_MakeLine(
  ST_MakePointM(0,0,1),
  ST_MakePointM(0,1,2))
);
 t

-- An invalid trajectory
SELECT ST_IsValidTrajectory(ST_MakeLine(ST_MakePointM(0,0,1), ST_MakePointM(0,1,0)));
NOTICE:  Measure of vertex 1 (0) not bigger than measure of vertex 0 (1)
 st_isvalidtrajectory
----------------------
 f

Name

ST_ClosestPointOfApproach — 返回两个轨迹的最接近点处的度量值。

Synopsis

float8 ST_ClosestPointOfApproach(geometry track1, geometry track2);

描述

返回沿给定轨迹插补的点处于最小距离的最小度量值。

输入必须是由检查的有效轨迹 ST_IsValidTrajectory 。如果轨迹在其M范围内不重叠,则返回NULL。

看见 ST_LocateAlong 用于获得给定度量值的实际点数。

可用性:2.2.0

This function supports 3d and will not drop the z-index.

示例

-- Return the time in which two objects moving between 10:00 and 11:00
-- are closest to each other and their distance at that point
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0, 10 0 5)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10, 12 1 2)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) b
), cpa AS (
  SELECT ST_ClosestPointOfApproach(a,b) m FROM inp
), points AS (
  SELECT ST_Force3DZ(ST_GeometryN(ST_LocateAlong(a,m),1)) pa,
         ST_Force3DZ(ST_GeometryN(ST_LocateAlong(b,m),1)) pb
  FROM inp, cpa
)
SELECT to_timestamp(m) t,
       ST_Distance(pa,pb) distance
FROM points, cpa;

               t               |     distance
-------------------------------+------------------
 2015-05-26 10:45:31.034483+02 | 1.96036833151395

Name

ST_DistanceCPA — 返回两个轨迹的最近接近点之间的距离。

Synopsis

float8 ST_DistanceCPA(geometry track1, geometry track2);

描述

返回两个移动对象彼此之间的最小距离。

输入必须是由检查的有效轨迹 ST_IsValidTrajectory 。如果轨迹在其M范围内不重叠,则返回NULL。

可用性:2.2.0

This function supports 3d and will not drop the z-index.

示例

-- Return the minimum distance of two objects moving between 10:00 and 11:00
WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0, 10 0 5)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10, 12 1 2)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) b
)
SELECT ST_DistanceCPA(a,b) distance FROM inp;

     distance
------------------
 1.96036833151395

Name

ST_CPAWithin — 测试两个轨迹的最接近点是否在指定距离内。

Synopsis

boolean ST_CPAWithin(geometry track1, geometry track2, float8 dist);

描述

测试两个移动对象是否曾经比指定距离更近。

输入必须是由检查的有效轨迹 ST_IsValidTrajectory 。如果轨迹在其M范围内不重叠,则返回FALSE。

可用性:2.2.0

This function supports 3d and will not drop the z-index.

示例

WITH inp AS ( SELECT
  ST_AddMeasure('LINESTRING Z (0 0 0, 10 0 5)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) a,
  ST_AddMeasure('LINESTRING Z (0 2 10, 12 1 2)'::geometry,
    extract(epoch from '2015-05-26 10:00'::timestamptz),
    extract(epoch from '2015-05-26 11:00'::timestamptz)
  ) b
)
SELECT ST_CPAWithin(a,b,2), ST_DistanceCPA(a,b) distance FROM inp;

 st_cpawithin |     distance
--------------+------------------
 t            | 1.96521473776207

8.20. SFCGAL函数

Abstract

SFCGAL是一个围绕CGAL的C++包装库,它提供高级的2D和3D空间函数。出于稳健性考虑,几何图形坐标具有精确的有理数表示法。

库的安装说明可在SFCGAL主页( http://www.sfcgal.org )。要启用这些功能,请使用 创建扩展名postgis_sfcga

postgis_sfcgal_version — 返回正在使用的SFCGAL的版本
postgis_sfcgal_full_version — 返回正在使用的SFCGAL的完整版本,包括CGAL和Boost版本
ST_3DArea — 计算三维曲面几何图形的面积。对于实体将返回0。
ST_3DConvexHull — 计算几何体的三维凸包。
ST_3DIntersection — 执行三维相交
ST_3DDifference — 执行三维差异
ST_3DUnion — 执行3D合并。
ST_AlphaShape — 使用CGAL Alpha Shape算法计算可能的凹面几何图形。
ST_ApproximateMedialAxis — 计算面状几何图形的近似中轴。
ST_ConstrainedDelaunayTriangles — 返回围绕给定输入几何图元的约束Delaunay三角剖分。
ST_Extrude — 将曲面挤出到相关体积
ST_ForceLHR — 强制LHR方向
ST_IsPlanar — 检查曲面是否为平面
ST_IsSolid — 测试几何图形是否为实体。不执行有效性检查。
ST_MakeSolid — 将几何图形投射到实体中。不执行任何检查。要获取有效实体,输入几何图形必须是闭合多面体曲面或闭合三角网。
ST_MinkowskiSum — 执行Minkowski和
ST_OptimalAlphaShape — 在计算出最佳的Alpha值之后,使用CGAL Alpha Shape算法计算可能的凹面几何体。
ST_Orientation — 确定曲面方向
ST_StraightSkeleton — 从几何图形计算直骨架
ST_Tesselate — 执行面或多面体表面的表面镶嵌,并以TIN或TIN集合的形式返回
ST_Volume — 计算三维实体的体积。如果应用于曲面(即使是闭合的)几何图形将返回0。

Name

postgis_sfcgal_version — 返回正在使用的SFCGAL的版本

Synopsis

文本 postgis_sfcgal_version (void);

描述

返回正在使用的SFCGAL的版本

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

postgis_sfcgal_full_version — 返回正在使用的SFCGAL的完整版本,包括CGAL和Boost版本

Synopsis

文本 postgis_sfcgal_full_version (void);

描述

返回正在使用的SFCGAL的完整版本,包括CGAL和Boost版本

可用性:3.3.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

ST_3DArea — 计算三维曲面几何图形的面积。对于实体将返回0。

Synopsis

floatST_3DArea(geometry geom1);

描述

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

注意:默认情况下,从WKT构建的多面体曲面是曲面几何图形,而不是实体。因此,它有表面积。一旦转换成实体,就没有面积。

SELECT ST_3DArea(geom) As cube_surface_area,
        ST_3DArea(ST_MakeSolid(geom)) As solid_surface_area
  FROM (SELECT 'POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
    ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
    ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'::geometry) As f(geom);

 cube_surface_area | solid_surface_area
-------------------+--------------------
                 6 |                  0    

Name

ST_3DConvexHull — 计算几何体的三维凸包。

Synopsis

geometry ST_3DConvexHull(geometry geom1);

描述

可用性:3.3.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_AsText(ST_3DConvexHull('LINESTRING Z(0 0 5, 1 5 3, 5 7 6, 9 5 3 , 5 7 5, 6 3 5)'::geometry));
多面体曲面Z(1 5 3,9 5 3,0 5,1 5 3)),((1 5 3,0 5,5 7,1 5 3)),((5 7 6,5 75,1 5 3,5 7 6)),((0 5,6 35,5 7 6,0 5)),((6 35,9 5,3,5 3,5 7,6 3 5)),((0 5,9 5 3,6 35,6 35)),((9 5,5 75,5 6,7 6,9 5 3)),((1 5,5,5 75,9 5 3,1 3))
WITH f AS (SELECT i, ST_Extrude(geom, 0,0, i ) AS geom
FROM ST_Subdivide(ST_Letters('CH'),5) WITH ORDINALITY AS sd(geom,i)
      )
      SELECT ST_3DConvexHull(ST_Collect(f.geom) )
      FROM f;

使用3D凸壳覆盖的原始几何体

另请参阅

ST_Letters, ST_AsX3D


Name

ST_3DIntersection — 执行三维相交

Synopsis

geometry ST_3DIntersection(geometry geom1, geometry geom2);

描述

返回属于geom1和geom2之间共享部分的几何体。

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

3D图像是使用PostGIS生成的 ST_AsX3D 并使用以下命令在HTML中呈现 X3Dom HTML Java脚本渲染库

SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2;
                

覆盖原始3D几何图形。Geom2显示为半透明

SELECT ST_3DIntersection(geom1,geom2)
FROM ( SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2 ) As t;

Geom1和geom2的交集

三维线串和多边形

SELECT ST_AsText(ST_3DIntersection(linestring, polygon)) As wkt
FROM  ST_GeomFromText('LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)') AS linestring
 CROSS JOIN ST_GeomFromText('POLYGON((0 0 8, 0 1 8, 1 1 8, 1 0 8, 0 0 8))') AS polygon;

              wkt
--------------------------------
 LINESTRING Z (1 1 8,0.5 0.5 8)
                

立方体(闭合多面体曲面)和多边形Z

SELECT ST_AsText(ST_3DIntersection(
                ST_GeomFromText('POLYHEDRALSURFACE Z( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'),
        'POLYGON Z ((0 0 0, 0 0 0.5, 0 0.5 0.5, 0 0.5 0, 0 0 0))'::geometry))
TIN Z(0 0 0,0 0 0.5,0 0.5,0 0 0)),((0.5 0,0 0 0,0 0.5 0,0.5 0))

导致体积相交的两个实体的相交也是实体(ST_Dimension返回3)

SELECT ST_AsText(ST_3DIntersection( ST_Extrude(ST_Buffer('POINT(10 20)'::geometry,10,1),0,0,30),
 ST_Extrude(ST_Buffer('POINT(10 20)'::geometry,10,1),2,0,10) ));
POLYHEDRALSURFACE Z (((13.3333333333333 13.3333333333333 10,20 20 0,20 20 10,13.3333333333333 13.3333333333333 10)),
        ((20 20 10,16.6666666666667 23.3333333333333 10,13.3333333333333 13.3333333333333 10,20 20 10)),
        ((20 20 0,16.6666666666667 23.3333333333333 10,20 20 10,20 20 0)),
        ((13.3333333333333 13.3333333333333 10,10 10 0,20 20 0,13.3333333333333 13.3333333333333 10)),
        ((16.6666666666667 23.3333333333333 10,12 28 10,13.3333333333333 13.3333333333333 10,16.6666666666667 23.3333333333333 10)),
        ((20 20 0,9.99999999999995 30 0,16.6666666666667 23.3333333333333 10,20 20 0)),
        ((10 10 0,9.99999999999995 30 0,20 20 0,10 10 0)),((13.3333333333333 13.3333333333333 10,12 12 10,10 10 0,13.3333333333333 13.3333333333333 10)),
        ((12 28 10,12 12 10,13.3333333333333 13.3333333333333 10,12 28 10)),
        ((16.6666666666667 23.3333333333333 10,9.99999999999995 30 0,12 28 10,16.6666666666667 23.3333333333333 10)),
        ((10 10 0,0 20 0,9.99999999999995 30 0,10 10 0)),
        ((12 12 10,11 11 10,10 10 0,12 12 10)),((12 28 10,11 11 10,12 12 10,12 28 10)),
        ((9.99999999999995 30 0,11 29 10,12 28 10,9.99999999999995 30 0)),((0 20 0,2 20 10,9.99999999999995 30 0,0 20 0)),
        ((10 10 0,2 20 10,0 20 0,10 10 0)),((11 11 10,2 20 10,10 10 0,11 11 10)),((12 28 10,11 29 10,11 11 10,12 28 10)),
        ((9.99999999999995 30 0,2 20 10,11 29 10,9.99999999999995 30 0)),((11 11 10,11 29 10,2 20 10,11 11 10)))

Name

ST_3DDifference — 执行三维差异

Synopsis

geometry ST_3DDifference(geometry geom1, geometry geom2);

描述

返回geom1中不属于geom2的部分。

可用性:2.2.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

3D图像是使用PostGIS生成的 ST_AsX3D 并使用以下命令在HTML中呈现 X3Dom HTML Java脚本渲染库

SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2;
                

覆盖原始3D几何图形。Geom2是将被移除的部分。

SELECT ST_3DDifference(geom1,geom2)
FROM ( SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2 ) As t;

移除geom2后还剩下什么


Name

ST_3DUnion — 执行3D合并。

Synopsis

geometry ST_3DUnion(geometry geom1, geometry geom2);

geometry ST_3DUnion(geometry set g1field);

描述

可用性:2.2.0

版本:增加了3.3.0聚合版本

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

聚合变量: 返回作为几何体行集的3D并集的几何体。ST_3DUnion()函数是PostgreSQL术语中的“聚合”函数。这意味着它对数据行进行操作,与sum()和avg()函数操作的方式相同,并且像大多数聚合一样,它也忽略空几何图形。

示例

3D图像是使用PostGIS生成的 ST_AsX3D 并使用以下命令在HTML中呈现 X3Dom HTML Java脚本渲染库

SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2;
                

覆盖原始3D几何图形。Geom2是具有透明度的那个。

SELECT ST_3DUnion(geom1,geom2)
FROM ( SELECT ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30) AS geom1,
        ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(80 80)'),
 50, 'quad_segs=1'),0,0,30) AS geom2 ) As t;

Geom1和geom2的结合


Name

ST_AlphaShape — 使用CGAL Alpha Shape算法计算可能的凹面几何图形。

Synopsis

geometry ST_AlphaShape(geometry geom, float alpha, boolean allow_holes = false);

描述

假设我们在2D中有一组S个点[...]我们想要一些类似“这些点形成的形状”的东西。这是一个相当模糊的概念,可能有许多可能的解释,α形状就是其中之一。Alpha形状可用于从密集的无组织数据点集重建形状。实际上,α形状是由一个边界来划分的,该边界是原始形状的线性近似[1]。[1]F.Bernardini和C.Bajaj.使用阿尔法形状对流形进行采样和重建。技术报告CSD-TR-97-013,部门电脑。科学出版社,普渡大学,西拉斐特,1997年。资料来源: CGAL Alpha形状 此函数计算一组几何体的凹壳,但使用CGAL和不同于由GEOS模块执行的ST_ConcaeHull的算法。请参阅: JTS中的凹壳

可用性:3.3.0-需要SFCGAL > =1.4.1。

This method needs SFCGAL backend.

示例

多点的凹壳(与ST_OptimalAlphaShape相同的示例)

SELECT ST_AsText(ST_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),
                (88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),
                (81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
                (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
                (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
                (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
                (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry,80.2));

POLYGON((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19,37 23,30 22,28 33,23 36,26 44,27 54,23 60,24 67,
          27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95,76 88,75 84,83 72,85 71,88 58,89 53))

多点的凹壳,允许有洞(与ST_OptimalAlphaShape相同的示例)

SELECT ST_AsText(ST_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
                (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
                (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
                (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
                (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry, 100.1,true))

POLYGON((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19,37 23,30 22,28 33,23 36,26 44,27 54,23 60,24 67,27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95,76 88,75 84,83 72,85 71,88 58,89 53),
              (36 61,36 68,40 75,43 80,50 86,60 81,68 73,77 67,81 60,82 54,81 47,78 43,76 27,62 22,54 32,48 34,44 42,38 46,36 61))

多点的凹面外壳线,允许孔(与ST_ConcaeHull相同的示例)

SELECT ST_AlphaShape(
            'MULTIPOINT ((132 64), (114 64), (99 64), (81 64), (63 64), (57 49), (52 36), (46 20), (37 20), (26 20), (32 36), (39 55), (43 69), (50 84), (57 100), (63 118), (68 133), (74 149), (81 164), (88 180), (101 180), (112 180), (119 164), (126 149), (132 131), (139 113), (143 100), (150 84), (157 69), (163 51), (168 36), (174 20), (163 20), (150 20), (143 36), (139 49), (132 64), (99 151), (92 138), (88 124), (81 109), (74 93), (70 82), (83 82), (99 82), (112 82), (126 82), (121 96), (114 109), (110 122), (103 138), (99 151), (34 27), (43 31), (48 44), (46 58), (52 73), (63 73), (61 84), (72 71), (90 69), (101 76), (123 71), (141 62), (166 27), (150 33), (159 36), (146 44), (154 53), (152 62), (146 73), (134 76), (143 82), (141 91), (130 98), (126 104), (132 113), (128 127), (117 122), (112 133), (119 144), (108 147), (119 153), (110 171), (103 164), (92 171), (86 160), (88 142), (79 140), (72 124), (83 131), (79 118), (68 113), (63 102), (68 93), (35 45))'::geometry,102.2, true);

POLYGON((134 80,136 75,130 63,135 45,132 44,126 28,117 24,110 24,98 24,80 27,82 39,72 51,60 48,56 34,52 52,42 50,
                34 54,39 66,40 81,34 90,36 100,40 116,36 123,39 128,51 129,58 132,68 135,74 142,78 147,86 146,96 146,
                108 142,114 132,112 126,112 116,116 110,120 108,125 108,128 106,125 96,132 87,134 80))


Name

ST_ApproximateMedialAxis — 计算面状几何图形的近似中轴。

Synopsis

geometry ST_ApproximateMedialAxis(geometry geom);

描述

基于其直骨架返回区域输入的近似中轴。在针对功能强大的版本(1.2.0+)构建时,使用SFCGAL特定的API。否则,该函数只是ST_StraightSkype的包装器(较慢的情况)。

可用性:2.2.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_ApproximateMedialAxis(ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 ))'));

一个多边形及其近似中轴


Name

ST_ConstrainedDelaunayTriangles — 返回围绕给定输入几何图元的约束Delaunay三角剖分。

Synopsis

geometry ST_ConstrainedDelaunayTriangles(geometry g1);

描述

返回一个 约束Delaunay三角剖分 围绕输入几何体的顶点。输出是一个罐头。

This method needs SFCGAL backend.

可用性:3.0.0

This function supports 3d and will not drop the z-index.

示例

两个面的ST_ConstrainedDelaunay三角形

select ST_ConstrainedDelaunayTriangles(
               ST_Union(
                       'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'::geometry,
                       ST_Buffer('POINT(110 170)'::geometry, 20)
                   )
           );
                                

ST_DelaunayTriangles 由2个多边形组成。三角形边跨越多边形边界。

select ST_DelaunayTriangles(
               ST_Union(
                       'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'::geometry,
                       ST_Buffer('POINT(110 170)'::geometry, 20)
                   )
           );


Name

ST_Extrude — 将曲面挤出到相关体积

Synopsis

geometry ST_Extrude(geometry geom, float x, float y, float z);

描述

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

3D图像是使用PostGIS生成的 ST_AsX3D 并使用以下命令在HTML中呈现 X3Dom HTML Java脚本渲染库

SELECT ST_Buffer(ST_GeomFromText('POINT(100 90)'),
  50, 'quad_segs=2'),0,0,30);

由缓冲点形成的原始八角形

ST_Extrude(ST_Buffer(ST_GeomFromText('POINT(100 90)'),
 50, 'quad_segs=2'),0,0,30);

沿Z方向拉伸30个单元的六边形将生成多面体曲面Z

SELECT ST_GeomFromText('LINESTRING(50 50, 100 90, 95 150)')

原始线串

SELECT ST_Extrude(
 ST_GeomFromText('LINESTRING(50 50, 100 90, 95 150)'),0,0,10));

沿Z方向拉伸的线串将生成多面体曲面Z

另请参阅

ST_AsX3D


Name

ST_ForceLHR — 强制LHR方向

Synopsis

geometry ST_ForceLHR(geometry geom);

描述

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

ST_IsPlanar — 检查曲面是否为平面

Synopsis

boolean ST_IsPlanar(geometry geom);

描述

可用性:2.2.0:在2.1.0版本中记录了这一点,但在2.1版本中被意外遗漏了。

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

ST_IsSolid — 测试几何图形是否为实体。不执行有效性检查。

Synopsis

boolean ST_IsSolid(geometry geom1);

描述

可用性:2.2.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

ST_MakeSolid — 将几何图形投射到实体中。不执行任何检查。要获取有效实体,输入几何图形必须是闭合多面体曲面或闭合三角网。

Synopsis

geometry ST_MakeSolid(geometry geom1);

描述

可用性:2.2.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).


Name

ST_MinkowskiSum — 执行Minkowski和

Synopsis

geometry ST_MinkowskiSum(geometry geom1, geometry geom2);

描述

此函数执行点、线或多边形与多边形的2D Minkowski求和。

两个几何A和B的Minkowski和是A和B中任意点之和的所有点的集合。Minkowski和经常用于运动规划和计算机辅助设计。更多详细信息,请访问 维基百科Minkowski添加

第一个参数可以是任何二维几何图形(点、线串、多边形)。如果传递3D几何体,则通过将Z强制为0将其转换为2D几何体,从而可能导致无效情况。第二个参数必须是2D多边形。

实现利用 CGAL 2D Minkowskisum

可用性:2.1.0

This method needs SFCGAL backend.

示例

直线串与圆多边形中线串穿圆的Minkowski和

在求和之前

求和后

SELECT ST_MinkowskiSum(line, circle))
FROM (SELECT
    ST_MakeLine(ST_Point(10, 10),ST_Point(100, 100)) As line,
    ST_Buffer(ST_GeomFromText('POINT(50 50)'), 30) As circle) As foo;

-- wkt --
MULTIPOLYGON(((30 59.9999999999999,30.5764415879031 54.1472903395161,32.2836140246614 48.5194970290472,35.0559116309237 43.3328930094119,38.7867965644036 38.7867965644035,43.332893009412 35.0559116309236,48.5194970290474 32.2836140246614,54.1472903395162 30.5764415879031,60.0000000000001 30,65.8527096604839 30.5764415879031,71.4805029709527 32.2836140246614,76.6671069905881 35.0559116309237,81.2132034355964 38.7867965644036,171.213203435596 128.786796564404,174.944088369076 133.332893009412,177.716385975339 138.519497029047,179.423558412097 144.147290339516,180 150,179.423558412097 155.852709660484,177.716385975339 161.480502970953,174.944088369076 166.667106990588,171.213203435596 171.213203435596,166.667106990588 174.944088369076,
161.480502970953 177.716385975339,155.852709660484 179.423558412097,150 180,144.147290339516 179.423558412097,138.519497029047 177.716385975339,133.332893009412 174.944088369076,128.786796564403 171.213203435596,38.7867965644035 81.2132034355963,35.0559116309236 76.667106990588,32.2836140246614 71.4805029709526,30.5764415879031 65.8527096604838,30 59.9999999999999)))
            

多边形与多点的Minkowski和

在求和之前

求和后:复制面并将其平移到点的位置

SELECT ST_MinkowskiSum(mp, poly)
FROM (SELECT 'MULTIPOINT(25 50,70 25)'::geometry As mp,
   'POLYGON((130 150, 20 40, 50 60, 125 100, 130 150))'::geometry As poly
    ) As foo


-- wkt --
MULTIPOLYGON(
    ((70 115,100 135,175 175,225 225,70 115)),
    ((120 65,150 85,225 125,275 175,120 65))
    )
            

Name

ST_OptimalAlphaShape — 在计算出最佳的Alpha值之后,使用CGAL Alpha Shape算法计算可能的凹面几何体。

Synopsis

geometryST_OptimalAlphaShape(geometry param_geom, boolean allow_holes = false, integer nb_components);

描述

计算几何体集合的“最佳”Alpha形状。CGAL可以自动找到Alpha的最佳值。这个版本使用它来寻找一个“最佳”的阿尔法形状。结果是一个单一的多边形。它不会包含孔,除非可选的 param_allow_holes 参数被指定为True。将生成结果,使得阿尔法形状的实心分量的数量等于或小于 param_nb_components

可用性:3.3.0-需要SFCGAL > =1.4.1。

This method needs SFCGAL backend.

示例

多点的凹壳(与ST_AlphaShape相同的示例)

SELECT ST_AsText(ST_OptimalAlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),
                (88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),
                (81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
                (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
                (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
                (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
                (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry));

POLYGON((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19,37 23,30 22,28 33,23 36,
                26 44,27 54,23 60,24 67,27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95,76 88,75 84,75 77,83 72,85 71,83 64,88 58,89 53))

多点的凹壳,允许孔(与ST_AlphaShape相同的示例)

SELECT ST_AsText(ST_OptimalAlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
                (78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
                (75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
                (80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
                (36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry, allow_holes => true));

多边形((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19,37 23,30 22,28 33,23 36,26 44,27 54,23 60,24 67,27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95,76 88,75 84,75 77,83 72,85 71,83 64,88 58,89 53),(36 61,36 68,40 75,43 80,50 86,60 81,68 73,77 67,81 60,82 54,81,81 29,76 27,70,62 26,54 2,348,44 2,38 6,436))


Name

ST_Orientation — 确定曲面方向

Synopsis

integer ST_Orientation(geometry geom);

描述

该函数仅适用于多边形。如果该多边形逆时针方向,则返回-1;如果该多边形顺时针方向,则返回1。

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.


Name

ST_StraightSkeleton — 从几何图形计算直骨架

Synopsis

geometry ST_StraightSkeleton(geometry geom);

描述

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_StraightSkeleton(ST_GeomFromText('POLYGON (( 190 190, 10 190, 10 10, 190 10, 190 20, 160 30, 60 30, 60 130, 190 140, 190 190 ))'));

原始多边形

多边形的直骨架


Name

ST_Tesselate — 执行面或多面体表面的表面镶嵌,并以TIN或TIN集合的形式返回

Synopsis

geometry ST_Tesselate(geometry geom);

描述

将多边形(多边形)或POLYHEDRALSURFACE等曲面作为输入,并通过使用三角形的细分过程返回三角网表示。

可用性:2.1.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

SELECT ST_GeomFromText('POLYHEDRALSURFACE Z( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )');

原始多维数据集

SELECT ST_Tesselate(ST_GeomFromText('POLYHEDRALSURFACE Z( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));

ST_AS文本输出:

TIN Z (((0 0 0,0 0 1,0 1 1,0 0 0)),((0 1 0,0 0 0,0 1 1,0 1 0)),
        ((0 0 0,0 1 0,1 1 0,0 0 0)),
        ((1 0 0,0 0 0,1 1 0,1 0 0)),((0 0 1,1 0 0,1 0 1,0 0 1)),
        ((0 0 1,0 0 0,1 0 0,0 0 1)),
        ((1 1 0,1 1 1,1 0 1,1 1 0)),((1 0 0,1 1 0,1 0 1,1 0 0)),
        ((0 1 0,0 1 1,1 1 1,0 1 0)),((1 1 0,0 1 0,1 1 1,1 1 0)),
        ((0 1 1,1 0 1,1 1 1,0 1 1)),((0 1 1,0 0 1,1 0 1,0 1 1)))

三角形着色的镶嵌立方体

SELECT 'POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 ))'::geometry;

原始多边形

SELECT
        ST_Tesselate('POLYGON (( 10 190, 10 70, 80 70, 80 130, 50 160, 120 160, 120 190, 10 190 ))'::geometry);

ST_AS文本输出

TIN(((80 130,50 160,80 70,80 130)),((50 160,10 190,10 70,50 160)),
         ((80 70,50 160,10 70,80 70)),((120 160,120 190,50 160,120 160)),
 ((120 190,10 190,50 160,120 190)))

镶嵌多边形


Name

ST_Volume — 计算三维实体的体积。如果应用于曲面(即使是闭合的)几何图形将返回0。

Synopsis

float ST_Volume(geometry geom1);

描述

可用性:2.2.0

This method needs SFCGAL backend.

This function supports 3d and will not drop the z-index.

This function supports Polyhedral surfaces.

This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).

示例

使用WKT创建闭合曲面时,它们将被视为面状而不是实体。要使它们坚固,您需要使用 ST_MakeSolid 。面状几何图形没有体积。下面是一个演示的例子。

SELECT ST_Volume(geom) As cube_surface_vol,
        ST_Volume(ST_MakeSolid(geom)) As solid_surface_vol
  FROM (SELECT 'POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
    ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
    ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'::geometry) As f(geom);

 cube_surface_vol | solid_surface_vol
------------------+-------------------
                0 |                 1
              

8.21. 长事务支持

Abstract

这些函数实现行锁定机制以支持长事务。它们主要是为 Web要素服务 规格。

AddAuth — 添加要在当前事务中使用的授权令牌。
CheckAuth — 在表上创建触发器,以基于授权令牌阻止/允许更新和删除行。
DisableLongTransactions — 禁用长事务支持。
EnableLongTransactions — 启用长事务支持。
LockRow — 设置表中行的锁定/授权。
UnlockRows — 移除授权令牌持有的所有锁。
[Note]

For the locking mechanism to operate correctly the serializable transaction isolation level must be used.

Name

AddAuth — 添加要在当前事务中使用的授权令牌。

Synopsis

boolean AddAuth(text auth_token);

描述

添加要在当前事务中使用的授权令牌。

将当前事务标识符和授权令牌添加到一个名为 temp_lock_have_table

可用性:1.1.3

示例

SELECT LockRow('towns', '353', 'priscilla');
                BEGIN TRANSACTION;
                        SELECT AddAuth('joey');
                        UPDATE towns SET geom = ST_Translate(geom,2,2) WHERE gid = 353;
                COMMIT;


                ---Error--
                ERROR:  UPDATE where "gid" = '353' requires authorization 'priscilla'
                

另请参阅

LockRow


Name

CheckAuth — 在表上创建触发器,以基于授权令牌阻止/允许更新和删除行。

Synopsis

integer CheckAuth(text a_schema_name, text a_table_name, text a_key_column_name);

integer CheckAuth(text a_table_name, text a_key_column_name);

描述

在表上创建触发器,以根据授权令牌阻止/允许更新和删除行。使用以下命令标识行 < rowid_col > 列。

如果没有传入a_SCHEMA_NAME,则在当前模式中搜索表。

[Note]

如果此表函数上已存在授权触发器,则会出错。

如果未启用事务支持,则函数将引发异常。

可用性:1.1.3

示例

SELECT CheckAuth('public', 'towns', 'gid');
                        result
                        ------
                        0
                        

Name

DisableLongTransactions — 禁用长事务支持。

Synopsis

text DisableLongTransactions();

描述

禁用长事务支持。此函数删除LONG TRANSACTION支持元数据表,并删除附加到锁检查表的所有触发器。

删除名为的元表 authorization_table 和一个名为 authorized_tables 所有触发器都调用 检查授权触发器

可用性:1.1.3

示例

SELECT DisableLongTransactions();
--result--
Long transactions support disabled
                  

Name

EnableLongTransactions — 启用长事务支持。

Synopsis

text EnableLongTransactions();

描述

启用长事务支持。此函数创建所需的元数据表。在使用本节中的其他函数之前,必须先调用它一次。给它打两次电话是无害的。

创建一个名为 authorization_table 和一个名为 authorized_tables

可用性:1.1.3

示例

SELECT EnableLongTransactions();
--result--
Long transactions support enabled
                  

Name

LockRow — 设置表中行的锁定/授权。

Synopsis

integer LockRow(text a_schema_name, text a_table_name, text a_row_key, text an_auth_token, timestamp expire_dt);

integer LockRow(text a_table_name, text a_row_key, text an_auth_token, timestamp expire_dt);

integer LockRow(text a_table_name, text a_row_key, text an_auth_token);

描述

设置表中特定行的锁定/授权。 an_auth_token 是文本值。 expire_dt 是一个时间戳,默认为 现在()+1小时 。如果已分配锁,则返回1;否则返回0(即行已被另一个身份验证锁定)。

可用性:1.1.3

示例

SELECT LockRow('public', 'towns', '2', 'joey');
LockRow
-------
1

--Joey has already locked the record and Priscilla is out of luck
SELECT LockRow('public', 'towns', '2', 'priscilla');
LockRow
-------
0

                

另请参阅

UnlockRows


Name

UnlockRows — 移除授权令牌持有的所有锁。

Synopsis

integer UnlockRows(text auth_token);

描述

移除指定授权令牌持有的所有锁。返回释放的锁数。

可用性:1.1.3

示例

SELECT LockRow('towns', '353', 'priscilla');
                SELECT LockRow('towns', '2', 'priscilla');
                SELECT UnLockRows('priscilla');
                UnLockRows
                ------------
                2
                

另请参阅

LockRow

8.22. 版本函数

Abstract

这些功能可报告和升级PostGIS版本。

PostGIS_Extensions_Upgrade — 将PostGIS扩展(例如postgis_raster、postgis_topology、postgis_sfcga)打包并升级到最新的可用版本。
PostGIS_Full_Version — 报告完整的PostGIS版本和构建配置信息。
PostGIS_GEOS_Version — 返回GEOS库的版本号。
PostGIS_Liblwgeom_Version — 返回liblwgeom库的版本号。这应该与PostGIS的版本匹配。
PostGIS_LibXML_Version — 返回libxml2库的版本号。
PostGIS_Lib_Build_Date — 返回PostGIS库的构建日期。
PostGIS_Lib_Version — 返回PostGIS库的版本号。
PostGIS_PROJ_Version — 返回PROJ4库的版本号。
PostGIS_Wagyu_Version — 返回内部和库的版本号。
PostGIS_Scripts_Build_Date — 返回PostGIS脚本的构建日期。
PostGIS_Scripts_Installed — 返回此数据库中安装的PostGIS脚本的版本。
PostGIS_Scripts_Released — 返回随已安装的PostGIS库一起发布的postgis.sql脚本的版本号。
PostGIS_Version — 返回PostGIS版本号和编译时选项。

Name

PostGIS_Extensions_Upgrade — 将PostGIS扩展(例如postgis_raster、postgis_topology、postgis_sfcga)打包并升级到最新的可用版本。

Synopsis

text PostGIS_Extensions_Upgrade();

描述

将PostGIS扩展打包并升级到最新版本。如果需要,只有安装在数据库中的扩展才会打包和升级。报告完整的PostGIS版本和之后的构建配置信息。这是执行多个CREATE扩展的速记。从未打包和更改扩展名..每个PostGIS扩展模块的更新。当前仅尝试升级扩展postgis、postgis_raster、postgis_sfcga、postgis_topology和postgis_Tiger_Geocoder。

可用性:2.5.0

[Note]

已更改:3.0.0以重新打包松散扩展并支持postgis_raster。

示例

SELECT PostGIS_Extensions_Upgrade();
NOTICE:  Packaging extension postgis
NOTICE:  Packaging extension postgis_raster
NOTICE:  Packaging extension postgis_sfcgal
NOTICE:  Extension postgis_topology is not available or not packagable for some reason
NOTICE:  Extension postgis_tiger_geocoder is not available or not packagable for some reason

                    postgis_extensions_upgrade
-------------------------------------------------------------------
 Upgrade completed, run SELECT postgis_full_version(); for details
(1 row)

Name

PostGIS_Full_Version — 报告完整的PostGIS版本和构建配置信息。

Synopsis

text PostGIS_Full_Version();

描述

报告完整的PostGIS版本和构建配置信息。还通知有关库和脚本之间的同步,建议根据需要进行升级。

示例

SELECT PostGIS_Full_Version();
                                                           postgis_full_version
----------------------------------------------------------------------------------
POSTGIS="3.0.0dev r17211" [EXTENSION] PGSQL="110" GEOS="3.8.0dev-CAPI-1.11.0 df24b6bb" SFCGAL="1.3.6" PROJ="Rel. 5.2.0, September 15th, 2018"
GDAL="GDAL 2.3.2, released 2018/09/21" LIBXML="2.9.9" LIBJSON="0.13.1" LIBPROTOBUF="1.3.1" WAGYU="0.4.3 (Internal)" TOPOLOGY RASTER
(1 row)

Name

PostGIS_GEOS_Version — 返回GEOS库的版本号。

Synopsis

text PostGIS_GEOS_Version();

描述

返回GEOS库的版本号,或 NULL 如果未启用GEOS支持。

示例

SELECT PostGIS_GEOS_Version();
 postgis_geos_version
----------------------
 3.1.0-CAPI-1.5.0
(1 row)

Name

PostGIS_Liblwgeom_Version — 返回liblwgeom库的版本号。这应该与PostGIS的版本匹配。

Synopsis

text PostGIS_Liblwgeom_Version();

描述

返回liblwgeom库的版本号/

示例

SELECT PostGIS_Liblwgeom_Version();
postgis_liblwgeom_version
--------------------------
2.3.3 r15473
(1 row)

Name

PostGIS_LibXML_Version — 返回libxml2库的版本号。

Synopsis

text PostGIS_LibXML_Version();

描述

返回LibXML2库的版本号。

可用性:1.5

示例

SELECT PostGIS_LibXML_Version();
 postgis_libxml_version
----------------------
 2.7.6
(1 row)

Name

PostGIS_Lib_Build_Date — 返回PostGIS库的构建日期。

Synopsis

text PostGIS_Lib_Build_Date();

描述

返回PostGIS库的构建日期。

示例

SELECT PostGIS_Lib_Build_Date();
 postgis_lib_build_date
------------------------
 2008-06-21 17:53:21
(1 row)

Name

PostGIS_Lib_Version — 返回PostGIS库的版本号。

Synopsis

text PostGIS_Lib_Version();

描述

返回PostGIS库的版本号。

示例

SELECT PostGIS_Lib_Version();
 postgis_lib_version
---------------------
 1.3.3
(1 row)

Name

PostGIS_PROJ_Version — 返回PROJ4库的版本号。

Synopsis

text PostGIS_PROJ_Version();

描述

返回PROJ4库的版本号,或 NULL 如果未启用PROJ4支持。

示例

SELECT PostGIS_PROJ_Version();
  postgis_proj_version
-------------------------
 Rel. 4.4.9, 29 Oct 2004
(1 row)

Name

PostGIS_Wagyu_Version — 返回内部和库的版本号。

Synopsis

text PostGIS_Wagyu_Version();

描述

返回内部和库的版本号,或 NULL 如果未启用Wagyu支持。

示例

SELECT PostGIS_Wagyu_Version();
 postgis_wagyu_version
-----------------------
 0.4.3 (Internal)
(1 row)

Name

PostGIS_Scripts_Build_Date — 返回PostGIS脚本的构建日期。

Synopsis

text PostGIS_Scripts_Build_Date();

描述

返回PostGIS脚本的构建日期。

可用性:1.0.0RC1

示例

SELECT PostGIS_Scripts_Build_Date();
  postgis_scripts_build_date
-------------------------
 2007-08-18 09:09:26
(1 row)

Name

PostGIS_Scripts_Installed — 返回此数据库中安装的PostGIS脚本的版本。

Synopsis

text PostGIS_Scripts_Installed();

描述

返回此数据库中安装的PostGIS脚本的版本。

[Note]

如果此函数的输出与 PostGIS_Scripts_Released 您可能错过了正确升级现有数据库。请参阅 升级 部分了解更多信息。

可用性:0.9.0

示例

SELECT PostGIS_Scripts_Installed();
  postgis_scripts_installed
-------------------------
 1.5.0SVN
(1 row)

Name

PostGIS_Scripts_Released — 返回随已安装的PostGIS库一起发布的postgis.sql脚本的版本号。

Synopsis

text PostGIS_Scripts_Released();

描述

返回随已安装的PostGIS库一起发布的postgis.sql脚本的版本号。

[Note]

从版本1.1.0开始,此函数返回相同的值 PostGIS_Lib_Version 。保留是为了向后兼容。

可用性:0.9.0

示例

SELECT PostGIS_Scripts_Released();
  postgis_scripts_released
-------------------------
 1.3.4SVN
(1 row)

Name

PostGIS_Version — 返回PostGIS版本号和编译时选项。

Synopsis

text PostGIS_Version();

描述

返回PostGIS版本号和编译时选项。

示例

SELECT PostGIS_Version();
                        postgis_version
---------------------------------------
 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

8.23. 大统一自定义变量(GUC)

Abstract

本节列出了自定义的PostGIS Grand统一自定义变量(GUC)。可以全局设置、按数据库设置、按会话设置或按事务设置。最好在全局或数据库级别进行设置。

postgis.backend — 后端服务于GEOS和SFCGAL重叠的功能。选项:geos或sfcga。默认为geos。
postgis.gdal_datapath — 一个配置选项,用于分配GDAL的GDAL_DATA选项的值。如果未设置,则使用环境设置的GDAL_DATA变量。
postgis.gdal_enabled_drivers — 在PostGIS环境中设置启用的GDAL驱动程序的配置选项。影响GDAL配置变量GDAL_SKIP。
postgis.enable_outdb_rasters — 一个布尔配置选项,用于启用对Out-db栅格波段的访问。
postgis.gdal_config_options — 设置使用Out-db栅格时使用的选项的字符串配置。

Name

postgis.backend — 后端服务于GEOS和SFCGAL重叠的功能。选项:geos或sfcga。默认为geos。

描述

此GUC仅在您使用sfcga支持编译PostGIS时才相关。默认情况下 GEOS 后端用于GEOS和SFCGAL具有相同命名函数的函数。该变量允许您覆盖sfcga并使其成为服务请求的后端。

可用性:2.1.0

示例

仅为连接的生命周期设置后端

设置postgis.Backend=sfcga;

为到数据库的新连接设置后端

ALTER DATABASE mygisdb SET postgis.backend = sfcgal;

Name

postgis.gdal_datapath — 一个配置选项,用于分配GDAL的GDAL_DATA选项的值。如果未设置,则使用环境设置的GDAL_DATA变量。

描述

用于设置GDAL的GDAL_DATA选项的值的PostgreSQL GUC变量。这个 postgis.gdal_datapath 值应该是指向GDAL数据文件的完整物理路径。

此配置选项最适用于GDAL数据文件路径未硬编码的Windows平台。当GDAL的数据文件不在GDAL的预期路径中时,也应设置此选项。

[Note]

该选项可以在PostgreSQL的配置文件postgresql.conf中设置。也可以通过连接或事务进行设置。

可用性:2.2.0

[Note]

有关GDAL_DATA的更多信息,请访问GDAL的 配置选项

示例

设置和重置 postgis.gdal_datapath

SET postgis.gdal_datapath TO '/usr/local/share/gdal.hidden';
SET postgis.gdal_datapath TO default;
                

在Windows上为特定数据库设置

ALTER DATABASE gisdb
SET postgis.gdal_datapath = 'C:/Program Files/PostgreSQL/9.3/gdal-data';

Name

postgis.gdal_enabled_drivers — 在PostGIS环境中设置启用的GDAL驱动程序的配置选项。影响GDAL配置变量GDAL_SKIP。

描述

在PostGIS环境中设置启用的GDAL驱动程序的配置选项。影响GDAL配置变量GDAL_SKIP。该选项可以在PostgreSQL的配置文件中设置:postgresql.conf。也可以通过连接或事务进行设置。

的初始值 postgis.gdal_enabled_drivers 也可以通过传递环境变量 POSTGIS_GDAL_ENABLED_DRIVERS 启动PostgreSQL进程的已启用驱动程序列表。

启用GDAL指定的驱动程序可以通过驱动程序的短名称或代码指定。司机简称或代码可在以下位置找到 GDAL栅格格式 。可以通过在每个驱动程序之间放置空格来指定多个驱动程序。

[Note]

有三种特殊代码可用于 postgis.gdal_enabled_drivers 。代码区分大小写。

  • DISABLE_ALL 禁用所有GDAL驱动程序。如果存在, DISABLE_ALL 中的所有其他值 postgis.gdal_enabled_drivers

  • ENABLE_ALL 启用所有GDAL驱动程序。

  • VSICURL 启用GDAL /vsicurl/ 虚拟文件系统。

什么时候 postgis.gdal_enabled_drivers 设置为DISABLE_ALL,则尝试使用Out-db栅格、ST_FromGDALRaster()、ST_AsGDALRaster()、ST_AsTIFF()、ST_AsJPEG()和ST_AsPNG()将导致错误消息。

[Note]

在标准的PostGIS安装中, postgis.gdal_enabled_drivers 设置为DISABLE_ALL。

[Note]

有关GDAL_SKIP的更多信息,请访问GDAL的 配置选项

可用性:2.2.0

示例

设置和重置 postgis.gdal_enabled_drivers

为到数据库的所有新连接设置后端

ALTER DATABASE mygisdb SET postgis.gdal_enabled_drivers TO 'GTiff PNG JPEG';

为所有到服务器的新连接设置默认启用的驱动程序。需要超级用户访问权限和PostgreSQL 9.4+。另请注意,数据库、会话和用户设置会覆盖此设置。

ALTER SYSTEM SET postgis.gdal_enabled_drivers TO 'GTiff PNG JPEG';
SELECT pg_reload_conf();
                
SET postgis.gdal_enabled_drivers TO 'GTiff PNG JPEG';
SET postgis.gdal_enabled_drivers = default;
                

启用所有GDAL驱动程序

Set postgis.gdal_Enabled_DRIVERS=‘Enable_All’;
                

禁用所有GDAL驱动程序

Set postgis.gdal_Enabled_Drives=‘DISABLE_ALL’;
                

Name

postgis.enable_outdb_rasters — 一个布尔配置选项,用于启用对Out-db栅格波段的访问。

描述

一个布尔配置选项,用于启用对Out-db栅格波段的访问。该选项可以在PostgreSQL的配置文件中设置:postgresql.conf。也可以通过连接或事务进行设置。

的初始值 postgis.enable_outdb_rasters 也可以通过传递环境变量 POSTGIS_ENABLE_OUTDB_RASTERS 向启动PostgreSQL的进程提供非零值。

[Note]

即使 postgis.enable_outdb_rasters GUC是真的吗? postgis.gdal_enabled_drivers 确定可访问的栅格格式。

[Note]

在标准的PostGIS安装中, postgis.enable_outdb_rasters 设置为False。

可用性:2.2.0

示例

设置和重置 postgis.enable_outdb_rasters 对于当前会话

SET postgis.enable_outdb_rasters TO True;
SET postgis.enable_outdb_rasters = default;
SET postgis.enable_outdb_rasters = True;
SET postgis.enable_outdb_rasters = False;
                

为特定数据库设置

ALTER DATABASE gisdb SET postgis.enable_outdb_rasters = true;
                

整个数据库集群的设置。您需要重新连接到数据库才能使更改生效。

--writes to postgres.auto.conf
ALTER SYSTEM postgis.enable_outdb_rasters = true;
 --Reloads postgres conf
SELECT pg_reload_conf();
                

Name

postgis.gdal_config_options — 设置使用Out-db栅格时使用的选项的字符串配置。

描述

设置使用Out-db栅格时使用的选项的字符串配置。 配置选项 控制GDAL分配给本地数据缓存的空间大小、是否读取概视图以及用于远程Out-db数据源的访问键。

可用性:3.2.0

示例

设置 postgis.gdal_vsi_options 对于当前会话:

设置postgis.gdal_CONFIG_OPTIONS=‘AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy’;
                

设置 postgis.gdal_vsi_options 只是为了 当前交易 使用 LOCAL 关键词:

设置本地postgis.gdal_CONFIG_OPTIONS=‘AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyy’;
                

8.24. 故障排除功能

Abstract

这些函数是用于故障排除和修复几何图形数据的实用程序。仅当几何体数据以某种方式损坏时才需要它们,这在正常情况下是不应该发生的。

PostGIS_AddBBox — 将边界框添加到几何图形。
PostGIS_DropBBox — 从几何体中删除边界框缓存。
PostGIS_HasBBox — 如果此几何图形的BBox已缓存,则返回True,否则返回False。

Name

PostGIS_AddBBox — 将边界框添加到几何图形。

Synopsis

geometry PostGIS_AddBBox(geometry geomA);

描述

将边界框添加到几何图形。这将使基于边界框的查询速度更快,但会增加几何体的大小。

[Note]

边界框被自动添加到几何体中,因此通常不需要这样做,除非生成的边界框以某种方式损坏,或者您的旧安装缺少边界框。然后你需要去掉旧的和ReadD。

This method supports Circular Strings and Curves

示例

UPDATE sometable
 SET geom =  PostGIS_AddBBox(geom)
 WHERE PostGIS_HasBBox(geom) = false;

Name

PostGIS_DropBBox — 从几何体中删除边界框缓存。

Synopsis

geometry PostGIS_DropBBox(geometry geomA);

描述

从几何体中删除边界框缓存。这会减小几何体大小,但会降低基于边界框的查询速度。它还用于放置损坏的边界框。缓存边界框损坏的一个明显迹象是ST_Intersects和其他关系查询省略了理应返回TRUE的几何图形。

[Note]

边界框被自动添加到几何图形中,并提高了查询速度,因此通常不需要这样做,除非生成的边界框以某种方式损坏或您的旧安装缺少边界框。然后你需要去掉旧的和ReadD。在8.3-8.3.6系列中观察到了这种损坏,当几何图形更改时,缓存的bbox并不总是重新计算,并且升级到较新的版本而不重新加载转储不会纠正已经损坏的箱。因此,您可以使用下面的内容手动更正,并读取BBox或执行转储重新加载。

This method supports Circular Strings and Curves

示例

--This example drops bounding boxes where the cached box is not correct
                        --The force to ST_AsBinary before applying Box2D forces a recalculation of the box, and Box2D applied to the table geometry always
                        -- returns the cached bounding box.
                        UPDATE sometable
 SET geom =  PostGIS_DropBBox(geom)
 WHERE Not (Box2D(ST_AsBinary(geom)) = Box2D(geom));

        UPDATE sometable
 SET geom =  PostGIS_AddBBox(geom)
 WHERE Not PostGIS_HasBBOX(geom);


 

Name

PostGIS_HasBBox — 如果此几何图形的BBox已缓存,则返回True,否则返回False。

Synopsis

boolean PostGIS_HasBBox(geometry geomA);

描述

如果缓存了此几何体的BBox,则返回True,否则返回False。使用 PostGIS_AddBBoxPostGIS_DropBBox 来控制缓存。

This method supports Circular Strings and Curves

示例

SELECT geom
FROM sometable WHERE PostGIS_HasBBox(geom) = false;

Chapter 9. PostGIS常见问题解答

9.1. 我在哪里可以找到有关使用PostGIS的教程、指南和研讨会
9.2. 我的应用程序和桌面工具可以在PostGIS1.5上运行,但不能在PostGIS2.0上运行。我该怎么解决这个问题?
9.3. 当我用osm2pgsql加载OpenStreetMap数据时,我得到一个错误:失败:操作符类“GIST_GEOMETRY_OPS”不存在,访问方法“GIST”出现错误。这在PostGIS1.5中运行得很好。
9.4. 我正在运行PostgreSQL 9.0,我不能再在OpenJump、Safe FME和其他一些工具中读取/查看几何图形了?
9.5. 我试图使用PgAdmin查看我的几何图形列,但它是空白的,这是怎么回事?
9.6. 我可以存储什么类型的几何对象?
9.7. 我都糊涂了。我应该使用几何图形还是地理图形的数据存储?
9.8. 我对地理有更强烈的疑问,比如我在地理专栏中填入多大的地理区域,还能得到合理的答案。是否有一些限制,比如杆子、场地上的所有东西都必须放在一个半球内(就像SQL Server2008那样)、速度等?
9.9. 如何将地理信息系统对象插入数据库?
9.10. 如何构建空间查询?
9.11. 如何加快对大型表的空间查询?
9.12. 为什么不支持PostgreSQL R-Tree索引?
9.13. 我为什么要使用 AddGeometryColumn() 函数和所有其他OpenGIS的东西?
9.14. 查找另一个对象半径内的所有对象的最佳方法是什么?
9.15. 如何将坐标重新投影作为查询的一部分?
9.16. 我在相当大的几何体上执行了ST_AsEWKT和ST_AsText,结果返回空白字段。什么给予?
9.17. 当我执行ST_Intersects时,当我知道两个几何图形不相交时,它会告诉我它们不相交。什么给予?
9.18. 我正在发布使用PostGIS的软件,这是否意味着我的软件必须像PostGIS一样使用GPL进行许可?如果我使用PostGIS,我必须发布我所有的代码吗?
9.19. 为什么叠加运算和空间谓词的结果有时会不一致?

9.1.

我在哪里可以找到有关使用PostGIS的教程、指南和研讨会

循序渐进的教程指导工作坊 邮政地理信息系统简介 。它包括打包的数据以及使用OpenGeo Suite的简介。这可能是关于PostGIS的最好的教程。

波士顿地理信息系统也有一个 PostGIS近乎白痴的入门指南 。这一次更关注的是Windows用户。

9.2.

我的应用程序和桌面工具可以在PostGIS1.5上运行,但不能在PostGIS2.0上运行。我该怎么解决这个问题?

在PostGIS2.0中,从PostGIS代码库中删除了许多不推荐使用的函数。除了Geoserver、MapServer、QuantumGIS和OpenJump等第三方工具外,这还影响了应用程序。有几种方法可以解决这个问题。对于第三方应用程序,你可以尝试升级到这些应用程序的最新版本,这些版本中的许多问题都得到了修复。对于您自己的代码,您可以更改代码以不使用删除的函数。这些函数中的大多数是ST_UNION、ST_LENGTH等的非ST_别名,作为最后的手段,请安装整个 legacy.sql 或者仅仅是部分 legacy.sql 你需要。

这个 legacy.sql 文件与postgis.sql位于同一文件夹中。您可以在安装了postgis.sql和spatial_ref_sys.sql之后安装该文件,以恢复我们删除的所有200多个旧函数。

9.3.

当我用osm2pgsql加载OpenStreetMap数据时,我得到一个错误:失败:操作符类“GIST_GEOMETRY_OPS”不存在,访问方法“GIST”出现错误。这在PostGIS1.5中运行得很好。

在PostGIS 2中,默认几何运算符类GIST_GEOMETRY_OPS被更改为GIST_GEOMETRY_OPS_2d,并且完全删除了GIST_GEOMETRY_OPS。之所以这样做,是因为PostGIS2还引入了支持3D的ND空间索引,而旧名称被认为令人困惑和用词不当。

一些较旧的应用程序作为该过程的一部分创建表和索引,它们显式引用了运算符类名称。如果需要默认的2D索引,则不需要执行此操作。因此,如果您管理说好,则将索引创建从以下位置更改:

不好的:

使用GIST(Geom GIST_GEOMETRY_OPS)在my_table上创建索引idx_my_table_geom;

转到好:

使用GIST(Geom)在my_table上创建索引idx_my_table_geom;

唯一需要指定运算符类的情况是需要3D空间索引,如下所示:

使用GIST(Geom Gist_Geometryops_Nd)在my_Super3d上创建索引idx_my_Super3d_geom;

如果您不幸地陷入了编译代码的困境,您不能更改硬编码了旧的gist_geometryops的代码,那么您可以使用 legacy_gist.sql 打包在PostGIS 2.0.2+中。但是,如果您使用此修复程序,则建议您在以后删除索引并在不使用运算符类的情况下重新创建它。这将为您在未来需要再次升级时省去悲伤。

9.4.

我正在运行PostgreSQL 9.0,我不能再在OpenJump、Safe FME和其他一些工具中读取/查看几何图形了?

在PostgreSQL 9.0+中,byteA数据的默认编码已更改为十六进制,较旧的JDBC驱动程序仍采用转义格式。这影响了一些应用程序,如使用旧版JDBC驱动程序的Java应用程序或使用旧版npgsql驱动程序的.NET应用程序,这些应用程序期望ST_AsBinary的旧行为。有两种方法可以让这一点再次发挥作用。

您可以将JDBC驱动程序升级到最新的PostgreSQL 9.0版本,您可以从 http://jdbc.postgresql.org/download.html

如果您运行的是.NET应用程序,则可以使用Npgsql 2.0.11或更高版本,可从下载 http://pgfoundry.org/frs/?group_id=1000140 并且如上所述 Francisco Figueiredo的NpgSQL 2.0.11发布博客条目

如果不能升级您的PostgreSQL驱动程序,则可以通过以下更改将默认行为设置回旧行为:

ALTER DATABASE mypostgisdb SET bytea_output='escape';

9.5.

我试图使用PgAdmin查看我的几何图形列,但它是空白的,这是怎么回事?

对于大型几何图形,pgAdmin不会显示任何内容。验证几何图形列中是否有数据的最佳方法是?

-- this should return no records if all your geom fields are filled in
SELECT somefield FROM mytable WHERE geom IS NULL;
-- To tell just how large your geometry is do a query of the form
--which will tell you the most number of points you have in any of your geometry columns
SELECT MAX(ST_NPoints(geom)) FROM sometable;

9.6.

我可以存储什么类型的几何对象?

可以存储点几何图形、线串几何图形、多边形几何图形、多点几何图形、多重线串几何图形、多重多边形几何图形和几何集合几何图形。在PostGIS 2.0及更高版本中,您还可以将三角网和多面体曲面存储为基本几何类型。它们以Open GIS熟知文本格式(扩展名为Z、M和ZM)指定。目前支持三种数据类型。标准OGC几何数据类型,使用平面坐标系进行测量;地理数据类型,使用大地坐标系,在球体或椭球体上进行计算。PostGIS空间类型家族的最新成员是用于存储和分析栅格数据的栅格。RASTER有自己的常见问题解答。参考 Chapter 13, PostGIS栅格常见问题解答Chapter 12, 栅格参考 了解更多详细信息。

9.7.

我都糊涂了。我应该使用几何图形还是地理图形的数据存储?

简而言之:地理是一种较新的数据类型,支持长距离测量,但其上的大多数计算比几何上的计算慢。如果你使用地理学,你不需要学习太多关于平面坐标系的知识。如果你所关心的只是测量距离和长度,并且你有来自世界各地的数据,那么地理通常是最好的。几何数据类型是一种较旧的数据类型,具有更多支持它的函数,享有来自第三方工具的更大支持,并且对它的操作通常更快--对于更大的几何图形,有时快10倍。如果您对空间参考系非常熟悉,或者您正在处理的本地化数据中所有数据都可以放在一个 空间参考系(SRID) ,或者需要做大量的空间处理。注意:在这两种类型之间进行一次性转换以获得各自的好处相当容易。参考 Section 15.11, “PostGIS Function Support Matrix” 查看当前支持的内容和不支持的内容。

长长的答案:请参阅我们在 Section 4.3.3, “何时使用地理数据类型” 函数类型矩阵

9.8.

我对地理有更强烈的疑问,比如我在地理专栏中填入多大的地理区域,还能得到合理的答案。是否有一些限制,比如杆子、场地上的所有东西都必须放在一个半球内(就像SQL Server2008那样)、速度等?

你的问题太深刻和复杂,在这一节中无法得到充分的回答。请参阅我们的 Section 4.3.4, “地理高级常见问题解答”

9.9.

如何将地理信息系统对象插入数据库?

首先,您需要创建一个表,其中包含类型为“GEOMETRY”或“GEOGRAPHY”的列,以保存您的GIS数据。存储地理类型数据与存储几何图形略有不同。参考 Section 4.3, “地理数据类型” 获取有关存储地理位置的详细信息。

对于几何图形:使用以下命令连接到数据库 PSQL 并尝试使用以下SQL:

创建表gtest(id序列主键,名称varchar(20),几何几何(LINESTRING));

如果几何图形列定义失败,则您可能尚未将PostGIS函数和对象加载到此数据库中,或者正在使用早于2.0版本的PostGIS。请参阅 Section 2.2, “从源代码编译和安装”

然后,可以使用SQL INSERT语句将几何图形插入到表中。地理信息系统对象本身使用OpenGIS Consortium“熟知文本”格式进行格式化:

INSERT INTO gtest (ID, NAME, GEOM)
VALUES (
  1,
  'First Geometry',
  ST_GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)')
);

有关其他GIS对象的详细信息,请参阅 对象引用

要在表格中查看您的GIS数据,请执行以下操作:

SELECT id, name, ST_AsText(geom) AS geom FROM gtest;

返回值应如下所示:

id | name           | geom
----+----------------+-----------------------------
  1 | First Geometry | LINESTRING(2 3,4 5,6 5,7 8)
(1 row)

9.10.

如何构建空间查询?

构造任何其他数据库查询的方式与构造返回值、函数和布尔测试的SQL组合的方式相同。

对于空间查询,在构建查询时有两个重要的问题需要记住:是否有可以使用的空间索引;以及,您是否在大量几何图形上进行昂贵的计算。

通常,您需要使用“Intersects运算符”( & & ),它测试特征的边界框是否相交。其原因是 & & 运算符之所以有用,是因为如果空间索引可用来加速测试,则 & & 操作员将利用这一点。这可以使查询变得更快。

您还将使用空间函数,如Distance()、ST_Intersects()、ST_CONTAINS()和ST_WITHING()等,以缩小搜索结果的范围。大多数空间查询既包括索引测试,也包括空间函数测试。索引测试用于将返回元组的数量限制为仅 威力 符合相关条件。然后使用空间函数来准确地测试条件。

SELECT id, geom
FROM thetable
WHERE
  ST_Contains(geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))');

9.11.

如何加快对大型表的空间查询?

对大型表的快速查询是 《理由》 空间数据库(以及事务支持),因此拥有良好的索引是很重要的。

在表上构建空间索引 几何体 列中使用“CREATE INDEX”函数,如下所示:

使用GIST([GeometryColumn])对[Tablename]创建索引[indexname];

“Using GIST”选项告诉服务器使用GIST(通用搜索树)索引。

[Note]

假设GIST指数是有损的。Lossy索引使用代理对象(在空间情况下是边界框)来构建索引。

您还应该确保PostgreSQL查询规划器拥有关于您的索引的足够信息,以便合理地决定何时使用它。要做到这一点,你必须在你的几何表上“收集统计数据”。

对于PostgreSQL 8.0.x和更高版本,只需运行 真空分析 指挥部。

对于PostgreSQL 7.4.x和更低版本,请运行 选择UPDATE_GEOMETRY_STATS() 指挥部。

9.12.

为什么不支持PostgreSQL R-Tree索引?

早期版本的PostGIS使用PostgreSQL R-Tree索引。然而,从版本0.6开始,PostgreSQL R-树已经完全被丢弃,并且空间索引提供了R-Tree-over-gist方案。

我们的测试表明,原生R-Tree和GIST的搜索速度是相当的。原生PostgreSQL R树有两个限制,这使得它们不适合与GIS功能一起使用(请注意,这些限制是由于当前的PostgreSQL原生R树实现,而不是一般的R树概念):

  • PostgreSQL中的R-Tree索引无法处理大小超过8K的要素。Gist索引可以使用“有损”技巧,用边界框替换要素本身。

  • PostgreSQL中的R-Tree索引不是“空安全的”,因此在包含空几何的几何列上构建索引将失败。

9.13.

我为什么要使用 AddGeometryColumn() 函数和所有其他OpenGIS的东西?

如果您不想使用OpenGIS支持功能,则不必使用。只需像在旧版本中一样创建表,在CREATE语句中定义几何列。所有几何的SRID都将为-1,OpenGIS元数据表将 要正确填写。但是,这会导致大多数基于PostGIS的应用程序失败,因此通常建议您使用 AddGeometryColumn() 要创建几何表,请执行以下操作。

MapServer是一个利用 geometry_columns 元数据。具体地说,MapServer可以使用几何图形列的SRID将要素即时重新投影到正确的地图投影中。

9.14.

查找另一个对象半径内的所有对象的最佳方法是什么?

要最有效地使用数据库,最好执行RADIUS查询,将RADIUS测试与边界框测试相结合:边界框测试使用空间索引,从而快速访问数据子集,然后对其应用RADIUS测试。

这个 ST_DWiThin(几何图形、几何图形、距离) 函数是执行索引距离搜索的一种便捷方法。它的工作原理是创建一个足够大的搜索矩形来包围距离半径,然后对索引的结果子集执行精确的距离搜索。

例如,要查找点为100米(1000 1000)的所有对象,可以使用以下查询:

SELECT * FROM geotable
WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);

9.15.

如何将坐标重新投影作为查询的一部分?

要执行重投影,必须在SPATIAL_REF_SYS表中定义源和目标坐标系,并且要重投影的几何必须已经设置了SRID。一旦完成,重新投影就像引用所需的目的地SRID一样简单。下面是一个经度为NAD 83的几何图形。仅当geom的sRID不是-1(不是未定义的空间参考)时,以下选项才有效

SELECT ST_Transform(geom,4269) FROM geotable;

9.16.

我在相当大的几何体上执行了ST_AsEWKT和ST_AsText,结果返回空白字段。什么给予?

您可能正在使用PgAdmin或其他不能输出大文本的工具。如果您的几何体足够大,它将在这些工具中显示为空白。如果您确实需要在WKT中查看或输出它,请使用PSQL。

--To check number of geometries are really blank
                                SELECT count(gid) FROM geotable WHERE geom IS NULL;

9.17.

当我执行ST_Intersects时,当我知道两个几何图形不相交时,它会告诉我它们不相交。什么给予?

这通常发生在两种常见的情况下。您的几何无效--检查 ST_IsValid 或者您假设它们是相交的,因为ST_AsText截断了数字,并且在它没有显示给您之后有很多小数。

9.18.

我正在发布使用PostGIS的软件,这是否意味着我的软件必须像PostGIS一样使用GPL进行许可?如果我使用PostGIS,我必须发布我所有的代码吗?

几乎可以肯定的是,不会。例如,考虑在Linux上运行的Oracle数据库。Linux是GPL,Oracle不是:运行在Linux上的Oracle必须使用GPL分发吗?不是的。同样,您的软件可以随心所欲地使用PostgreSQL/PostGIS数据库,并且可以使用您喜欢的任何许可证。

唯一的例外是您对PostGIS源代码进行了更改,并且 已分发您更改的版本 对PostGIS的研究。在这种情况下,您必须共享更改后的PostGIS的代码(但不共享在其上运行的应用程序的代码)。即使在这种有限的情况下,您仍然只需要将源代码分发给您向其分发二进制文件的人。GPL并不要求您 出版 您的源代码,只是您将其与您提供二进制文件的人共享。

即使您将PostGIS与可选的启用CGAL的函数结合使用,上述情况仍然成立。CGAL的一部分是GPL,但所有的PostGIS都是GPL:使用CGAL并不会使PostGIS比开始时更具GPL。

9.19.

为什么叠加运算和空间谓词的结果有时会不一致?

这通常是作为特定案例来表示的,例如

  • 何以 ST_CONTAINS(A,ST_交集(A,B)) 假的?

  • 何以 ST_CONTAINS(ST_UNION(A,B),A) 假的?

  • 何以 ST_UNION(A,ST_Difference(A,B)) 不等于A?

  • 为什么 ST_Difference(A,B) 与…的内部相交 B

原因是,PostGIS表示几何图形并使用有限精度浮点数执行运算。这提供了使用实数进行计算的错觉--但这只是一种错觉。不可避免地会出现微小的误差,这会导致不同操作的结果略有不一致。

此外,PostGIS操作包含错误预防代码,该代码可能会对输入几何进行微小扰动,以防止出现健壮性错误。这些微小的改动也可能产生不完全一致的计算结果。

结果之间的差异应该总是非常小的。但在比较覆盖结果时,查询不应依赖于精确的一致性。相反,可以考虑在几何比较中使用基于面积或距离的公差。

Chapter 10. 拓扑学

PostGIS拓扑类型和功能用于管理面、边和节点等拓扑对象。

Sandro Santilli在PostGIS Day巴黎2011会议上的演讲很好地概述了PostGIS的拓扑结构及其发展方向 使用PostGIS 2.0幻灯片的拓扑

Vincent Picavet对什么是拓扑、如何使用以及支持它的各种FOSS4G工具提供了很好的概要和概述 PostGIS拓扑PGConf EU 2012

基于拓扑的GIS数据库的一个示例是 美国人口普查拓扑集成地理编码和参考系统(TIGER) 数据库。如果您想尝试使用PostGIS拓扑并需要一些数据,请查看 Topology_Load_Tiger

PostGIS拓扑模块存在于以前的PostGIS版本中,但从未出现在官方的PostGIS文档中。在PostGIS 2.0.0中,主要的清理工作是删除其中所有不推荐使用的函数,修复已知的可用性问题,更好地记录特性和函数,添加新函数,并进行增强以更符合SQL-MM标准。

有关该项目的详细信息,请访问 PostGIS拓扑维基

与此模块关联的所有函数和表都安装在一个名为 拓扑学

在SQL/MM标准中定义的函数以ST_为前缀,而特定于PostGIS的函数不带前缀。

默认情况下,从PostGIS 2.0开始构建拓扑支持,可以在构建时指定--不带-topology配置选项来禁用拓扑支持,如中所述 Chapter 2, PostGIS安装

10.1. 拓扑类型

Abstract

本节列出了由PostGIS Topology安装的PostgreSQL数据类型。注意:我们描述了这些函数的强制转换行为,这一点非常重要,尤其是在设计您自己的函数时。

getfaceedges_returntype — 由序列号和边号组成的复合类型。
TopoGeometry — 表示拓扑定义的几何图形的复合类型。
validatetopology_returntype — 由错误消息以及指示错误位置的id1和id2组成的复合类型。这是的返回类型 ValidateTopology

Name

getfaceedges_returntype — 由序列号和边号组成的复合类型。

描述

由序列号和边号组成的复合类型。这是的返回类型 ST_GetFaceEdges GetNodeEdges 功能。

  1. 序列 是一个整数:是指在topology中定义的拓扑。拓扑表定义了拓扑模式和sRID。

  2. 边缘 是一个整数:边的标识符。


Name

TopoGeometry — 表示拓扑定义的几何图形的复合类型。

描述

复合类型,指特定拓扑层中的拓扑几何图形,具有特定类型和特定ID。拓扑几何图形的元素包括以下特性:topology_id、layer_id、id整数、类型整数。

  1. topology_id 是一个整数:是指在topology中定义的拓扑。拓扑表定义了拓扑模式和sRID。

  2. layer_id 是一个整数:拓扑几何图形所属的LAYERS表中的Layer_id。Topology_id和layer_id的组合在topology.layers表中提供了唯一的引用。

  3. ID号 是一个整数:id是自动生成的序列号,它唯一地定义了相应拓扑层中的拓扑几何。

  4. 类型 1-4之间的整数,定义几何类型:1:[多]点,2:[多]线,3:[多]面,4:集合

投射行为

本节列出此数据类型允许的自动强制转换和显式强制转换

投给行为
几何体自动

另请参阅

CreateTopoGeom


Name

validatetopology_returntype — 由错误消息以及指示错误位置的id1和id2组成的复合类型。这是的返回类型 ValidateTopology

描述

由一个错误消息和两个整数组成的复合类型。这个 ValidateTopology 函数返回一组这些参数来表示验证错误,返回id1和id2来表示错误中涉及的拓扑对象的ID。

  1. 错误 Is varchar:表示错误类型。

    当前错误描述符是:重合节点、边交叉节点、边不简单、边结束节点几何不匹配、边起始节点几何不匹配、面重叠、面内

  2. Id1 为整数:表示出错的边/面/节点的标识符。

  3. ID2 是一个整数:对于涉及2的错误,对象表示次边/或节点

另请参阅

ValidateTopology

10.2. 拓扑域

Abstract

本部分列出了由PostGIS Topology安装的PostgreSQL域。域可以像对象类型一样用作函数或表列的返回对象。域和类型之间的区别在于,域是绑定了检查约束的现有类型。

TopoElement — 通常用于标识拓扑几何组件的两个整数的数组。
TopoElementArray — TopoElement对象的数组。

Name

TopoElement — 通常用于标识拓扑几何组件的两个整数的数组。

描述

由两个整数组成的数组,用于表示简单或层次结构的一个组件 TopoGeometry

在简单拓扑几何图形的情况下,数组的第一个元素表示拓扑基本体的标识符,第二个元素表示其类型(1:节点、2:边、3:面)。对于层次拓扑几何,数组的第一个元素表示子拓扑几何的标识符,第二个元素表示其层标识符。

[Note]

对于任何给定的层次拓扑几何图形,所有子拓扑几何图形元素都将来自相同的子图层,如要定义的拓扑几何图形所在层的topology.layer记录中所指定的那样。

示例

SELECT te[1] AS id, te[2] AS type FROM
( SELECT ARRAY[1,2]::topology.topoelement AS te ) f;
 id | type
----+------
  1 |    2
                 
SELECT ARRAY[1,2]::topology.topoelement;
  te
-------
 {1,2}
                 
--Example of what happens when you try to case a 3 element array to topoelement
-- NOTE: topoement has to be a 2 element array so fails dimension check
SELECT ARRAY[1,2,3]::topology.topoelement;
ERROR:  value for domain topology.topoelement violates check constraint "dimensions"
                 

Name

TopoElementArray — TopoElement对象的数组。

描述

由1个或多个TopoElement对象组成的数组,通常用于传递Topo Geometry对象的组件。

示例

SELECT '{{1,2},{4,3}}'::topology.topoelementarray As tea;
  tea
-------
{{1,2},{4,3}}

-- more verbose equivalent --
SELECT ARRAY[ARRAY[1,2], ARRAY[4,3]]::topology.topoelementarray As tea;

  tea
-------
{{1,2},{4,3}}

--using the array agg function packaged with topology --
SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea
  FROM generate_series(1,4) As e CROSS JOIN generate_series(1,3) As t;
  tea
--------------------------------------------------------------------------
{{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3},{4,1},{4,2},{4,3}}
                 
SELECT '{{1,2,4},{3,4,5}}'::topology.topoelementarray As tea;
ERROR:  value for domain topology.topoelementarray violates check constraint "dimensions"
                 

10.3. 拓扑和拓扑几何管理

Abstract

本节列出了用于构建新拓扑方案、验证拓扑和管理TopGeometry列的拓扑函数

AddTopoGeometryColumn — 将拓扑几何图形列添加到现有表中,将此新列注册为topology.layer中的层,并返回新的layer_id。
DropTopology — 请谨慎使用:删除拓扑模式并从topology.topology表中删除其引用,并从GEOMETRY_COLUMNS表中删除对该模式中的表的引用。
DropTopoGeometryColumn — 从名为的表中删除地形几何列 table_name 在架构中 schema_name 并从topology.layer表中注销这些列。
Populate_Topology_Layer — 通过从topo表中读取元数据,将缺少的条目添加到topology.layer表中。
TopologySummary — 获取拓扑名称并提供拓扑中对象类型的汇总。
ValidateTopology — 返回一组validatetopology_returtype对象,这些对象详细说明了拓扑问题。
ValidateTopologyRelation — 返回有关无效拓扑关系记录的信息
FindTopology — 通过不同的方式返回拓扑记录。
FindLayer — 以不同的方式返回topology.layer记录。

Name

AddTopoGeometryColumn — 将拓扑几何图形列添加到现有表中,将此新列注册为topology.layer中的层,并返回新的layer_id。

Synopsis

integer AddTopoGeometryColumn(varchar topology_name, varchar schema_name, varchar table_name, varchar column_name, varchar feature_type);

integer AddTopoGeometryColumn(varchar topology_name, varchar schema_name, varchar table_name, varchar column_name, varchar feature_type, integer child_layer);

描述

每个拓扑几何对象都属于特定拓扑的特定层。在创建拓扑几何对象之前,需要创建其TopologyLayer。拓扑图层是要素表与拓扑的关联。它还包含类型和层次结构信息。我们使用AddTopoGeometryColumn()函数创建一个层:

该函数将请求的列添加到表中,并将包含所有给定信息的记录添加到topology.layer表中。

如果未指定[CHILD_LAYER](或将其设置为NULL),则此图层将包含基本拓扑几何(由基本体拓扑元素组成)。否则,该层将包含层次拓扑几何(由Child_layer中的拓扑几何组成)。

创建了图层(其id由AddTopoGeometryColumn函数返回)后,即可在其中构建Topo Geometry对象

有效 feature_type 有:点、线、面、集合

可用性:1.1

示例

-- Note for this example we created our new table in the ma_topo schema
-- though we could have created it in a different schema -- in which case topology_name and schema_name would be different
CREATE SCHEMA ma;
CREATE TABLE ma.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('ma_topo', 'ma', 'parcels', 'topo', 'POLYGON');
CREATE SCHEMA ri;
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);
SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');

Name

DropTopology — 请谨慎使用:删除拓扑模式并从topology.topology表中删除其引用,并从GEOMETRY_COLUMNS表中删除对该模式中的表的引用。

Synopsis

integer DropTopology(varchar topology_schema_name);

描述

删除拓扑模式并从topology.topology表中删除其引用,并从geomy_Columns表中删除对该模式中的表的引用。此函数应谨慎使用,因为它可能会破坏您关心的数据。如果模式不存在,它只删除命名模式的引用条目。

可用性:1.1

示例

CASCADE删除ma_topo模式,并删除topology.topology和geometryColumns中对它的所有引用。

SELECT topology.DropTopology('ma_topo');

Name

DropTopoGeometryColumn — 从名为的表中删除地形几何列 table_name 在架构中 schema_name 并从topology.layer表中注销这些列。

Synopsis

text DropTopoGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

描述

从名为的表中删除地形几何列 table_name 在架构中 schema_name 并从topology.layer表中注销这些列。返回丢弃状态的摘要。注意:它首先将所有值设置为NULL,然后删除以绕过参照完整性检查。

可用性:1.1

示例

SELECT topology.DropTopoGeometryColumn('ma_topo', 'parcel_topo', 'topo');

Name

Populate_Topology_Layer — 通过从topo表中读取元数据,将缺少的条目添加到topology.layer表中。

Synopsis

setof record Populate_Topology_Layer();

描述

将缺少的条目添加到 topology.layer 通过检查表上的拓扑约束来创建表。此功能对于在恢复具有拓扑图数据的模式后修复拓扑目录中的条目非常有用。

它返回创建的条目列表。返回的列有 schema_name table_name feature_column

可用性:2.3.0

示例

SELECT CreateTopology('strk_topo');
CREATE SCHEMA strk;
CREATE TABLE strk.parcels(gid serial, parcel_id varchar(20) PRIMARY KEY, address text);
SELECT topology.AddTopoGeometryColumn('strk_topo', 'strk', 'parcels', 'topo', 'POLYGON');
-- this will return no records because this feature is already registered
SELECT *
  FROM topology.Populate_Topology_Layer();

-- let's rebuild
TRUNCATE TABLE topology.layer;

SELECT *
  FROM topology.Populate_Topology_Layer();

SELECT topology_id,layer_id, schema_name As sn, table_name As tn, feature_column As fc
FROM topology.layer;

                                
schema_name | table_name | feature_column
-------------+------------+----------------
 strk        | parcels    | topo
(1 row)

 topology_id | layer_id |  sn  |   tn    |  fc
-------------+----------+------+---------+------
           2 |        2 | strk | parcels | topo
(1 row)

Name

TopologySummary — 获取拓扑名称并提供拓扑中对象类型的汇总。

Synopsis

text TopologySummary(varchar topology_schema_name);

描述

获取拓扑名称并提供拓扑中对象类型的汇总。

可用性:2.0.0

示例

SELECT topology.topologysummary('city_data');
                    topologysummary
--------------------------------------------------------
 Topology city_data (329), SRID 4326, precision: 0
 22 nodes, 24 edges, 10 faces, 29 topogeoms in 5 layers
 Layer 1, type Polygonal (3), 9 topogeoms
  Deploy: features.land_parcels.feature
 Layer 2, type Puntal (1), 8 topogeoms
  Deploy: features.traffic_signs.feature
 Layer 3, type Lineal (2), 8 topogeoms
  Deploy: features.city_streets.feature
 Layer 4, type Polygonal (3), 3 topogeoms
  Hierarchy level 1, child layer 1
  Deploy: features.big_parcels.feature
 Layer 5, type Puntal (1), 1 topogeoms
  Hierarchy level 1, child layer 2
  Deploy: features.big_signs.feature

Name

ValidateTopology — 返回一组validatetopology_returtype对象,这些对象详细说明了拓扑问题。

Synopsis

setof validatetopology_returntype ValidateTopology(varchar toponame, geometry bbox);

描述

返回一组 validatetopology_returntype 对象详细说明拓扑问题,可以选择将检查限制在 BBox 参数。

可能的错误列表、它们的含义以及返回的ID表示的含义如下所示:

误差率Id1 ID2 含义
重合节点第一个节点的标识符。第二个节点的标识符。两个节点具有相同的几何体。
边交叉节点边的标识符。节点的标识符。边的内部有一个节点。看见 ST_Relate
无效边边的标识符。 边几何图形无效。看见 ST_IsValid
边缘不简单边的标识符。 边几何图形具有自交点。看见 ST_IsSimple
边与边相交第一条边的标识符。第二条边的标识符。两条边有一个内部交点。看见 ST_Relate
边起始节点几何图形不匹配边的标识符。指示的开始节点的标识符。 指示为边的起始节点的节点的几何图形与边几何图形的第一个点不匹配。看见 ST_StartPoint
边端节点几何不匹配边的标识符。指示的端节点的标识符。 指示为边的结束节点的节点的几何图形与边几何图形的最后一点不匹配。看见 ST_EndPoint
面无边孤立的面的标识符。  无边报告其两侧的现有面(Left_Face、Right_Face)。
脸没有戒指部分定义的面的标识符。  报告其侧面的面的边不形成环。
Face的MBR错误具有错误MBR缓存的面部的标识符。  面的最小边界矩形与报告其侧面的面的边集合的最小边界框不匹配。
不是广告上的脸上的洞边的带符号的标识符,用于标识环。看见 GetRingEdges 在其外部报告一个面的一环边包含在不同的面中。
非隔离节点具有不包含面定义错误的节点的标识符。  报告为位于一条或多条边的边界上的节点表示包含面。
隔离节点具有包含面定义错误的节点的标识符。  没有报告为位于任何边的边界上的节点缺少包含面的指示。
孤立节点具有错误的包含面错误表示的节点的标识符。  未报告为位于任何边的边界上的节点表示包含面,而不是包含该节点的实际面。看见 GetFaceContainingPoint
NEXT_RIGHT_EDGE无效错误表示的边的标识符。 应指示为下一个右边缘的边的有符号ID。 指示为在某条边的右侧行走的下一条边遇到的边是错误的。
NEXT_LEFT_EDGE无效错误表示的边的标识符。 应指示为下一个左边缘的边缘的有符号ID。 指示为在边的左侧行走的下一条边遇到的边是错误的。
环上的混合人脸标号边的带符号的标识符,用于标识环。看见 GetRingEdges 环中的边表示行走侧的冲突面。这也被称为“边位冲突”。
非闭合环边的带符号的标识符,用于标识环。看见 GetRingEdges 通过跟随Next_Left_Edge/Next_Right_Edge属性形成的边环在不同的节点上开始和结束。
脸有多个贝壳争用的面的标识符。 边的带符号的标识符,用于标识环。看见 GetRingEdges不止一环的边表示其内部的同一个面。

可用性:1.0.0

增强:2.0.0更高效的边缘交叉检测,并修复了以前版本中存在的假阳性。

已更改:已将id1和id2的2.2.0值交换为‘Edge cross node’,以与错误描述一致。

更改:3.2.0增加了可选的BBox参数,执行面标签和边缘链接检查。

示例

SELECT * FROM  topology.ValidateTopology('ma_topo');
      error        | id1 | id2
-------------------+-----+-----
face without edges |   1 |
                                

Name

ValidateTopologyRelation — 返回有关无效拓扑关系记录的信息

Synopsis

setof record ValidateTopologyRelation(varchar toponame);

描述

返回一组记录,给出拓扑关系表中有关失效的信息。

可用性:3.2.0

另请参阅

ValidateTopology


Name

FindTopology — 通过不同的方式返回拓扑记录。

Synopsis

topology FindTopology(TopoGeometry topogeom);

topology FindTopology(regclass layerTable, name layerColumn);

topology FindTopology(name layerSchema, name layerTable, name layerColumn);

topology FindTopology(text topoName);

topology FindTopology(int id);

描述

获取拓扑标识符或与拓扑相关的对象的标识符,并返回Topology。拓扑记录。

可用性:3.2.0

示例

SELECT name(findTopology('features.land_parcels', 'feature'));
   name
-----------
 city_data
(1 row)

另请参阅

FindLayer


Name

FindLayer — 以不同的方式返回topology.layer记录。

Synopsis

topology.layer FindLayer(TopoGeometry tg);

topology.layer FindLayer(regclass layer_table, name feature_column);

topology.layer FindLayer(name schema_name, name table_name, name feature_column);

topology.layer FindLayer(integer topology_id, integer layer_id);

描述

获取层标识符或与拓扑相关的对象的标识符,并返回Topology。层记录。

可用性:3.2.0

示例

SELECT layer_id(findLayer('features.land_parcels', 'feature'));
 layer_id
----------
        1
(1 row)

另请参阅

FindTopology

10.4. 拓扑统计信息管理

Abstract

本节讨论拓扑构建过程中的数据库统计信息管理。

向拓扑中添加元素会触发许多数据库查询,以查找要拆分的现有边、添加节点并更新将使用新线条进行节点的边。因此,有关拓扑表中数据的统计数据是最新的,这一点很有用。

PostGIS拓扑填充和编辑功能不会自动更新统计数据,因为在拓扑中的每一次更改后更新统计数据都会被夸大,因此调用者有责任处理这一点。

[Note]

在自动真空处理完成之前启动的事务将看不到由自动真空更新的统计信息,因此长期运行的事务将需要运行分析自身,以使用更新的统计信息。

10.5. 拓扑构造器

Abstract

本节介绍用于创建新拓扑的拓扑功能。

CreateTopology — 创建一个新的拓扑模式,并在topology.topology表中注册该新模式。
CopyTopology — 复制拓扑结构(节点、边、面、层和拓扑几何)。
ST_InitTopoGeo — 创建新的拓扑方案,并将此新方案注册到topology。拓扑表和过程的详细信息摘要中。
ST_CreateTopoGeo — 将几何图形集合添加到给定的空拓扑中,并返回一条详细说明成功的消息。
TopoGeo_AddPoint — 使用公差将点添加到现有拓扑,并可能拆分现有边。
TopoGeo_AddLineString — 使用公差并可能拆分现有边/面将线串添加到现有拓扑。返回边标识符。
TopoGeo_AddPolygon — 使用公差并可能拆分现有边/面将多边形添加到现有拓扑。返回面部识别符。

Name

CreateTopology — 创建一个新的拓扑模式,并在topology.topology表中注册该新模式。

Synopsis

integer CreateTopology(varchar topology_schema_name);

integer CreateTopology(varchar topology_schema_name, integer srid);

integer CreateTopology(varchar topology_schema_name, integer srid, double precision prec);

integer CreateTopology(varchar topology_schema_name, integer srid, double precision prec, boolean hasz);

描述

使用名称创建新架构 topology_name 由表组成( edge_data 节点 关系 并在topology.拓扑表中注册此新拓扑。它返回拓扑表中的拓扑ID。SRID是在空间参考系统表中为该拓扑定义的空间参考。拓扑名称必须是唯一的。公差以空间参考系为单位进行测量。如果容差( PREC )未指定,则默认为0。

这类似于SQL/MM ST_InitTopoGeo 但更实用一些。 哈兹 如果未指定,则默认为FALSE。

可用性:1.1

增强:2.0添加了接受Hasz的签名

示例

本例创建了一个名为ma_topo的新模式,该模式将以马萨诸塞州平面米为单位存储边、面和关系。容差表示1/2米,因为空间参考系是基于米的空间参考系

SELECT topology.CreateTopology('ma_topo',26986, 0.5);

在州平面FT中创建罗德岛拓扑

SELECT topology.CreateTopology('ri_topo',3438) As topoid;
topoid
------
2

Name

CopyTopology — 复制拓扑结构(节点、边、面、层和拓扑几何)。

Synopsis

integer CopyTopology(varchar existing_topology_name, varchar new_name);

描述

使用名称创建新拓扑 new_topology_name 和SRID和精度取自 existing_topology_name ,复制其中的所有节点、边和面,也复制层及其拓扑几何。

[Note]

Topology.layer中的新行将包含SCHEMA_NAME、TABLE_NAME和FEATURE_COLUMN的合成值。这是因为拓扑几何将仅作为定义存在,但还不会在任何用户级表中可用。

可用性:2.0.0

示例

此示例创建名为ma_topo的拓扑的备份

SELECT topology.CopyTopology('ma_topo', 'ma_topo_bakup');

Name

ST_InitTopoGeo — 创建新的拓扑方案,并将此新方案注册到topology。拓扑表和过程的详细信息摘要中。

Synopsis

text ST_InitTopoGeo(varchar topology_schema_name);

描述

这是相当于CreateTopology的SQL-MM,但缺少CreateTopology的空间参考和容差选项,并输出创建的文本描述,而不是拓扑id。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.17

示例

SELECT topology.ST_InitTopoGeo('topo_schema_to_create') AS topocreation;
                      astopocreation
------------------------------------------------------------
 Topology-Geometry 'topo_schema_to_create' (id:7) created.
                                

另请参阅

CreateTopology


Name

ST_CreateTopoGeo — 将几何图形集合添加到给定的空拓扑中,并返回一条详细说明成功的消息。

Synopsis

text ST_CreateTopoGeo(varchar atopology, geometry acollection);

描述

将几何图形集合添加到给定的空拓扑中,并返回一条详细说明成功的消息。

对于填充空拓扑很有用。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程细节--X.3.18

示例

-- Populate topology --
SELECT topology.ST_CreateTopoGeo('ri_topo',
 ST_GeomFromText('MULTILINESTRING((384744 236928,384750 236923,384769 236911,384799 236895,384811 236890,384833 236884,
  384844 236882,384866 236881,384879 236883,384954 236898,385087 236932,385117 236938,
  385167 236938,385203 236941,385224 236946,385233 236950,385241 236956,385254 236971,
  385260 236979,385268 236999,385273 237018,385273 237037,385271 237047,385267 237057,
  385225 237125,385210 237144,385192 237161,385167 237192,385162 237202,385159 237214,
  385159 237227,385162 237241,385166 237256,385196 237324,385209 237345,385234 237375,
  385237 237383,385238 237399,385236 237407,385227 237419,385213 237430,385193 237439,
  385174 237451,385170 237455,385169 237460,385171 237475,385181 237503,385190 237521,
  385200 237533,385206 237538,385213 237541,385221 237542,385235 237540,385242 237541,
  385249 237544,385260 237555,385270 237570,385289 237584,385292 237589,385291 237596,385284 237630))',3438)
  );

      st_createtopogeo
----------------------------
 Topology ri_topo populated


-- create tables and topo geometries --
CREATE TABLE ri.roads(gid serial PRIMARY KEY, road_name text);

SELECT topology.AddTopoGeometryColumn('ri_topo', 'ri', 'roads', 'topo', 'LINE');
                                

Name

TopoGeo_AddPoint — 使用公差将点添加到现有拓扑,并可能拆分现有边。

Synopsis

integer TopoGeo_AddPoint(varchar atopology, geometry apoint, float8 tolerance);

描述

将点添加到现有拓扑并返回其标识符。给定点将捕捉到给定公差内的现有节点或边。现有边可能会被捕捉点分割。

可用性:2.0.0


Name

TopoGeo_AddLineString — 使用公差并可能拆分现有边/面将线串添加到现有拓扑。返回边标识符。

Synopsis

SETOF integer TopoGeo_AddLineString(varchar atopology, geometry aline, float8 tolerance);

描述

将线串添加到现有拓扑并返回一组构成它的边标识符。给定线将捕捉到给定公差内的现有节点或边。现有边和面可能会被这条线分割。

[Note]

有关通过此函数加载的拓扑的更新统计信息取决于调用方,请参见 maintaining statistics during topology editing and population

可用性:2.0.0


Name

TopoGeo_AddPolygon — 使用公差并可能拆分现有边/面将多边形添加到现有拓扑。返回面部识别符。

Synopsis

SETOF integer TopoGeo_AddPolygon(varchar atopology, geometry apoly, float8 tolerance);

描述

将多边形添加到现有拓扑并返回组成它的一组面标识符。给定多边形的边界将捕捉到给定公差内的现有节点或边。现有边和面可能会被新多边形的边界分割。

[Note]

有关通过此函数加载的拓扑的更新统计信息取决于调用方,请参见 maintaining statistics during topology editing and population

可用性:2.0.0

10.6. 拓扑编辑器

Abstract

本节介绍用于添加、移动、删除和拆分边、面和节点的拓扑功能。所有这些函数都由ISO SQL/MM定义。

ST_AddIsoNode — 将隔离节点添加到拓扑中的面,并返回新节点的节点ID。如果Faces为空,仍会创建该节点。
ST_AddIsoEdge — 添加由几何图形定义的隔离边 线绳 连接两个现有隔离节点的拓扑 阳极 另一个节点 并返回新边的边ID。
ST_AddEdgeNewFaces — 添加新边,如果这样做会分割一个面,则删除原始面并用两个新面替换它。
ST_AddEdgeModFace — 添加新边,如果这样做会拆分面,则修改原始面并添加新面。
ST_RemEdgeNewFace — 删除边,如果删除的边分隔两个面,则删除原始面并将其替换为新面。
ST_RemEdgeModFace — 删除一条边,如果删除的边分隔了两个面,则删除其中一个面并修改另一个边以占据两个面的空间。
ST_ChangeEdgeGeom — 更改边的形状,而不影响拓扑结构。
ST_ModEdgeSplit — 通过沿现有边创建新节点、修改原始边并添加新边来分割边。
ST_ModEdgeHeal — 通过删除连接两条边的节点、修改第一条边并删除第二条边来修复两条边。返回已删除节点的ID。
ST_NewEdgeHeal — 通过删除连接两条边的节点、删除两条边并将其替换为方向与提供的第一条边相同的边来修复两条边。
ST_MoveIsoNode — 将拓扑中的隔离节点从一点移动到另一点。如果是新的 尖点 几何体以抛出错误的节点的形式存在。返回Move的描述。
ST_NewEdgesSplit — 通过沿现有边创建新节点、删除原始边并将其替换为两条新边来分割边。返回连接新边而创建的新节点的ID。
ST_RemoveIsoNode — 删除隔离节点并返回操作说明。如果节点不是孤立的(是边的开始或结束),则会引发异常。
ST_RemoveIsoEdge — 删除隔离边并返回操作说明。如果边缘不是孤立的,则会引发异常。

Name

ST_AddIsoNode — 将隔离节点添加到拓扑中的面,并返回新节点的节点ID。如果Faces为空,仍会创建该节点。

Synopsis

integer ST_AddIsoNode(varchar atopology, integer aface, geometry apoint);

描述

添加具有点位置的隔离节点 尖点 到具有Face ID的现有面 正面 到拓扑图 畸形学 并返回新节点的节点ID。

如果点几何的空间参考系(SRID)与拓扑不同,则 尖点 不是点几何图形,该点为空,或者该点与现有边相交(即使在边界处),则会引发异常。如果该点已作为节点存在,则会引发异常。

如果 正面 不为空,并且 尖点 不在脸部内,则引发异常。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X+1.3.1

示例


Name

ST_AddIsoEdge — 添加由几何图形定义的隔离边 线绳 连接两个现有隔离节点的拓扑 阳极 另一个节点 并返回新边的边ID。

Synopsis

integer ST_AddIsoEdge(varchar atopology, integer anode, integer anothernode, geometry alinestring);

描述

添加由几何图形定义的隔离边 线绳 连接两个现有隔离节点的拓扑 阳极 另一个节点 并返回新边的边ID。

如果空间参考系(SRID)的 线绳 几何体与拓扑不同,任何输入参数为空,或者节点包含在多个面中,或者节点是现有边的开始节点或结束节点,则会引发异常。

如果 线绳 不在脸的面孔内 阳极 另一个节点 属于,则引发异常。

如果 阳极 另一个节点 的起点和终点不是 线绳 然后抛出一个异常。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.4

示例


Name

ST_AddEdgeNewFaces — 添加新边,如果这样做会分割一个面,则删除原始面并用两个新面替换它。

Synopsis

integer ST_AddEdgeNewFaces(varchar atopology, integer anode, integer anothernode, geometry acurve);

描述

添加新边,如果这样做会分割一个面,则删除原始面并用两个新面替换它。返回新添加的边的ID。

相应地更新所有现有的连接边和关系。

如果任何参数为空,则给定节点是未知的(必须已存在于 节点 拓扑模式表), 曲线型 不是一个 LINESTRING ,即 阳极 另一个节点 并不是 曲线型 然后抛出一个错误。

如果空间参考系(SRID)的 曲线型 几何图形与引发异常的拓扑不同。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.12

示例


Name

ST_AddEdgeModFace — 添加新边,如果这样做会拆分面,则修改原始面并添加新面。

Synopsis

integer ST_AddEdgeModFace(varchar atopology, integer anode, integer anothernode, geometry acurve);

描述

添加新边,如果这样做会拆分面,请修改原始面并添加新的面。

[Note]

如果可能,新面将在新边的左侧创建。如果左侧的面需要是宇宙面(无边界),则不可能执行此操作。

返回新添加的边的ID。

相应地更新所有现有的连接边和关系。

如果任何参数为空,则给定节点是未知的(必须已存在于 节点 拓扑模式表), 曲线型 不是一个 LINESTRING ,即 阳极 另一个节点 并不是 曲线型 然后抛出一个错误。

如果空间参考系(SRID)的 曲线型 几何图形与引发异常的拓扑不同。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.13

示例


Name

ST_RemEdgeNewFace — 删除边,如果删除的边分隔两个面,则删除原始面并将其替换为新面。

Synopsis

integer ST_RemEdgeNewFace(varchar atopology, integer anedge);

描述

删除边,如果删除的边分隔两个面,则删除原始面并将其替换为新面。

返回新创建的面的ID,如果没有创建新面,则返回NULL。当移除的边悬挂或与宇宙面隔离或被限制时,不会创建新的面(可能会使宇宙涌入另一边的面)。

相应地更新所有现有的连接边和关系。

拒绝删除参与现有拓扑几何图形定义的边。如果任何拓扑几何体仅由其中一个(而不是另一个)定义,则拒绝修复两个面。

如果任何参数为空,则给定边是未知的(必须已存在于 边缘 拓扑模式表),则拓扑名称无效,则抛出错误。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.14

示例


Name

ST_RemEdgeModFace — 删除一条边,如果删除的边分隔了两个面,则删除其中一个面并修改另一个边以占据两个面的空间。

Synopsis

integer ST_RemEdgeModFace(varchar atopology, integer anedge);

描述

删除一条边,如果删除的边分隔了两个面,则删除其中一个面并修改另一个边以占据两个面的空间。优先将面保持在右侧,以与ST_AddEdgeMODFace保持对称。返回保留在已移除边的位置的面的ID。

相应地更新所有现有的连接边和关系。

拒绝删除在现有拓扑几何图形的定义中指定的边。如果任何拓扑几何体仅由其中一个(而不是另一个)定义,则拒绝修复两个面。

如果任何参数为空,则给定边是未知的(必须已存在于 边缘 拓扑模式表),则拓扑名称无效,则抛出错误。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.15

示例


Name

ST_ChangeEdgeGeom — 更改边的形状,而不影响拓扑结构。

Synopsis

integer ST_ChangeEdgeGeom(varchar atopology, integer anedge, geometry acurve);

描述

更改边的形状,而不影响拓扑结构。

如果任何参数为空,则给定边不存在于 边缘 拓扑架构表,即 曲线型 不是一个 LINESTRING ,即 阳极 另一个节点 并不是 曲线型 或者修改会改变底层拓扑,则抛出错误。

如果空间参考系(SRID)的 曲线型 几何图形与引发异常的拓扑不同。

如果新的 曲线型 并不简单,则会引发错误。

如果将边从旧位置移动到新位置会遇到障碍,则会抛出错误。

可用性:1.1.0

增强版:2.0.0增加了拓扑一致性强制

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息X.3.6

示例

SELECT topology.ST_ChangeEdgeGeom('ma_topo', 1,
                ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 893844.3,227641.6 893816.6, 227704.5 893778.5)', 26986) );
 ----
 Edge 1 changed

Name

ST_ModEdgeSplit — 通过沿现有边创建新节点、修改原始边并添加新边来分割边。

Synopsis

integer ST_ModEdgeSplit(varchar atopology, integer anedge, geometry apoint);

描述

通过沿现有边创建新节点、修改原始边并添加新边来分割边。相应地更新所有现有的连接边和关系。返回新添加的节点的标识符。

可用性:1.1

已更改:2.0-在先前版本中,该名称被错误命名为ST_ModEdgesSplit

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9

示例

-- Add an edge --
 SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 893910, 227600 893910)', 26986) ) As edgeid;

-- edgeid-
3


-- Split the edge  --
SELECT topology.ST_ModEdgeSplit('ma_topo',  3, ST_SetSRID(ST_Point(227594,893910),26986)  ) As node_id;
        node_id
-------------------------
7

Name

ST_ModEdgeHeal — 通过删除连接两条边的节点、修改第一条边并删除第二条边来修复两条边。返回已删除节点的ID。

Synopsis

int ST_ModEdgeHeal(varchar atopology, integer anedge, integer anotheredge);

描述

通过删除连接两条边的节点、修改第一条边并删除第二条边来修复两条边。返回已删除节点的ID。相应地更新所有现有的连接边和关系。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9


Name

ST_NewEdgeHeal — 通过删除连接两条边的节点、删除两条边并将其替换为方向与提供的第一条边相同的边来修复两条边。

Synopsis

int ST_NewEdgeHeal(varchar atopology, integer anedge, integer anotheredge);

描述

通过删除连接两条边的节点、删除两条边并将其替换为方向与提供的第一条边相同的边来修复两条边。返回替换已修复边的新边的ID。相应地更新所有现有的连接边和关系。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9


Name

ST_MoveIsoNode — 将拓扑中的隔离节点从一点移动到另一点。如果是新的 尖点 几何体以抛出错误的节点的形式存在。返回Move的描述。

Synopsis

text ST_MoveIsoNode(varchar atopology, integer anedge, geometry apoint);

描述

将拓扑中的隔离节点从一点移动到另一点。如果是新的 尖点 几何体以抛出错误的节点的形式存在。

如果任何参数为空,则 尖点 不是点,现有节点不是孤立的(是现有边的起点或终点),新节点位置与现有边相交(即使在终点),或者新位置位于不同的面(从3.2.0开始),则会引发异常。

如果点几何图形的空间参考系统(SRID)与拓扑不同,则会抛出异常。

可用性:2.0.0

增强:3.2.0确保点头不会移动到不同的面上

This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X.3.2

示例

-- Add an isolated node with no face  --
SELECT topology.ST_AddIsoNode('ma_topo',  NULL, ST_GeomFromText('POINT(227579 893916)', 26986) ) As nodeid;
 nodeid
--------
      7
-- Move the new node --
SELECT topology.ST_MoveIsoNode('ma_topo', 7,  ST_GeomFromText('POINT(227579.5 893916.5)', 26986) ) As descrip;
                      descrip
----------------------------------------------------
Isolated Node 7 moved to location 227579.5,893916.5

另请参阅

ST_AddIsoNode


Name

ST_NewEdgesSplit — 通过沿现有边创建新节点、删除原始边并将其替换为两条新边来分割边。返回连接新边而创建的新节点的ID。

Synopsis

integer ST_NewEdgesSplit(varchar atopology, integer anedge, geometry apoint);

描述

分割具有边ID的边 通过创建点位置的新节点 尖点 沿当前边,删除原始边并将其替换为两条新边。返回连接新边而创建的新节点的ID。相应地更新所有现有的连接边和关系。

如果点几何的空间参考系(SRID)与拓扑不同,则 尖点 不是点几何图形,点为空,点已经作为节点存在,边不对应于现有边,或者点不在边内,则抛出异常。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X.3.8

示例

-- Add an edge  --
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 893917,227592 893900)', 26986) ) As edgeid;
-- result-
edgeid
------
        2
-- Split the new edge --
SELECT topology.ST_NewEdgesSplit('ma_topo', 2,  ST_GeomFromText('POINT(227578.5 893913.5)', 26986) ) As newnodeid;
 newnodeid
---------
       6

Name

ST_RemoveIsoNode — 删除隔离节点并返回操作说明。如果节点不是孤立的(是边的开始或结束),则会引发异常。

Synopsis

text ST_RemoveIsoNode(varchar atopology, integer anode);

描述

删除隔离节点并返回操作说明。如果节点不是孤立的(是边的开始或结束),则会引发异常。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X+1.3.3

示例

-- Remove an isolated node with no face  --
SELECT topology.ST_RemoveIsoNode('ma_topo',  7 ) As result;
         result
-------------------------
 Isolated node 7 removed

另请参阅

ST_AddIsoNode


Name

ST_RemoveIsoEdge — 删除隔离边并返回操作说明。如果边缘不是孤立的,则会引发异常。

Synopsis

text ST_RemoveIsoEdge(varchar atopology, integer anedge);

描述

删除隔离边并返回操作说明。如果边缘不是孤立的,则会引发异常。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X+1.3.3

示例

-- Remove an isolated node with no face  --
SELECT topology.ST_RemoveIsoNode('ma_topo',  7 ) As result;
         result
-------------------------
 Isolated node 7 removed

另请参阅

ST_AddIsoNode

10.7. 拓扑访问器

GetEdgeByPoint — 查找与给定点相交的边的边ID。
GetFaceByPoint — 查找与给定点相交的面。
GetFaceContainingPoint — 查找包含点的面。
GetNodeByPoint — 查找位于点位置的节点的node-id。
获取拓扑ID — 在给定拓扑名的情况下,返回topology.topology表中拓扑的ID。
获取拓扑SRID — 在给定拓扑名称的情况下,返回topology.topology表中的拓扑的SRID。
GetTopologyName — 在给定拓扑ID的情况下返回拓扑(架构)的名称。
ST_GetFaceEdges — 返回一组绑定的有序边 正面
ST_GetFaceGeometry — 返回给定拓扑中具有指定面ID的多边形。
GetRingEdges — 返回通过在给定的边上行走而满足的有符号边标识符的有序集。
GetNodeEdges — 返回关联到给定节点的一组有序边。

Name

GetEdgeByPoint — 查找与给定点相交的边的边ID。

Synopsis

integer GetEdgeByPoint(varchar atopology, geometry apoint, float8 tol1);

描述

检索与点相交的边的ID。

在给定拓扑、点和公差的情况下,该函数返回整数(id-edge)。如果公差=0,则该点必须与边相交。

如果 尖点 不与边相交,返回0(零)。

如果使用公差 >0,并且该点附近有多条边,则会引发异常。

[Note]

如果容差=0,则函数使用ST_Intersects,否则使用ST_DWiThin。

由GEOS模块执行。

可用性:2.0.0

示例

这些示例使用我们在中创建的边 AddEdge

SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As with1mtol, topology.GetEdgeByPoint('ma_topo',geom,0) As withnotol
FROM ST_GeomFromEWKT('SRID=26986;POINT(227622.6 893843)') As geom;
 with1mtol | withnotol
-----------+-----------
         2 |         0
SELECT topology.GetEdgeByPoint('ma_topo',geom, 1) As nearnode
FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;

-- get error --
ERROR:  Two or more edges found

Name

GetFaceByPoint — 查找与给定点相交的面。

Synopsis

integer GetFaceByPoint(varchar atopology, geometry apoint, float8 tol1);

描述

查找具有给定公差的点参照的面。

该函数将有效地查找与以点为中心、公差为半径的圆相交的面。

如果没有面与给定查询位置相交,则返回0(通用面)。

如果多个面与查询位置相交,则会抛出异常。

可用性:2.0.0

增强:3.2.0更高效的实现和更清晰的约定,停止使用无效的拓扑。

示例

SELECT topology.GetFaceByPoint('ma_topo',geom, 10) As with1mtol, topology.GetFaceByPoint('ma_topo',geom,0) As withnotol
        FROM ST_GeomFromEWKT('POINT(234604.6 899382.0)') As geom;

         with1mtol | withnotol
        -----------+-----------
                         1 |         0
SELECT topology.GetFaceByPoint('ma_topo',geom, 1) As nearnode
        FROM ST_GeomFromEWKT('POINT(227591.9 893900.4)') As geom;

-- get error --
ERROR:  Two or more faces found

Name

GetFaceContainingPoint — 查找包含点的面。

Synopsis

integer GetFaceContainingPoint(text atopology, geometry apoint);

描述

返回包含点的面的ID。

如果该点落在面边界上,则会引发异常。

[Note]

该函数依赖于有效的拓扑,使用边链接和面标签。

可用性:3.2.0

另请参阅

ST_GetFaceGeometry


Name

GetNodeByPoint — 查找位于点位置的节点的node-id。

Synopsis

integer GetNodeByPoint(varchar atopology, geometry apoint, float8 tol1);

描述

检索点位置处的节点的ID。

在给定拓扑、点和公差的情况下,该函数返回一个整数(id节点)。如果容差=0表示精确相交,否则从间隔中检索节点。

如果 尖点 不与节点相交,返回0(零)。

如果使用容差 >0,并且该点附近有多个节点,则会引发异常。

[Note]

如果容差=0,则函数使用ST_Intersects,否则使用ST_DWiThin。

由GEOS模块执行。

可用性:2.0.0

示例

这些示例使用我们在中创建的边 AddEdge

SELECT topology.GetNodeByPoint('ma_topo',geom, 1) As nearnode
 FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;
  nearnode
----------
        2
 
SELECT topology.GetNodeByPoint('ma_topo',geom, 1000) As too_much_tolerance
 FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;

 ----get error--
 ERROR:  Two or more nodes found
 

Name

获取拓扑ID — 在给定拓扑名的情况下,返回topology.topology表中拓扑的ID。

Synopsis

integer GetTopologyID(varchar toponame);

描述

在给定拓扑名的情况下,返回topology.topology表中拓扑的ID。

可用性:1.1

示例

SELECT topology.GetTopologyID('ma_topo') As topo_id;
 topo_id
---------
       1

Name

获取拓扑SRID — 在给定拓扑名称的情况下,返回topology.topology表中的拓扑的SRID。

Synopsis

integer GetTopologyID(varchar toponame);

描述

在给定拓扑名称的情况下,返回topology.topology表中的拓扑的空间参考ID。

可用性:2.0.0

示例

SELECT topology.GetTopologySRID('ma_topo') As SRID;
 SRID
-------
  4326

Name

GetTopologyName — 在给定拓扑ID的情况下返回拓扑(架构)的名称。

Synopsis

varchar GetTopologyName(integer topology_id);

描述

在给定拓扑ID的情况下,从topology.topology表中返回拓扑的拓扑名(架构)。

可用性:1.1

示例

SELECT topology.GetTopologyName(1) As topo_name;
 topo_name
-----------
 ma_topo

Name

ST_GetFaceEdges — 返回一组绑定的有序边 正面

Synopsis

getfaceedges_returntype ST_GetFaceEdges(varchar atopology, integer aface);

描述

返回一组绑定的有序边 正面 。每个输出由一个序列和edgeid组成。序列号以值1开头。

每个环形边的枚举从具有最小标识符的边开始。边的顺序遵循左侧规则(约束面位于每条有向边的左侧)。

可用性:2.0

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.5

示例

-- Returns the edges bounding face 1
SELECT (topology.ST_GetFaceEdges('tt', 1)).*;
-- result --
 sequence | edge
----------+------
        1 |   -4
        2 |    5
        3 |    7
        4 |   -6
        5 |    1
        6 |    2
        7 |    3
(7 rows)
-- Returns the sequence, edge id
-- and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
        INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

Name

ST_GetFaceGeometry — 返回给定拓扑中具有指定面ID的多边形。

Synopsis

geometry ST_GetFaceGeometry(varchar atopology, integer aface);

描述

返回给定拓扑中具有指定面ID的多边形。从构成面的边构建多边形。

可用性:1.1

This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.16

示例

-- Returns the wkt of the polygon added with AddFace
SELECT ST_AsText(topology.ST_GetFaceGeometry('ma_topo', 1)) As facegeomwkt;
-- result --
               facegeomwkt

--------------------------------------------------------------------------------
 POLYGON((234776.9 899563.7,234896.5 899456.7,234914 899436.4,234946.6 899356.9,
234872.5 899328.7,234891 899285.4,234992.5 899145,234890.6 899069,
234755.2 899255.4,234612.7 899379.4,234776.9 899563.7))

另请参阅

AddFace


Name

GetRingEdges — 返回通过在给定的边上行走而满足的有符号边标识符的有序集。

Synopsis

getfaceedges_returntype GetRingEdges(varchar atopology, integer aring, integer max_edges=null);

描述

返回通过在给定的边上行走而满足的有符号边标识符的有序集。每个输出由一个序列和一个带符号的边ID组成。序列号以值1开头。

如果通过正边ID,漫游将从相应边的左侧开始,并沿着边的方向进行。如果您通过负边id,则漫游从它的右侧开始并向后移动。

如果 max_edges IS NOT NULL不超过该函数返回的那些记录。在处理可能无效的拓扑时,这是一个安全参数。

[Note]

此函数使用边环链接元数据。

可用性:2.0.0


Name

GetNodeEdges — 返回关联到给定节点的一组有序边。

Synopsis

getfaceedges_returntype GetNodeEdges(varchar atopology, integer anode);

描述

返回关联到给定节点的一组有序边。每个输出由一个序列和一个带符号的边ID组成。序列号从值1开始。正边从给定节点开始。负边结束于给定节点。闭合边将出现两次(带有两个符号)。顺序是从北向顺时针开始的。

[Note]

此函数计算排序,而不是从元数据派生,因此可用于构建边缘环链接。

可用性:2.0

10.8. 拓扑处理

Abstract

本节介绍以非标准方式处理拓扑的函数。

多角化 — 查找并注册由拓扑边定义的所有面。
AddNode — 将点节点添加到指定拓扑架构中的节点表,并返回新节点的节点ID。如果point已经作为节点存在,则返回现有的nodeid。
AddEdge — 使用指定的线串几何图形将线串边添加到边表中,并将关联的起点和终点添加到指定拓扑模式的点节点表中,并返回新(或现有)边的边ID。
AddFace — 将面基本体注册到拓扑并获取其标识符。
ST_Simplify — 使用Douglas-Peucker算法返回给定拓扑几何体的简化几何体版本。

Name

多角化 — 查找并注册由拓扑边定义的所有面。

Synopsis

text Polygonize(varchar toponame);

描述

注册可以构建为拓扑边基本体的所有面。

假设目标拓扑不包含自交边。

[Note]

已知面被识别,因此在同一拓扑上多次调用Polygonize是安全的。

[Note]

此函数不使用也不设置边缘表的NEXT_LEFT_EDGE和NEXT_RIGHT_EDGE字段。

可用性:2.0.0

另请参阅

AddFace, ST_Polygonize


Name

AddNode — 将点节点添加到指定拓扑架构中的节点表,并返回新节点的节点ID。如果point已经作为节点存在,则返回现有的nodeid。

Synopsis

integer AddNode(varchar toponame, geometry apoint, boolean allowEdgeSplitting=false, boolean computeContainingFace=false);

描述

将点节点添加到指定拓扑模式中的节点表。这个 AddEdge 函数在调用时自动添加边的起点和终点,因此不必显式添加边的节点。

如果找到与节点交叉的任何边,则会引发异常或拆分该边,具体取决于 允许边分割 参数值。

如果 ComputeContainingFacebook 如果为真,则新添加的节点将计算正确的包含面。

[Note]

如果 尖点 几何体已作为节点存在,不会添加该节点,但会返回现有节点ID。

可用性:2.0.0

示例

SELECT topology.AddNode('ma_topo', ST_GeomFromText('POINT(227641.6 893816.5)', 26986) ) As nodeid;
-- result --
nodeid
--------
 4

另请参阅

AddEdge, CreateTopology


Name

AddEdge — 使用指定的线串几何图形将线串边添加到边表中,并将关联的起点和终点添加到指定拓扑模式的点节点表中,并返回新(或现有)边的边ID。

Synopsis

integer AddEdge(varchar toponame, geometry aline);

描述

将边添加到边表,并将关联节点添加到指定的 拓扑名 架构,并返回新记录或现有记录的EdgeID。新添加的边缘在两侧都有“宇宙”面,并与自身相连。

[Note]

如果 阿林 几何图形与现有线串边交叉、重叠、包含或包含在现有线串边中,则会抛出错误且不添加该边。

[Note]

的几何学 阿林 必须有相同的 格栅 正如为拓扑定义的那样,否则将抛出无效的空间参考系统错误。

由GEOS模块执行。

可用性:2.0.0

示例

SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575.8 893917.2,227591.9 893900.4)', 26986) ) As edgeid;
-- result-
edgeid
--------
 1

SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.9 893900.4,227622.6 893844.2,227641.6 893816.5,
 227704.5 893778.5)', 26986) ) As edgeid;
-- result --
edgeid
--------
 2

 SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227591.2 893900, 227591.9 893900.4,
  227704.5 893778.5)', 26986) ) As edgeid;
 -- gives error --
 ERROR:  Edge intersects (not on endpoints) with existing edge 1

Name

AddFace — 将面基本体注册到拓扑并获取其标识符。

Synopsis

integer AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

描述

将面基本体注册到拓扑并获取其标识符。

对于新添加的面,形成其边界的边和面中包含的边将被更新,以便在Left_Face和Right_Face字段中具有正确的值。面中包含的隔离节点也将更新为具有正确的CONTINING_FACE字段值。

[Note]

此函数不使用也不设置边缘表的NEXT_LEFT_EDGE和NEXT_RIGHT_EDGE字段。

假设目标拓扑有效(不包含自交边)。如果存在以下情况,则会引发异常:多边形边界未完全由现有边定义,或者该多边形与现有面重叠。

如果 脱脂蛋白 几何体已作为面存在,则:如果 force_new 为FALSE(默认值),则返回现有面的面ID;如果为 force_new 如果是真的,将为新注册的人脸分配新的ID。

[Note]

当执行现有面的新配准时(force_new=TRUE),不会采取任何操作来解析边中对现有面的悬空引用、关系表的节点,也不会更新现有面记录的MBR字段。这是由呼叫者来处理的。

[Note]

这个 脱脂蛋白 几何图形必须具有相同的 格栅 正如为拓扑定义的那样,否则将抛出无效的空间参考系统错误。

可用性:2.0.0

示例

-- first add the edges we use generate_series as an iterator (the below
-- will only work for polygons with < 10000 points because of our max in gs)
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
    FROM (SELECT  ST_NPoints(geom) AS npt, geom
            FROM
                (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
            )  As geoms) As facen CROSS JOIN generate_series(1,10000) As i
         WHERE i < npt;
-- result --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- then add the face -

SELECT topology.AddFace('ma_topo',
    ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid;
-- result --
faceid
--------
 1


Name

ST_Simplify — 使用Douglas-Peucker算法返回给定拓扑几何体的简化几何体版本。

Synopsis

geometry ST_Simplify(TopoGeometry tg, float8 tolerance);

描述

在每条组件边上使用Douglas-Peucker算法返回给定拓扑几何体的简化几何体版本。

[Note]

返回的几何图形可能不是简单的或无效的。

拆分零部件边可能有助于保持简单性/有效性。

由GEOS模块执行。

可用性:2.1.0

另请参阅

几何体 ST_SimplifyST_IsSimpleST_IsValidST_ModEdgeSplit

10.9. 拓扑几何构造器

Abstract

本节介绍用于创建新地形几何的拓扑函数。

CreateTopoGeom — 从拓扑元素数组创建新的地形几何对象-tg_type:1:[多]点,2:[多]线,3:[多]面,4:集合
ToTopGeom — 将简单几何图形转换为拓扑几何图形。
TopoElementArray_Agg — 返回一个 拓扑元素阵列 对于一组Element_id,输入ARRAYS(TopoElements)。

Name

CreateTopoGeom — 从拓扑元素数组创建新的地形几何对象-tg_type:1:[多]点,2:[多]线,3:[多]面,4:集合

Synopsis

topogeometry CreateTopoGeom(varchar toponame, integer tg_type, integer layer_id, topoelementarray tg_objs);

topogeometry CreateTopoGeom(varchar toponame, integer tg_type, integer layer_id);

描述

为由表示的层创建地形几何对象 layer_id 并将其注册到 拓扑名 架构。

tg_type 是一个整数:1:[多]点(点),2:[多]线(直线),3:[多]面,4:集合。 layer_id 是topology.layer表中的层ID。

点状层由一组节点形成,线状层由一组边形成,面层由一组面形成,集合可以由节点、边和面的混合形成。

如果省略组件数组,则会生成一个空的TopGeometry对象。

可用性:1.1

示例:基于现有边的形状

在ri_topo方案中为第2层(我们的ri_Roads)创建一个topogeom,类型为(2)行,用于第一条边(我们在中加载 ST_CreateTopoGeo )。

Insert Into ri.ri_Roads(ROAD_NAME,TOPO)VALUES(‘UNKNOWN’,topology.CreateTopoGeom(‘ri_topo’,2,2,‘{1,2}}’::topology.topoelementarray);

示例:将面几何体转换为最佳猜测拓扑几何

假设我们有应该由一组面组成的几何图形。例如,我们有区块组表,并且想知道每个区块组的拓扑几何结构。如果我们的数据完全一致,我们可以这样做:

-- create our topo geometry column --
SELECT topology.AddTopoGeometryColumn(
        'topo_boston',
        'boston', 'blockgroups', 'topo', 'POLYGON');

-- addtopgeometrycolumn --
1

-- update our column assuming
-- everything is perfectly aligned with our edges
UPDATE boston.blockgroups AS bg
        SET topo = topology.CreateTopoGeom('topo_boston'
        ,3,1
        , foo.bfaces)
FROM (SELECT b.gid,  topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As bfaces
        FROM boston.blockgroups As b
            INNER JOIN topo_boston.face As f ON b.geom && f.mbr
        WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id))
            GROUP BY b.gid) As foo
WHERE foo.gid = bg.gid;
--the world is rarely perfect allow for some error
--count the face if 50% of it falls
-- within what we think is our blockgroup boundary
UPDATE boston.blockgroups AS bg
        SET topo = topology.CreateTopoGeom('topo_boston'
        ,3,1
        , foo.bfaces)
FROM (SELECT b.gid,  topology.TopoElementArray_Agg(ARRAY[f.face_id,3]) As bfaces
        FROM boston.blockgroups As b
            INNER JOIN topo_boston.face As f ON b.geom && f.mbr
        WHERE ST_Covers(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id))
        OR
 (  ST_Intersects(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id))
            AND ST_Area(ST_Intersection(b.geom, topology.ST_GetFaceGeometry('topo_boston', f.face_id) ) ) >
                ST_Area(topology.ST_GetFaceGeometry('topo_boston', f.face_id))*0.5
                )
            GROUP BY b.gid) As foo
WHERE foo.gid = bg.gid;

-- and if we wanted to convert our topogeometry back
-- to a denormalized geometry aligned with our faces and edges
-- cast the topo to a geometry
-- The really cool thing is my new geometries
-- are now aligned with my tiger street centerlines
UPDATE boston.blockgroups SET new_geom = topo::geometry;

Name

ToTopGeom — 将简单几何图形转换为拓扑几何图形。

Synopsis

topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance);

topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance);

描述

将简单几何图形转换为 TopoGeometry

表示输入几何所需的拓扑基元将被添加到基础拓扑中,可能会分割现有拓扑,并且它们将与中的输出拓扑几何相关联 关系 桌子。

现有拓扑几何对象(可能有例外 拓扑学 )将保持其形状。

什么时候 容忍度 则它将用于将输入几何图形捕捉到现有基本体。

在第一种形式中,将为给定层创建一个新的拓扑几何( layer_id )指定的拓扑( 拓扑名 )。

在第二种形式中,转换产生的基元将被添加到先前存在的Topo几何图形( 拓扑学 ),可能会为它的最终形状增加空间。要使新形状完全替换旧形状,请参阅 ClearTopGeom

可用性:2.0

增强:2.1.0添加了采用现有拓扑几何的版本。

示例

这是一个完全独立的工作流

-- do this if you don't have a topology setup already
-- creates topology not allowing any tolerance
SELECT topology.CreateTopology('topo_boston_test', 2249);
-- create a new table
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));
--add a topogeometry column to it
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id;
new_layer_id
-----------
1

--use new layer id in populating the new topogeometry column
-- we add the topogeoms to the new layer with 0 tolerance
INSERT INTO nei_topo(nei, topo)
SELECT nei,  topology.toTopoGeom(geom, 'topo_boston_test', 1)
FROM neighborhoods
WHERE gid BETWEEN 1 and 15;

--use to verify what has happened --
SELECT * FROM
    topology.TopologySummary('topo_boston_test');

-- summary--
Topology topo_boston_test (5), SRID 2249, precision 0
61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers
Layer 1, type Polygonal (3), 15 topogeoms
 Deploy: public.nei_topo.topo
-- Shrink all TopoGeometry polygons by 10 meters
UPDATE nei_topo SET topo = ST_Buffer(clearTopoGeom(topo), -10);

-- Get the no-one-lands left by the above operation
-- I think GRASS calls this "polygon0 layer"
SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id)
  FROM topo_boston_test.face f
  WHERE f.face_id > 0 -- don't consider the universe face
  AND NOT EXISTS ( -- check that no TopoGeometry references the face
    SELECT * FROM topo_boston_test.relation
    WHERE layer_id = 1 AND element_id = f.face_id
  );
        

Name

TopoElementArray_Agg — 返回一个 拓扑元素阵列 对于一组Element_id,输入ARRAYS(TopoElements)。

Synopsis

topoelementarray TopoElementArray_Agg(topoelement set tefield);

描述

用于创建 TopoElementArray 从一组 TopoElement

可用性:2.0.0

示例

SELECT topology.TopoElementArray_Agg(ARRAY[e,t]) As tea
  FROM generate_series(1,3) As e CROSS JOIN generate_series(1,4) As t;
  tea
--------------------------------------------------------------------------
{{1,1},{1,2},{1,3},{1,4},{2,1},{2,2},{2,3},{2,4},{3,1},{3,2},{3,3},{3,4}}

10.10. 拓扑几何图形编辑器

Abstract

本节介绍用于编辑现有地形几何的拓扑功能。

ClearTopGeom — 清除地形几何图形的内容。
TopoGeom_addElement — 将元素添加到拓扑几何图形的定义。
TopoGeom_remElement — 从拓扑几何图形的定义中删除元素。
TopoGeom_addTopoGeom — 将一个拓扑几何图形的元素添加到另一个拓扑几何图形的定义中。
ToTopGeom — 将几何图形添加到现有的地形几何图形。

Name

ClearTopGeom — 清除地形几何图形的内容。

Synopsis

topogeometry clearTopoGeom(topogeometry topogeom);

描述

将内容清除为 TopoGeometry 把它变成了一个空的。主要用于与 ToTopGeom 以替换更高层次级别中的现有对象和任何从属对象的形状。

可用性:2.1

示例

-- Shrink all TopoGeometry polygons by 10 meters
UPDATE nei_topo SET topo = ST_Buffer(clearTopoGeom(topo), -10);
                                

另请参阅

ToTopGeom


Name

TopoGeom_addElement — 将元素添加到拓扑几何图形的定义。

Synopsis

topogeometry TopoGeom_addElement(topogeometry tg, topoelement el);

描述

添加一个 TopoElement 添加到拓扑几何对象的定义中。如果元素已经是定义的一部分,则不会出错。

可用性:2.3

示例

-- Add edge 5 to TopoGeometry tg
UPDATE mylayer SET tg = TopoGeom_addElement(tg, '{5,2}');
                                

Name

TopoGeom_remElement — 从拓扑几何图形的定义中删除元素。

Synopsis

topogeometry TopoGeom_remElement(topogeometry tg, topoelement el);

描述

删除一个 TopoElement 来自拓扑几何对象的定义。

可用性:2.3

示例

-- Remove face 43 from TopoGeometry tg
UPDATE mylayer SET tg = TopoGeom_remElement(tg, '{43,3}');
                                

Name

TopoGeom_addTopoGeom — 将一个拓扑几何图形的元素添加到另一个拓扑几何图形的定义中。

Synopsis

topogeometry TopoGeom_addTopoGeom(topogeometry tgt, topogeometry src);

描述

将元素添加到 TopoGeometry 如果需要保存源对象中的所有元素,则可能会将其缓存类型(类型属性)更改为集合。

这两个拓扑几何对象需要针对*相同*拓扑定义,并且如果按层次定义,则需要由相同子层的元素组成。

可用性:3.2

示例

-- Set an "overall" TopoGeometry value to be composed by all
-- elements of specific TopoGeometry values
UPDATE mylayer SET tg_overall = TopoGeom_addTopogeom(
    TopoGeom_addTopoGeom(
        clearTopoGeom(tg_overall),
        tg_specific1
    ),
    tg_specific2
);
                                

Name

ToTopGeom — 将几何图形添加到现有的地形几何图形。

描述

请参阅 ToTopGeom

10.11. Topo几何访问器

GetTopoGeomElementArray — 返回一个 拓扑元素阵列 (拓扑元素数组),包含给定拓扑几何的拓扑元素和类型(基元元素)。
GetTopoGeomElements — 返回一组 拓扑元素 包含给定拓扑几何的拓扑元素_id、元素类型的对象(基本元素)。

Name

GetTopoGeomElementArray — 返回一个 拓扑元素阵列 (拓扑元素数组),包含给定拓扑几何的拓扑元素和类型(基元元素)。

Synopsis

topoelementarray GetTopoGeomElementArray(varchar toponame, integer layer_id, integer tg_id);

topoelementarray topoelement GetTopoGeomElementArray(topogeometry tg);

描述

返回一个 TopoElementArray 包含给定拓扑几何的拓扑元素和类型(基元元素)。这类似于GetTopoGeomElement,不同之处在于它将元素作为数组而不是数据集返回。

Tg_id是由表示的层中的拓扑中的拓扑几何对象的拓扑几何ID layer_id 在topology.layer表中。

可用性:1.1

示例


Name

GetTopoGeomElements — 返回一组 拓扑元素 包含给定拓扑几何的拓扑元素_id、元素类型的对象(基本元素)。

Synopsis

setof topoelement GetTopoGeomElements(varchar toponame, integer layer_id, integer tg_id);

setof topoelement GetTopoGeomElements(topogeometry tg);

描述

返回中给定地形几何对象的一组Element_id、Element_type(TopoElements 拓扑名 架构。

Tg_id是由表示的层中的拓扑中的拓扑几何对象的拓扑几何ID layer_id 在topology.layer表中。

可用性:2.0.0

示例

10.12. 拓扑几何图形输出

AsGML — 返回拓扑几何的GML表示形式。
AsTopo JSON — 返回拓扑几何的TopOJSON表示。

Name

AsGML — 返回拓扑几何的GML表示形式。

Synopsis

text AsGML(topogeometry tg);

text AsGML(topogeometry tg, text nsprefix_in);

text AsGML(topogeometry tg, regclass visitedTable);

text AsGML(topogeometry tg, regclass visitedTable, text nsprefix);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable, text idprefix);

text AsGML(topogeometry tg, text nsprefix_in, integer precision, integer options, regclass visitedTable, text idprefix, int gmlversion);

描述

以GML3版本格式返回地形几何的GML表示。如果没有 nsprefix_in 则指定 GML 使用的是。传入nsprefix的空字符串以获取非限定名称空间。精度(默认为15)和选项(默认为1)参数(如果给定)将原封不动地传递给对ST_AsGML的底层调用。

这个 已访问的表 参数(如果给定)用于跟踪访问的Node和Edge元素,以便使用交叉引用(xlink:xref)而不是重复定义。该表预计将有(至少)两个整型字段:‘Element_type’和‘Element_id’。调用用户必须同时拥有对给定表的读写权限。为获得最佳性能,应在上定义索引 element_type element_id ,按照这个顺序。这样的索引将通过向字段添加唯一约束来自动创建。示例:

CREATE TABLE visited (
  element_type integer, element_id integer,
  unique(element_type, element_id)
);

这个 Idprefix 参数(如果给定)将放在边缘和节点标签标识符前。

这个 Gmlver 参数(如果给定)将被传递到基础ST_AsGML。默认为3。

可用性:2.0.0

示例

这将使用我们在中创建的地形几何 CreateTopoGeom

SELECT topology.AsGML(topo) As rdgml
  FROM ri.roads
  WHERE road_name = 'Unknown';

-- rdgml--
<gml:TopoCurve>
    <gml:directedEdge>
        <gml:Edge gml:id="E1">
            <gml:directedNode orientation="-">
                <gml:Node gml:id="N1"/>
            </gml:directedNode>
            <gml:directedNode></gml:directedNode>
            <gml:curveProperty>
                <gml:Curve srsName="urn:ogc:def:crs:EPSG::3438">
                    <gml:segments>
                        <gml:LineStringSegment>
                            <gml:posList srsDimension="2">384744 236928 384750 236923 384769 236911 384799 236895 384811 236890
                            384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938
                            385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971
                            385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125
                            385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241
                            385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407
                            385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475
                            385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541
                            385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630</gml:posList>
                        </gml:LineStringSegment>
                    </gml:segments>
                </gml:Curve>
            </gml:curveProperty>
        </gml:Edge>
    </gml:directedEdge>
</gml:TopoCurve>

与前面不使用命名空间的练习相同

SELECT topology.AsGML(topo,'') As rdgml
  FROM ri.roads
  WHERE road_name = 'Unknown';

-- rdgml--
<TopoCurve>
    <directedEdge>
        <Edge id="E1">
            <directedNode orientation="-">
                <Node id="N1"/>
            </directedNode>
            <directedNode></directedNode>
            <curveProperty>
                <Curve srsName="urn:ogc:def:crs:EPSG::3438">
                    <segments>
                        <LineStringSegment>
                            <posList srsDimension="2">384744 236928 384750 236923 384769 236911 384799 236895 384811 236890
                            384833 236884 384844 236882 384866 236881 384879 236883 384954 236898 385087 236932 385117 236938
                            385167 236938 385203 236941 385224 236946 385233 236950 385241 236956 385254 236971
                            385260 236979 385268 236999 385273 237018 385273 237037 385271 237047 385267 237057 385225 237125
                            385210 237144 385192 237161 385167 237192 385162 237202 385159 237214 385159 237227 385162 237241
                            385166 237256 385196 237324 385209 237345 385234 237375 385237 237383 385238 237399 385236 237407
                            385227 237419 385213 237430 385193 237439 385174 237451 385170 237455 385169 237460 385171 237475
                            385181 237503 385190 237521 385200 237533 385206 237538 385213 237541 385221 237542 385235 237540 385242 237541
                            385249 237544 385260 237555 385270 237570 385289 237584 385292 237589 385291 237596 385284 237630</posList>
                         </LineStringSegment>
                    </segments>
                </Curve>
            </curveProperty>
        </Edge>
    </directedEdge>
</TopoCurve>

Name

AsTopo JSON — 返回拓扑几何的TopOJSON表示。

Synopsis

text AsTopoJSON(topogeometry tg, regclass edgeMapTable);

描述

返回拓扑几何的TopOJSON表示。如果 边缘映射表 不为空,则它将用作边标识符到弧形索引的查找/存储映射。这将允许在最终文档中使用紧凑的“圆弧”数组。

如果给定该表,则应该有一个类型为“Serial”的“arcid”字段和一个类型为INTEGER的“edge_id”;代码将在该表中查询“edge_id”,因此建议在该字段上添加一个索引。

[Note]

Topo JSON输出中的圆弧索引是从0开始的,但在“edgeMapTable”表中是从1开始的。

除了此函数返回的代码片段外,完整的TopOJSON文档还需要包含实际弧线和一些头文件。请参阅 Topo JSON规范

可用性:2.1.0

增强:2.2.1增加了对拼音输入的支持

另请参阅

ST_AsGeoJSON

示例

CREATE TEMP TABLE edgemap(arc_id serial, edge_id int unique);

-- header
SELECT '{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {'

-- objects
UNION ALL SELECT '"' || feature_name || '": ' || AsTopoJSON(feature, 'edgemap')
FROM features.big_parcels WHERE feature_name = 'P3P4';

-- arcs
WITH edges AS (
  SELECT m.arc_id, e.geom FROM edgemap m, city_data.edge e
  WHERE e.edge_id = m.edge_id
), points AS (
  SELECT arc_id, (st_dumppoints(geom)).* FROM edges
), compare AS (
  SELECT p2.arc_id,
         CASE WHEN p1.path IS NULL THEN p2.geom
              ELSE ST_Translate(p2.geom, -ST_X(p1.geom), -ST_Y(p1.geom))
         END AS geom
  FROM points p2 LEFT OUTER JOIN points p1
  ON ( p1.arc_id = p2.arc_id AND p2.path[1] = p1.path[1]+1 )
  ORDER BY arc_id, p2.path
), arcsdump AS (
  SELECT arc_id, (regexp_matches( ST_AsGeoJSON(geom), '\[.*\]'))[1] as t
  FROM compare
), arcs AS (
  SELECT arc_id, '[' || array_to_string(array_agg(t), ',') || ']' as a FROM arcsdump
  GROUP BY arc_id
  ORDER BY arc_id
)
SELECT '}, "arcs": [' UNION ALL
SELECT array_to_string(array_agg(a), E',\n') from arcs

-- footer
UNION ALL SELECT ']}'::text as t;

-- Result:
{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {
"P3P4": { "type": "MultiPolygon", "arcs": [[[-1]],[[6,5,-5,-4,-3,1]]]}
}, "arcs": [
 [[25,30],[6,0],[0,10],[-14,0],[0,-10],[8,0]],
 [[35,6],[0,8]],
 [[35,6],[12,0]],
 [[47,6],[0,8]],
 [[47,14],[0,8]],
 [[35,22],[12,0]],
 [[35,14],[0,8]]
 ]}

10.13. 拓扑空间关系

Abstract

本节列出了用于检查地形几何和基本拓扑元素之间关系的拓扑函数

等于 — 如果两个拓扑几何由相同的拓扑基元组成,则返回True。
交点 — 如果两个拓扑几何中的任何一对基元相交,则返回True。

Name

等于 — 如果两个拓扑几何由相同的拓扑基元组成,则返回True。

Synopsis

boolean Equals(topogeometry tg1, topogeometry tg2);

描述

如果两个拓扑几何由相同的拓扑基元组成:面、边、节点,则返回True。

[Note]

作为几何图形集合的地形几何不支持此功能。它也不能比较来自不同拓扑的拓扑几何。

可用性:1.1.0

This function supports 3d and will not drop the z-index.

示例


Name

交点 — 如果两个拓扑几何中的任何一对基元相交,则返回True。

Synopsis

boolean Intersects(topogeometry tg1, topogeometry tg2);

描述

如果两个拓扑几何中的任何一对基元相交,则返回True。

[Note]

作为几何图形集合的地形几何不支持此功能。它也不能比较来自不同拓扑的拓扑几何。目前也不支持层次拓扑几何(由其他拓扑几何组成的拓扑几何)。

可用性:1.1.0

This function supports 3d and will not drop the z-index.

示例

另请参阅

ST_Intersects

Chapter 11. 栅格数据管理、查询和应用程序

11.1. 加载和创建栅格

对于大多数使用案例,您将通过使用打包的加载现有栅格文件来创建PostGIS栅格 栅格2pgsql 栅格加载器。

11.1.1. 使用raster2pgsql加载栅格

这个 栅格2pgsql 是一个栅格加载器可执行文件,用于将GDAL支持的栅格格式加载到适合加载到PostGIS栅格表的SQL中。它能够加载栅格文件的文件夹以及创建栅格概述。

由于raster2pgsql最常被编译为PostGIS的一部分(除非您编译自己的GDAL库),因此可执行文件支持的栅格类型将与GDAL依赖库中编译的栅格类型相同。要获取您的特定raster2pgsql支持的栅格类型列表,请使用 -G 换一下。这些内容应与此处记录的PostGIS安装提供的内容相同 ST_GDALDrivers 如果您对两者使用相同的GDAL库。

[Note]

该工具的较早版本是一个python脚本。该可执行文件已取代了python脚本。如果您仍然需要Python脚本示例,可以在 GDAL PostGIS栅格驱动程序使用 。请注意,raster2pgsql python脚本可能不适用于未来版本的PostGIS栅格,因此不再受支持。

[Note]

从一组已对齐的栅格创建特定因子的概视图时,概视图可能不对齐。参观 http://trac.osgeo.org/postgis/ticket/1764 例如,俯视图不对齐。

用法示例:

raster2pgsql raster_options_go_here raster_file someschema.sometable > out.sql

-?

显示帮助屏幕。如果您不传递任何参数,也会显示帮助。

-G

打印支持的栅格格式。

(C|a|d|p)以下是互斥选项:

-c

创建新表格并用栅格填充它, 这是默认模式

-a

将栅格追加到现有表中。

-d

删除表,创建新表并使用栅格填充它

-p

准备模式,只创建表格。

栅格处理:应用约束以在栅格目录中正确注册

-C

应用栅格约束--sRID、像素大小等以确保在中正确注册栅格 raster_columns 查看。

-x

禁用设置最大范围约束。仅当还使用-C标志时才适用。

-R

设置常规分块的约束(空间唯一和覆盖平铺)。仅当还使用-C标志时才适用。

栅格处理:用于操作输入栅格数据集的可选参数

-S < SRID >

为输出栅格分配指定的SRID。如果未提供或为零,则将检查栅格的元数据以确定适当的SRID。

-b频段

要从栅格中提取的波段的索引(从1开始)。对于多个波段索引,请用逗号(,)分隔。如果未指定,则将提取栅格的所有波段。

-t平铺大小

将栅格剪切成要插入的平铺,每表行一个。 TILE_SIZE 表示为WIDTHxHEIGHT或设置为值“AUTO”,以允许加载程序使用第一个栅格计算适当的平铺大小并应用于所有栅格。

-P

填充最右侧和最底部的瓷砖,以确保所有瓷砖的宽度和高度相同。

-R,--寄存器

将栅格注册为文件系统(out-db)栅格。

只有栅格的元数据和栅格的路径位置存储在数据库中(而不是像素)。

-l OVERVIEW_FACTOR

创建栅格的概览。对于多个因素,请用逗号(,)分隔。概览表名称遵循模式o_ 总览系数 _ 表格 ,在哪里 总览系数 是数字总览系数的占位符,并且 表格 替换为基表名称。创建的概述存储在数据库中,不受-R的影响。请注意,您生成的SQL文件将同时包含主表和概览表。

-N NODATA

要在没有NODATA值的标注栏上使用的NODATA值。

用于操作数据库对象的可选参数

-f列

指定目标栅格列的名称,默认为‘Rast’

-F

使用文件名添加一列

-n列

指定文件名列的名称。隐含-F。

-Q

将PostgreSQL标识符括在引号中。

-我

在栅格列上创建一个Gist索引。

-M

对栅格表进行真空分析。

-k

跳过每个栅格标注栏的NODATA值检查。

-T 表空间

指定新表的表空间。请注意,索引(包括主键)仍将使用默认表空间,除非还使用-X标志。

-X 表空间

指定表的新索引的表空间。如果使用-i标志,这适用于主键和空间索引。

-Y

使用COPY语句而不是INSERT语句。

-e

单独执行每条语句,不要使用事务。

-E Endian

控制栅格生成的二进制输出的字节顺序;为XDR指定0,为NDR指定1(默认);现在仅支持NDR输出

-五 版本

指定输出格式的版本。默认值为0。目前仅支持0。

一个使用加载器创建输入文件并将其分块上传到100x100块的示例会话可能如下所示:

[Note]

您可以省略架构名称,例如 去高处 而不是 public.demelevation 将在数据库或用户的默认方案中创建栅格表

raster2pgsql -s 4326 -I -C -M *.tif -F -t 100x100 public.demelevation > elev.sql
psql -d gisdb -f elev.sql

转换和上载可以使用UNIX管道在一个步骤中完成:

Raster2pgsql-s 4326-i-C-M*.tif-F-t 100x100 Public.demElevation|psql-d gisdb

将栅格马萨诸塞州平面米航拍切片加载到名为 天线 并创建一个完整的视图,2级和4级概览表,使用复制模式进行插入(没有直接到数据库的中间文件),以及-e不强制事务中的所有内容(如果您希望在不等待的情况下立即看到表中的数据,这是很好的)。将栅格分解为128x128像素的平铺并应用栅格约束。使用复制模式而不是表插入。(-F)包括一个名为FileName的字段,用于保存从中剪切分片的文件的名称。

Raster2pgsql-i-C-e-Y-F-s 26986-t 128x128-l 2,4 bostonAerials2008/*.jpg Aerials.boston|psql-U postgres-d gisdb-h Localhost-p5432
--get a list of raster types supported:
raster2pgsql -G

G命令输出如下所示的列表

Available GDAL raster formats:
  Virtual Raster
  GeoTIFF
  National Imagery Transmission Format
  Raster Product Format TOC format
  ECRG TOC format
  Erdas Imagine Images (.img)
  CEOS SAR Image
  CEOS Image
  JAXA PALSAR Product Reader (Level 1.1/1.5)
  Ground-based SAR Applications Testbed File Format (.gff)
  ELAS
  Arc/Info Binary Grid
  Arc/Info ASCII Grid
  GRASS ASCII Grid
  SDTS Raster
  DTED Elevation Raster
  Portable Network Graphics
  JPEG JFIF
  In Memory Raster
  Japanese DEM (.mem)
  Graphics Interchange Format (.gif)
  Graphics Interchange Format (.gif)
  Envisat Image Format
  Maptech BSB Nautical Charts
  X11 PixMap Format
  MS Windows Device Independent Bitmap
  SPOT DIMAP
  AirSAR Polarimetric Image
  RadarSat 2 XML Product
  PCIDSK Database File
  PCRaster Raster File
  ILWIS Raster Map
  SGI Image File Format 1.0
  SRTMHGT File Format
  Leveller heightfield
  Terragen heightfield
  USGS Astrogeology ISIS cube (Version 3)
  USGS Astrogeology ISIS cube (Version 2)
  NASA Planetary Data System
  EarthWatch .TIL
  ERMapper .ers Labelled
  NOAA Polar Orbiter Level 1b Data Set
  FIT Image
  GRIdded Binary (.grb)
  Raster Matrix Format
  EUMETSAT Archive native (.nat)
  Idrisi Raster A.1
  Intergraph Raster
  Golden Software ASCII Grid (.grd)
  Golden Software Binary Grid (.grd)
  Golden Software 7 Binary Grid (.grd)
  COSAR Annotated Binary Matrix (TerraSAR-X)
  TerraSAR-X Product
  DRDC COASP SAR Processor Raster
  R Object Data Store
  Portable Pixmap Format (netpbm)
  USGS DOQ (Old Style)
  USGS DOQ (New Style)
  ENVI .hdr Labelled
  ESRI .hdr Labelled
  Generic Binary (.hdr Labelled)
  PCI .aux Labelled
  Vexcel MFF Raster
  Vexcel MFF2 (HKV) Raster
  Fuji BAS Scanner Image
  GSC Geogrid
  EOSAT FAST Format
  VTP .bt (Binary Terrain) 1.3 Format
  Erdas .LAN/.GIS
  Convair PolGASP
  Image Data and Analysis
  NLAPS Data Format
  Erdas Imagine Raw
  DIPEx
  FARSITE v.4 Landscape File (.lcp)
  NOAA Vertical Datum .GTX
  NADCON .los/.las Datum Grid Shift
  NTv2 Datum Grid Shift
  ACE2
  Snow Data Assimilation System
  Swedish Grid RIK (.rik)
  USGS Optional ASCII DEM (and CDED)
  GeoSoft Grid Exchange Format
  Northwood Numeric Grid Format .grd/.tab
  Northwood Classified Grid Format .grc/.tab
  ARC Digitized Raster Graphics
  Standard Raster Product (ASRP/USRP)
  Magellan topo (.blx)
  SAGA GIS Binary Grid (.sdat)
  Kml Super Overlay
  ASCII Gridded XYZ
  HF2/HFZ heightfield raster
  OziExplorer Image File
  USGS LULC Composite Theme Grid
  Arc/Info Export E00 GRID
  ZMap Plus Grid
  NOAA NGS Geoid Height Grids

11.1.2. 使用PostGIS栅格函数创建栅格

在许多情况下,您会希望在数据库中直接创建栅格和栅格表。有太多的函数可以做到这一点。要遵循的一般步骤。

  1. 创建包含栅格列的表以保存新的栅格记录,这可以通过以下方式完成:

    创建表myraster(RID序列主键、RAST栅格);
  2. 有许多功能可以帮助实现这一目标。如果您要创建的栅格不是其他栅格的派生栅格,则需要从以下内容开始: ST_MakeEmptyRaster ,然后是 ST_AddBand

    也可以从几何图形创建栅格。要实现这一点,您需要使用 ST_AsRaster 或许还伴随着其他功能,如 ST_UnionST_MapAlgebraFct 或其他地图代数函数族中的任何一个。

    甚至还有更多选项可用于从现有表创建新的栅格表。例如,您可以使用在不同于现有投影的投影中创建栅格表 ST_Transform

  3. 最初填充表后,您需要在栅格列上创建一个空间索引,如下所示:

    使用GIST(ST_ConvexHull(Rast))在myraster上创建索引myraster_rast_st_vvexhull_idx;

    请注意 ST_ConvexHull 因为大多数栅格运算符都是基于栅格的凸壳的。

    [Note]

    2.0之前版本的PostGIS栅格是基于封套而不是凸壳的。为了使空间索引正常工作,您需要删除这些索引,并替换为基于凸壳的索引。

  4. 使用以下内容应用栅格约束 AddRasterConstraints

11.1.3. 使用“out db”云栅格

这个 栅格2pgsql 该工具使用GDAL来访问栅格数据,并且可以利用GDAL的一项关键功能:能够读取符合以下条件的栅格 远程存储 在云“对象存储”中(例如,AWS S3、谷歌云存储)。

要有效使用云存储的栅格,需要使用“云优化”格式。最广为人知和使用最广泛的是“ 云优化GeoTIFF 使用非云格式,如JPEG或非平铺的TIFF将导致非常差的性能,因为系统每次需要访问子集时都必须下载整个栅格。

首先,将您的栅格加载到您选择的云存储中。加载后,您将有一个URI来访问它,可以是“http”URI,有时也可以是特定于服务的URI。(例如,“s3://存储桶/对象”)。要访问非公共存储桶,您需要提供GDAL配置选项来验证您的连接。请注意,此命令是 阅读 从云栅格和 写作 添加到数据库中。

AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx \
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
raster2pgsql \
  -s 990000 \
  -t 256x256 \
  -I \
  -R \
  /vsis3/your.bucket.com/your_file.tif \
  your_table \
  | psql your_db

一旦加载表,您需要授予数据库从远程栅格读取的权限,方法是设置两个权限, postgis.enable_outdb_rasterspostgis.gdal_enabled_drivers

SET postgis.enable_outdb_rasters = true;
SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';
    

要使更改具有粘性,请直接在数据库中设置它们。您需要重新连接才能体验新设置。

ALTER DATABASE your_db SET postgis.enable_outdb_rasters = true;
ALTER DATABASE your_db SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';
    

对于非公共栅格,您可能需要提供访问密钥才能从云栅格中读取。您用来编写 栅格2pgsql 调用可以设置为在数据库内部使用,使用 postgis.gdal_config_options 配置。注意,可以通过空格分隔设置多个选项 键=值 成对的。

SET postgis.gdal_vsi_options = 'AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

一旦加载了数据并设置了权限,您就可以使用相同的函数与栅格表进行交互,就像任何其他栅格表一样。当数据库需要读取像素数据时,它将处理连接到云数据的所有机制。

11.2. 栅格目录

有两个随PostGIS一起提供的栅格目录视图。这两个视图都利用嵌入在栅格表的约束中的信息。因此,由于强制实施了约束,因此目录视图始终与表中的栅格数据一致。

  1. raster_columns 此视图对数据库中的所有栅格表列进行编录。

  2. raster_overviews 此视图编目数据库中的所有栅格表列,这些列用作更细粒度的表的总览。此类型的表是在使用 -L 在加载过程中切换。

11.2.1. 栅格列目录

这个 raster_columns 是数据库中所有栅格类型的栅格表列的目录。它是一个利用对表的约束的视图,因此即使从另一个数据库的备份中恢复一个栅格表,信息也始终是一致的。以下列存在于 raster_columns 目录。

如果您没有使用加载器创建表或忘记指定 -C 标志的情况下,您可以在加载后使用 AddRasterConstraints 这样就可以 raster_columns CATALOG注册有关您的栅格平铺的常见信息。

  • r_table_catalog 表所在的数据库。这将始终读取当前数据库。

  • r_table_schema 栅格表所属的数据库模式。

  • r_table_name 栅格表

  • r_raster_column 中的列 r_table_name 栅格类型的表。在PostGIS中,没有什么可以阻止您在每个表中拥有多个栅格列,因此可以多次列出一个栅格表,每个栅格表都有一个不同的栅格列。

  • 格栅 栅格的空间参考标识符。中的条目。 Section 4.5, “空间参考系”

  • scale_x 几何空间坐标和像素之间的缩放。仅当栅格列中的所有切片都具有相同的 scale_x 并且应用了该约束。参考 ST_ScaleX 了解更多详细信息。

  • scale_y 几何空间坐标和像素之间的缩放。仅当栅格列中的所有切片都具有相同的 scale_y 以及 scale_y 已应用约束。参考 ST_ScaleY 了解更多详细信息。

  • blocksize_x 每个栅格平铺的宽度(像素数)。参考 ST_Width 了解更多详细信息。

  • blocksize_y 每个栅格平铺的宽度(向下的像素数)。参考 ST_Height 了解更多详细信息。

  • same_alignment 一个布尔值,如果所有栅格平铺都具有相同的对齐方式,则为真。参考 ST_SameAlignment 了解更多详细信息。

  • regular_blocking 如果栅格列具有空间唯一和覆盖范围平铺约束,则值为TRUE。否则,它将是错误的。

  • num_bands 栅格集的每个平铺中的波段数。这与由提供的信息相同 ST_NumBands

  • pixel_types 定义每个波段的像素类型的数组。此数组中的元素数量与波段数量相同。Pixel_Types是中定义的以下类型之一 ST_BandPixelType

  • nodata_values 一个双精度数字数组,表示 nodata_value 每个乐队都有。此数组中的元素数量与波段数量相同。这些数字定义了在大多数操作中应忽略的每个波段的像素值。这是由提供的类似信息 ST_BandNoDataValue

  • out_db 指示是否在数据库外部维护栅格标注栏数据的布尔标志数组。此数组中的元素数量与波段数量相同。

  • 程度 这是栅格集中所有栅格行的范围。如果您计划加载更多将更改集合范围的数据,则需要运行 DropRasterConstraints 函数,然后使用 AddRasterConstraints 装货后。

  • spatial_index 一个布尔值,如果栅格列具有空间索引,则为真。

11.2.2. 栅格概视图

raster_overviews 编录有关用于概视图的栅格表列的信息,以及有关它们的其他信息,这些信息在利用概视图时非常有用。概览表在两个目录中都有编目 raster_columns raster_overviews 因为它们本身就是栅格,但也有一个额外的特殊目的,那就是成为较高分辨率表格的较低分辨率漫画。使用时,将在主栅格表的旁边生成 -L 切换到栅格加载或可使用手动生成 AddOverviewConstraints

概览表包含与其他栅格表相同的约束,以及特定于概视图的其他仅信息性约束。

[Note]

中的信息 raster_overviews 不会复制中的信息 raster_columns 。如果您需要有关在 raster_columns 你可以加入 raster_overviews raster_columns 共同获取您所需的全套信息。

综述的两个主要原因是:

  1. 核心表的低分辨率表示,通常用于快速映射缩小。

  2. 在它们上进行计算通常比它们更高分辨率的父代更快,因为它们的记录更少,每个像素覆盖的区域更大。虽然计算不像它们支持的高分辨率表那样准确,但它们在许多经验法则计算中是足够的。

这个 raster_overviews 目录包含以下信息列。

  • o_table_catalog 概览表所在的数据库。这将始终读取当前数据库。

  • o_table_schema 概述栅格表所属的数据库模式。

  • o_table_name 栅格概览表名称

  • o_raster_column 概览表中的栅格列。

  • r_table_catalog 此概述服务所在的栅格表的数据库。这将始终读取当前数据库。

  • r_table_schema 此概述服务所属的栅格表的数据库模式。

  • r_table_name 此概述服务的栅格表。

  • r_raster_column 此概述专栏所服务的栅格列。

  • overview_factor -这是概览表的金字塔级别。数字越大,表格的分辨率就越低。如果给raster2pgsql一个图像文件夹,它将计算每个图像文件的概览并单独加载。假定为级别1,并且始终为原始文件。级别2 IS将使每个瓷砖代表原始瓷砖的4个。例如,如果您有一个包含5000x5000像素图像文件的文件夹,并且您选择将其分块为125x125,那么对于每个图像文件,您的基表将有(5000*5000)/(125*125)条记录=1600,您的(l=2) o_2 表将有上限(1600/Power(2,2))=400行,您的(l=3) o_3 将有上限(1600/Power(2,3))=200行。如果您的像素不能除以您的瓷砖的大小,你会得到一些废瓷砖(瓷砖没有完全填满)。请注意,由raster2pgsql生成的每个概述平铺的像素数与其父平铺的像素数相同,但分辨率较低,其中它的每个像素表示(Power(2,view_factor)像素的原始)。

11.3. 使用PostGIS栅格构建自定义应用程序

PostGIS栅格为您提供了以已知图像格式渲染栅格的SQL函数,这一事实为您提供了许多渲染选项。例如,您可以使用OpenOffice/LibreOffice进行渲染,如中所示 使用LibreOffice基本报表渲染PostGIS栅格图形 。此外,您还可以使用本节中演示的多种语言。

11.3.1. 结合使用ST_AsPNG和其他栅格函数的PHP输出示例

在本节中,我们将演示如何使用PHP PostgreSQL驱动程序和 ST_AsGDALRaster 将栅格的波段1、2、3输出到PHP请求流的函数系列,然后可以嵌入到img src html标记中。

示例查询演示了如何将一整组栅格函数组合在一起,以获取与特定WGS 84边界框相交的所有切片,然后与 ST_Union 相交的切片一起返回所有波段,使用转换为用户指定的投影 ST_Transform ,然后使用PNG将结果输出为PNG ST_AsPNG

您可以使用以下命令调用以下代码

 http://mywebserver/test_raster.php?srid=2249 

以获得马萨诸塞州平面英尺的栅格图像。

<?php
/** contents of test_raster.php **/
$conn_str ='dbname=mydb host=localhost port=5432 user=myuser password=mypwd';
$dbconn = pg_connect($conn_str);
header('Content-Type: image/png');
/**If a particular projection was requested use it otherwise use mass state plane meters **/
if (!empty( $_REQUEST['srid'] ) && is_numeric( $_REQUEST['srid']) ){
                $input_srid = intval($_REQUEST['srid']);
}
else { $input_srid = 26986; }
/** The set bytea_output may be needed for PostgreSQL 9.0+, but not for 8.4 **/
$sql = "set bytea_output='escape';
SELECT ST_AsPNG(ST_Transform(
                        ST_AddBand(ST_Union(rast,1), ARRAY[ST_Union(rast,2),ST_Union(rast,3)])
                                ,$input_srid) ) As new_rast
 FROM aerials.boston
        WHERE
         ST_Intersects(rast, ST_Transform(ST_MakeEnvelope(-71.1217, 42.227, -71.1210, 42.218,4326),26986) )";
$result = pg_query($sql);
$row = pg_fetch_row($result);
pg_free_result($result);
if ($row === false) return;
echo pg_unescape_bytea($row[0]);
?>

11.3.2. 结合使用ST_AsPNG和其他栅格函数的ASP.NET C#输出示例

在本部分中,我们将演示如何使用Npgsql PostgreSQL.NET驱动程序和 ST_AsGDALRaster 将栅格的波段1、2、3输出到PHP请求流的函数系列,然后可以嵌入到img src html标记中。

本练习需要npgsql.NET PostgreSQL驱动程序,您可以从获取最新的 http://npgsql.projects.postgresql.org/ 。只需下载最新版本并放入您的ASP.NETbin文件夹,就可以了。

示例查询演示了如何将一整组栅格函数组合在一起,以获取与特定WGS 84边界框相交的所有切片,然后与 ST_Union 相交的切片一起返回所有波段,使用转换为用户指定的投影 ST_Transform ,然后使用PNG将结果输出为PNG ST_AsPNG

这与下面的示例相同 Section 11.3.1, “结合使用ST_AsPNG和其他栅格函数的PHP输出示例” 除了用C#实现之外。

您可以使用以下命令调用以下代码

 http://mywebserver/TestRaster.ashx?srid=2249 

以获得马萨诸塞州平面英尺的栅格图像。

-- web.config connection string section --
<connectionStrings>
    <add name="DSN"
        connectionString="server=localhost;database=mydb;Port=5432;User Id=myuser;password=mypwd"/>
</connectionStrings>
// Code for TestRaster.ashx
<%@ WebHandler Language="C#" Class="TestRaster" %>
using System;
using System.Data;
using System.Web;
using Npgsql;

public class TestRaster : IHttpHandler
{
        public void ProcessRequest(HttpContext context)
        {

                context.Response.ContentType = "image/png";
                context.Response.BinaryWrite(GetResults(context));

        }

        public bool IsReusable {
                get { return false; }
        }

        public byte[] GetResults(HttpContext context)
        {
                byte[] result = null;
                NpgsqlCommand command;
                string sql = null;
                int input_srid = 26986;
        try {
                    using (NpgsqlConnection conn = new NpgsqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DSN"].ConnectionString)) {
                            conn.Open();

                if (context.Request["srid"] != null)
                {
                    input_srid = Convert.ToInt32(context.Request["srid"]);
                }
                sql = @"SELECT ST_AsPNG(
                            ST_Transform(
                                        ST_AddBand(
                                ST_Union(rast,1), ARRAY[ST_Union(rast,2),ST_Union(rast,3)])
                                                    ,:input_srid) ) As new_rast
                        FROM aerials.boston
                                WHERE
                                    ST_Intersects(rast,
                                    ST_Transform(ST_MakeEnvelope(-71.1217, 42.227, -71.1210, 42.218,4326),26986) )";
                            command = new NpgsqlCommand(sql, conn);
                command.Parameters.Add(new NpgsqlParameter("input_srid", input_srid));


                            result = (byte[]) command.ExecuteScalar();
                conn.Close();
                        }

                }
        catch (Exception ex)
        {
            result = null;
            context.Response.Write(ex.Message.Trim());
        }
                return result;
        }
}

11.3.3. 将栅格查询输出为图像文件的Java控制台应用程序

这是一个简单的Java控制台应用程序,它接受一个查询,返回一个图像并输出到指定的文件。

您可以从下载最新的PostgreSQL JDBC驱动程序 http://jdbc.postgresql.org/download.html

您可以使用类似以下命令的命令编译以下代码:

set env CLASSPATH .:..\postgresql-9.0-801.jdbc4.jar
javac SaveQueryImage.java
jar cfm SaveQueryImage.jar Manifest.txt *.class

并在命令行中使用类似于

JAVA-JAR SaveQueryImage.jar“SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10,‘quad_segs=2’),150,150,‘8BUI’,100));”“test.png” 
-- Manifest.txt --
Class-Path: postgresql-9.0-801.jdbc4.jar
Main-Class: SaveQueryImage
// Code for SaveQueryImage.java
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.io.*;

public class SaveQueryImage {
  public static void main(String[] argv) {
      System.out.println("Checking if Driver is registered with DriverManager.");

      try {
        //java.sql.DriverManager.registerDriver (new org.postgresql.Driver());
        Class.forName("org.postgresql.Driver");
      }
      catch (ClassNotFoundException cnfe) {
        System.out.println("Couldn't find the driver!");
        cnfe.printStackTrace();
        System.exit(1);
      }

      Connection conn = null;

      try {
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydb","myuser", "mypwd");
        conn.setAutoCommit(false);

        PreparedStatement sGetImg = conn.prepareStatement(argv[0]);

        ResultSet rs = sGetImg.executeQuery();

                FileOutputStream fout;
                try
                {
                        rs.next();
                        /** Output to file name requested by user **/
                        fout = new FileOutputStream(new File(argv[1]) );
                        fout.write(rs.getBytes(1));
                        fout.close();
                }
                catch(Exception e)
                {
                        System.out.println("Can't create file");
                        e.printStackTrace();
                }

        rs.close();
                sGetImg.close();
        conn.close();
      }
      catch (SQLException se) {
        System.out.println("Couldn't connect: print out a stack trace and exit.");
        se.printStackTrace();
        System.exit(1);
      }
  }
}

11.3.4. 使用PLPython通过SQL转储图像

这是一个plpython存储函数,它在服务器目录中为每个记录创建一个文件。要求您安装了plpython。对于plpythonu和plpython3u应该都能很好地工作。

CREATE OR REPLACE FUNCTION write_file (param_bytes bytea, param_filepath text)
RETURNS text
AS $$
f = open(param_filepath, 'wb+')
f.write(param_bytes)
return param_filepath
$$ LANGUAGE plpythonu;
--write out 5 images to the PostgreSQL server in varying sizes
-- note the postgresql daemon account needs to have write access to folder
-- this echos back the file names created;
 SELECT write_file(ST_AsPNG(
        ST_AsRaster(ST_Buffer(ST_Point(1,5),j*5, 'quad_segs=2'),150*j, 150*j, '8BUI',100)),
         'C:/temp/slices'|| j || '.png')
         FROM generate_series(1,5) As j;

     write_file
---------------------
 C:/temp/slices1.png
 C:/temp/slices2.png
 C:/temp/slices3.png
 C:/temp/slices4.png
 C:/temp/slices5.png

11.3.5. 使用PSQL输出栅格

遗憾的是,PSQL没有用于输出二进制文件的易于使用的内置功能。这有点像是利用了PostgreSQL对遗留大对象的支持。要使用它,首先启动连接到数据库的psql命令行。

与python方法不同,此方法在您的本地计算机上创建文件。

SELECT oid, lowrite(lo_open(oid, 131072), png) As num_bytes
 FROM
 ( VALUES (lo_create(0),
   ST_AsPNG( (SELECT rast FROM aerials.boston WHERE rid=1) )
  ) ) As v(oid,png);
-- you'll get an output something like --
   oid   | num_bytes
---------+-----------
 2630819 |     74860

-- next note the oid and do this replacing the c:/test.png to file path location
-- on your local computer
 \lo_export 2630819 'C:/temp/aerial_samp.png'

-- this deletes the file from large object storage on db
SELECT lo_unlink(2630819);
                        

Chapter 12. 栅格参考

下面给出的功能是PostGIS栅格的用户可能需要的,并且目前在PostGIS栅格中可用。还有其他功能是对一般用户不使用的栅格对象所需的支持功能。

栅格 是一种新的PostGIS类型,用于存储和分析栅格数据。

有关从栅格文件加载栅格的信息,请参阅 Section 11.1, “加载和创建栅格”

对于本参考中的示例,我们将使用由以下代码构成的虚拟栅格的栅格表

CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2,  ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

12.1. 栅格支持的数据类型

Abstract

本节列出了专门为支持栅格功能而创建的PostgreSQL数据类型。

Geomval — 具有两个字段的空间数据类型-geom(保存几何图形对象)和val(保存来自栅格标注栏的双精度像素值)。
添加带宽参数 — 用作ST_AddBand函数的输入的复合类型,用于定义新标注栏的属性和初始值。
粗制滥造 — 当需要表示栅格和该栅格的波段索引时使用的复合类型。
栅格 — 栅格空间数据类型。
重新分类 — 用作ST_Reclass函数的输入的复合类型,用于定义重分类行为。
摘要统计信息 — ST_SummaryStats和ST_SummaryStatsAgg函数返回的复合类型。
工会 — 用作ST_UNION函数的输入的复合类型,用于定义要处理的波段和UNION操作的行为。

Name

Geomval — 具有两个字段的空间数据类型-geom(保存几何图形对象)和val(保存来自栅格标注栏的双精度像素值)。

描述

Geomval是一种复合数据类型,由.geom字段引用的几何图形对象和val组成,val是表示栅格标注栏中特定几何位置的像素值的双精度值。它由ST_DumpAsPolygon和栅格交点函数系列用作输出类型,用于将栅格标注栏分解为几何图形多边形。


Name

添加带宽参数 — 用作ST_AddBand函数的输入的复合类型,用于定义新标注栏的属性和初始值。

描述

用作ST_AddBand函数的输入的复合类型,用于定义新标注栏的属性和初始值。

index integer

从1开始的值,指示将在栅格的波段中添加新波段的位置。如果为空,则新的波段将添加到栅格波段的末尾。

pixeltype text

新带区的像素类型。定义的像素类型之一,如中所述 ST_BandPixelType

initialvalue double precision

新波段的所有像素将被设置为的初始值。

nodataval double precision

新标注栏的NODATA值。如果为空,则不会为新标注栏分配NODATA值。

另请参阅

ST_AddBand


Name

粗制滥造 — 当需要表示栅格和该栅格的波段索引时使用的复合类型。

描述

当需要表示栅格和该栅格的波段索引时使用的复合类型。

rast raster

有问题的栅格/

nband integer

指示栅格波段的从1开始的值


Name

栅格 — 栅格空间数据类型。

描述

栅格是一种空间数据类型,用于表示从JPEG、TIFF、PNG、数字高程模型导入的栅格数据。每个栅格都有一个或多个波段,每个波段都有一组像素值。可以对栅格进行地理参考。

[Note]

需要使用GDAL支持编译PostGIS。当前,栅格可以隐式转换为几何类型,但转换会返回 ST_ConvexHull 在栅格上。这种自动铸造可能会在不久的将来被移除,所以不要依赖它。

投射行为

本节列出此数据类型允许的自动强制转换和显式强制转换

投给行为
几何体自动

Name

重新分类 — 用作ST_Reclass函数的输入的复合类型,用于定义重分类行为。

描述

用作ST_Reclass函数的输入的复合类型,用于定义重分类行为。

N带 整数

要重新分类的波段编号。

重分类表达式 文本

由逗号分隔的范围组成的范围表达式:map_range映射。:定义定义如何将旧标注栏值映射到新标注栏值的映射。(意思是 > ,)表示小于,] < 或相等,[意思是 > 或相等

1. [a-b] = a <= x <= b

2. (a-b] = a < x <= b

3. [a-b) = a <= x < b

4. (a-b) = a < x < b

(记法是可选的,因此a-b的意思与(a-b)相同)

像素类型 文本

定义的像素类型之一,如中所述 ST_BandPixelType

节点值 双精度

要视为无数据的值。对于支持透明度的图像输出,这些选项将为空白。

示例:将波段2重新分类为8BUI,其中255表示无数据值

SELECT ROW(2, '0-100:1-10, 101-500:11-150,501 - 10000: 151-254', '8BUI', 255)::reclassarg;

示例:将波段1重新分类为1BB,且未定义任何数据值

SELECT ROW(1, '0-100]:0, (100-255:1', '1BB', NULL)::reclassarg;

另请参阅

ST_Reclass


Name

摘要统计信息 — ST_SummaryStats和ST_SummaryStatsAgg函数返回的复合类型。

描述

方法返回的复合类型。 ST_SummaryStatsST_SummaryStatsAgg 功能。

count integer

为汇总统计信息计数的像素数。

sum double precision

所有计数的像素值的总和。

mean double precision

所有计数的像素值的算术平均值。

stddev double precision

所有计数的像素值的标准差。

min double precision

计数的像素值的最小值。

max double precision

计数的像素值的最大值。


Name

工会 — 用作ST_UNION函数的输入的复合类型,用于定义要处理的波段和UNION操作的行为。

描述

用作ST_UNION函数的输入的复合类型,用于定义要处理的波段和UNION操作的行为。

nband integer

从1开始的值,指示要处理的每个输入栅格的波段。

uniontype text

联合操作的类型。中描述的已定义类型之一 ST_Union

另请参阅

ST_Union

12.2. 栅格管理

AddRasterConstraints — 将栅格约束添加到特定列的已加载栅格表中,该栅格表约束空间参考、缩放、块大小、对齐、标注栏、标注栏类型以及用于指示是否定期阻止栅格列的标志。必须用数据加载表,才能推断约束。如果已完成约束设置,则返回True,否则将发出通知。
DropRasterConstraints — 删除引用栅格表列的PostGIS栅格约束。在需要重新加载数据或更新栅格列数据时非常有用。
AddOverviewConstraints — 将一个栅格列标记为另一个栅格列的总览。
DropOverviewConstraints — 取消对栅格列的标记,使其不是另一栅格列的总览。
PostGIS_GDAL_Version — 报告PostGIS正在使用的GDAL库的版本。
PostGIS_Raster_Lib_Build_Date — 报告完整的栅格库构建日期。
PostGIS_Raster_Lib_Version — 报告完整的栅格版本和构建配置信息。
ST_GDALDrivers — 通过GDAL返回PostGIS支持的栅格格式的列表。ST_AsGDALRaster只能使用CAN_WRITE=True的格式
ST_Contour — 从提供的栅格波段生成一组矢量等高线,使用 GDAL等高线算法 。
ST_InterpolateRaster — 基于三维点的输入集对栅格曲面进行内插,使用X和Y值来定位栅格上的点,并使用点的Z值作为曲面高程。
更新栅格SRID — 更改用户指定的列和表中所有栅格的SRID。
ST_CreateOverview — 创建给定栅格覆盖的降低分辨率版本。

Name

AddRasterConstraints — 将栅格约束添加到特定列的已加载栅格表中,该栅格表约束空间参考、缩放、块大小、对齐、标注栏、标注栏类型以及用于指示是否定期阻止栅格列的标志。必须用数据加载表,才能推断约束。如果已完成约束设置,则返回True,否则将发出通知。

Synopsis

boolean AddRasterConstraints(name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true , boolean pixel_types=true , boolean nodata_values=true , boolean out_db=true , boolean extent=true );

boolean AddRasterConstraints(name rasttable, name rastcolumn, text[] VARIADIC constraints);

boolean AddRasterConstraints(name rastschema, name rasttable, name rastcolumn, text[] VARIADIC constraints);

boolean AddRasterConstraints(name rastschema, name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true , boolean out_db=true , boolean extent=true );

描述

生成对栅格列的约束,这些约束用于在 raster_columns 栅格目录。这个 栅格模式 表所在的表架构的名称。这个 格栅 必须是对SPATIAL_REF_SYS表中条目的整数值引用。

栅格2pgsql 加载器使用此函数注册栅格表

要传入的有效约束名称:请参阅 Section 11.2.1, “栅格列目录” 了解更多详细信息。

  • 块大小 同时设置X和Y块大小

  • blocksize_x 设置X平铺(每个平铺的宽度以像素为单位)

  • blocksize_y 设置Y平铺(每个平铺的高度以像素为单位)

  • 程度 计算整个表的范围并应用约束所有栅格必须在该范围内

  • num_bands 频带数目

  • pixel_types 读取每个波段的像素类型数组,确保所有波段n具有相同的像素类型

  • regular_blocking 设置空间唯一(两个栅格在空间上不能相同)和Coverage切片(栅格与Coverage对齐)约束

  • same_alignment 确保它们都具有相同的对齐方式,这意味着您比较的任何两个瓷砖都将返回TRUE。参考 ST_SameAlignment

  • 格栅 确保所有服务器都具有相同的sRID

  • 更多--作为上述函数的输入列出的任何

[Note]

此函数从表中已有的数据推断约束。因此,必须先创建栅格列,然后再将数据加载到栅格列,才能使其工作。

[Note]

如果在应用约束之后需要在表中加载更多数据,则在数据范围发生更改的情况下可能需要运行DropRasterConstraints。

可用性:2.0.0

示例:基于数据对列应用所有可能的约束

CREATE TABLE myrasters(rid SERIAL primary key, rast raster);
INSERT INTO myrasters(rast)
SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL);

SELECT AddRasterConstraints('myrasters'::name, 'rast'::name);


-- verify if registered correctly in the raster_columns view --
SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values
    FROM raster_columns
    WHERE r_table_name = 'myrasters';

 srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values
------+---------+---------+-------------+-------------+-----------+-------------+---------------
 4326 |       2 |       2 |        1000 |        1000 |         1 | {8BSI}      | {0}
        

示例:应用单个约束

CREATE TABLE public.myrasters2(rid SERIAL primary key, rast raster);
INSERT INTO myrasters2(rast)
SELECT ST_AddBand(ST_MakeEmptyRaster(1000, 1000, 0.3, -0.3, 2, 2, 0, 0,4326), 1, '8BSI'::text, -129, NULL);

SELECT AddRasterConstraints('public'::name, 'myrasters2'::name, 'rast'::name,'regular_blocking', 'blocksize');
-- get notice--
NOTICE:  Adding regular blocking constraint
NOTICE:  Adding blocksize-X constraint
NOTICE:  Adding blocksize-Y constraint

Name

DropRasterConstraints — 删除引用栅格表列的PostGIS栅格约束。在需要重新加载数据或更新栅格列数据时非常有用。

Synopsis

boolean DropRasterConstraints(name rasttable, name rastcolumn, boolean srid, boolean scale_x, boolean scale_y, boolean blocksize_x, boolean blocksize_y, boolean same_alignment, boolean regular_blocking, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true, boolean out_db=true , boolean extent=true);

boolean DropRasterConstraints(name rastschema, name rasttable, name rastcolumn, boolean srid=true, boolean scale_x=true, boolean scale_y=true, boolean blocksize_x=true, boolean blocksize_y=true, boolean same_alignment=true, boolean regular_blocking=false, boolean num_bands=true, boolean pixel_types=true, boolean nodata_values=true, boolean out_db=true , boolean extent=true);

boolean DropRasterConstraints(name rastschema, name rasttable, name rastcolumn, text[] constraints);

描述

删除引用由添加的栅格表列的PostGIS栅格约束 AddRasterConstraints 。在需要加载更多数据或更新栅格列数据时非常有用。如果要删除栅格表或栅格列,则不需要执行此操作。

要删除栅格表,请使用标准

删除表MyTable

要仅删除栅格列而不删除表的其余部分,请使用标准SQL

ALTER TABLE mytable DROP COLUMN rast

该表将从 raster_columns 如果删除列或表,则返回目录。但是,如果仅删除约束,栅格列仍将列在 raster_columns 目录,但除了列名和表之外,没有关于它的其他信息。

可用性:2.0.0

示例

SELECT DropRasterConstraints ('myrasters','rast');
----RESULT output ---
t

-- verify change in raster_columns --
SELECT srid, scale_x, scale_y, blocksize_x, blocksize_y, num_bands, pixel_types, nodata_values
    FROM raster_columns
    WHERE r_table_name = 'myrasters';

 srid | scale_x | scale_y | blocksize_x | blocksize_y | num_bands | pixel_types| nodata_values
------+---------+---------+-------------+-------------+-----------+-------------+---------------
    0 |         |         |             |             |           |             |
        

Name

AddOverviewConstraints — 将一个栅格列标记为另一个栅格列的总览。

Synopsis

boolean AddOverviewConstraints(name ovschema, name ovtable, name ovcolumn, name refschema, name reftable, name refcolumn, int ovfactor);

boolean AddOverviewConstraints(name ovtable, name ovcolumn, name reftable, name refcolumn, int ovfactor);

描述

添加对栅格列的约束,这些约束用于在 raster_overviews 栅格目录。

这个 卵泡因子 参数表示总览列中的比例乘数:总览系数越高,分辨率越低。

排卵模式 Ref架构 参数,则第一个找到的表将扫描 search_path 将会被使用。

可用性:2.0.0

示例

CREATE TABLE res1 AS SELECT
ST_AddBand(
  ST_MakeEmptyRaster(1000, 1000, 0, 0, 2),
  1, '8BSI'::text, -129, NULL
) r1;

CREATE TABLE res2 AS SELECT
ST_AddBand(
  ST_MakeEmptyRaster(500, 500, 0, 0, 4),
  1, '8BSI'::text, -129, NULL
) r2;

SELECT AddOverviewConstraints('res2', 'r2', 'res1', 'r1', 2);

-- verify if registered correctly in the raster_overviews view --
SELECT o_table_name ot, o_raster_column oc,
       r_table_name rt, r_raster_column rc,
       overview_factor f
FROM raster_overviews WHERE o_table_name = 'res2';
  ot  | oc |  rt  | rc | f
------+----+------+----+---
 res2 | r2 | res1 | r1 | 2
(1 row)
        

Name

DropOverviewConstraints — 取消对栅格列的标记,使其不是另一栅格列的总览。

Synopsis

boolean DropOverviewConstraints(name ovschema, name ovtable, name ovcolumn);

boolean DropOverviewConstraints(name ovtable, name ovcolumn);

描述

从栅格列中移除用于将栅格列显示为另一个栅格列的总览的约束 raster_overviews 栅格目录。

排卵模式 参数,则发现的第一个表正在扫描 search_path 将会被使用。

可用性:2.0.0


Name

PostGIS_GDAL_Version — 报告PostGIS正在使用的GDAL库的版本。

Synopsis

text PostGIS_GDAL_Version();

描述

报告PostGIS正在使用的GDAL库的版本。还将检查并报告GDAL是否可以找到其数据文件。

示例

SELECT PostGIS_GDAL_Version();
       postgis_gdal_version
-----------------------------------
 GDAL 1.11dev, released 2013/04/13
                

另请参阅

postgis.gdal_datapath


Name

PostGIS_Raster_Lib_Build_Date — 报告完整的栅格库构建日期。

Synopsis

text PostGIS_Raster_Lib_Build_Date();

描述

报告栅格构建日期

示例

SELECT PostGIS_Raster_Lib_Build_Date();
postgis_raster_lib_build_date
-----------------------------
2010-04-28 21:15:10

Name

PostGIS_Raster_Lib_Version — 报告完整的栅格版本和构建配置信息。

Synopsis

text PostGIS_Raster_Lib_Version();

描述

报告完整的栅格版本和构建配置信息。

示例

SELECT PostGIS_Raster_Lib_Version();
postgis_raster_lib_version
-----------------------------
 2.0.0

另请参阅

PostGIS_Lib_Version


Name

ST_GDALDrivers — 通过GDAL返回PostGIS支持的栅格格式的列表。ST_AsGDALRaster只能使用CAN_WRITE=True的格式

Synopsis

setof record ST_GDALDrivers(integer OUT idx, text OUT short_name, text OUT long_name, text OUT can_read, text OUT can_write, text OUT create_options);

描述

返回GDAL支持的每种格式的栅格格式SHORT_NAME、LONG_NAME和CREATOR选项的列表。使用Short_Name作为 格式化 的参数 ST_AsGDALRaster 。根据libgdal编译时使用的驱动程序的不同,选项会有所不同。 create_options 返回由名称和可选选项组成的一组XML格式的CreationOptionList/选项 类型 描述 和一套 VALUE 对于特定驱动程序的每个创建者选项。

已更改:2.5.0-添加CAN_READ和CAN_WRITE列。

已更改:2.0.6、2.1.3-默认情况下不启用任何驱动程序,除非设置了GUC或环境变量GDAL_ENABLED_DRIVERS。

可用性:2.0.0-需要GDAL > =1.6.0。

示例:驱动程序列表

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SELECT short_name, long_name, can_write
FROM st_gdaldrivers()
ORDER BY short_name;

   short_name    |                          long_name                          | can_write
-----------------+-------------------------------------------------------------+-----------
 AAIGrid         | Arc/Info ASCII Grid                                         | t
 ACE2            | ACE2                                                        | f
 ADRG            | ARC Digitized Raster Graphics                               | f
 AIG             | Arc/Info Binary Grid                                        | f
 AirSAR          | AirSAR Polarimetric Image                                   | f
 ARG             | Azavea Raster Grid format                                   | t
 BAG             | Bathymetry Attributed Grid                                  | f
 BIGGIF          | Graphics Interchange Format (.gif)                          | f
 BLX             | Magellan topo (.blx)                                        | t
 BMP             | MS Windows Device Independent Bitmap                        | f
 BSB             | Maptech BSB Nautical Charts                                 | f
 PAux            | PCI .aux Labelled                                           | f
 PCIDSK          | PCIDSK Database File                                        | f
 PCRaster        | PCRaster Raster File                                        | f
 PDF             | Geospatial PDF                                              | f
 PDS             | NASA Planetary Data System                                  | f
 PDS4            | NASA Planetary Data System 4                                | t
 PLMOSAIC        | Planet Labs Mosaics API                                     | f
 PLSCENES        | Planet Labs Scenes API                                      | f
 PNG             | Portable Network Graphics                                   | t
 PNM             | Portable Pixmap Format (netpbm)                             | f
 PRF             | Racurs PHOTOMOD PRF                                         | f
 R               | R Object Data Store                                         | t
 Rasterlite      | Rasterlite                                                  | t
 RDA             | DigitalGlobe Raster Data Access driver                      | f
 RIK             | Swedish Grid RIK (.rik)                                     | f
 RMF             | Raster Matrix Format                                        | f
 ROI_PAC         | ROI_PAC raster                                              | f
 RPFTOC          | Raster Product Format TOC format                            | f
 RRASTER         | R Raster                                                    | f
 RS2             | RadarSat 2 XML Product                                      | f
 RST             | Idrisi Raster A.1                                           | t
 SAFE            | Sentinel-1 SAR SAFE Product                                 | f
 SAGA            | SAGA GIS Binary Grid (.sdat, .sg-grd-z)                     | t
 SAR_CEOS        | CEOS SAR Image                                              | f
 SDTS            | SDTS Raster                                                 | f
 SENTINEL2       | Sentinel 2                                                  | f
 SGI             | SGI Image File Format 1.0                                   | f
 SNODAS          | Snow Data Assimilation System                               | f
 SRP             | Standard Raster Product (ASRP/USRP)                         | f
 SRTMHGT         | SRTMHGT File Format                                         | t
 Terragen        | Terragen heightfield                                        | f
 TIL             | EarthWatch .TIL                                             | f
 TSX             | TerraSAR-X Product                                          | f
 USGSDEM         | USGS Optional ASCII DEM (and CDED)                          | t
 VICAR           | MIPL VICAR file                                             | f
 VRT             | Virtual Raster                                              | t
 WCS             | OGC Web Coverage Service                                    | f
 WMS             | OGC Web Map Service                                         | t
 WMTS            | OGC Web Map Tile Service                                    | t
 XPM             | X11 PixMap Format                                           | t
 XYZ             | ASCII Gridded XYZ                                           | t
 ZMap            | ZMap Plus Grid                                              | t

示例:每个驱动程序的选项列表

-- Output the create options XML column of JPEG as a table  --
-- Note you can use these creator options in ST_AsGDALRaster options argument
SELECT (xpath('@name', g.opt))[1]::text As oname,
       (xpath('@type', g.opt))[1]::text As otype,
       (xpath('@description', g.opt))[1]::text As descrip
FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt
FROM  st_gdaldrivers()
WHERE short_name = 'JPEG') As g;

       oname        |  otype  |      descrip
--------------------+---------+-------------------------------------------------
 PROGRESSIVE        | boolean | whether to generate a progressive JPEG
 QUALITY            | int     | good=100, bad=0, default=75
 WORLDFILE          | boolean | whether to geneate a worldfile
 INTERNAL_MASK      | boolean | whether to generate a validity mask
 COMMENT            | string  | Comment
 SOURCE_ICC_PROFILE | string  | ICC profile encoded in Base64
 EXIF_THUMBNAIL     | boolean | whether to generate an EXIF thumbnail(overview).
                                By default its max dimension will be 128
 THUMBNAIL_WIDTH    | int     | Forced thumbnail width
 THUMBNAIL_HEIGHT   | int     | Forced thumbnail height
(9 rows)
-- raw xml output for creator options for GeoTiff --
SELECT create_options
FROM st_gdaldrivers()
WHERE short_name = 'GTiff';

<CreationOptionList>
    <Option name="COMPRESS" type="string-select">
        <Value>NONE</Value>
        <Value>LZW</Value>
        <Value>PACKBITS</Value>
        <Value>JPEG</Value>
        <Value>CCITTRLE</Value>
        <Value>CCITTFAX3</Value>
        <Value>CCITTFAX4</Value>
        <Value>DEFLATE</Value>
    </Option>
    <Option name="PREDICTOR" type="int" description="Predictor Type"/>
    <Option name="JPEG_QUALITY" type="int" description="JPEG quality 1-100" default="75"/>
    <Option name="ZLEVEL" type="int" description="DEFLATE compression level 1-9" default="6"/>
    <Option name="NBITS" type="int" description="BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31)"/>
    <Option name="INTERLEAVE" type="string-select" default="PIXEL">
        <Value>BAND</Value>
        <Value>PIXEL</Value>
    </Option>
    <Option name="TILED" type="boolean" description="Switch to tiled format"/>
    <Option name="TFW" type="boolean" description="Write out world file"/>
    <Option name="RPB" type="boolean" description="Write out .RPB (RPC) file"/>
    <Option name="BLOCKXSIZE" type="int" description="Tile Width"/>
    <Option name="BLOCKYSIZE" type="int" description="Tile/Strip Height"/>
    <Option name="PHOTOMETRIC" type="string-select">
        <Value>MINISBLACK</Value>
        <Value>MINISWHITE</Value>
        <Value>PALETTE</Value>
        <Value>RGB</Value>
        <Value>CMYK</Value>
        <Value>YCBCR</Value>
        <Value>CIELAB</Value>
        <Value>ICCLAB</Value>
        <Value>ITULAB</Value>
    </Option>
    <Option name="SPARSE_OK" type="boolean" description="Can newly created files have missing blocks?" default="FALSE"/>
    <Option name="ALPHA" type="boolean" description="Mark first extrasample as being alpha"/>
    <Option name="PROFILE" type="string-select" default="GDALGeoTIFF">
        <Value>GDALGeoTIFF</Value>
        <Value>GeoTIFF</Value>
        <Value>BASELINE</Value>
    </Option>
    <Option name="PIXELTYPE" type="string-select">
        <Value>DEFAULT</Value>
        <Value>SIGNEDBYTE</Value>
    </Option>
    <Option name="BIGTIFF" type="string-select" description="Force creation of BigTIFF file">
        <Value>YES</Value>
        <Value>NO</Value>
        <Value>IF_NEEDED</Value>
        <Value>IF_SAFER</Value>
    </Option>
    <Option name="ENDIANNESS" type="string-select" default="NATIVE" description="Force endianness of created file. For DEBUG purpose mostly">
        <Value>NATIVE</Value>
        <Value>INVERTED</Value>
        <Value>LITTLE</Value>
        <Value>BIG</Value>
    </Option>
    <Option name="COPY_SRC_OVERVIEWS" type="boolean" default="NO" description="Force copy of overviews of source dataset (CreateCopy())"/>
</CreationOptionList>

-- Output the create options XML column for GTiff as a table  --
SELECT (xpath('@name', g.opt))[1]::text As oname,
       (xpath('@type', g.opt))[1]::text As otype,
       (xpath('@description', g.opt))[1]::text As descrip,
       array_to_string(xpath('Value/text()', g.opt),', ') As vals
FROM (SELECT unnest(xpath('/CreationOptionList/Option', create_options::xml)) As opt
FROM  st_gdaldrivers()
WHERE short_name = 'GTiff') As g;

       oname        |     otype     |                               descrip                                |                                   vals
--------------------+---------------+----------------------------------------------------------------------+---------------------------------------------------------------------------
 COMPRESS           | string-select |                                                                      | NONE, LZW, PACKBITS, JPEG, CCITTRLE, CCITTFAX3, CCITTFAX4, DEFLATE
 PREDICTOR          | int           | Predictor Type                                                       |
 JPEG_QUALITY       | int           | JPEG quality 1-100                                                   |
 ZLEVEL             | int           | DEFLATE compression level 1-9                                        |
 NBITS              | int           | BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31) |
 INTERLEAVE         | string-select |                                                                      | BAND, PIXEL
 TILED              | boolean       | Switch to tiled format                                               |
 TFW                | boolean       | Write out world file                                                 |
 RPB                | boolean       | Write out .RPB (RPC) file                                            |
 BLOCKXSIZE         | int           | Tile Width                                                           |
 BLOCKYSIZE         | int           | Tile/Strip Height                                                    |
 PHOTOMETRIC        | string-select |                                                                      | MINISBLACK, MINISWHITE, PALETTE, RGB, CMYK, YCBCR, CIELAB, ICCLAB, ITULAB
 SPARSE_OK          | boolean       | Can newly created files have missing blocks?                         |
 ALPHA              | boolean       | Mark first extrasample as being alpha                                |
 PROFILE            | string-select |                                                                      | GDALGeoTIFF, GeoTIFF, BASELINE
 PIXELTYPE          | string-select |                                                                      | DEFAULT, SIGNEDBYTE
 BIGTIFF            | string-select | Force creation of BigTIFF file                                       | YES, NO, IF_NEEDED, IF_SAFER
 ENDIANNESS         | string-select | Force endianness of created file. For DEBUG purpose mostly           | NATIVE, INVERTED, LITTLE, BIG
 COPY_SRC_OVERVIEWS | boolean       | Force copy of overviews of source dataset (CreateCopy())             |
(19 rows)

Name

ST_Contour — 从提供的栅格波段生成一组矢量等高线,使用 GDAL等高线算法

Synopsis

setof record ST_Contour(raster rast, integer bandnumber, double precision level_interval, double precision level_base, double precision[] fixed_levels, boolean polygonize);

描述

从提供的栅格波段生成一组矢量等高线,使用 GDAL等高线算法

fixed_levels 参数是非空数组,则 level_interval level_base 参数将被忽略。

这个 多角化 参数当前不起作用。使用 ST_Polygonize 函数将等高线转换为多边形。

返回值是一组具有以下属性的记录:

几何图形

等高线的几何图形。

ID号

由GDAL赋予等高线的唯一标识符。

价值

线条表示的栅格值。对于高程DEM输入,这将是输出等高线的高程。

可用性:3.2.0

示例

WITH c AS (
SELECT (ST_Contour(rast, 1, fixed_levels => ARRAY[100.0, 200.0, 300.0])).*
FROM dem_grid WHERE rid = 1
)
SELECT st_astext(geom), id, value
FROM c;

另请参阅

ST_InterpolateRaster


Name

ST_InterpolateRaster — 基于三维点的输入集对栅格曲面进行内插,使用X和Y值来定位栅格上的点,并使用点的Z值作为曲面高程。

Synopsis

raster ST_InterpolateRaster(geometry input_points, text algorithm_options, raster template, integer template_band_num=1);

描述

基于三维点的输入集对栅格曲面进行内插,使用X和Y值来定位栅格上的点,并使用点的Z值作为曲面高程。有五种可用的内插算法:反距离、反距离最近邻、移动平均、最近邻和线性内插。请参阅 Gdal_GRID文档 有关算法及其参数的更多详细信息。有关如何计算内插的更多信息,请参阅 GDAL栅格教程

输入参数为:

input_points

驱动插补的点。任何带有Z值的几何体都是可接受的,输入中的所有点都将被使用。

algorithm_options

定义算法和算法选项的字符串,格式为 gdal_grid 。例如,对于平滑为2的反比距离插值法,您可以使用“invdist:Smoting=2.0”。

模板

用于驱动输出栅格几何图形的栅格模板。宽度、高度、像素大小、空间范围和像素类型将从此模板中读取。

template_band_num

默认情况下,模板栅格中的第一个标注栏用于驱动输出栅格,但可以使用此参数进行调整。

可用性:3.2.0

示例

SELECT ST_InterpolateRaster(
    'MULTIPOINT(10.5 9.5 1000, 11.5 8.5 1000, 10.5 8.5 500, 11.5 9.5 500)'::geometry,
    'invdist:smoothing:2.0',
    ST_AddBand(ST_MakeEmptyRaster(200, 400, 10, 10, 0.01, -0.005, 0, 0), '16BSI')
)

另请参阅

ST_Contour


Name

更新栅格SRID — 更改用户指定的列和表中所有栅格的SRID。

Synopsis

raster UpdateRasterSRID(name schema_name, name table_name, name column_name, integer new_srid);

raster UpdateRasterSRID(name table_name, name column_name, integer new_srid);

描述

更改用户指定的列和表中所有栅格的SRID。在更改指定列的栅格的SRID之前,该函数将删除所有适当的列约束(范围、对齐和SRID)。

[Note]

此函数不会影响栅格的数据(波段像素值)。只有栅格的元数据才会更改。

可用性:2.1.0

另请参阅

更新几何SRID


Name

ST_CreateOverview — 创建给定栅格覆盖的降低分辨率版本。

Synopsis

regclass ST_CreateOverview(regclass tab, name col, int factor, text algo='NearestNeighbor');

描述

使用来自源表的重新采样的平铺创建概览表。输出切片将具有与输入切片相同的大小,并以较低的分辨率覆盖相同的空间范围(像素大小将为1/ 因素 在两个方向上的原件)。

概览表将在 raster_overviews 目录,并将强制实施栅格约束。

算法选项有:‘NearestNeighbor’、‘Billinine’、‘Cubic’、‘Cubi Spline’和‘Lanczos’。请参阅: GDAL扭曲重采样方法 了解更多详细信息。

可用性:2.2.0

示例

输出质量一般较好,但产品格式的输出速度较慢

SELECT ST_CreateOverview('mydata.mytable'::regclass, 'rast', 2, 'Lanczos');

以更快的速度输出以处理默认最近邻

SELECT ST_CreateOverview('mydata.mytable'::regclass, 'rast', 2);

12.3. 栅格构造器

ST_AddBand — 返回在给定索引位置添加了给定初始值的给定类型新波段的栅格。如果未指定索引,则将带区添加到末尾。
ST_AsRaster — 将PostGIS几何图形转换为PostGIS栅格。
ST_Band — 将现有栅格的一个或多个波段作为新栅格返回。对于从现有栅格构建新栅格非常有用。
ST_MakeEmptyCoverage — 使用空栅格平铺网格覆盖地理参考区域。
ST_MakeEmptyRaster — 返回给定尺寸(宽度)的空栅格(没有波段 & 高度)、左上角X和Y、像素大小和旋转(scalex、scaleY、skewx & Skewy)和参考系(SRID)。如果传入栅格,则返回具有相同大小、对齐和SRID的新栅格。如果省略sRID,则空间参考设置为未知(0)。
ST_Tile — 根据输出栅格的所需尺寸,返回通过拆分输入栅格产生的一组栅格。
ST_Retile — 从任意平铺的栅格覆盖中返回一组配置的平铺。
ST_FromGDALRaster — 从支持的GDAL栅格文件返回栅格。

Name

ST_AddBand — 返回在给定索引位置添加了给定初始值的给定类型新波段的栅格。如果未指定索引,则将带区添加到末尾。

Synopsis

(1) raster ST_AddBand(raster rast, addbandarg[] addbandargset);

(2) raster ST_AddBand(raster rast, integer index, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(3) raster ST_AddBand(raster rast, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(4) raster ST_AddBand(raster torast, raster fromrast, integer fromband=1, integer torastindex=at_end);

(5) raster ST_AddBand(raster torast, raster[] fromrasts, integer fromband=1, integer torastindex=at_end);

(6) raster ST_AddBand(raster rast, integer index, text outdbfile, integer[] outdbindex, double precision nodataval=NULL);

(7) raster ST_AddBand(raster rast, text outdbfile, integer[] outdbindex, integer index=at_end, double precision nodataval=NULL);

描述

返回在给定位置(索引)、给定类型、给定初始值和给定nodata值添加了新波段的栅格。如果未指定索引,则将带区添加到末尾。如果没有 来自波段 如果指定,则假定为带1。中指定的一种像素类型的字符串表示形式 ST_BandPixelType 。如果指定了现有索引,则所有后续频段 >=该索引都将递增1。如果指定的初始值大于像素类型的最大值,则将初始值设置为像素类型允许的最高值。

对于接受数组 添加带宽参数 (变体1),特定Addband arg的索引值相对于该addband arg所描述的波段被添加到栅格时的栅格。请参见下面的多个新标注栏示例。

对于接受栅格数组的变量(变量5),如果 托拉斯特 为空,则 来自波段 将阵列中每个栅格的频带累加到新的栅格中。

对于那些需要 输出数据库文件 (变体6和7),则该值必须包括栅格文件的完整路径。Postgres服务器进程还必须可以访问该文件。

增强:增加了2.1.0对addband arg的支持。

增强:增加了2.1.0对新的Out-db频段的支持。

示例:单个新频段

-- Add another band of type 8 bit unsigned integer with pixels initialized to 200
UPDATE dummy_rast
    SET rast = ST_AddBand(rast,'8BUI'::text,200)
WHERE rid = 1;
                
-- Create an empty raster 100x100 units, with upper left  right at 0, add 2 bands (band 1 is 0/1 boolean bit switch, band2 allows values 0-15)
-- uses addbandargs
INSERT INTO dummy_rast(rid,rast)
    VALUES(10, ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0),
    ARRAY[
        ROW(1, '1BB'::text, 0, NULL),
        ROW(2, '4BUI'::text, 0, NULL)
            ]::addbandarg[]
     )
    );

-- output meta data of raster bands to verify all is right --
SELECT  (bmd).*
FROM (SELECT ST_BandMetaData(rast,generate_series(1,2)) As bmd
    FROM dummy_rast WHERE rid = 10) AS foo;
 --result --
 pixeltype | nodatavalue | isoutdb | path
-----------+----------------+-------------+---------+------
 1BB       |             | f       |
 4BUI      |             | f       |


-- output meta data of raster -
SELECT  (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd
    FROM dummy_rast WHERE rid = 10) AS foo;
-- result --
 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+------------+------------+-------+-------+------+----------
          0 |          0 |   100 |    100 |      1 |     -1 |     0 |     0 |   0 |        2
                

示例:多个新频段

SELECT
    *
FROM ST_BandMetadata(
    ST_AddBand(
        ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
        ARRAY[
            ROW(NULL, '8BUI', 255, 0),
            ROW(NULL, '16BUI', 1, 2),
            ROW(2, '32BUI', 100, 12),
            ROW(2, '32BF', 3.14, -1)
        ]::addbandarg[]
    ),
    ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path
---------+-----------+-------------+---------+------
       1 | 8BUI      |           0 | f       |
       2 | 32BF      |          -1 | f       |
       3 | 32BUI     |          12 | f       |
       4 | 16BUI     |           2 | f       |
                
-- Aggregate the 1st band of a table of like rasters into a single raster
-- with as many bands as there are test_types and as many rows (new rasters) as there are mice
-- NOTE: The ORDER BY test_type is only supported in PostgreSQL 9.0+
-- for 8.4 and below it usually works to order your data in a subselect (but not guaranteed)
-- The resulting raster will have a band for each test_type alphabetical by test_type
-- For mouse lovers: No mice were harmed in this exercise
SELECT
    mouse,
    ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast
FROM mice_studies
GROUP BY mouse;
                

示例:新的Out-db频段

SELECT
    *
FROM ST_BandMetadata(
    ST_AddBand(
        ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
        '/home/raster/mytestraster.tif'::text, NULL::int[]
    ),
    ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path
---------+-----------+-------------+---------+------
       1 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       2 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       3 | 8BUI      |             | t       | /home/raster/mytestraster.tif
                

Name

ST_AsRaster — 将PostGIS几何图形转换为PostGIS栅格。

Synopsis

raster ST_AsRaster(geometry geom, raster ref, text pixeltype, double precision value=1, double precision nodataval=0, boolean touched=false);

raster ST_AsRaster(geometry geom, raster ref, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

描述

将PostGIS几何图形转换为PostGIS栅格。许多变体提供了三组用于设置结果栅格的对齐和像素大小的可能性。

第一组由两个第一个变体组成,产生具有相同对齐( Scalex 鳞片 网格 格里迪 )、像素类型和nodata值作为提供的参考栅格。通常通过连接包含几何图形的表和包含参考栅格的表来传递此参考栅格。

The second group, composed of four variants, let you set the dimensions of the raster by providing the parameters of a pixel size (scalex & scaley and skewx & skewy). The width & height of the resulting raster will be adjusted to fit the extent of the geometry. In most cases, you must cast integer scalex & scaley arguments to double precision so that PostgreSQL choose the right variant.

The third group, composed of four variants, let you fix the dimensions of the raster by providing the dimensions of the raster (width & height). The parameters of the pixel size (scalex & scaley and skewx & skewy) of the resulting raster will be adjusted to fit the extent of the geometry.

The two first variants of each of those two last groups let you specify the alignment with an arbitrary corner of the alignment grid (gridx & gridy) and the two last variants takes the upper left corner (upperleftx & upperlefty).

每组变体允许产生一个单波段或多个波段的栅格。要生成多波段栅格,必须提供像素类型数组( 像素类型[] )、初始值的数组( 价值 )和nodata值的数组( 节点值 )。如果未提供,则像素型默认设置为8BUI,值设置为1,nodataval设置为0。

输出栅格将与源几何图形位于相同的空间参考中。唯一的例外是带有参考栅格的变体。在这种情况下,生成的栅格将获得与参考栅格相同的SRID。

可选的 碰触 参数默认为FALSE并映射到GDAL ALL_TOTHED栅格化选项,该选项确定是否将烧录线或多边形接触的像素。不只是线渲染路径上的那些,或者中心点在多边形内的那些。

当与结合使用时,这对于直接从数据库渲染几何的jpeg和png特别有用 ST_AsPNG 以及其他 ST_AsGDALRaster 函数族。

可用性:2.0.0-需要GDAL > =1.6.0。

[Note]

尚不能渲染复杂的几何体类型,如曲线、三角网和多面体曲面,但一旦GDAL可以,应该也能渲染。

示例:将几何体输出为PNG文件

黑圈

-- this will output a black circle taking up 150 x 150 pixels --
SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150));

仅使用PostGIS渲染的缓冲区示例

-- the bands map to RGB bands - the value (118,154,118) - teal  --
SELECT ST_AsPNG(
    ST_AsRaster(
        ST_Buffer(
            ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel'),
            200,200,ARRAY['8BUI', '8BUI', '8BUI'], ARRAY[118,154,118], ARRAY[0,0,0]));

Name

ST_Band — 将现有栅格的一个或多个波段作为新栅格返回。对于从现有栅格构建新栅格非常有用。

Synopsis

raster ST_Band(raster rast, integer[] nbands = ARRAY[1]);

raster ST_Band(raster rast, integer nband);

raster ST_Band(raster rast, text nbands, character delimiter=,);

描述

将现有栅格的一个或多个波段作为新栅格返回。用于从现有栅格构建新栅格、仅导出选定的栅格波段或重新排列栅格中的波段顺序。如果未指定标注栏或栅格中不存在任何指定标注栏,则将返回所有标注栏。在各种功能中用作辅助函数,例如用于删除波段。

[Warning]

For the nbands as text variant of function, the default delimiter is , which means you can ask for '1,2,3' and if you wanted to use a different delimeter you would do ST_Band(rast, '1@2@3', '@'). For asking for multiple bands, we strongly suggest you use the array form of this function e.g. ST_Band(rast, '{1,2,3}'::int[]); since the text list of bands form may be removed in future versions of PostGIS.

可用性:2.0.0

示例

-- Make 2 new rasters: 1 containing band 1 of dummy, second containing band 2 of dummy and then reclassified as a 2BUI
SELECT ST_NumBands(rast1) As numb1, ST_BandPixelType(rast1) As pix1,
 ST_NumBands(rast2) As numb2,  ST_BandPixelType(rast2) As pix2
FROM (
    SELECT ST_Band(rast) As rast1, ST_Reclass(ST_Band(rast,3), '100-200):1, [200-254:2', '2BUI') As rast2
        FROM dummy_rast
        WHERE rid = 2) As foo;

 numb1 | pix1 | numb2 | pix2
-------+------+-------+------
     1 | 8BUI |     1 | 2BUI
                    
-- Return bands 2 and 3. Using array cast syntax
SELECT ST_NumBands(ST_Band(rast, '{2,3}'::int[])) As num_bands
    FROM dummy_rast WHERE rid=2;

num_bands
----------
2

-- Return bands 2 and 3. Use array to define bands
SELECT ST_NumBands(ST_Band(rast, ARRAY[2,3])) As num_bands
    FROM dummy_rast
WHERE rid=2;
                    

原始(Column Rast)

dupe_band

sing_band

--Make a new raster with 2nd band of original and 1st band repeated twice,
and another with just the third band
SELECT rast, ST_Band(rast, ARRAY[2,1,1]) As dupe_band,
    ST_Band(rast, 3) As sing_band
FROM samples.than_chunked
WHERE rid=35;
                    

Name

ST_MakeEmptyCoverage — 使用空栅格平铺网格覆盖地理参考区域。

Synopsis

raster ST_MakeEmptyCoverage(integer tilewidth, integer tileheight, integer width, integer height, double precision upperleftx, double precision upperlefty, double precision scalex, double precision scaley, double precision skewx, double precision skewy, integer srid=unknown);

描述

Create a set of raster tiles with ST_MakeEmptyRaster. Grid dimension is width & height. Tile dimension is tilewidth & tileheight. The covered georeferenced area is from upper left corner (upperleftx, upperlefty) to lower right corner (upperleftx + width * scalex, upperlefty + height * scaley).

[Note]

请注意,scaleY对于栅格通常为负,scalex通常为正。因此,与左上角相比,右下角的y值更低,x值更高。

可用性:2.4.0

示例基本知识

在4x4网格中创建16个瓷砖,以覆盖从左上角(22,77)到右下角(55,33)的WGS84区域。

SELECT (ST_MetaData(tile)).* FROM ST_MakeEmptyCoverage(1, 1, 4, 4, 22, 33, (55 - 22)/(4)::float, (33 - 77)/(4)::float, 0., 0., 4326) tile;

 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-------------------------------------------------------------------------------------
         22 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         33 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         22 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |         11 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
         22 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      30.25 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
       38.5 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0
      46.75 |          0 |     1 |      1 |   8.25 |    -11 |     0 |     0 | 4326 |        0

另请参阅

ST_MakeEmptyRaster


Name

ST_MakeEmptyRaster — 返回给定尺寸(宽度)的空栅格(没有波段 & 高度)、左上角X和Y、像素大小和旋转(scalex、scaleY、skewx & Skewy)和参考系(SRID)。如果传入栅格,则返回具有相同大小、对齐和SRID的新栅格。如果省略sRID,则空间参考设置为未知(0)。

Synopsis

raster ST_MakeEmptyRaster(raster rast);

raster ST_MakeEmptyRaster(integer width, integer height, float8 upperleftx, float8 upperlefty, float8 scalex, float8 scaley, float8 skewx, float8 skewy, integer srid=unknown);

raster ST_MakeEmptyRaster(integer width, integer height, float8 upperleftx, float8 upperlefty, float8 pixelsize);

描述

返回给定尺寸(宽度)的空栅格(没有波段 & 高度),并在空间(或世界)坐标中使用左上角X(左上角)、左上角Y(左上角)、像素大小和旋转(scalex、scaleY、skewx)进行地理配准 & Skewy)和参考系(SRID)。

最后一个版本使用单个参数来指定像素大小(PixelSize)。Scalex设置为该参数,scaleY设置为该参数的负值。Skewx和skewy设置为0。

如果传入现有栅格,它将返回具有相同元数据设置(不带标注栏)的新栅格。

如果未指定sRID,则默认为0。创建空栅格后,您可能想要向其添加带区,并可能对其进行编辑。参考 ST_AddBand 定义标注栏和 ST_SetValue 要设置初始像素值,请执行以下操作。

示例

INSERT INTO dummy_rast(rid,rast)
VALUES(3, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) );

--use an existing raster as template for new raster
INSERT INTO dummy_rast(rid,rast)
SELECT 4, ST_MakeEmptyRaster(rast)
FROM dummy_rast WHERE rid = 3;

-- output meta data of rasters we just added
SELECT rid, (md).*
FROM (SELECT rid, ST_MetaData(rast) As md
    FROM dummy_rast
    WHERE rid IN(3,4)) As foo;

-- output --
 rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+------------+------------+-------+--------+------------+------------+-------+-------+------+----------
   3 |     0.0005 |     0.0005 |   100 |    100 |          1 |          1 |    0  |     0 | 4326 |        0
   4 |     0.0005 |     0.0005 |   100 |    100 |          1 |          1 |    0  |     0 | 4326 |        0
                

Name

ST_Tile — 根据输出栅格的所需尺寸,返回通过拆分输入栅格产生的一组栅格。

Synopsis

setof raster ST_Tile(raster rast, int[] nband, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

setof raster ST_Tile(raster rast, integer nband, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

setof raster ST_Tile(raster rast, integer width, integer height, boolean padwithnodata=FALSE, double precision nodataval=NULL);

描述

根据输出栅格的所需尺寸,返回通过拆分输入栅格产生的一组栅格。

如果 无数据的焊盘 =FALSE,则栅格右侧和底部的边缘平铺可能与其余平铺具有不同的尺寸。如果 无数据的焊盘 =True,则所有瓷砖将具有相同的尺寸,并可能使用NODATA值填充边缘瓷砖。如果栅格波段未指定NODATA值,则可通过设置来指定一个值 节点值

[Note]

如果输入栅格的指定波段超出了db,则输出栅格中的相应波段也将是超出db的。

可用性:2.1.0

示例

WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast
), bar AS (
    SELECT ST_Union(rast) AS rast FROM foo
), baz AS (
    SELECT ST_Tile(rast, 3, 3, TRUE) AS rast FROM bar
)
SELECT
    ST_DumpValues(rast)
FROM baz;

              st_dumpvalues
------------------------------------------
 (1,"{{1,1,1},{1,1,1},{1,1,1}}")
 (2,"{{10,10,10},{10,10,10},{10,10,10}}")
 (1,"{{2,2,2},{2,2,2},{2,2,2}}")
 (2,"{{20,20,20},{20,20,20},{20,20,20}}")
 (1,"{{3,3,3},{3,3,3},{3,3,3}}")
 (2,"{{30,30,30},{30,30,30},{30,30,30}}")
 (1,"{{4,4,4},{4,4,4},{4,4,4}}")
 (2,"{{40,40,40},{40,40,40},{40,40,40}}")
 (1,"{{5,5,5},{5,5,5},{5,5,5}}")
 (2,"{{50,50,50},{50,50,50},{50,50,50}}")
 (1,"{{6,6,6},{6,6,6},{6,6,6}}")
 (2,"{{60,60,60},{60,60,60},{60,60,60}}")
 (1,"{{7,7,7},{7,7,7},{7,7,7}}")
 (2,"{{70,70,70},{70,70,70},{70,70,70}}")
 (1,"{{8,8,8},{8,8,8},{8,8,8}}")
 (2,"{{80,80,80},{80,80,80},{80,80,80}}")
 (1,"{{9,9,9},{9,9,9},{9,9,9}}")
 (2,"{{90,90,90},{90,90,90},{90,90,90}}")
(18 rows)
                
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 2, '8BUI', 10, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0), 2, '8BUI', 20, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0), 2, '8BUI', 30, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0), 2, '8BUI', 40, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0), 2, '8BUI', 50, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '8BUI', 6, 0), 2, '8BUI', 60, 0) AS rast UNION ALL

    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '8BUI', 7, 0), 2, '8BUI', 70, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '8BUI', 8, 0), 2, '8BUI', 80, 0) AS rast UNION ALL
    SELECT ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '8BUI', 9, 0), 2, '8BUI', 90, 0) AS rast
), bar AS (
    SELECT ST_Union(rast) AS rast FROM foo
), baz AS (
    SELECT ST_Tile(rast, 3, 3, 2) AS rast FROM bar
)
SELECT
    ST_DumpValues(rast)
FROM baz;

              st_dumpvalues
------------------------------------------
 (1,"{{10,10,10},{10,10,10},{10,10,10}}")
 (1,"{{20,20,20},{20,20,20},{20,20,20}}")
 (1,"{{30,30,30},{30,30,30},{30,30,30}}")
 (1,"{{40,40,40},{40,40,40},{40,40,40}}")
 (1,"{{50,50,50},{50,50,50},{50,50,50}}")
 (1,"{{60,60,60},{60,60,60},{60,60,60}}")
 (1,"{{70,70,70},{70,70,70},{70,70,70}}")
 (1,"{{80,80,80},{80,80,80},{80,80,80}}")
 (1,"{{90,90,90},{90,90,90},{90,90,90}}")
(9 rows)
                

另请参阅

ST_Union, ST_Retile


Name

ST_Retile — 从任意平铺的栅格覆盖中返回一组配置的平铺。

Synopsis

SETOF raster ST_Retile(regclass tab, name col, geometry ext, float8 sfx, float8 sfy, int tw, int th, text algo='NearestNeighbor');

描述

返回一组具有指定比例的切片( SFX SFY )和最大尺寸( TW 这是 )和覆盖指定范围( 分机 )和来自指定栅格Coverage的数据( 选项卡 COL )。

算法选项有:‘NearestNeighbor’、‘Billinine’、‘Cubic’、‘Cubi Spline’和‘Lanczos’。请参阅: GDAL扭曲重采样方法 了解更多详细信息。

可用性:2.2.0

另请参阅

ST_CreateOverview


Name

ST_FromGDALRaster — 从支持的GDAL栅格文件返回栅格。

Synopsis

raster ST_FromGDALRaster(bytea gdaldata, integer srid=NULL);

描述

从支持的GDAL栅格文件返回栅格。 Gdaldata 类型为BYTEA,应为GDAL栅格文件的内容。

如果 格栅 为空,则该函数将尝试从GDAL栅格自动分配SRID。如果 格栅 则提供的值将覆盖任何自动分配的SRID。

可用性:2.1.0

示例

WITH foo AS (
    SELECT ST_AsPNG(ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.1, -0.1, 0, 0, 4326), 1, '8BUI', 1, 0), 2, '8BUI', 2, 0), 3, '8BUI', 3, 0)) AS png
),
bar AS (
    SELECT 1 AS rid, ST_FromGDALRaster(png) AS rast FROM foo
    UNION ALL
    SELECT 2 AS rid, ST_FromGDALRaster(png, 3310) AS rast FROM foo
)
SELECT
    rid,
    ST_Metadata(rast) AS metadata,
    ST_SummaryStats(rast, 1) AS stats1,
    ST_SummaryStats(rast, 2) AS stats2,
    ST_SummaryStats(rast, 3) AS stats3
FROM bar
ORDER BY rid;

 rid |         metadata          |    stats1     |    stats2     |     stats3
-----+---------------------------+---------------+---------------+----------------
   1 | (0,0,2,2,1,-1,0,0,0,3)    | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3)
   2 | (0,0,2,2,1,-1,0,0,3310,3) | (4,4,1,0,1,1) | (4,8,2,0,2,2) | (4,12,3,0,3,3)
(2 rows)
                

另请参阅

ST_AsGDALRaster

12.4. 栅格存取器

ST_GeoReference — 返回坐标文件中常见的GDAL或ESRI格式的地理参考元数据。默认值为GDAL。
ST_Height — 返回以像素为单位的栅格高度。
ST_IsEmpty — 如果栅格为空(宽度=0,高度=0),则返回TRUE。否则,返回FALSE。
ST_MemSize — 返回栅格占用的空间量(以字节为单位)。
ST_MetaData — 返回有关栅格对象的基本元数据,如像素大小、旋转(倾斜)、左上角、左下角等。
ST_NumBands — 返回栅格对象中的波段数。
ST_PixelHeight — 返回以空间参考系的几何单位表示的像素高度。
ST_PixelWidth — 返回以空间参考系的几何单位表示的像素宽度。
ST_ScaleX — 以坐标参考系为单位返回像素宽度的X分量。
ST_ScaleY — 以坐标参考系为单位返回像素高度的Y分量。
ST_RasterToWorldCoord — 在给定列和行的情况下,以几何X和Y(经度和纬度)形式返回栅格的左上角。列和行从1开始。
ST_RasterToWorldCoordX — 返回栅格、列和行的左上角几何X坐标。列和行的编号从1开始。
ST_RasterToWorldCoordY — 返回栅格、列和行的几何Y坐标左上角。列和行的编号从1开始。
ST_Rotation — 返回栅格以弧度为单位的旋转。
ST_SkewX — 返回地理参考X倾斜(或旋转参数)。
ST_SkewY — 返回地理参考Y倾斜(或旋转参数)。
ST_SRID — 返回在SPATIAL_REF_SYS表中定义的栅格的空间参考标识符。
ST_Summary — 返回栅格内容的文本摘要。
ST_UpperLeftX — 返回投影空间参考中栅格的左上角X坐标。
ST_UpperLeftY — 返回投影空间参考中栅格的左上角Y坐标。
ST_Width — 返回以像素为单位的栅格宽度。
ST_WorldToRasterCoord — 在给定几何X和Y(经度和纬度)或以栅格的空间参考坐标系表示的点几何图形的情况下,将左上角返回为列和行。
ST_WorldToRasterCoordX — 返回点几何图形的栅格中的列(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。
ST_WorldToRasterCoordY — 返回点几何图形的栅格中的行(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。

Name

ST_GeoReference — 返回坐标文件中常见的GDAL或ESRI格式的地理参考元数据。默认值为GDAL。

Synopsis

text ST_GeoReference(raster rast, text format=GDAL);

描述

返回地理配准元数据,包括GDAL或ESRI格式的回车,通常在 世界文件 。如果未指定类型,则默认为GDAL。类型为字符串‘GDAL’或‘ESRI’。

格式表示法之间的差异如下:

GDAL

scalex
skewy
skewx
scaley
upperleftx
upperlefty

ESRI

scalex
skewy
skewx
scaley
upperleftx + scalex*0.5
upperlefty + scaley*0.5

示例

SELECT ST_GeoReference(rast, 'ESRI') As esri_ref, ST_GeoReference(rast, 'GDAL') As gdal_ref
 FROM dummy_rast WHERE rid=1;

   esri_ref   |   gdal_ref
--------------+--------------
 2.0000000000 | 2.0000000000
 0.0000000000 : 0.0000000000
 0.0000000000 : 0.0000000000
 3.0000000000 : 3.0000000000
 1.5000000000 : 0.5000000000
 2.0000000000 : 0.5000000000
                

Name

ST_Height — 返回以像素为单位的栅格高度。

Synopsis

integer ST_Height(raster rast);

描述

返回栅格的高度。

示例

SELECT rid, ST_Height(rast) As rastheight
FROM dummy_rast;

 rid | rastheight
-----+------------
   1 |         20
   2 |          5
                

另请参阅

ST_Width


Name

ST_IsEmpty — 如果栅格为空(宽度=0,高度=0),则返回TRUE。否则,返回FALSE。

Synopsis

boolean ST_IsEmpty(raster rast);

描述

如果栅格为空(宽度=0,高度=0),则返回TRUE。否则,返回FALSE。

可用性:2.0.0

示例

SELECT ST_IsEmpty(ST_MakeEmptyRaster(100, 100, 0, 0, 0, 0, 0, 0))
st_isempty |
-----------+
f          |


SELECT ST_IsEmpty(ST_MakeEmptyRaster(0, 0, 0, 0, 0, 0, 0, 0))
st_isempty |
-----------+
t          |

                

另请参阅

ST_HasNoBand


Name

ST_MemSize — 返回栅格占用的空间量(以字节为单位)。

Synopsis

integer ST_MemSize(raster rast);

描述

返回栅格占用的空间量(以字节为单位)。

这是对PostgreSQL内置函数PG_COLUMN_SIZE、PG_SIZE_PRETY、PG_RELATION_SIZE、PG_TOTAL_RELATION_SIZE的一个很好的补充。

[Note]

给出表的字节大小的PG_Relationship_SIZE可能返回小于ST_MemSize的字节大小。这是因为PG_Relationship_SIZE不添加烤面包表贡献,并且大几何图形存储在烤面包表中。PG_COLUMN_SIZE可能返回较低的值,因为它返回压缩大小。

PG_TOTAL_RELATION_SIZE-包括、表、烤面包表和索引。

可用性:2.2.0

示例

SELECT ST_MemSize(ST_AsRaster(ST_Buffer(ST_Point(1,5),10,1000),150, 150, '8BUI')) As rast_mem;

        rast_mem
        --------
        22568
    

另请参阅


Name

ST_MetaData — 返回有关栅格对象的基本元数据,如像素大小、旋转(倾斜)、左上角、左下角等。

Synopsis

record ST_MetaData(raster rast);

描述

返回有关栅格对象的基本元数据,如像素大小、旋转(倾斜)、左上角、左下角等。返回的列:upperleftx|upperlefty|idth|Height|scalex|scaley|skewx|skewy|sRID|Numband

示例

SELECT rid, (foo.md).*
 FROM (SELECT rid, ST_MetaData(rast) As md
FROM dummy_rast) As foo;

 rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
 ----+------------+------------+-------+--------+--------+-----------+-------+-------+------+-------
   1 |        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |    0 |        0
   2 | 3427927.75 |    5793244 |     5 |      5 |   0.05 |  -0.05 |     0 |     0 |    0 |        3
                

Name

ST_NumBands — 返回栅格对象中的波段数。

Synopsis

integer ST_NumBands(raster rast);

描述

返回栅格对象中的波段数。

示例

SELECT rid, ST_NumBands(rast) As numbands
FROM dummy_rast;

rid | numbands
----+----------
  1 |        0
  2 |        3
                

另请参阅

ST_Value


Name

ST_PixelHeight — 返回以空间参考系的几何单位表示的像素高度。

Synopsis

double precision ST_PixelHeight(raster rast);

描述

返回以空间参考系的几何单位表示的像素高度。在没有倾斜的常见情况下,像素高度只是几何坐标和栅格像素之间的比例。

请参阅 ST_PixelWidth 对于这种关系的图解可视化。

示例:无倾斜的栅格

SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight,
 ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
        ST_SkewY(rast) As skewy
FROM dummy_rast;

 rastheight | pixheight | scalex | scaley | skewx | skewy
------------+-----------+--------+--------+-------+----------
         20 |         3 |      2 |      3 |     0 |        0
          5 |      0.05 |   0.05 |  -0.05 |     0 |        0
            

示例:倾斜不等于0的栅格

SELECT ST_Height(rast) As rastheight, ST_PixelHeight(rast) As pixheight,
 ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
        ST_SkewY(rast) As skewy
FROM (SELECT ST_SetSKew(rast,0.5,0.5) As rast
        FROM dummy_rast) As skewed;

rastheight |     pixheight     | scalex | scaley | skewx | skewy
-----------+-------------------+--------+--------+-------+----------
        20 |  3.04138126514911 |      2 |      3 |   0.5 |      0.5
         5 | 0.502493781056044 |   0.05 |  -0.05 |   0.5 |      0.5
            

Name

ST_PixelWidth — 返回以空间参考系的几何单位表示的像素宽度。

Synopsis

double precision ST_PixelWidth(raster rast);

描述

返回以空间参考系的几何单位表示的像素宽度。在没有倾斜的常见情况下,像素宽度只是几何坐标和栅格像素之间的比例。

下图说明了这种关系:

像素宽度:i方向上的像素大小

像素高度:j方向上的像素大小

示例:无倾斜的栅格

SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth,
    ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
    ST_SkewY(rast) As skewy
    FROM dummy_rast;

    rastwidth | pixwidth | scalex | scaley | skewx | skewy
    -----------+----------+--------+--------+-------+----------
    10 |        2 |      2 |      3 |     0 |        0
     5 |     0.05 |   0.05 |  -0.05 |     0 |        0
        

示例:倾斜不等于0的栅格

SELECT ST_Width(rast) As rastwidth, ST_PixelWidth(rast) As pixwidth,
    ST_ScaleX(rast) As scalex, ST_ScaleY(rast) As scaley, ST_SkewX(rast) As skewx,
    ST_SkewY(rast) As skewy
    FROM (SELECT ST_SetSkew(rast,0.5,0.5) As rast
    FROM dummy_rast) As skewed;

    rastwidth |     pixwidth      | scalex | scaley | skewx | skewy
    -----------+-------------------+--------+--------+-------+----------
    10 |  2.06155281280883 |      2 |      3 |   0.5 |      0.5
     5 | 0.502493781056044 |   0.05 |  -0.05 |   0.5 |      0.5
        

Name

ST_ScaleX — 以坐标参考系为单位返回像素宽度的X分量。

Synopsis

float8 ST_ScaleX(raster rast);

描述

以坐标参考系为单位返回像素宽度的X分量。参考 世界文件 了解更多详细信息。

已更改:2.0.0。在WKTRaster版本中,这称为ST_PixelSizeX。

示例

SELECT rid, ST_ScaleX(rast) As rastpixwidth
FROM dummy_rast;

 rid | rastpixwidth
-----+--------------
   1 |            2
   2 |         0.05
                

另请参阅

ST_Width


Name

ST_ScaleY — 以坐标参考系为单位返回像素高度的Y分量。

Synopsis

float8 ST_ScaleY(raster rast);

描述

以坐标参考系为单位返回像素高度的Y分量。可能是阴性的。参考 世界文件 了解更多详细信息。

已更改:2.0.0。在WKTRaster版本中,这称为ST_PixelSizeY。

示例

SELECT rid, ST_ScaleY(rast) As rastpixheight
FROM dummy_rast;

 rid | rastpixheight
-----+---------------
   1 |             3
   2 |         -0.05
                

另请参阅

ST_Height


Name

ST_RasterToWorldCoord — 在给定列和行的情况下,以几何X和Y(经度和纬度)形式返回栅格的左上角。列和行从1开始。

Synopsis

record ST_RasterToWorldCoord(raster rast, integer xcolumn, integer yrow);

描述

在给定列和行的情况下,以几何X和Y(经度和纬度)形式返回左上角。返回的X和Y以地理参考栅格的几何单位表示。列和行的编号从1开始,但如果传递给任一参数的是零、负数或大于栅格各自维度的数字,则它将返回栅格外部的坐标,假定栅格的网格适用于栅格边界之外。

可用性:2.1.0

示例

-- non-skewed raster
SELECT
    rid,
    (ST_RasterToWorldCoord(rast,1, 1)).*,
    (ST_RasterToWorldCoord(rast,2, 2)).*
FROM dummy_rast

 rid | longitude  | latitude | longitude |  latitude
-----+------------+----------+-----------+------------
   1 |        0.5 |      0.5 |       2.5 |        3.5
   2 | 3427927.75 |  5793244 | 3427927.8 | 5793243.95
                
-- skewed raster
SELECT
    rid,
    (ST_RasterToWorldCoord(rast, 1, 1)).*,
    (ST_RasterToWorldCoord(rast, 2, 3)).*
FROM (
    SELECT
        rid,
        ST_SetSkew(rast, 100.5, 0) As rast
    FROM dummy_rast
) As foo

 rid | longitude  | latitude | longitude | latitude
-----+------------+----------+-----------+-----------
   1 |        0.5 |      0.5 |     203.5 |       6.5
   2 | 3427927.75 |  5793244 | 3428128.8 | 5793243.9
                

Name

ST_RasterToWorldCoordX — 返回栅格、列和行的左上角几何X坐标。列和行的编号从1开始。

Synopsis

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn);

float8 ST_RasterToWorldCoordX(raster rast, integer xcolumn, integer yrow);

描述

以地理参考栅格的几何单位返回栅格列行的左上角X坐标。列数和行数从1开始,但如果传入的是负数或大于栅格中列数的数值,则会在假定倾斜和像素大小与所选栅格相同的情况下,将栅格文件外部的坐标向左或向右提供。

[Note]

对于非倾斜栅格,提供X列就足够了。对于倾斜的栅格,地理参考坐标是ST_ScaleX和ST_SkewX以及行和列的函数。如果只为倾斜的栅格提供X列,则会引发错误。

已更改:2.1.0在以前的版本中,这称为ST_Raster2WorldCoordX

示例

-- non-skewed raster providing column is sufficient
SELECT rid, ST_RasterToWorldCoordX(rast,1) As x1coord,
    ST_RasterToWorldCoordX(rast,2) As x2coord,
    ST_ScaleX(rast) As pixelx
FROM dummy_rast;

 rid |  x1coord   |  x2coord  | pixelx
-----+------------+-----------+--------
   1 |        0.5 |       2.5 |      2
   2 | 3427927.75 | 3427927.8 |   0.05
                
-- for fun lets skew it
SELECT rid, ST_RasterToWorldCoordX(rast, 1, 1) As x1coord,
    ST_RasterToWorldCoordX(rast, 2, 3) As x2coord,
    ST_ScaleX(rast) As pixelx
FROM (SELECT rid, ST_SetSkew(rast, 100.5, 0) As rast FROM dummy_rast) As foo;

 rid |  x1coord   |  x2coord  | pixelx
-----+------------+-----------+--------
   1 |        0.5 |     203.5 |      2
   2 | 3427927.75 | 3428128.8 |   0.05
                

Name

ST_RasterToWorldCoordY — 返回栅格、列和行的几何Y坐标左上角。列和行的编号从1开始。

Synopsis

float8 ST_RasterToWorldCoordY(raster rast, integer yrow);

float8 ST_RasterToWorldCoordY(raster rast, integer xcolumn, integer yrow);

描述

以地理参考栅格的几何单位返回栅格列行的左上角Y坐标。列数和行数从1开始,但如果传入的是负数或大于栅格中的列数/行数的数,则会在假定倾斜和像素大小与选定的栅格平铺相同的情况下,将栅格文件外部的坐标向左或向右提供。

[Note]

对于无倾斜的栅格,提供Y列就足够了。对于倾斜栅格,地理参考坐标是ST_scaley和ST_skewy以及行和列的函数。如果只为倾斜的栅格提供Y行,则会引发错误。

已更改:2.1.0在以前的版本中,这称为ST_Raster2WorldCoordY

示例

-- non-skewed raster providing row is sufficient
SELECT rid, ST_RasterToWorldCoordY(rast,1) As y1coord,
    ST_RasterToWorldCoordY(rast,3) As y2coord,
    ST_ScaleY(rast) As pixely
FROM dummy_rast;

 rid | y1coord |  y2coord  | pixely
-----+---------+-----------+--------
   1 |     0.5 |       6.5 |      3
   2 | 5793244 | 5793243.9 |  -0.05
                
-- for fun lets skew it
SELECT rid, ST_RasterToWorldCoordY(rast,1,1) As y1coord,
    ST_RasterToWorldCoordY(rast,2,3) As y2coord,
    ST_ScaleY(rast) As pixely
FROM (SELECT rid, ST_SetSkew(rast,0,100.5) As rast FROM dummy_rast) As foo;

 rid | y1coord |  y2coord  | pixely
-----+---------+-----------+--------
   1 |     0.5 |       107 |      3
   2 | 5793244 | 5793344.4 |  -0.05
                

Name

ST_Rotation — 返回栅格以弧度为单位的旋转。

Synopsis

float8 ST_Rotation(raster rast);

描述

返回栅格以弧度为单位的均匀旋转。如果栅格没有均匀旋转,则返回NaN。参考 世界文件 了解更多详细信息。

示例

SELECT rid, ST_Rotation(ST_SetScale(ST_SetSkew(rast, sqrt(2)), sqrt(2))) as rot FROM dummy_rast;

 rid |        rot
-----+-------------------
   1 | 0.785398163397448
   2 | 0.785398163397448
                

Name

ST_SkewX — 返回地理参考X倾斜(或旋转参数)。

Synopsis

float8 ST_SkewX(raster rast);

描述

返回地理参考X倾斜(或旋转参数)。参考 世界文件 了解更多详细信息。

示例

SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast;

 rid | skewx | skewy |       georef
-----+-------+-------+--------------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000
                     :
   2 |     0 |     0 | 0.0500000000
                     : 0.0000000000
                     : 0.0000000000
                     : -0.0500000000
                     : 3427927.7500000000
                     : 5793244.0000000000
                

Name

ST_SkewY — 返回地理参考Y倾斜(或旋转参数)。

Synopsis

float8 ST_SkewY(raster rast);

描述

返回地理参考Y倾斜(或旋转参数)。参考 世界文件 了解更多详细信息。

示例

SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast;

 rid | skewx | skewy |       georef
-----+-------+-------+--------------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000
                     :
   2 |     0 |     0 | 0.0500000000
                     : 0.0000000000
                     : 0.0000000000
                     : -0.0500000000
                     : 3427927.7500000000
                     : 5793244.0000000000
                

Name

ST_SRID — 返回在SPATIAL_REF_SYS表中定义的栅格的空间参考标识符。

Synopsis

integer ST_SRID(raster rast);

描述

返回在space_ref_sys表中定义的栅格对象的空间参考标识符。

[Note]

从PostGIS 2.0+开始,非地理参考栅格/几何图形的sRID为0,而不是之前的-1。

示例

SELECT ST_SRID(rast) As srid
FROM dummy_rast WHERE rid=1;

srid
----------------
0
                

Name

ST_Summary — 返回栅格内容的文本摘要。

Synopsis

text ST_Summary(raster rast);

描述

返回栅格内容的文本摘要。

可用性:2.1.0

示例

SELECT ST_Summary(
    ST_AddBand(
        ST_AddBand(
            ST_AddBand(
                ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0)
                , 1, '8BUI', 1, 0
            )
            , 2, '32BF', 0, -9999
        )
        , 3, '16BSI', 0, NULL
    )
);

                            st_summary
------------------------------------------------------------------
 Raster of 10x10 pixels has 3 bands and extent of BOX(0 -10,10 0)+
     band 1 of pixtype 8BUI is in-db with NODATA value of 0      +
     band 2 of pixtype 32BF is in-db with NODATA value of -9999  +
     band 3 of pixtype 16BSI is in-db with no NODATA value
(1 row)
                

Name

ST_UpperLeftX — 返回投影空间参考中栅格的左上角X坐标。

Synopsis

float8 ST_UpperLeftX(raster rast);

描述

返回投影空间参考中栅格的左上角X坐标。

示例

SELECt rid, ST_UpperLeftX(rast) As ulx
FROM dummy_rast;

 rid |    ulx
-----+------------
   1 |        0.5
   2 | 3427927.75
                

Name

ST_UpperLeftY — 返回投影空间参考中栅格的左上角Y坐标。

Synopsis

float8 ST_UpperLeftY(raster rast);

描述

返回投影空间参考中栅格的左上角Y坐标。

示例

SELECT rid, ST_UpperLeftY(rast) As uly
FROM dummy_rast;

 rid |   uly
-----+---------
   1 |     0.5
   2 | 5793244
                

Name

ST_Width — 返回以像素为单位的栅格宽度。

Synopsis

integer ST_Width(raster rast);

描述

返回以像素为单位的栅格宽度。

示例

SELECT ST_Width(rast) As rastwidth
FROM dummy_rast WHERE rid=1;

rastwidth
----------------
10
                

另请参阅

ST_Height


Name

ST_WorldToRasterCoord — 在给定几何X和Y(经度和纬度)或以栅格的空间参考坐标系表示的点几何图形的情况下,将左上角返回为列和行。

Synopsis

record ST_WorldToRasterCoord(raster rast, geometry pt);

record ST_WorldToRasterCoord(raster rast, double precision longitude, double precision latitude);

描述

在给定几何X和Y(经度和纬度)或点几何图形的情况下,将左上角作为列和行返回。无论几何X和Y几何图形或点几何图形是否在栅格范围之外,此函数都有效。几何X和Y必须在栅格的空间参考坐标系中表示。

可用性:2.1.0

示例

SELECT
    rid,
    (ST_WorldToRasterCoord(rast,3427927.8,20.5)).*,
    (ST_WorldToRasterCoord(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast)))).*
FROM dummy_rast;

 rid | columnx |   rowy    | columnx |   rowy
-----+---------+-----------+---------+-----------
   1 | 1713964 |         7 | 1713964 |         7
   2 |       2 | 115864471 |       2 | 115864471
                

Name

ST_WorldToRasterCoordX — 返回点几何图形的栅格中的列(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。

Synopsis

integer ST_WorldToRasterCoordX(raster rast, geometry pt);

integer ST_WorldToRasterCoordX(raster rast, double precision xw);

integer ST_WorldToRasterCoordX(raster rast, double precision xw, double precision yw);

描述

返回点几何图形的栅格中的列(Pt)或X和Y世界坐标(xw,yw)。点,或(如果栅格倾斜,则需要xw和yw世界坐标)。如果栅格没有倾斜,那么XW就足够了。世界坐标位于栅格的空间参考坐标系中。

已更改:2.1.0在以前的版本中,这称为ST_World2RasterCoordX

示例

SELECT rid, ST_WorldToRasterCoordX(rast,3427927.8) As xcoord,
        ST_WorldToRasterCoordX(rast,3427927.8,20.5) As xcoord_xwyw,
        ST_WorldToRasterCoordX(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast))) As ptxcoord
FROM dummy_rast;

 rid | xcoord  |  xcoord_xwyw   | ptxcoord
-----+---------+---------+----------
   1 | 1713964 | 1713964 |  1713964
   2 |       1 |       1 |        1
                

Name

ST_WorldToRasterCoordY — 返回点几何图形的栅格中的行(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。

Synopsis

integer ST_WorldToRasterCoordY(raster rast, geometry pt);

integer ST_WorldToRasterCoordY(raster rast, double precision xw);

integer ST_WorldToRasterCoordY(raster rast, double precision xw, double precision yw);

描述

返回点几何图形的栅格中的行(Pt)或X和Y世界坐标(xw,yw)。点,或(如果栅格倾斜,则需要xw和yw世界坐标)。如果栅格没有倾斜,那么XW就足够了。世界坐标位于栅格的空间参考坐标系中。

已更改:2.1.0在以前的版本中,这称为ST_World2RasterCoordY

示例

SELECT rid, ST_WorldToRasterCoordY(rast,20.5) As ycoord,
        ST_WorldToRasterCoordY(rast,3427927.8,20.5) As ycoord_xwyw,
        ST_WorldToRasterCoordY(rast,ST_GeomFromText('POINT(3427927.8 20.5)',ST_SRID(rast))) As ptycoord
FROM dummy_rast;

 rid |  ycoord   | ycoord_xwyw | ptycoord
-----+-----------+-------------+-----------
   1 |         7 |           7 |         7
   2 | 115864471 |   115864471 | 115864471
                

12.5. 栅格波段访问器

ST_BandMetaData — 返回特定栅格波段的基本元数据。如果未指定,则假定波段编号为1。
ST_BandNoDataValue — 返回给定区段中表示无数据的值。如果没有频带数,则假定为1。
ST_BandIsNoData — 如果带区仅填充无数据值,则返回TRUE。
ST_BandPath — 返回存储在文件系统中的带的系统文件路径。如果未指定带宽,则假定为1。
ST_BandFileSize — 返回存储在文件系统中的带的文件大小。如果未指定带宽,则假定为1。
ST_BandFileTimestamp — 返回存储在文件系统中的带的文件时间戳。如果未指定带宽,则假定为1。
ST_BandPixelType — 返回给定波段的像素类型。如果未指定带宽,则假定为1。
ST_MinPossibleValue — 返回此像素类型可以存储的最小值。
ST_HasNoBand — 如果不存在具有给定波段编号的波段,则返回TRUE。如果未指定波段编号,则假定波段编号为1。

Name

ST_BandMetaData — 返回特定栅格波段的基本元数据。如果未指定,则假定波段编号为1。

Synopsis

(1) record ST_BandMetaData(raster rast, integer band=1);

(2) record ST_BandMetaData(raster rast, integer[] band);

描述

返回有关栅格标注栏的基本元数据。返回的列:象素类型、nodatavalue、isoutdb、路径、outdbband num、文件大小、文件时间戳。

[Note]

如果栅格不包含波段,则会引发错误。

[Note]

如果BAND没有NODATA值,则nodatavue为空。

[Note]

如果isoutdb为FALSE,则路径、outDBband num、文件大小和文件时间戳为空。如果禁用outdb访问,则文件大小和文件时间戳也将为空。

增强版:2.5.0以包括 输出数据库带宽 文件大小 文件时间戳 用于outdb栅格。

示例:变体1

SELECT
    rid,
    (foo.md).*
FROM (
    SELECT
        rid,
        ST_BandMetaData(rast, 1) AS md
    FROM dummy_rast
    WHERE rid=2
) As foo;

 rid | pixeltype | nodatavalue | isoutdb | path | outdbbandnum
-----+-----------+---- --------+---------+------+--------------
   2 | 8BUI      |           0 | f       |      |
                

示例:变体2

WITH foo AS (
    SELECT
        ST_AddBand(NULL::raster, '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif', NULL::int[]) AS rast
)
SELECT
    *
FROM ST_BandMetadata(
    (SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
);

 bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                      | outdbbandnum  | filesize | filetimestamp |
---------+-----------+-------------+---------+--------------------------------------------------------------------------------+---------------+----------+---------------+-
       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            1  |    12345 |    1521807257 |
       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            3  |    12345 |    1521807257 |
       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif      |            2  |    12345 |    1521807257 |
                

Name

ST_BandNoDataValue — 返回给定区段中表示无数据的值。如果没有频带数,则假定为1。

Synopsis

double precision ST_BandNoDataValue(raster rast, integer bandnum=1);

描述

返回表示波段无数据的值

示例

SELECT ST_BandNoDataValue(rast,1) As bnval1,
    ST_BandNoDataValue(rast,2) As bnval2, ST_BandNoDataValue(rast,3) As bnval3
FROM dummy_rast
WHERE rid = 2;

 bnval1 | bnval2 | bnval3
--------+--------+--------
      0 |      0 |      0
                

另请参阅

ST_NumBands


Name

ST_BandIsNoData — 如果带区仅填充无数据值,则返回TRUE。

Synopsis

boolean ST_BandIsNoData(raster rast, integer band, boolean forceChecking=true);

boolean ST_BandIsNoData(raster rast, boolean forceChecking=true);

描述

如果带区仅填充无数据值,则返回TRUE。如果未指定,则假定为带1。如果最后一个参数为真,则逐个像素检查整个波段。否则,该函数只返回频带的isnodata标志的值。如果未指定,则此参数的默认值为FALSE。

可用性:2.0.0

[Note]

如果标志是脏的(即,使用TRUE作为最后一个参数和不使用它的结果不同),您应该更新栅格以将此标志设置为TRUE,方法是使用ST_SetBandIsNodata()或ST_SetBandNodataValue(),并将TRUE作为最后一个参数。看见 ST_SetBandIsNoData

示例

-- Create dummy table with one raster column
create table dummy_rast (rid integer, rast raster);

-- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3.
-- In the second band, nodatavalue = 13, pixel value = 4
insert into dummy_rast values(1,
(
'01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0200' -- nBands (uint16 0)
||
'17263529ED684A3F' -- scaleX (float64 0.000805965234044584)
||
'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458)
||
'1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098)
||
'718F0E9A27A44840' -- ipY (float64 49.2824585505576)
||
'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707)
||
'7550EB853EC32B3F' -- skewY (float64 0.000211812383858704)
||
'E6100000' -- SRID (int32 4326)
||
'0100' -- width (uint16 1)
||
'0100' -- height (uint16 1)
||
'6' -- hasnodatavalue and isnodata value set to true.
||
'2' -- first band type (4BUI)
||
'03' -- novalue==3
||
'03' -- pixel(0,0)==3 (same that nodata)
||
'0' -- hasnodatavalue set to false
||
'5' -- second band type (16BSI)
||
'0D00' -- novalue==13
||
'0400' -- pixel(0,0)==4
)::raster
);

select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected true
select st_bandisnodata(rast, 2) from dummy_rast where rid = 1; -- Expected false
            

Name

ST_BandPath — 返回存储在文件系统中的带的系统文件路径。如果未指定带宽,则假定为1。

Synopsis

text ST_BandPath(raster rast, integer bandnum=1);

描述

将系统文件路径返回到区段。如果使用数据库内频段调用,则引发错误。

示例

                    

另请参阅


Name

ST_BandFileSize — 返回存储在文件系统中的带的文件大小。如果未指定带宽,则假定为1。

Synopsis

bigint ST_BandFileSize(raster rast, integer bandnum=1);

描述

返回存储在文件系统中的区段的文件大小。如果使用数据库内频段调用,或如果未启用outdb访问,则引发错误。

此函数通常与ST_BandPath()和ST_BandFileTimestamp()结合使用,因此客户端可以确定它看到的outdb栅格的文件名是否与服务器看到的相同。

可用性:2.5.0

示例

SELECT ST_BandFileSize(rast,1) FROM dummy_rast WHERE rid = 1;

 st_bandfilesize
-----------------
          240574
                

Name

ST_BandFileTimestamp — 返回存储在文件系统中的带的文件时间戳。如果未指定带宽,则假定为1。

Synopsis

bigint ST_BandFileTimestamp(raster rast, integer bandnum=1);

描述

返回文件系统中存储的区段的文件时间戳(自1970年1月1日00:00:00 UTC以来的秒数)。如果使用数据库内频段调用,或如果未启用outdb访问,则引发错误。

此函数通常与ST_BandPath()和ST_BandFileSize()结合使用,因此客户端可以确定它看到的outdb栅格的文件名是否与服务器看到的相同。

可用性:2.5.0

示例

SELECT ST_BandFileTimestamp(rast,1) FROM dummy_rast WHERE rid = 1;

 st_bandfiletimestamp
----------------------
           1521807257
                

Name

ST_BandPixelType — 返回给定波段的像素类型。如果未指定带宽,则假定为1。

Synopsis

text ST_BandPixelType(raster rast, integer bandnum=1);

描述

返回描述存储在给定波段的每个单元格中的值的数据类型和大小的名称。

有11种像素类型。支持的像素类型如下:

  • 1BB-1位布尔值

  • 2BUI-2位无符号整数

  • 4BUI-4位无符号整数

  • 8BSI-8位带符号整数

  • 8BUI-8位无符号整数

  • 16BSI-16位带符号整数

  • 16BUI-16位无符号整数

  • 32BSI-32位带符号整数

  • 32BUI-32位无符号整数

  • 32BF-32位浮点

  • 64BF-64位浮点

示例

SELECT ST_BandPixelType(rast,1) As btype1,
    ST_BandPixelType(rast,2) As btype2, ST_BandPixelType(rast,3) As btype3
FROM dummy_rast
WHERE rid = 2;

 btype1 | btype2 | btype3
--------+--------+--------
 8BUI   | 8BUI   | 8BUI
                

另请参阅

ST_NumBands


Name

ST_MinPossibleValue — 返回此像素类型可以存储的最小值。

Synopsis

integer ST_MinPossibleValue(text pixeltype);

描述

返回此像素类型可以存储的最小值。

示例

SELECT ST_MinPossibleValue('16BSI');

 st_minpossiblevalue
---------------------
              -32768


SELECT ST_MinPossibleValue('8BUI');

 st_minpossiblevalue
---------------------
                   0
                

另请参阅

ST_BandPixelType


Name

ST_HasNoBand — 如果不存在具有给定波段编号的波段,则返回TRUE。如果未指定波段编号,则假定波段编号为1。

Synopsis

boolean ST_HasNoBand(raster rast, integer bandnum=1);

描述

如果不存在具有给定波段编号的波段,则返回TRUE。如果未指定波段编号,则假定波段编号为1。

可用性:2.0.0

示例

SELECT rid, ST_HasNoBand(rast) As hb1, ST_HasNoBand(rast,2) as hb2,
ST_HasNoBand(rast,4) as hb4, ST_NumBands(rast) As numbands
FROM dummy_rast;

rid | hb1 | hb2 | hb4 | numbands
-----+-----+-----+-----+----------
1 | t   | t   | t   |        0
2 | f   | f   | t   |        3
            

另请参阅

ST_NumBands

12.6. 栅格像素访问器和设置器

ST_PixelAsPolygon — 返回限定特定行和列的像素的多边形几何图形。
ST_PixelAsPolygons — 返回限定栅格带的每个像素的多边形几何图形,以及每个像素的值、X和Y栅格坐标。
ST_PixelAsPoint — 返回像素左上角的点几何图形。
ST_PixelAsPoints — 返回栅格波段的每个像素的点几何图形以及每个像素的值、X和Y栅格坐标。点几何图形的坐标位于像素的左上角。
ST_PixelAsCentroid — 返回像素表示的区域的质心(点几何图形)。
ST_PixelAsCentroids — 返回栅格标注栏的每个像素的质心(点几何图形)以及每个像素的值、X和Y栅格坐标。点几何图形是由像素表示的区域的质心。
ST_Value — 返回给定列x、行像素或特定几何点处的给定带区的值。波段编号从1开始,如果未指定,则假定为1。如果 exclude_nodata_value 设置为False,则所有像素都包括 无数据 像素被视为相交并返回值。如果 exclude_nodata_value 不传入,然后从栅格元数据中读取它。
ST_NearestValue — 返回最接近的非 NODATA 由Columnx和Rowy或在与栅格相同的空间参考坐标系中表示的几何点指定的给定波段的像素值。
ST_SetZ — 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。
ST_SetM — 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。
ST_Neighborhood — 对象的二维双精度数组。 NODATA 由ColumnX和Rowy指定的给定波段像素周围的值,或在与栅格相同的空间参考坐标系中表示的几何点。
ST_SetValue — 返回因设置给定列x、行像素或与特定几何图形相交的像素中的给定波段的值而修改的栅格。波段编号从1开始,如果未指定,则假定为1。
ST_SetValues — 返回通过设置给定波段的值而修改的栅格。
ST_DumpValues — 以二维数组的形式获取指定波段的值。
ST_PixelOfValue — 获取其值等于搜索值的像素的Columnx,Rowy坐标。

Name

ST_PixelAsPolygon — 返回限定特定行和列的像素的多边形几何图形。

Synopsis

geometry ST_PixelAsPolygon(raster rast, integer columnx, integer rowy);

描述

返回限定特定行和列的像素的多边形几何图形。

可用性:2.0.0

示例

-- get raster pixel polygon
SELECT i,j, ST_AsText(ST_PixelAsPolygon(foo.rast, i,j)) As b1pgeom
FROM dummy_rast As foo
    CROSS JOIN generate_series(1,2) As i
    CROSS JOIN generate_series(1,1) As j
WHERE rid=2;

 i | j |                                                    b1pgeom
---+---+-----------------------------------------------------------------------------
 1 | 1 | POLYGON((3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.95,...
 2 | 1 | POLYGON((3427927.8 5793244,3427927.85 5793244,3427927.85 5793243.95, ..
  

Name

ST_PixelAsPolygons — 返回限定栅格带的每个像素的多边形几何图形,以及每个像素的值、X和Y栅格坐标。

Synopsis

setof record ST_PixelAsPolygons(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

描述

返回限定栅格波段的每个像素的多边形几何图形以及每个像素的值(双精度)、X和Y栅格坐标(整数)。

Return record format: geom 几何体 , val double precision, x integer, y integers.

[Note]

什么时候 exclude_nodata_value =TRUE,则只返回其值不是NODATA的那些像素作为点。

[Note]

ST_PixelAsPolygons为每个像素返回一个多边形几何体。这与ST_DumpAsPolygons不同,在ST_DumpAsPolygons中,每个几何体表示一个或多个具有相同像素值的像素。

可用性:2.0.0

增强:2.1.0添加了可选参数EXCLUDE_NODATA_VALUE。

已更改:2.1.1更改了EXCLUDE_NODATA_VALUE的行为。

示例

-- get raster pixel polygon
SELECT (gv).x, (gv).y, (gv).val, ST_AsText((gv).geom) geom
FROM (SELECT ST_PixelAsPolygons(
                 ST_SetValue(ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.001, -0.001, 0.001, 0.001, 4269),
                                                    '8BUI'::text, 1, 0),
                                         2, 2, 10),
                             1, 1, NULL)
) gv
) foo;

 x | y | val |                geom
---+---+-----------------------------------------------------------------------------
 1 | 1 |     | POLYGON((0 0,0.001 0.001,0.002 0,0.001 -0.001,0 0))
 1 | 2 |   1 | POLYGON((0.001 -0.001,0.002 0,0.003 -0.001,0.002 -0.002,0.001 -0.001))
 2 | 1 |   1 | POLYGON((0.001 0.001,0.002 0.002,0.003 0.001,0.002 0,0.001 0.001))
 2 | 2 |  10 | POLYGON((0.002 0,0.003 0.001,0.004 0,0.003 -0.001,0.002 0))
  

Name

ST_PixelAsPoint — 返回像素左上角的点几何图形。

Synopsis

geometry ST_PixelAsPoint(raster rast, integer columnx, integer rowy);

描述

返回像素左上角的点几何图形。

可用性:2.1.0

示例

SELECT ST_AsText(ST_PixelAsPoint(rast, 1, 1)) FROM dummy_rast WHERE rid = 1;

   st_astext
----------------
 POINT(0.5 0.5)
                

Name

ST_PixelAsPoints — 返回栅格波段的每个像素的点几何图形以及每个像素的值、X和Y栅格坐标。点几何图形的坐标位于像素的左上角。

Synopsis

setof record ST_PixelAsPoints(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

描述

返回栅格波段的每个像素的点几何图形以及每个像素的值、X和Y栅格坐标。点几何图形的坐标位于像素的左上角。

Return record format: geom 几何体 , val double precision, x integer, y integers.

[Note]

什么时候 exclude_nodata_value =TRUE,则只返回其值不是NODATA的那些像素作为点。

可用性:2.1.0

已更改:2.1.1更改了EXCLUDE_NODATA_VALUE的行为。

示例

SELECT x, y, val, ST_AsText(geom) FROM (SELECT (ST_PixelAsPoints(rast, 1)).* FROM dummy_rast WHERE rid = 2) foo;

 x | y | val |          st_astext
---+---+-----+------------------------------
 1 | 1 | 253 | POINT(3427927.75 5793244)
 2 | 1 | 254 | POINT(3427927.8 5793244)
 3 | 1 | 253 | POINT(3427927.85 5793244)
 4 | 1 | 254 | POINT(3427927.9 5793244)
 5 | 1 | 254 | POINT(3427927.95 5793244)
 1 | 2 | 253 | POINT(3427927.75 5793243.95)
 2 | 2 | 254 | POINT(3427927.8 5793243.95)
 3 | 2 | 254 | POINT(3427927.85 5793243.95)
 4 | 2 | 253 | POINT(3427927.9 5793243.95)
 5 | 2 | 249 | POINT(3427927.95 5793243.95)
 1 | 3 | 250 | POINT(3427927.75 5793243.9)
 2 | 3 | 254 | POINT(3427927.8 5793243.9)
 3 | 3 | 254 | POINT(3427927.85 5793243.9)
 4 | 3 | 252 | POINT(3427927.9 5793243.9)
 5 | 3 | 249 | POINT(3427927.95 5793243.9)
 1 | 4 | 251 | POINT(3427927.75 5793243.85)
 2 | 4 | 253 | POINT(3427927.8 5793243.85)
 3 | 4 | 254 | POINT(3427927.85 5793243.85)
 4 | 4 | 254 | POINT(3427927.9 5793243.85)
 5 | 4 | 253 | POINT(3427927.95 5793243.85)
 1 | 5 | 252 | POINT(3427927.75 5793243.8)
 2 | 5 | 250 | POINT(3427927.8 5793243.8)
 3 | 5 | 254 | POINT(3427927.85 5793243.8)
 4 | 5 | 254 | POINT(3427927.9 5793243.8)
 5 | 5 | 254 | POINT(3427927.95 5793243.8)
                

Name

ST_PixelAsCentroid — 返回像素表示的区域的质心(点几何图形)。

Synopsis

geometry ST_PixelAsCentroid(raster rast, integer x, integer y);

描述

返回像素表示的区域的质心(点几何图形)。

增强:现在在C语言中实现的速度提高了3.2.0。

可用性:2.1.0

示例

SELECT ST_AsText(ST_PixelAsCentroid(rast, 1, 1)) FROM dummy_rast WHERE rid = 1;

  st_astext
--------------
 POINT(1.5 2)
                

Name

ST_PixelAsCentroids — 返回栅格标注栏的每个像素的质心(点几何图形)以及每个像素的值、X和Y栅格坐标。点几何图形是由像素表示的区域的质心。

Synopsis

setof record ST_PixelAsCentroids(raster rast, integer band=1, boolean exclude_nodata_value=TRUE);

描述

返回栅格标注栏的每个像素的质心(点几何图形)以及每个像素的值、X和Y栅格坐标。点几何图形是由像素表示的区域的质心。

Return record format: geom 几何体 , val double precision, x integer, y integers.

[Note]

什么时候 exclude_nodata_value =TRUE,则只返回其值不是NODATA的那些像素作为点。

增强:现在在C语言中实现的速度提高了3.2.0。

已更改:2.1.1更改了EXCLUDE_NODATA_VALUE的行为。

可用性:2.1.0

示例

--LATERAL syntax requires PostgreSQL 9.3+
SELECT x, y, val, ST_AsText(geom)
    FROM (SELECT dp.* FROM dummy_rast, LATERAL ST_PixelAsCentroids(rast, 1) AS dp WHERE rid = 2) foo;
 x | y | val |           st_astext
---+---+-----+--------------------------------
 1 | 1 | 253 | POINT(3427927.775 5793243.975)
 2 | 1 | 254 | POINT(3427927.825 5793243.975)
 3 | 1 | 253 | POINT(3427927.875 5793243.975)
 4 | 1 | 254 | POINT(3427927.925 5793243.975)
 5 | 1 | 254 | POINT(3427927.975 5793243.975)
 1 | 2 | 253 | POINT(3427927.775 5793243.925)
 2 | 2 | 254 | POINT(3427927.825 5793243.925)
 3 | 2 | 254 | POINT(3427927.875 5793243.925)
 4 | 2 | 253 | POINT(3427927.925 5793243.925)
 5 | 2 | 249 | POINT(3427927.975 5793243.925)
 1 | 3 | 250 | POINT(3427927.775 5793243.875)
 2 | 3 | 254 | POINT(3427927.825 5793243.875)
 3 | 3 | 254 | POINT(3427927.875 5793243.875)
 4 | 3 | 252 | POINT(3427927.925 5793243.875)
 5 | 3 | 249 | POINT(3427927.975 5793243.875)
 1 | 4 | 251 | POINT(3427927.775 5793243.825)
 2 | 4 | 253 | POINT(3427927.825 5793243.825)
 3 | 4 | 254 | POINT(3427927.875 5793243.825)
 4 | 4 | 254 | POINT(3427927.925 5793243.825)
 5 | 4 | 253 | POINT(3427927.975 5793243.825)
 1 | 5 | 252 | POINT(3427927.775 5793243.775)
 2 | 5 | 250 | POINT(3427927.825 5793243.775)
 3 | 5 | 254 | POINT(3427927.875 5793243.775)
 4 | 5 | 254 | POINT(3427927.925 5793243.775)
 5 | 5 | 254 | POINT(3427927.975 5793243.775)
                

Name

ST_Value — 返回给定列x、行像素或特定几何点处的给定带区的值。波段编号从1开始,如果未指定,则假定为1。如果 exclude_nodata_value 设置为False,则所有像素都包括 无数据 像素被视为相交并返回值。如果 exclude_nodata_value 不传入,然后从栅格元数据中读取它。

Synopsis

double precision ST_Value(raster rast, geometry pt, boolean exclude_nodata_value=true);

double precision ST_Value(raster rast, integer band, geometry pt, boolean exclude_nodata_value=true, text resample='nearest');

double precision ST_Value(raster rast, integer x, integer y, boolean exclude_nodata_value=true);

double precision ST_Value(raster rast, integer band, integer x, integer y, boolean exclude_nodata_value=true);

描述

返回给定列x、行像素或给定几何点处的给定波段的值。波段编号从1开始,如果未指定,则假定波段为1。

如果 exclude_nodata_value 设置为True,则仅为None 无数据 像素被考虑在内。如果 exclude_nodata_value 设置为False,则考虑所有像素。

属性的允许值 重采样 参数是“NEAREST”,它执行默认的最近邻重采样,而“BILLINE”则执行 双线性插值法 估计像素中心之间的值。

增强:添加了3.2.0重采样可选参数。

增强:2.0.0添加了EXCLUDE_NODATA_VALUE可选参数。

示例

-- get raster values at particular postgis geometry points
-- the srid of your geometry should be same as for your raster
SELECT rid, ST_Value(rast, foo.pt_geom) As b1pval, ST_Value(rast, 2, foo.pt_geom) As b2pval
FROM dummy_rast CROSS JOIN (SELECT ST_SetSRID(ST_Point(3427927.77, 5793243.76), 0) As pt_geom) As foo
WHERE rid=2;

 rid | b1pval | b2pval
-----+--------+--------
   2 |    252 |     79


-- general fictitious example using a real table
SELECT rid, ST_Value(rast, 3, sometable.geom) As b3pval
FROM sometable
WHERE ST_Intersects(rast,sometable.geom);
                
SELECT rid, ST_Value(rast, 1, 1, 1) As b1pval,
    ST_Value(rast, 2, 1, 1) As b2pval, ST_Value(rast, 3, 1, 1) As b3pval
FROM dummy_rast
WHERE rid=2;

 rid | b1pval | b2pval | b3pval
-----+--------+--------+--------
   2 |    253 |     78 |     70
                
--- Get all values in bands 1,2,3 of each pixel --
SELECT x, y, ST_Value(rast, 1, x, y) As b1val,
    ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val
FROM dummy_rast CROSS JOIN
generate_series(1, 1000) As x CROSS JOIN generate_series(1, 1000) As y
WHERE rid =  2 AND x <= ST_Width(rast) AND y <= ST_Height(rast);

 x | y | b1val | b2val | b3val
---+---+-------+-------+-------
 1 | 1 |   253 |    78 |    70
 1 | 2 |   253 |    96 |    80
 1 | 3 |   250 |    99 |    90
 1 | 4 |   251 |    89 |    77
 1 | 5 |   252 |    79 |    62
 2 | 1 |   254 |    98 |    86
 2 | 2 |   254 |   118 |   108
 :
 :
                
--- Get all values in bands 1,2,3 of each pixel same as above but returning the upper left point point of each pixel --
SELECT ST_AsText(ST_SetSRID(
    ST_Point(ST_UpperLeftX(rast) + ST_ScaleX(rast)*x,
        ST_UpperLeftY(rast) + ST_ScaleY(rast)*y),
        ST_SRID(rast))) As uplpt
    , ST_Value(rast, 1, x, y) As b1val,
    ST_Value(rast, 2, x, y) As b2val, ST_Value(rast, 3, x, y) As b3val
FROM dummy_rast CROSS JOIN
generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y
WHERE rid =  2 AND x <= ST_Width(rast) AND y <= ST_Height(rast);

            uplpt            | b1val | b2val | b3val
-----------------------------+-------+-------+-------
 POINT(3427929.25 5793245.5) |   253 |    78 |    70
 POINT(3427929.25 5793247)   |   253 |    96 |    80
 POINT(3427929.25 5793248.5) |   250 |    99 |    90
:
                
--- Get a polygon formed by union of all pixels
    that fall in a particular value range and intersect particular polygon --
SELECT ST_AsText(ST_Union(pixpolyg)) As shadow
FROM (SELECT ST_Translate(ST_MakeEnvelope(
        ST_UpperLeftX(rast), ST_UpperLeftY(rast),
            ST_UpperLeftX(rast) + ST_ScaleX(rast),
            ST_UpperLeftY(rast) + ST_ScaleY(rast), 0
            ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y
        ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val
    FROM dummy_rast CROSS JOIN
generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y
WHERE rid =  2
    AND x <= ST_Width(rast) AND y <= ST_Height(rast)) As foo
WHERE
    ST_Intersects(
        pixpolyg,
        ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)
        ) AND b2val != 254;


        shadow
------------------------------------------------------------------------------------
 MULTIPOLYGON(((3427928 5793243.9,3427928 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9,
 3427927.95 5793243.95,3427928 5793243.95,3427928.05 5793243.95,3427928.05 5793243.9,3427928 5793243.9)),((3427927.95 5793243.9,3427927.95 579324
3.85,3427927.9 5793243.85,3427927.85 5793243.85,3427927.85 5793243.9,3427927.9 5793243.9,3427927.9 5793243.95,
3427927.95 5793243.95,3427927.95 5793243.9)),((3427927.85 5793243.75,3427927.85 5793243.7,3427927.8 5793243.7,3427927.8 5793243.75
,3427927.8 5793243.8,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75)),
((3427928.05 5793243.75,3427928.05 5793243.7,3427928 5793243.7,3427927.95 5793243.7,3427927.95 5793243.75,3427927.95 5793243.8,3427
927.95 5793243.85,3427928 5793243.85,3427928 5793243.8,3427928.05 5793243.8,
3427928.05 5793243.75)),((3427927.95 5793243.75,3427927.95 5793243.7,3427927.9 5793243.7,3427927.85 5793243.7,
3427927.85 5793243.75,3427927.85 5793243.8,3427927.85 5793243.85,3427927.9 5793243.85,
3427927.95 5793243.85,3427927.95 5793243.8,3427927.95 5793243.75)))
                
--- Checking all the pixels of a large raster tile can take a long time.
--- You can dramatically improve speed at some lose of precision by orders of magnitude
--  by sampling pixels using the step optional parameter of generate_series.
--  This next example does the same as previous but by checking 1 for every 4 (2x2) pixels and putting in the last checked
--  putting in the checked pixel as the value for subsequent 4

SELECT ST_AsText(ST_Union(pixpolyg)) As shadow
FROM (SELECT ST_Translate(ST_MakeEnvelope(
        ST_UpperLeftX(rast), ST_UpperLeftY(rast),
            ST_UpperLeftX(rast) + ST_ScaleX(rast)*2,
            ST_UpperLeftY(rast) + ST_ScaleY(rast)*2, 0
            ), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y
        ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val
    FROM dummy_rast CROSS JOIN
generate_series(1,1000,2) As x CROSS JOIN generate_series(1,1000,2) As y
WHERE rid =  2
    AND x <= ST_Width(rast)  AND y <= ST_Height(rast)  ) As foo
WHERE
    ST_Intersects(
        pixpolyg,
        ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)
        ) AND b2val != 254;

        shadow
------------------------------------------------------------------------------------
 MULTIPOLYGON(((3427927.9 5793243.85,3427927.8 5793243.85,3427927.8 5793243.95,
 3427927.9 5793243.95,3427928 5793243.95,3427928.1 5793243.95,3427928.1 5793243.85,3427928 5793243.85,3427927.9 5793243.85)),
 ((3427927.9 5793243.65,3427927.8 5793243.65,3427927.8 5793243.75,3427927.8 5793243.85,3427927.9 5793243.85,
 3427928 5793243.85,3427928 5793243.75,3427928.1 5793243.75,3427928.1 5793243.65,3427928 5793243.65,3427927.9 5793243.65)))
                

Name

ST_NearestValue — 返回最接近的非 NODATA 由Columnx和Rowy或在与栅格相同的空间参考坐标系中表示的几何点指定的给定波段的像素值。

Synopsis

double precision ST_NearestValue(raster rast, integer bandnum, geometry pt, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, geometry pt, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, integer bandnum, integer columnx, integer rowy, boolean exclude_nodata_value=true);

double precision ST_NearestValue(raster rast, integer columnx, integer rowy, boolean exclude_nodata_value=true);

描述

返回最接近的非 NODATA 给定列X、行像素或特定几何点处的给定带值。如果列x、行像素或指定几何点处的像素为 NODATA ,则该函数将查找与其值不是的列x、行像素或几何点最近的像素 NODATA

频段编号从1开始,并且 频带 如果未指定,则假定为1。如果 exclude_nodata_value 设置为False,则所有像素都包括 无数据 像素被视为相交并返回值。如果 exclude_nodata_value 不传入,然后从栅格元数据中读取它。

可用性:2.1.0

[Note]

ST_NearestValue是ST_Value的临时替代。

示例

-- pixel 2x2 has value
SELECT
    ST_Value(rast, 2, 2) AS value,
    ST_NearestValue(rast, 2, 2) AS nearestvalue
FROM (
    SELECT
        ST_SetValue(
            ST_SetValue(
                ST_SetValue(
                    ST_SetValue(
                        ST_SetValue(
                            ST_AddBand(
                                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                '8BUI'::text, 1, 0
                            ),
                            1, 1, 0.
                        ),
                        2, 3, 0.
                    ),
                    3, 5, 0.
                ),
                4, 2, 0.
            ),
            5, 4, 0.
        ) AS rast
) AS foo

 value | nearestvalue
-------+--------------
     1 |            1
                
-- pixel 2x3 is NODATA
SELECT
    ST_Value(rast, 2, 3) AS value,
    ST_NearestValue(rast, 2, 3) AS nearestvalue
FROM (
    SELECT
        ST_SetValue(
            ST_SetValue(
                ST_SetValue(
                    ST_SetValue(
                        ST_SetValue(
                            ST_AddBand(
                                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                '8BUI'::text, 1, 0
                            ),
                            1, 1, 0.
                        ),
                        2, 3, 0.
                    ),
                    3, 5, 0.
                ),
                4, 2, 0.
            ),
            5, 4, 0.
        ) AS rast
) AS foo

 value | nearestvalue
-------+--------------
       |            1
                

Name

ST_SetZ — 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。

Synopsis

geometry ST_SetZ(raster rast, geometry geom, text resample=nearest, integer band=1);

描述

返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。

这个 重采样 参数可设置为“最接近”以复制每个折点所在像元的值,或设置为“双线性”以使用 双线性插值法 以计算也考虑相邻单元格的值。

可用性:3.2.0

示例

--
-- 2x2 test raster with values
--
-- 10 50
-- 40 20
--
WITH test_raster AS (
SELECT
ST_SetValues(
  ST_AddBand(
    ST_MakeEmptyRaster(width => 2, height => 2,
      upperleftx => 0, upperlefty => 2,
      scalex => 1.0, scaley => -1.0,
      skewx => 0, skewy => 0, srid => 4326),
    index => 1, pixeltype => '16BSI',
    initialvalue => 0,
    nodataval => -999),
  1,1,1,
  newvalueset =>ARRAY[ARRAY[10.0::float8, 50.0::float8], ARRAY[40.0::float8, 20.0::float8]]) AS rast
)
SELECT
ST_AsText(
  ST_SetZ(
    rast,
    band => 1,
    geom => 'SRID=4326;LINESTRING(1.0 1.9, 1.0 0.2)'::geometry,
    resample => 'bilinear'
))
FROM test_raster

            st_astext
----------------------------------
 LINESTRING Z (1 1.9 38,1 0.2 27)

另请参阅

ST_Value, ST_SetM


Name

ST_SetM — 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。

Synopsis

geometry ST_SetM(raster rast, geometry geom, text resample=nearest, integer band=1);

描述

返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。

这个 重采样 参数可设置为“最接近”以复制每个折点所在像元的值,或设置为“双线性”以使用 双线性插值法 以计算也考虑相邻单元格的值。

可用性:3.2.0

示例

--
-- 2x2 test raster with values
--
-- 10 50
-- 40 20
--
WITH test_raster AS (
SELECT
ST_SetValues(
  ST_AddBand(
    ST_MakeEmptyRaster(width => 2, height => 2,
      upperleftx => 0, upperlefty => 2,
      scalex => 1.0, scaley => -1.0,
      skewx => 0, skewy => 0, srid => 4326),
    index => 1, pixeltype => '16BSI',
    initialvalue => 0,
    nodataval => -999),
  1,1,1,
  newvalueset =>ARRAY[ARRAY[10.0::float8, 50.0::float8], ARRAY[40.0::float8, 20.0::float8]]) AS rast
)
SELECT
ST_AsText(
  ST_SetM(
    rast,
    band => 1,
    geom => 'SRID=4326;LINESTRING(1.0 1.9, 1.0 0.2)'::geometry,
    resample => 'bilinear'
))
FROM test_raster

            st_astext
----------------------------------
 LINESTRING M (1 1.9 38,1 0.2 27)

另请参阅

ST_Value, ST_SetZ


Name

ST_Neighborhood — 对象的二维双精度数组。 NODATA 由ColumnX和Rowy指定的给定波段像素周围的值,或在与栅格相同的空间参考坐标系中表示的几何点。

Synopsis

double precision[][] ST_Neighborhood(raster rast, integer bandnum, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer columnX, integer rowY, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, integer bandnum, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

double precision[][] ST_Neighborhood(raster rast, geometry pt, integer distanceX, integer distanceY, boolean exclude_nodata_value=true);

描述

对象的二维双精度数组。 NODATA 由ColumnX和Rowy指定的给定波段像素周围的值,或在与栅格相同的空间参考坐标系中表示的几何点。这个 距离X 距离Y 参数定义X和Y轴上指定像素周围的像素数,例如,我希望X轴上的所有值都在3像素距离内,Y轴上的值在感兴趣的像素周围2像素距离内。二维数组的中心值将是由ColumnX和Rowy或几何点指定的像素处的值。

频段编号从1开始,并且 频带 如果未指定,则假定为1。如果 exclude_nodata_value 设置为False,则所有像素都包括 无数据 像素被视为相交并返回值。如果 exclude_nodata_value 不传入,然后从栅格元数据中读取它。

[Note]

沿返回的2-D数组的每个轴的元素数为2*( 距离X | 距离Y )+1。所以对于一个 距离X 距离Y 为1,则返回的数组将为3x3。

[Note]

可以将2-D数组输出传递给任何栅格处理内置函数,例如ST_Min4ma、ST_Sum4ma、ST_Mean4ma。

可用性:2.1.0

示例

-- pixel 2x2 has value
SELECT
    ST_Neighborhood(rast, 2, 2, 1, 1)
FROM (
    SELECT
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo

         st_neighborhood
---------------------------------
{{NULL,1,1},{1,1,1},{1,NULL,1}}
                
-- pixel 2x3 is NODATA
SELECT
    ST_Neighborhood(rast, 2, 3, 1, 1)
FROM (
    SELECT
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast
) AS foo

       st_neighborhood
------------------------------
 {{1,1,1},{1,NULL,1},{1,1,1}}
                
-- pixel 3x3 has value
-- exclude_nodata_value = FALSE
SELECT
    ST_Neighborhood(rast, 3, 3, 1, 1, false)
FROM ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                '8BUI'::text, 1, 0
            ),
            1, 1, 1, ARRAY[
                [0, 1, 1, 1, 1],
                [1, 1, 1, 0, 1],
                [1, 0, 1, 1, 1],
                [1, 1, 1, 1, 0],
                [1, 1, 0, 1, 1]
            ]::double precision[],
            1
        ) AS rast

      st_neighborhood
---------------------------
{{1,1,0},{0,1,1},{1,1,1}}
                

Name

ST_SetValue — 返回因设置给定列x、行像素或与特定几何图形相交的像素中的给定波段的值而修改的栅格。波段编号从1开始,如果未指定,则假定为1。

Synopsis

raster ST_SetValue(raster rast, integer bandnum, geometry geom, double precision newvalue);

raster ST_SetValue(raster rast, geometry geom, double precision newvalue);

raster ST_SetValue(raster rast, integer bandnum, integer columnx, integer rowy, double precision newvalue);

raster ST_SetValue(raster rast, integer columnx, integer rowy, double precision newvalue);

描述

返回修改后的栅格,其结果是在给定栅格的行和列或几何图形的情况下,将指定带区的指定像素值设置为新值。如果未指定波段,则假定为波段1。

增强:ST_SetValue()的2.1.0几何体变体现在支持任何几何体类型,而不仅仅是点。几何变量是ST_SetValues()的geomval[]变量的包装器

示例

-- Geometry example
SELECT (foo.geomval).val, ST_AsText(ST_Union((foo.geomval).geom))
FROM (SELECT ST_DumpAsPolygons(
        ST_SetValue(rast,1,
                ST_Point(3427927.75, 5793243.95),
                50)
            ) As geomval
FROM dummy_rast
where rid = 2) As foo
WHERE (foo.geomval).val < 250
GROUP BY (foo.geomval).val;

 val |                                                     st_astext
-----+-------------------------------------------------------------------
  50 | POLYGON((3427927.75 5793244,3427927.75 5793243.95,3427927.8 579324 ...
 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 57932 ...

                
-- Store the changed raster --
    UPDATE dummy_rast SET rast = ST_SetValue(rast,1, ST_Point(3427927.75, 5793243.95),100)
        WHERE rid = 2   ;

                

Name

ST_SetValues — 返回通过设置给定波段的值而修改的栅格。

Synopsis

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, double precision[][] newvalueset, boolean[][] noset=NULL, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, double precision[][] newvalueset, double precision nosetvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, integer columnx, integer rowy, integer width, integer height, double precision newvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer columnx, integer rowy, integer width, integer height, double precision newvalue, boolean keepnodata=FALSE);

raster ST_SetValues(raster rast, integer nband, geomval[] geomvalset, boolean keepnodata=FALSE);

描述

返回由于将指定的像素设置为指定波段的新值而修改的栅格。 列x 罗伊 是1索引的。

如果 保持数据 为真,则值为NODATA的那些像素不会在 新值集

对于变体1,要设置的特定像素由 列x 罗伊 的像素坐标和尺寸 新值集 数组。 NOSET 可以用来防止值出现在 新值集 从设置(由于PostgreSQL不允许粗糙/交错数组)。请参见示例变体1。

变体2类似于变体1,但具有简单的双精度 NosetValue 而不是布尔值 NOSET 数组。中的元素 新值集 使用 NosetValue 要跳过的值。请参见示例变体2。

对于变体3,要设置的特定像素由 列x 罗伊 像素坐标, 宽度 高度 。请参见示例变体3。

变体4与变体3相同,不同之处在于它假设第一个波段的像素 RAST 都会设置好。

对于变体5,一组 Geomval 用于确定要设置的特定像素。如果数组中的所有几何图形都是点或多点类型,则该函数使用快捷方式,其中每个点的经度和纬度用于直接设置像素。否则,几何体将被转换为栅格,然后在一次遍历中迭代。请参见示例变体5。

可用性:2.1.0

示例:变体1

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 2, 2, ARRAY[[9, 9], [9, 9]]::double precision[][]
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9
                
/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 9 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][]
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   9
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9
                
/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1,
                ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][],
                ARRAY[[false], [true]]::boolean[][]
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   9
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9
                
/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
|   | 1 | 1 |          |   | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 9 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_SetValue(
                ST_AddBand(
                    ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                    1, '8BUI', 1, 0
                ),
                1, 1, 1, NULL
            ),
            1, 1, 1,
                ARRAY[[9, 9, 9], [9, NULL, 9], [9, 9, 9]]::double precision[][],
                ARRAY[[false], [true]]::boolean[][],
                TRUE
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |
 1 | 2 |   1
 1 | 3 |   9
 2 | 1 |   9
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   9
 3 | 2 |   9
 3 | 3 |   9
                

示例:变体2

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[-1, -1, -1], [-1, 9, 9], [-1, 9, 9]]::double precision[][], -1
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9
                
/*
This example is like the previous one.  Instead of nosetvalue = -1, nosetvalue = NULL

The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 1, 1, ARRAY[[NULL, NULL, NULL], [NULL, 9, 9], [NULL, 9, 9]]::double precision[][], NULL::double precision
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9
                

示例:变体3

/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |    =>    | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                1, '8BUI', 1, 0
            ),
            1, 2, 2, 2, 2, 9
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |   9
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9
                
/*
The ST_SetValues() does the following...

+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 1 | 1 |
+ - + - + - +          + - + - + - +
| 1 |   | 1 |    =>    | 1 |   | 9 |
+ - + - + - +          + - + - + - +
| 1 | 1 | 1 |          | 1 | 9 | 9 |
+ - + - + - +          + - + - + - +
*/
SELECT
    (poly).x,
    (poly).y,
    (poly).val
FROM (
SELECT
    ST_PixelAsPolygons(
        ST_SetValues(
            ST_SetValue(
                ST_AddBand(
                    ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0),
                    1, '8BUI', 1, 0
                ),
                1, 2, 2, NULL
            ),
            1, 2, 2, 2, 2, 9, TRUE
        )
    ) AS poly
) foo
ORDER BY 1, 2;

 x | y | val
---+---+-----
 1 | 1 |   1
 1 | 2 |   1
 1 | 3 |   1
 2 | 1 |   1
 2 | 2 |
 2 | 3 |   9
 3 | 1 |   1
 3 | 2 |   9
 3 | 3 |   9
                

示例:变体5

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry
)
SELECT
    rid, gid, ST_DumpValues(ST_SetValue(rast, 1, geom, gid))
FROM foo t1
CROSS JOIN bar t2
ORDER BY rid, gid;

 rid | gid |                                                                st_dumpvalues
-----+-----+---------------------------------------------------------------------------------------------------------------------------------------------
   1 |   1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,1,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   3 | (1,"{{3,3,3,3,3},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{3,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL}}")
   1 |   4 | (1,"{{4,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,4}}")
(4 rows)
                

下图显示阵列中较晚的地理位置可以覆盖之前的地理位置

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry
)
SELECT
    t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[]))
FROM foo t1
CROSS JOIN bar t2
CROSS JOIN bar t3
WHERE t2.gid = 1
    AND t3.gid = 2
ORDER BY t1.rid, t2.gid, t3.gid;

 rid | gid | gid |                                                    st_dumpvalues
-----+-----+-----+---------------------------------------------------------------------------------------------------------------------
   1 |   1 |   2 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)
                

此示例与上一个示例相反

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0) AS rast
), bar AS (
    SELECT 1 AS gid, 'SRID=0;POINT(2.5 -2.5)'::geometry geom UNION ALL
    SELECT 2 AS gid, 'SRID=0;POLYGON((1 -1, 4 -1, 4 -4, 1 -4, 1 -1))'::geometry geom UNION ALL
    SELECT 3 AS gid, 'SRID=0;POLYGON((0 0, 5 0, 5 -1, 1 -1, 1 -4, 0 -4, 0 0))'::geometry geom UNION ALL
    SELECT 4 AS gid, 'SRID=0;MULTIPOINT(0 0, 4 4, 4 -4)'::geometry
)
SELECT
    t1.rid, t2.gid, t3.gid, ST_DumpValues(ST_SetValues(rast, 1, ARRAY[ROW(t2.geom, t2.gid), ROW(t3.geom, t3.gid)]::geomval[]))
FROM foo t1
CROSS JOIN bar t2
CROSS JOIN bar t3
WHERE t2.gid = 2
    AND t3.gid = 1
ORDER BY t1.rid, t2.gid, t3.gid;

 rid | gid | gid |                                                    st_dumpvalues
-----+-----+-----+---------------------------------------------------------------------------------------------------------------------
   1 |   2 |   1 | (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,2,2,2,NULL},{NULL,2,1,2,NULL},{NULL,2,2,2,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)
                

Name

ST_DumpValues — 以二维数组的形式获取指定波段的值。

Synopsis

setof record ST_DumpValues( raster rast , integer[] nband=NULL , boolean exclude_nodata_value=true );

double precision[][] ST_DumpValues( raster rast , integer nband , boolean exclude_nodata_value=true );

描述

以二维数组的形式获取指定波段的值(第一个索引是行,第二个是列)。如果 N带 为空或未提供,则处理所有栅格波段。

可用性:2.1.0

示例

WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI'::text, 1, 0), 2, '32BF'::text, 3, -9999), 3, '16BSI', 0, 0) AS rast
)
SELECT
    (ST_DumpValues(rast)).*
FROM foo;

 nband |                       valarray
-------+------------------------------------------------------
     1 | {{1,1,1},{1,1,1},{1,1,1}}
     2 | {{3,3,3},{3,3,3},{3,3,3}}
     3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
(3 rows)
                
WITH foo AS (
    SELECT ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI'::text, 1, 0), 2, '32BF'::text, 3, -9999), 3, '16BSI', 0, 0) AS rast
)
SELECT
    (ST_DumpValues(rast, ARRAY[3, 1])).*
FROM foo;

 nband |                       valarray
-------+------------------------------------------------------
     3 | {{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
     1 | {{1,1,1},{1,1,1},{1,1,1}}
(2 rows)
                
WITH foo AS (
    SELECT ST_SetValue(ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0), 1, 2, 5) AS rast
)
SELECT
    (ST_DumpValues(rast, 1))[2][1]
FROM foo;

 st_dumpvalues
---------------
             5
(1 row)
                

Name

ST_PixelOfValue — 获取其值等于搜索值的像素的Columnx,Rowy坐标。

Synopsis

setof record ST_PixelOfValue( raster rast , integer nband , double precision[] search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , double precision[] search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , integer nband , double precision search , boolean exclude_nodata_value=true );

setof record ST_PixelOfValue( raster rast , double precision search , boolean exclude_nodata_value=true );

描述

获取其值等于搜索值的像素的列x、行坐标。如果未指定波段,则假定为波段1。

可用性:2.1.0

示例

SELECT
    (pixels).*
FROM (
    SELECT
        ST_PixelOfValue(
            ST_SetValue(
                ST_SetValue(
                    ST_SetValue(
                        ST_SetValue(
                            ST_SetValue(
                                ST_AddBand(
                                    ST_MakeEmptyRaster(5, 5, -2, 2, 1, -1, 0, 0, 0),
                                    '8BUI'::text, 1, 0
                                ),
                                1, 1, 0
                            ),
                            2, 3, 0
                        ),
                        3, 5, 0
                    ),
                    4, 2, 0
                ),
                5, 4, 255
            )
        , 1, ARRAY[1, 255]) AS pixels
) AS foo

 val | x | y
-----+---+---
   1 | 1 | 2
   1 | 1 | 3
   1 | 1 | 4
   1 | 1 | 5
   1 | 2 | 1
   1 | 2 | 2
   1 | 2 | 4
   1 | 2 | 5
   1 | 3 | 1
   1 | 3 | 2
   1 | 3 | 3
   1 | 3 | 4
   1 | 4 | 1
   1 | 4 | 3
   1 | 4 | 4
   1 | 4 | 5
   1 | 5 | 1
   1 | 5 | 2
   1 | 5 | 3
 255 | 5 | 4
   1 | 5 | 5
                

12.7. 栅格编辑器

ST_SetGeoReference — 在单个调用中设置地理参考6个地理参考参数。数字之间应该用空格隔开。接受GDAL或ESRI格式的输入。默认值为GDAL。
ST_SetRotation — 以弧度设置栅格的旋转。
ST_SetScale — 以坐标参考系为单位设置像素的X和Y大小。数字单位/像素宽度/高度。
ST_SetSkew — 设置地理参考X和Y倾斜(或旋转参数)。如果只传入一个,则将X和Y设置为相同的值。
ST_SetSRID — 将栅格的SRID设置为在SPATIAL_REF_SYS表中定义的特定整数sRID。
ST_SetUpperLeft — 将栅格像素左上角的值设置为投影的X和Y坐标。
ST_Resample — 使用指定的重采样算法、新尺寸、任意栅格角以及从其他栅格定义或借用的一组栅格地理参考属性对栅格进行重采样。
ST_Rescale — 通过仅调整其比例(或像素大小)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。
ST_Reskew — 通过仅调整其倾斜(或旋转参数)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。
ST_SnapToGrid — 通过将栅格捕捉到栅格来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor。
ST_Resize — 将栅格大小调整为新的宽度/高度
ST_Transform — 使用指定的重采样算法将已知空间参考系中的栅格重投影到另一个已知空间参考系。选项包括NearestNeighbor、双线性、立方、三次样条、默认为NearestNeighbor的Lanczos。

Name

ST_SetGeoReference — 在单个调用中设置地理参考6个地理参考参数。数字之间应该用空格隔开。接受GDAL或ESRI格式的输入。默认值为GDAL。

Synopsis

raster ST_SetGeoReference(raster rast, text georefcoords, text format=GDAL);

raster ST_SetGeoReference(raster rast, double precision upperleftx, double precision upperlefty, double precision scalex, double precision scaley, double precision skewx, double precision skewy);

描述

一次调用设置地理参考6个地理参考参数。接受‘GDAL’或‘ESRI’格式的输入。默认为GDAL。如果未提供6个坐标,则返回NULL。

格式表示法之间的差异如下:

GDAL

鳞片状倾斜鳞片状上左上角

ESRI

Scalex skewy skewx scaleyupperleftx+scalex*0.5上方+scaley*0.5
[Note]

如果栅格具有Out-db波段,则更改地理参考可能会导致不正确地访问波段的外部存储数据。

增强版:2.1.0新增ST_SetGeoReference(栅格,双精度,...)变异

示例

WITH foo AS (
    SELECT ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0) AS rast
)
SELECT
    0 AS rid, (ST_Metadata(rast)).*
FROM foo
UNION ALL
SELECT
    1, (ST_Metadata(ST_SetGeoReference(rast, '10 0 0 -10 0.1 0.1', 'GDAL'))).*
FROM foo
UNION ALL
SELECT
    2, (ST_Metadata(ST_SetGeoReference(rast, '10 0 0 -10 5.1 -4.9', 'ESRI'))).*
FROM foo
UNION ALL
SELECT
    3, (ST_Metadata(ST_SetGeoReference(rast, 1, 1, 10, -10, 0.001, 0.001))).*
FROM foo

 rid |     upperleftx     |     upperlefty     | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+--------------------+--------------------+-------+--------+--------+--------+-------+-------+------+----------
   0 |                  0 |                  0 |     5 |      5 |      1 |     -1 |     0 |     0 |    0 |        0
   1 |                0.1 |                0.1 |     5 |      5 |     10 |    -10 |     0 |     0 |    0 |        0
   2 | 0.0999999999999996 | 0.0999999999999996 |     5 |      5 |     10 |    -10 |     0 |     0 |    0 |        0
   3 |                  1 |                  1 |     5 |      5 |     10 |    -10 | 0.001 | 0.001 |    0 |        0
                

Name

ST_SetRotation — 以弧度设置栅格的旋转。

Synopsis

raster ST_SetRotation(raster rast, float8 rotation);

描述

均匀旋转栅格。旋转以弧度为单位。参考 世界文件 了解更多详细信息。

示例

SELECT
  ST_ScaleX(rast1), ST_ScaleY(rast1), ST_SkewX(rast1), ST_SkewY(rast1),
  ST_ScaleX(rast2), ST_ScaleY(rast2), ST_SkewX(rast2), ST_SkewY(rast2)
FROM (
  SELECT ST_SetRotation(rast, 15) AS rast1, rast as rast2 FROM dummy_rast
) AS foo;
      st_scalex      |      st_scaley      |      st_skewx      |      st_skewy      | st_scalex | st_scaley | st_skewx | st_skewy
---------------------+---------------------+--------------------+--------------------+-----------+-----------+----------+----------
   -1.51937582571764 |   -2.27906373857646 |   1.95086352047135 |   1.30057568031423 |         2 |         3 |        0 |        0
 -0.0379843956429411 | -0.0379843956429411 | 0.0325143920078558 | 0.0325143920078558 |      0.05 |     -0.05 |        0 |        0
                

Name

ST_SetScale — 以坐标参考系为单位设置像素的X和Y大小。数字单位/像素宽度/高度。

Synopsis

raster ST_SetScale(raster rast, float8 xy);

raster ST_SetScale(raster rast, float8 x, float8 y);

描述

以坐标参考系为单位设置像素的X和Y大小。数字单位/像素宽度/高度。如果只有一个单位传入,则假定X和Y是相同的数字。

[Note]

ST_SetScale不同于 ST_Rescale 在ST_SetScale中,不要重新采样栅格以匹配栅格范围。它仅更改栅格的元数据(或地理配准)以更正最初错误指定的比例。ST_RESERSCALE会导致计算出的栅格具有不同的宽度和高度,以适应输入栅格的地理范围。ST_SetScale不修改栅格的宽度或高度。

已更改:2.0.0在WKTRaster版本中,这称为ST_SetPixelSize。在2.0.0中对此进行了更改。

示例

UPDATE dummy_rast
    SET rast = ST_SetScale(rast, 1.5)
WHERE rid = 2;

SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox
FROM dummy_rast
WHERE rid = 2;

 pixx | pixy |                    newbox
------+------+----------------------------------------------
  1.5 |  1.5 | BOX(3427927.75 5793244 0, 3427935.25 5793251.5 0)
                
UPDATE dummy_rast
    SET rast = ST_SetScale(rast, 1.5, 0.55)
WHERE rid = 2;

SELECT ST_ScaleX(rast) As pixx, ST_ScaleY(rast) As pixy, Box3D(rast) As newbox
FROM dummy_rast
WHERE rid = 2;

 pixx | pixy |                   newbox
------+------+--------------------------------------------
  1.5 | 0.55 | BOX(3427927.75 5793244 0,3427935.25 5793247 0)
                

另请参阅

ST_ScaleX, ST_ScaleY, Box3D


Name

ST_SetSkew — 设置地理参考X和Y倾斜(或旋转参数)。如果只传入一个,则将X和Y设置为相同的值。

Synopsis

raster ST_SetSkew(raster rast, float8 skewxy);

raster ST_SetSkew(raster rast, float8 skewx, float8 skewy);

描述

设置地理参考X和Y倾斜(或旋转参数)。如果只传入一个,则将X和Y设置为相同的值。参考 世界文件 了解更多详细信息。

示例

-- Example 1
UPDATE dummy_rast SET rast = ST_SetSkew(rast,1,2) WHERE rid = 1;
SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast WHERE rid = 1;

rid | skewx | skewy |    georef
----+-------+-------+--------------
  1 |     1 |     2 | 2.0000000000
                    : 2.0000000000
                    : 1.0000000000
                    : 3.0000000000
                    : 0.5000000000
                    : 0.5000000000

                
-- Example 2 set both to same number:
UPDATE dummy_rast SET rast = ST_SetSkew(rast,0) WHERE rid = 1;
SELECT rid, ST_SkewX(rast) As skewx, ST_SkewY(rast) As skewy,
    ST_GeoReference(rast) as georef
FROM dummy_rast WHERE rid = 1;

 rid | skewx | skewy |    georef
-----+-------+-------+--------------
   1 |     0 |     0 | 2.0000000000
                     : 0.0000000000
                     : 0.0000000000
                     : 3.0000000000
                     : 0.5000000000
                     : 0.5000000000
                

Name

ST_SetSRID — 将栅格的SRID设置为在SPATIAL_REF_SYS表中定义的特定整数sRID。

Synopsis

raster ST_SetSRID(raster rast, integer srid);

描述

将栅格上的SRID设置为特定整数值。

[Note]

此函数不会以任何方式转换栅格-它只是设置定义栅格当前所在的坐标参考系的空间参考的元数据。对以后的变换很有用。


Name

ST_SetUpperLeft — 将栅格像素左上角的值设置为投影的X和Y坐标。

Synopsis

raster ST_SetUpperLeft(raster rast, double precision x, double precision y);

描述

将栅格左上角的值设置为投影的X和Y坐标

示例

SELECT ST_SetUpperLeft(rast,-71.01,42.37)
FROM dummy_rast
WHERE rid = 2;
                    

Name

ST_Resample — 使用指定的重采样算法、新尺寸、任意栅格角以及从其他栅格定义或借用的一组栅格地理参考属性对栅格进行重采样。

Synopsis

raster ST_Resample(raster rast, integer width, integer height, double precision gridx=NULL, double precision gridy=NULL, double precision skewx=0, double precision skewy=0, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resample(raster rast, double precision scalex=0, double precision scaley=0, double precision gridx=NULL, double precision gridy=NULL, double precision skewx=0, double precision skewy=0, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resample(raster rast, raster ref, text algorithm=NearestNeighbor, double precision maxerr=0.125, boolean usescale=true);

raster ST_Resample(raster rast, raster ref, boolean usescale, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

使用指定的重采样算法、新维度(宽度)重采样栅格 & 高度)、网格角(GRIDX & Gridy)和一组栅格地理配准属性(scalex、scaleY、skewx & Skewy)定义的或从另一个栅格借用的。如果使用参考栅格,则这两个栅格必须具有相同的SRID。

使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor,它是最快的,但生成的插补最差。

如果没有,则使用最大错误百分比0.125 最大错误 是指定的。

[Note]

请参阅: GDAL扭曲重采样方法 了解更多详细信息。

可用性:2.0.0需要GDAL 1.6.1+

已更改:已删除2.1.0参数sRID。具有参考栅格的变体不再应用参考栅格的SRID。使用ST_Transform()重新投影栅格。适用于没有SRID的栅格。

示例

SELECT
    ST_Width(orig) AS orig_width,
    ST_Width(reduce_100) AS new_width
FROM (
    SELECT
        rast AS orig,
        ST_Resample(rast,100,100) AS reduce_100
    FROM aerials.boston
    WHERE ST_Intersects(rast,
        ST_Transform(
            ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),26986)
    )
    LIMIT 1
) AS foo;

 orig_width | new_width
------------+-------------
        200 |         100
                

Name

ST_Rescale — 通过仅调整其比例(或像素大小)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。

Synopsis

raster ST_Rescale(raster rast, double precision scalexy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Rescale(raster rast, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

通过仅调整其比例(或像素大小)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor,它是最快的,但结果是最差的插值。

Scalex 鳞片 定义新的像素大小。若要获得定向良好的栅格,scaleY通常必须为负数。

如果新的scalex或scaleY不是栅格宽度或高度的除数,则生成的栅格的范围将扩展为包含所提供的栅格的范围。如果要确保保留准确的输入范围,请参见 ST_Resize

最大错误 是重采样算法的变换近似阈值(以像素为单位)。如果没有,则使用缺省值0.125 最大错误 与GDAL gdalwarp实用程序中使用的值相同。如果设置为零,则不会发生近似。

[Note]

请参阅: GDAL扭曲重采样方法 了解更多详细信息。

[Note]

ST_RESale不同于 ST_SetScale 在ST_SetScale中,不要重新采样栅格以匹配栅格范围。ST_SetScale仅更改栅格的元数据(或地理参考)以更正最初错误指定的比例。ST_RESERSCALE会导致计算出的栅格具有不同的宽度和高度,以适应输入栅格的地理范围。ST_SetScale不修改栅格的宽度或高度。

可用性:2.0.0需要GDAL 1.6.1+

已更改:2.1.0适用于没有SRID的栅格

示例

将栅格从0.001度的像素大小重新调整为0.0015度的像素大小的简单示例。

-- the original raster pixel size
SELECT ST_PixelWidth(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0)) width

   width
----------
0.001

-- the rescaled raster raster pixel size
SELECT ST_PixelWidth(ST_Rescale(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015)) width

   width
----------
0.0015

Name

ST_Reskew — 通过仅调整其倾斜(或旋转参数)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。

Synopsis

raster ST_Reskew(raster rast, double precision skewxy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Reskew(raster rast, double precision skewx, double precision skewy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

通过仅调整其倾斜(或旋转参数)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor,它是最快的,但结果是最差的插值。

弯曲度 歪斜的 定义新的倾斜。

新栅格的范围将包含提供的栅格的范围。

如果否,则最大错误百分比为0.125 最大错误 是指定的。

[Note]

请参阅: GDAL扭曲重采样方法 了解更多详细信息。

[Note]

ST_Reskew不同于 ST_SetSkew 在ST_SetSkew中,不要重新采样栅格以匹配栅格范围。ST_SetSkew仅更改栅格的元数据(或地理参考)以更正最初错误指定的倾斜。ST_Reskew导致计算出的栅格具有不同的宽度和高度,以适应输入栅格的地理范围。ST_SetSkew不修改栅格的宽度或高度。

可用性:2.0.0需要GDAL 1.6.1+

已更改:2.1.0适用于没有SRID的栅格

示例

一个简单的示例是将栅格的倾斜度从0.0%重新调整为0.0015。

-- the original raster non-rotated
SELECT ST_Rotation(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));

-- result
0

-- the reskewed raster raster rotation
SELECT ST_Rotation(ST_Reskew(ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0015));

-- result
-0.982793723247329

Name

ST_SnapToGrid — 通过将栅格捕捉到栅格来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor。

Synopsis

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, text algorithm=NearestNeighbor, double precision maxerr=0.125, double precision scalex=DEFAULT 0, double precision scaley=DEFAULT 0);

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_SnapToGrid(raster rast, double precision gridx, double precision gridy, double precision scalexy, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

通过将栅格捕捉到由任意像素角(GRIDX)定义的格网来重采样栅格 & Gridy)和可选的像素大小(scalex & Scale Ey)。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor,它是最快的,但结果是最差的插值。

网格 格里迪 定义新网格的任意像素角。这不一定是新栅格的左上角,也不一定在新栅格范围的内部或边缘。

您可以选择使用定义新格网的像素大小 Scalex 鳞片

新栅格的范围将包含提供的栅格的范围。

如果否,则最大错误百分比为0.125 最大错误 是指定的。

[Note]

请参阅: GDAL扭曲重采样方法 了解更多详细信息。

[Note]

使用 ST_Resample 如果您需要对栅格参数进行更多控制。

可用性:2.0.0需要GDAL 1.6.1+

已更改:2.1.0适用于没有SRID的栅格

示例

将栅格捕捉到略有不同的栅格的简单示例。

-- the original raster upper left X
SELECT ST_UpperLeftX(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0));
-- result
0

-- the upper left of raster after snapping
SELECT ST_UpperLeftX(ST_SnapToGrid(ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 0.001, -0.001, 0, 0, 4269), '8BUI'::text, 1, 0), 0.0002, 0.0002));

--result
-0.0008

Name

ST_Resize — 将栅格大小调整为新的宽度/高度

Synopsis

raster ST_Resize(raster rast, integer width, integer height, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resize(raster rast, double precision percentwidth, double precision percentheight, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Resize(raster rast, text width, text height, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

将栅格大小调整为新的宽度/高度。新的宽度/高度可以用精确的像素数或栅格宽度/高度的百分比来指定。新栅格的范围将与提供的栅格的范围相同。

使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor,它是最快的,但结果是最差的插值。

变体1期望输出栅格的实际宽度/高度。

变体2需要介于零(0)和一(1)之间的十进制值,表示输入栅格的宽度/高度的百分比。

变量3采用输出栅格的实际宽度/高度或文本百分比(“20%”),表示输入栅格的宽度/高度的百分比。

可用性:2.1.0需要GDAL 1.6.1+

示例

WITH foo AS(
SELECT
    1 AS rid,
    ST_Resize(
        ST_AddBand(
            ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0)
            , 1, '8BUI', 255, 0
        )
    , '50%', '500') AS rast
UNION ALL
SELECT
    2 AS rid,
    ST_Resize(
        ST_AddBand(
            ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0)
            , 1, '8BUI', 255, 0
        )
    , 500, 100) AS rast
UNION ALL
SELECT
    3 AS rid,
    ST_Resize(
        ST_AddBand(
            ST_MakeEmptyRaster(1000, 1000, 0, 0, 1, -1, 0, 0, 0)
            , 1, '8BUI', 255, 0
        )
    , 0.25, 0.9) AS rast
), bar AS (
    SELECT rid, ST_Metadata(rast) AS meta, rast FROM foo
)
SELECT rid, (meta).* FROM bar

 rid | upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
-----+------------+------------+-------+--------+--------+--------+-------+-------+------+----------
   1 |          0 |          0 |   500 |    500 |      1 |     -1 |     0 |     0 |    0 |        1
   2 |          0 |          0 |   500 |    100 |      1 |     -1 |     0 |     0 |    0 |        1
   3 |          0 |          0 |   250 |    900 |      1 |     -1 |     0 |     0 |    0 |        1
(3 rows)
                

Name

ST_Transform — 使用指定的重采样算法将已知空间参考系中的栅格重投影到另一个已知空间参考系。选项包括NearestNeighbor、双线性、立方、三次样条、默认为NearestNeighbor的Lanczos。

Synopsis

raster ST_Transform(raster rast, integer srid, text algorithm=NearestNeighbor, double precision maxerr=0.125, double precision scalex, double precision scaley);

raster ST_Transform(raster rast, integer srid, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Transform(raster rast, raster alignto, text algorithm=NearestNeighbor, double precision maxerr=0.125);

描述

使用指定的像素扭曲算法将已知空间参考系统中的栅格重新投影到另一个已知空间参考系统。如果未指定算法,则使用‘NearestNeighbor’,如果未指定MAXERR,则使用最大错误百分比0.125。

算法选项有:‘NearestNeighbor’、‘Billinine’、‘Cubic’、‘Cubi Spline’和‘Lanczos’。请参阅: GDAL扭曲重采样方法 了解更多详细信息。

ST_Transform经常与ST_SetSRID()混淆。ST_Transform实际上将栅格的坐标从一个空间参考系更改为另一个空间参考系(并对像素值进行重采样),而ST_SetSRID()只是更改了栅格的SRID标识符。

与其他变体不同,变体3需要参考栅格作为 对齐 。变换后的栅格将被变换到参考栅格的空间参考系(SRID),并与参考栅格对齐(ST_SameAlign=TRUE)。

[Note]

如果您发现您的转换支持工作不正常,您可能需要将环境变量PROJSO设置为您的PostGIS正在使用的.so或.dll投影库。这只需要有文件的名称。例如在Windows上,您可以在控制面板->系统->环境变量中添加一个名为的系统变量 PROJSO 并将其设置为 libproj.dll (如果使用的是Proj 4.6.1)。在此更改后,您必须重新启动您的PostgreSQL服务/守护进程。

[Warning]

变换瓷砖覆盖范围时,您几乎总是希望使用参考栅格来确保瓷砖中的对齐方式相同且没有间隙,如示例:变体3中所示。

可用性:2.0.0需要GDAL 1.6.1+

增强:2.1.0添加ST_Transform(Rast,alignto)变量

示例

SELECT ST_Width(mass_stm) As w_before, ST_Width(wgs_84) As w_after,
  ST_Height(mass_stm) As h_before, ST_Height(wgs_84) As h_after
    FROM
    ( SELECT rast As mass_stm, ST_Transform(rast,4326) As wgs_84
  ,  ST_Transform(rast,4326, 'Bilinear') AS wgs_84_bilin
        FROM aerials.o_2_boston
            WHERE ST_Intersects(rast,
                ST_Transform(ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),26986) )
        LIMIT 1) As foo;

 w_before | w_after | h_before | h_after
----------+---------+----------+---------
      200 |     228 |      200 |     170
                    

原始质量状态平面测量仪(MASS_STM)

转换为WGS 84 Long Late(WGS_84)后

使用双线性算法而不是NN默认(WGS_84_BILIN)转换为WGS 84 Long Long之后

示例:变体3

下面显示了使用ST_Transform(栅格、SRID)和ST_Transform(栅格、对齐)之间的区别

WITH foo AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 300, 0) AS rast
), bar AS (
    SELECT
        ST_Transform(rast, 4269) AS alignto
    FROM foo
    LIMIT 1
), baz AS (
    SELECT
        rid,
        rast,
        ST_Transform(rast, 4269) AS not_aligned,
        ST_Transform(rast, alignto) AS aligned
    FROM foo
    CROSS JOIN bar
)
SELECT
    ST_SameAlignment(rast) AS rast,
    ST_SameAlignment(not_aligned) AS not_aligned,
    ST_SameAlignment(aligned) AS aligned
FROM baz

 rast | not_aligned | aligned
------+-------------+---------
 t    | f           | t
                

not_aligned

对齐

12.8. 栅格波段编辑器

ST_SetBandNoDataValue — 设置表示无数据的给定标注栏的值。如果未指定波段,则假定波段1。要将波段标记为没有nodata值,请将nodata值设置为NULL。
ST_SetBandIsNoData — 将波段的isnodata标志设置为true。
ST_SetBandPath — 更新数据库外波段的外部路径和波段编号
ST_SetBandIndex — 更新数据库外波段的外部波段编号

Name

ST_SetBandNoDataValue — 设置表示无数据的给定标注栏的值。如果未指定波段,则假定波段1。要将波段标记为没有nodata值,请将nodata值设置为NULL。

Synopsis

raster ST_SetBandNoDataValue(raster rast, double precision nodatavalue);

raster ST_SetBandNoDataValue(raster rast, integer band, double precision nodatavalue, boolean forcechecking=false);

描述

设置表示标注栏无数据的值。如果未指定,则假定为带1。这将影响以下项目的结果 ST_PolygonST_DumpAsPolygons 和ST_PixelAs...()函数。

示例

-- change just first band no data value
UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast,1, 254)
WHERE rid = 2;

-- change no data band value of bands 1,2,3
UPDATE dummy_rast
    SET rast =
        ST_SetBandNoDataValue(
            ST_SetBandNoDataValue(
                ST_SetBandNoDataValue(
                    rast,1, 254)
                ,2,99),
                3,108)
        WHERE rid = 2;

-- wipe out the nodata value this will ensure all pixels are considered for all processing functions
UPDATE dummy_rast
    SET rast = ST_SetBandNoDataValue(rast,1, NULL)
WHERE rid = 2;
                    

Name

ST_SetBandIsNoData — 将波段的isnodata标志设置为true。

Synopsis

raster ST_SetBandIsNoData(raster rast, integer band=1);

描述

将波段的isnodata标志设置为True。如果未指定,则假定为带1。只有当标志被认为是脏的时,才应调用此函数。也就是说,当结果调用 ST_BandIsNoData 使用True作为最后一个参数和不使用True是不同的

可用性:2.0.0

示例

-- Create dummy table with one raster column
create table dummy_rast (rid integer, rast raster);

-- Add raster with two bands, one pixel/band. In the first band, nodatavalue = pixel value = 3.
-- In the second band, nodatavalue = 13, pixel value = 4
insert into dummy_rast values(1,
(
'01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0200' -- nBands (uint16 0)
||
'17263529ED684A3F' -- scaleX (float64 0.000805965234044584)
||
'F9253529ED684ABF' -- scaleY (float64 -0.00080596523404458)
||
'1C9F33CE69E352C0' -- ipX (float64 -75.5533328537098)
||
'718F0E9A27A44840' -- ipY (float64 49.2824585505576)
||
'ED50EB853EC32B3F' -- skewX (float64 0.000211812383858707)
||
'7550EB853EC32B3F' -- skewY (float64 0.000211812383858704)
||
'E6100000' -- SRID (int32 4326)
||
'0100' -- width (uint16 1)
||
'0100' -- height (uint16 1)
||
'4' -- hasnodatavalue set to true, isnodata value set to false (when it should be true)
||
'2' -- first band type (4BUI)
||
'03' -- novalue==3
||
'03' -- pixel(0,0)==3 (same that nodata)
||
'0' -- hasnodatavalue set to false
||
'5' -- second band type (16BSI)
||
'0D00' -- novalue==13
||
'0400' -- pixel(0,0)==4
)::raster
);

select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected false
select st_bandisnodata(rast, 1, TRUE) from dummy_rast where rid = 1; -- Expected true

-- The isnodata flag is dirty. We are going to set it to true
update dummy_rast set rast = st_setbandisnodata(rast, 1) where rid = 1;


select st_bandisnodata(rast, 1) from dummy_rast where rid = 1; -- Expected true

                    

Name

ST_SetBandPath — 更新数据库外波段的外部路径和波段编号

Synopsis

raster ST_SetBandPath(raster rast, integer band, text outdbpath, integer outdbindex, boolean force=false);

描述

更新外部数据库波段的外部栅格文件路径和外部波段编号。

[Note]

如果 设置为True,则不执行任何测试以确保外部栅格文件和PostGIS栅格之间的兼容性(例如,对齐、像素支持)。此模式适用于外部栅格所在的文件系统更改。

[Note]

在内部,此方法将在索引处替换PostGIS栅格的波段 频带 而不是更新现有路径信息。

可用性:2.5.0

示例

WITH foo AS (
    SELECT
        ST_AddBand(NULL::raster, '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif', NULL::int[]) AS rast
)
SELECT
    1 AS query,
    *
FROM ST_BandMetadata(
    (SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
)
UNION ALL
SELECT
    2,
    *
FROM ST_BandMetadata(
    (
        SELECT
            ST_SetBandPath(
                rast,
                2,
                '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected2.tif',
                1
            ) AS rast
        FROM foo
    ),
    ARRAY[1,3,2]::int[]
)
ORDER BY 1, 2;

 query | bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                       | outdbbandnum
-------+---------+-----------+-------------+---------+---------------------------------------------------------------------------------+--------------
     1 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     1 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            2
     1 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
     2 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected2.tif      |            1
     2 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
                

Name

ST_SetBandIndex — 更新数据库外波段的外部波段编号

Synopsis

raster ST_SetBandIndex(raster rast, integer band, integer outdbindex, boolean force=false);

描述

更新外db频段的外部频段编号。这不会触及与Out-db波段关联的外部栅格文件

[Note]

如果 设置为True,则不执行任何测试以确保外部栅格文件和PostGIS栅格之间的兼容性(例如,对齐、像素支持)。此模式适用于在外部栅格文件中移动标注栏的位置。

[Note]

在内部,此方法将在索引处替换PostGIS栅格的波段 频带 而不是更新现有路径信息。

可用性:2.5.0

示例

WITH foo AS (
    SELECT
        ST_AddBand(NULL::raster, '/home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif', NULL::int[]) AS rast
)
SELECT
    1 AS query,
    *
FROM ST_BandMetadata(
    (SELECT rast FROM foo),
    ARRAY[1,3,2]::int[]
)
UNION ALL
SELECT
    2,
    *
FROM ST_BandMetadata(
    (
        SELECT
            ST_SetBandIndex(
                rast,
                2,
                1
            ) AS rast
        FROM foo
    ),
    ARRAY[1,3,2]::int[]
)
ORDER BY 1, 2;

 query | bandnum | pixeltype | nodatavalue | isoutdb |                                      path                                       | outdbbandnum
-------+---------+-----------+-------------+---------+---------------------------------------------------------------------------------+--------------
     1 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     1 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            2
     1 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
     2 |       1 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       2 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            1
     2 |       3 | 8BUI      |             | t       | /home/pele/devel/geo/postgis-git/raster/test/regress/loader/Projected.tif       |            3
                

12.9. 栅格波段统计和分析

ST_Count — 返回栅格或栅格覆盖的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。
ST_CountAgg — 聚合。返回一组栅格的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。
ST_Histogram — 返回一组记录,其中汇总了栅格或栅格覆盖率数据分布的单独面元范围。如果未指定,则自动计算垃圾箱的数量。
ST_Quantile — 在样本或总体的上下文中计算栅格或栅格表覆盖率的分位数。因此,可以将值检查为位于栅格的25%、50%、75%的百分位数。
ST_SummaryStats — 返回由栅格或栅格Coverage的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。
ST_SummaryStatsAgg — 聚合。返回由一组栅格的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。
ST_ValueCount — 返回一组记录,其中包含像素带值和具有给定值的栅格(或栅格覆盖)的给定波段中的像素数的计数。如果未指定带,则默认为带1。默认情况下,不计算nodata值像素。并且输出像素中的所有其他值,并且将像素带值四舍五入为最接近的整数。

Name

ST_Count — 返回栅格或栅格覆盖的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。

Synopsis

bigint ST_Count(raster rast, integer nband=1, boolean exclude_nodata_value=true);

bigint ST_Count(raster rast, boolean exclude_nodata_value);

描述

返回栅格或栅格覆盖的给定波段中的像素数。如果未指定波段 N带 默认为1。

[Note]

如果 exclude_nodata_value 设置为True时,将只计算其值不等于 无数据 栅格的值。集 exclude_nodata_value 设置为False,以获取所有像素的计数

已更改:3.1.0-ST_COUNT(栅格表、栅格列...)删除了变种。使用 ST_CountAgg 取而代之的是。

可用性:2.0.0

示例

--example will count all pixels not 249 and one will count all pixels.  --
SELECT rid, ST_Count(ST_SetBandNoDataValue(rast,249)) As exclude_nodata,
        ST_Count(ST_SetBandNoDataValue(rast,249),false) As include_nodata
    FROM dummy_rast WHERE rid=2;

rid | exclude_nodata | include_nodata
-----+----------------+----------------
   2 |             23 |             25
                

Name

ST_CountAgg — 聚合。返回一组栅格的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。

Synopsis

bigint ST_CountAgg(raster rast, integer nband, boolean exclude_nodata_value, double precision sample_percent);

bigint ST_CountAgg(raster rast, integer nband, boolean exclude_nodata_value);

bigint ST_CountAgg(raster rast, boolean exclude_nodata_value);

描述

返回一组栅格中给定波段的像素数。如果未指定波段 N带 默认为1。

如果 exclude_nodata_value 设置为True时,将只计算其值不等于 NODATA 栅格的值。集 exclude_nodata_value 设置为False,以获取所有像素的计数

默认情况下,将对所有像素进行采样。要获得更快的响应,请设置 sample_percent 设置介于零(0)和一(1)之间的值

可用性:2.2.0

示例

WITH foo AS (
    SELECT
        rast.rast
    FROM (
        SELECT ST_SetValue(
            ST_SetValue(
                ST_SetValue(
                    ST_AddBand(
                        ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0)
                        , 1, '64BF', 0, 0
                    )
                    , 1, 1, 1, -10
                )
                , 1, 5, 4, 0
            )
            , 1, 5, 5, 3.14159
        ) AS rast
    ) AS rast
    FULL JOIN (
        SELECT generate_series(1, 10) AS id
    ) AS id
        ON 1 = 1
)
SELECT
    ST_CountAgg(rast, 1, TRUE)
FROM foo;

 st_countagg
-------------
          20
(1 row)
                

Name

ST_Histogram — 返回一组记录,其中汇总了栅格或栅格覆盖率数据分布的单独面元范围。如果未指定,则自动计算垃圾箱的数量。

Synopsis

SETOF record ST_Histogram(raster rast, integer nband=1, boolean exclude_nodata_value=true, integer bins=autocomputed, double precision[] width=NULL, boolean right=false);

SETOF record ST_Histogram(raster rast, integer nband, integer bins, double precision[] width=NULL, boolean right=false);

SETOF record ST_Histogram(raster rast, integer nband, boolean exclude_nodata_value, integer bins, boolean right);

SETOF record ST_Histogram(raster rast, integer nband, integer bins, boolean right);

描述

返回由每个面元的给定栅格波段的最小、最大、计数、百分比组成的一组记录。如果未指定波段 N带 默认为1。

[Note]

默认情况下只考虑像素值不等于 无数据 价值。集 exclude_nodata_value 设置为False以获取计数所有像素。

宽度 双精度[]

Width:一个数组,表示每个类别/bin的宽度。如果垃圾桶的数量大于宽度的数量,则重复宽度。

示例:9个条柱,宽度为[a,b,c],输出为[a,b,c,a,b,c,a,b,c]

垃圾箱 整数

突破数--如果指定,这是您将从函数中返回的记录数。如果未指定,则自动计算分段点数。

正确的 布尔值

从右侧而不是从左侧计算直方图(默认)。这将值x的求值标准从[a,b)更改为(a,b)

已更改:3.1.0删除了ST_Columgraph(TABLE_NAME,COLUMN_NAME)变量。

可用性:2.0.0

示例:单个栅格切片-计算波段1、2、3和自动计算条柱的直方图

SELECT band, (stats).*
FROM (SELECT rid, band, ST_Histogram(rast, band) As stats
    FROM dummy_rast CROSS JOIN generate_series(1,3) As band
     WHERE rid=2) As foo;

 band |  min  |  max  | count | percent
------+-------+-------+-------+---------
    1 |   249 |   250 |     2 |    0.08
    1 |   250 |   251 |     2 |    0.08
    1 |   251 |   252 |     1 |    0.04
    1 |   252 |   253 |     2 |    0.08
    1 |   253 |   254 |    18 |    0.72
    2 |    78 | 113.2 |    11 |    0.44
    2 | 113.2 | 148.4 |     4 |    0.16
    2 | 148.4 | 183.6 |     4 |    0.16
    2 | 183.6 | 218.8 |     1 |    0.04
    2 | 218.8 |   254 |     5 |     0.2
    3 |    62 | 100.4 |    11 |    0.44
    3 | 100.4 | 138.8 |     5 |     0.2
    3 | 138.8 | 177.2 |     4 |    0.16
    3 | 177.2 | 215.6 |     1 |    0.04
    3 | 215.6 |   254 |     4 |    0.16

例如:只有2个频段,但有6个垃圾箱

SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2,6) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;

    min     |    max     | count | percent
------------+------------+-------+---------
         78 | 107.333333 |     9 |    0.36
 107.333333 | 136.666667 |     6 |    0.24
 136.666667 |        166 |     0 |       0
        166 | 195.333333 |     4 |    0.16
 195.333333 | 224.666667 |     1 |    0.04
 224.666667 |        254 |     5 |     0.2
(6 rows)

-- Same as previous but we explicitly control the pixel value range of each bin.
SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2,6,ARRAY[0.5,1,4,100,5]) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;

  min  |  max  | count | percent
-------+-------+-------+----------
    78 |  78.5 |     1 |     0.08
  78.5 |  79.5 |     1 |     0.04
  79.5 |  83.5 |     0 |        0
  83.5 | 183.5 |    17 |   0.0068
 183.5 | 188.5 |     0 |        0
 188.5 |   254 |     6 | 0.003664
(6 rows)

Name

ST_Quantile — 在样本或总体的上下文中计算栅格或栅格表覆盖率的分位数。因此,可以将值检查为位于栅格的25%、50%、75%的百分位数。

Synopsis

SETOF record ST_Quantile(raster rast, integer nband=1, boolean exclude_nodata_value=true, double precision[] quantiles=NULL);

SETOF record ST_Quantile(raster rast, double precision[] quantiles);

SETOF record ST_Quantile(raster rast, integer nband, double precision[] quantiles);

double precision ST_Quantile(raster rast, double precision quantile);

double precision ST_Quantile(raster rast, boolean exclude_nodata_value, double precision quantile=NULL);

double precision ST_Quantile(raster rast, integer nband, double precision quantile);

double precision ST_Quantile(raster rast, integer nband, boolean exclude_nodata_value, double precision quantile);

double precision ST_Quantile(raster rast, integer nband, double precision quantile);

描述

在样本或总体的上下文中计算栅格或栅格表覆盖率的分位数。因此,可以将值检查为位于栅格的25%、50%、75%的百分位数。

[Note]

如果 exclude_nodata_value 设置为False,则还将计算没有数据的像素。

已更改:3.1.0删除ST_Quantile(TABLE_NAME,COLUMN_NAME)变量。

可用性:2.0.0

示例

UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2;
--Example will consider only pixels of band 1 that are not 249 and in named quantiles --

SELECT (pvq).*
FROM (SELECT ST_Quantile(rast, ARRAY[0.25,0.75]) As pvq
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvq).quantile;

 quantile | value
----------+-------
     0.25 |   253
     0.75 |   254

SELECT ST_Quantile(rast, 0.75) As value
    FROM dummy_rast WHERE rid=2;

value
------
  254
--real live example.  Quantile of all pixels in band 2 intersecting a geometry
SELECT rid, (ST_Quantile(rast,2)).* As pvc
    FROM o_4_boston
        WHERE ST_Intersects(rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986)
            )
ORDER BY value, quantile,rid
;


 rid | quantile | value
-----+----------+-------
   1 |        0 |     0
   2 |        0 |     0
  14 |        0 |     1
  15 |        0 |     2
  14 |     0.25 |    37
   1 |     0.25 |    42
  15 |     0.25 |    47
   2 |     0.25 |    50
  14 |      0.5 |    56
   1 |      0.5 |    64
  15 |      0.5 |    66
   2 |      0.5 |    77
  14 |     0.75 |    81
  15 |     0.75 |    87
   1 |     0.75 |    94
   2 |     0.75 |   106
  14 |        1 |   199
   1 |        1 |   244
   2 |        1 |   255
  15 |        1 |   255

Name

ST_SummaryStats — 返回由栅格或栅格Coverage的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。

Synopsis

summarystats ST_SummaryStats(raster rast, boolean exclude_nodata_value);

summarystats ST_SummaryStats(raster rast, integer nband, boolean exclude_nodata_value);

描述

退货 摘要统计信息 由一个或多个栅格覆盖的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成。如果未指定波段 N带 默认为1。

[Note]

默认情况下只考虑像素值不等于 无数据 价值。集 exclude_nodata_value 设置为False以获取所有像素的计数。

[Note]

默认情况下,将对所有像素进行采样。要获得更快的响应,请设置 sample_percent 设置为小于1

更改:3.1.0 ST_SummaryStats(栅格表、栅格列...)变种被移除。使用 ST_SummaryStatsAgg 取而代之的是。

可用性:2.0.0

示例:单个栅格平铺

SELECT rid, band, (stats).*
FROM (SELECT rid, band, ST_SummaryStats(rast, band) As stats
    FROM dummy_rast CROSS JOIN generate_series(1,3) As band
     WHERE rid=2) As foo;

 rid | band | count | sum  |    mean    |  stddev   | min | max
-----+------+-------+------+------------+-----------+-----+-----
   2 |    1 |    23 | 5821 | 253.086957 |  1.248061 | 250 | 254
   2 |    2 |    25 | 3682 |     147.28 | 59.862188 |  78 | 254
   2 |    3 |    25 | 3290 |      131.6 | 61.647384 |  62 | 254
                

示例:汇总与感兴趣建筑相交的像素

此示例在64位PostGIS Windows上使用所有波士顿建筑物和航拍切片(每个切片各150x150像素~13.4万个切片)耗时574毫秒,约102,000个建筑记录

WITH
-- our features of interest
   feat AS (SELECT gid As building_id, geom_26986 As geom FROM buildings AS b
    WHERE gid IN(100, 103,150)
   ),
-- clip band 2 of raster tiles to boundaries of builds
-- then get stats for these clipped regions
   b_stats AS
    (SELECT  building_id, (stats).*
FROM (SELECT building_id, ST_SummaryStats(ST_Clip(rast,2,geom)) As stats
    FROM aerials.boston
        INNER JOIN feat
    ON ST_Intersects(feat.geom,rast)
 ) As foo
 )
-- finally summarize stats
SELECT building_id, SUM(count) As num_pixels
  , MIN(min) As min_pval
  ,  MAX(max) As max_pval
  , SUM(mean*count)/SUM(count) As avg_pval
    FROM b_stats
 WHERE count > 0
    GROUP BY building_id
    ORDER BY building_id;
 building_id | num_pixels | min_pval | max_pval |     avg_pval
-------------+------------+----------+----------+------------------
         100 |       1090 |        1 |      255 | 61.0697247706422
         103 |        655 |        7 |      182 | 70.5038167938931
         150 |        895 |        2 |      252 | 185.642458100559

示例:栅格覆盖

-- stats for each band --
SELECT band, (stats).*
FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band) As stats
    FROM generate_series(1,3) As band) As foo;

 band |  count  |  sum   |       mean       |      stddev      | min | max
------+---------+--------+------------------+------------------+-----+-----
    1 | 8450000 | 725799 | 82.7064349112426 | 45.6800222638537 |   0 | 255
    2 | 8450000 | 700487 | 81.4197705325444 | 44.2161184161765 |   0 | 255
    3 | 8450000 | 575943 |  74.682739408284 | 44.2143885481407 |   0 | 255

-- For a table -- will get better speed if set sampling to less than 100%
-- Here we set to 25% and get a much faster answer
SELECT band, (stats).*
FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band,true,0.25) As stats
    FROM generate_series(1,3) As band) As foo;

 band |  count  |  sum   |       mean       |      stddev      | min | max
------+---------+--------+------------------+------------------+-----+-----
    1 | 2112500 | 180686 | 82.6890480473373 | 45.6961043857248 |   0 | 255
    2 | 2112500 | 174571 |  81.448503668639 | 44.2252623171821 |   0 | 255
    3 | 2112500 | 144364 | 74.6765884023669 | 44.2014869384578 |   0 | 255
                

Name

ST_SummaryStatsAgg — 聚合。返回由一组栅格的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。

Synopsis

summarystats ST_SummaryStatsAgg(raster rast, integer nband, boolean exclude_nodata_value, double precision sample_percent);

summarystats ST_SummaryStatsAgg(raster rast, boolean exclude_nodata_value, double precision sample_percent);

summarystats ST_SummaryStatsAgg(raster rast, integer nband, boolean exclude_nodata_value);

描述

退货 摘要统计信息 由一个或多个栅格覆盖的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成。如果未指定波段 N带 默认为1。

[Note]

默认情况下只考虑像素值不等于 NODATA 价值。集 exclude_nodata_value 设置为False以获取所有像素的计数。

[Note]

默认情况下,将对所有像素进行采样。要获得更快的响应,请设置 sample_percent 在0和1之间取值

可用性:2.2.0

示例

WITH foo AS (
    SELECT
        rast.rast
    FROM (
        SELECT ST_SetValue(
            ST_SetValue(
                ST_SetValue(
                    ST_AddBand(
                        ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,0)
                        , 1, '64BF', 0, 0
                    )
                    , 1, 1, 1, -10
                )
                , 1, 5, 4, 0
            )
            , 1, 5, 5, 3.14159
        ) AS rast
    ) AS rast
    FULL JOIN (
        SELECT generate_series(1, 10) AS id
    ) AS id
        ON 1 = 1
)
SELECT
    (stats).count,
    round((stats).sum::numeric, 3),
    round((stats).mean::numeric, 3),
    round((stats).stddev::numeric, 3),
    round((stats).min::numeric, 3),
    round((stats).max::numeric, 3)
FROM (
    SELECT
        ST_SummaryStatsAgg(rast, 1, TRUE, 1) AS stats
    FROM foo
) bar;

 count |  round  | round  | round |  round  | round
-------+---------+--------+-------+---------+-------
    20 | -68.584 | -3.429 | 6.571 | -10.000 | 3.142
(1 row)
                

Name

ST_ValueCount — 返回一组记录,其中包含像素带值和具有给定值的栅格(或栅格覆盖)的给定波段中的像素数的计数。如果未指定带,则默认为带1。默认情况下,不计算nodata值像素。并且输出像素中的所有其他值,并且将像素带值四舍五入为最接近的整数。

Synopsis

SETOF record ST_ValueCount(raster rast, integer nband=1, boolean exclude_nodata_value=true, double precision[] searchvalues=NULL, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(raster rast, integer nband, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(raster rast, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

bigint ST_ValueCount(raster rast, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(raster rast, integer nband, boolean exclude_nodata_value, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(raster rast, integer nband, double precision searchvalue, double precision roundto=0);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, integer nband=1, boolean exclude_nodata_value=true, double precision[] searchvalues=NULL, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

SETOF record ST_ValueCount(text rastertable, text rastercolumn, integer nband, double precision[] searchvalues, double precision roundto=0, double precision OUT value, integer OUT count);

bigintST_ValueCount(text rastertable, text rastercolumn, integer nband, boolean exclude_nodata_value, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(text rastertable, text rastercolumn, double precision searchvalue, double precision roundto=0);

bigint ST_ValueCount(text rastertable, text rastercolumn, integer nband, double precision searchvalue, double precision roundto=0);

描述

Returns a set of records with columns value count which contain the pixel band value and count of pixels in the raster tile or raster coverage of selected band.

如果未指定波段 N带 默认为1。如果没有 搜索值 将返回在栅格或栅格覆盖中找到的所有像素值。如果给定一个搜索值,则将返回一个整数,而不是表示具有该像素带值的像素计数的记录

[Note]

如果 exclude_nodata_value 设置为False,则还将计算没有数据的像素。

可用性:2.0.0

示例

UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,249) WHERE rid=2;
--Example will count only pixels of band 1 that are not 249. --

SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;

 value | count
-------+-------
   250 |     2
   251 |     1
   252 |     2
   253 |     6
   254 |    12

-- Example will coount all pixels of band 1 including 249 --
SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast,1,false) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;

 value | count
-------+-------
   249 |     2
   250 |     2
   251 |     1
   252 |     2
   253 |     6
   254 |    12

-- Example will count only non-nodata value pixels of band 2
SELECT (pvc).*
FROM (SELECT ST_ValueCount(rast,2) As pvc
    FROM dummy_rast WHERE rid=2) As foo
    ORDER BY (pvc).value;
 value | count
-------+-------
    78 |     1
    79 |     1
    88 |     1
    89 |     1
    96 |     1
    97 |     1
    98 |     1
    99 |     2
   112 |     2
:

                
--real live example.  Count all the pixels in an aerial raster tile band 2 intersecting a geometry
-- and return only the pixel band values that have a count > 500
SELECT (pvc).value, SUM((pvc).count) As total
FROM (SELECT ST_ValueCount(rast,2) As pvc
    FROM o_4_boston
        WHERE ST_Intersects(rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986)
             )
        ) As foo
    GROUP BY (pvc).value
    HAVING SUM((pvc).count) > 500
    ORDER BY (pvc).value;

 value | total
-------+-----
    51 | 502
    54 | 521
-- Just return count of pixels in each raster tile that have value of 100 of tiles that intersect  a specific geometry --
SELECT rid, ST_ValueCount(rast,2,100) As count
    FROM o_4_boston
        WHERE ST_Intersects(rast,
            ST_GeomFromText('POLYGON((224486 892151,224486 892200,224706 892200,224706 892151,224486 892151))',26986)
             ) ;

 rid | count
-----+-------
   1 |    56
   2 |    95
  14 |    37
  15 |    64

12.10. 栅格输入

ST_RastFromWKB — 从熟知的二进制(WKB)栅格返回栅格值。
ST_RastFromHexWKB — 从熟知二进制(Wkb)栅格的祸不单行表示中返回栅格值。

Name

ST_RastFromWKB — 从熟知的二进制(WKB)栅格返回栅格值。

Synopsis

raster ST_RastFromWKB(bytea wkb);

描述

给定一个众所周知的二进制(WKB)栅格,返回一个栅格。

可用性:2.5.0

示例

SELECT (ST_Metadata(
    ST_RastFromWKB(
        '\001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000'::bytea
    )
)).* AS metadata;

 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+--------+--------+-------+-------+------+----------
        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |   10 |        0
                

Name

ST_RastFromHexWKB — 从熟知二进制(Wkb)栅格的祸不单行表示中返回栅格值。

Synopsis

raster ST_RastFromHexWKB(text wkb);

描述

给定十六进制表示的熟知二进制(WKB)栅格,返回栅格。

可用性:2.5.0

示例

SELECT (ST_Metadata(
    ST_RastFromHexWKB(
        '010000000000000000000000400000000000000840000000000000E03F000000000000E03F000000000000000000000000000000000A0000000A001400'
    )
)).* AS metadata;

 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+--------+--------+-------+-------+------+----------
        0.5 |        0.5 |    10 |     20 |      2 |      3 |     0 |     0 |   10 |        0
                

12.11. 栅格输出

ST_AsBinary/ST_AsWKB — 返回栅格的熟知二进制(WKB)表示形式。
ST_AsHexWKB — 返回栅格的祸不单行表示形式的熟知二进制(Wkb)。
ST_AsGDALRaster — 以指定的GDAL栅格格式返回栅格平铺。栅格格式是编译后的库支持的格式之一。使用ST_GDALDrivers()获取您的库支持的格式列表。
ST_AsJPEG — 将栅格拼贴选定的带区作为单个联合照片导出组(JPEG)图像(字节数组)返回。如果未指定标注栏且有1个或3个以上标注栏,则仅使用第一个标注栏。如果只有3个波段,则使用所有3个波段并将其映射到RGB。
ST_AsPNG — 将栅格平铺所选波段作为单个便携网络图形(PNG)图像(字节数组)返回。如果栅格中的1、3或4个标注栏未指定标注栏,则将使用所有标注栏。如果超过2个或4个标注栏但未指定标注栏,则仅使用标注栏1。标注栏映射到RGB或RGBA空间。
ST_AsTIFF — 将栅格选定波段作为单个TIFF图像(字节数组)返回。如果未指定标注栏或栅格中不存在任何指定标注栏,则将尝试使用所有标注栏。

Name

ST_AsBinary/ST_AsWKB — 返回栅格的熟知二进制(WKB)表示形式。

Synopsis

bytea ST_AsBinary(raster rast, boolean outasin=FALSE);

bytea ST_AsWKB(raster rast, boolean outasin=FALSE);

描述

返回栅格的二进制表示形式。如果 外包 为真,则外db频段被视为in-db。有关表示的详细信息,请参考PostGIS源文件夹中的raster/doc/rfc2-WellKnownBinaryFormat。

这在二进制游标中很有用,可以将数据从数据库中拉出,而无需将其转换为字符串表示形式。

[Note]

默认情况下,WKB输出包含数据库外频段的外部文件路径。如果客户端无权访问作为数据库外波段基础的栅格文件,请设置 外包 为了真的。

增强版:2.1.0新增 外包

增强版:2.5.0新增 ST_AsWKB

示例

SELECT ST_AsBinary(rast) As rastbin FROM dummy_rast WHERE rid=1;

                     rastbin
---------------------------------------------------------------------------------
\001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000
                

Name

ST_AsHexWKB — 返回栅格的祸不单行表示形式的熟知二进制(Wkb)。

Synopsis

bytea ST_AsHexWKB(raster rast, boolean outasin=FALSE);

描述

返回栅格的十六进制表示形式的二进制表示形式。如果 外包 为真,则外db频段被视为in-db。有关表示的详细信息,请参考PostGIS源文件夹中的raster/doc/rfc2-WellKnownBinaryFormat。

[Note]

默认情况下,十六进制WKB输出包含数据库外频段的外部文件路径。如果客户端无权访问作为数据库外波段基础的栅格文件,请设置 外包 为了真的。

可用性:2.5.0

示例

SELECT ST_AsHexWKB(rast) As rastbin FROM dummy_rast WHERE rid=1;

                                                        st_ashexwkb
----------------------------------------------------------------------------------------------------------------------------
 010000000000000000000000400000000000000840000000000000E03F000000000000E03F000000000000000000000000000000000A0000000A001400
                

Name

ST_AsGDALRaster — 以指定的GDAL栅格格式返回栅格平铺。栅格格式是编译后的库支持的格式之一。使用ST_GDALDrivers()获取您的库支持的格式列表。

Synopsis

bytea ST_AsGDALRaster(raster rast, text format, text[] options=NULL, integer srid=sameassource);

描述

返回指定格式的栅格平铺。以下分项列出了这些论点:

  • 格式化 要输出的格式。这取决于您的libgdal库中编译的驱动程序。通常可用的有‘JPEG’、‘GTIff’、‘PNG’。使用 ST_GDALDrivers 若要获取库支持的格式列表,请执行以下操作。

  • 选项 GDAL选项的文本数组。有效选项取决于格式。参考 GDAL栅格格式选项 了解更多详细信息。

  • SRS 要嵌入到图像中的proj4text或srtext(来自space_ref_sys)

可用性:2.0.0-需要GDAL > =1.6.0。

JPEG输出示例,将多个切片作为单个栅格

SELECT ST_AsGDALRaster(ST_Union(rast), 'JPEG', ARRAY['QUALITY=50']) As rastjpg
FROM dummy_rast
WHERE rast && ST_MakeEnvelope(10, 10, 11, 11);

使用PostgreSQL大对象支持导出栅格

将栅格导出为其他格式的一种方法是使用 PostgreSQL大对象导出函数 。我们将重复前面的示例,但也会导出。注意:为此,您需要拥有对db的超级用户访问权限,因为它使用服务器端lo函数。它还将导出到服务器网络上的路径。如果需要在本地导出,请使用等同于psql的lo_functions,它们会导出到本地文件系统,而不是服务器文件系统。

DROP TABLE IF EXISTS tmp_out ;

CREATE TABLE tmp_out AS
SELECT lo_from_bytea(0,
       ST_AsGDALRaster(ST_Union(rast), 'JPEG', ARRAY['QUALITY=50'])
        ) AS loid
  FROM dummy_rast
WHERE rast && ST_MakeEnvelope(10, 10, 11, 11);

SELECT lo_export(loid, '/tmp/dummy.jpg')
   FROM tmp_out;

SELECT lo_unlink(loid)
  FROM tmp_out;

GTIFF输出示例

SELECT ST_AsGDALRaster(rast, 'GTiff') As rastjpg
FROM dummy_rast WHERE rid=2;

-- Out GeoTiff with jpeg compression, 90% quality
SELECT ST_AsGDALRaster(rast, 'GTiff',
  ARRAY['COMPRESS=JPEG', 'JPEG_QUALITY=90'],
  4269) As rasttiff
FROM dummy_rast WHERE rid=2;
                

Name

ST_AsJPEG — 将栅格拼贴选定的带区作为单个联合照片导出组(JPEG)图像(字节数组)返回。如果未指定标注栏且有1个或3个以上标注栏,则仅使用第一个标注栏。如果只有3个波段,则使用所有3个波段并将其映射到RGB。

Synopsis

bytea ST_AsJPEG(raster rast, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer nband, integer quality);

bytea ST_AsJPEG(raster rast, integer nband, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer[] nbands, text[] options=NULL);

bytea ST_AsJPEG(raster rast, integer[] nbands, integer quality);

描述

将栅格的选定带区作为单个联合图像导出组图像(JPEG)返回。使用 ST_AsGDALRaster 如果需要作为不太常见的栅格类型导出。如果未指定标注栏且有1个或3个以上标注栏,则仅使用第一个标注栏。如果是3个波段,则使用全部3个波段。该函数有许多变体,具有许多选项。现将这些建议逐项列出:

  • N带 是针对单波段出口的。

  • N带区 是要导出的带区数组(请注意,对于JPEG,最大值为3),带区的顺序为RGB。例如,数组[3,2,1]表示将波段3映射为红色,将波段2映射为绿色,将波段1映射为蓝色

  • 品质 0到100之间的数字。数字越大,图像越清晰。

  • 选项 为JPEG定义的GDAL选项的文本数组(请参阅JPEG的Create_Options ST_GDALDrivers )。对于JPEG,有效值为 PROGRESSIVE 开或关,然后 QUALITY 范围从0到100,默认为75。参考 GDAL栅格格式选项 了解更多详细信息。

可用性:2.0.0-需要GDAL > =1.6.0。

示例:输出

-- output first 3 bands 75% quality
SELECT ST_AsJPEG(rast) As rastjpg
    FROM dummy_rast WHERE rid=2;

-- output only first band as 90% quality
SELECT ST_AsJPEG(rast,1,90) As rastjpg
    FROM dummy_rast WHERE rid=2;

-- output first 3 bands (but make band 2 Red, band 1 green, and band 3 blue, progressive and 90% quality
SELECT ST_AsJPEG(rast,ARRAY[2,1,3],ARRAY['QUALITY=90','PROGRESSIVE=ON']) As rastjpg
    FROM dummy_rast WHERE rid=2;

Name

ST_AsPNG — 将栅格平铺所选波段作为单个便携网络图形(PNG)图像(字节数组)返回。如果栅格中的1、3或4个标注栏未指定标注栏,则将使用所有标注栏。如果超过2个或4个标注栏但未指定标注栏,则仅使用标注栏1。标注栏映射到RGB或RGBA空间。

Synopsis

bytea ST_AsPNG(raster rast, text[] options=NULL);

bytea ST_AsPNG(raster rast, integer nband, integer compression);

bytea ST_AsPNG(raster rast, integer nband, text[] options=NULL);

bytea ST_AsPNG(raster rast, integer[] nbands, integer compression);

bytea ST_AsPNG(raster rast, integer[] nbands, text[] options=NULL);

描述

将栅格的选定标注栏作为单个便携网络图形图像(PNG)返回。使用 ST_AsGDALRaster 如果需要作为不太常见的栅格类型导出。如果未指定标注栏,则会导出前3个标注栏。该函数有许多变体,具有许多选项。如果没有 格栅 则使用栅格的sRID。现将这些建议逐项列出:

  • N带 是针对单波段出口的。

  • N带区 是要导出的波段数组(请注意,对于PNG,最大值为4),并且波段的顺序为RGBA。例如,数组[3,2,1]表示将波段3映射为红色,将波段2映射为绿色,将波段1映射为蓝色

  • 压缩 从1到9的数字。数字越大,压缩越大。

  • 选项 为PNG定义的GDAL选项的文本数组(查看PNG的CREATE_OPTIONS,共 ST_GDALDrivers )。对于PNG,有效的值仅为ZLEVEL(用于压缩的时间量--默认为6),例如数组[‘ZLEVEL=9’]。不允许使用WORLDFILE,因为该函数必须输出两个输出。参考 GDAL栅格格式选项 了解更多详细信息。

可用性:2.0.0-需要GDAL > =1.6.0。

示例

SELECT ST_AsPNG(rast) As rastpng
FROM dummy_rast WHERE rid=2;

-- export the first 3 bands and map band 3 to Red, band 1 to Green, band 2 to blue
SELECT ST_AsPNG(rast, ARRAY[3,1,2]) As rastpng
FROM dummy_rast WHERE rid=2;
                

Name

ST_AsTIFF — 将栅格选定波段作为单个TIFF图像(字节数组)返回。如果未指定标注栏或栅格中不存在任何指定标注栏,则将尝试使用所有标注栏。

Synopsis

bytea ST_AsTIFF(raster rast, text[] options='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, text compression='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, integer[] nbands, text compression='', integer srid=sameassource);

bytea ST_AsTIFF(raster rast, integer[] nbands, text[] options, integer srid=sameassource);

描述

以单标记图像文件格式(TIFF)返回栅格的选定标注栏。如果未指定波段,将尝试使用所有波段。这是一种包装 ST_AsGDALRaster 。使用 ST_AsGDALRaster 如果需要作为不太常见的栅格类型导出。该函数有许多变体,具有许多选项。如果不存在空间参考SRS文字,则使用栅格的空间参考。现将这些建议逐项列出:

  • N带区 是要导出的频段数组(请注意,对于PNG,最大值为3),频段的顺序为RGB。例如,数组[3,2,1]表示将波段3映射为红色,将波段2映射为绿色,将波段1映射为蓝色

  • 压缩 压缩表达式--JPEG90(或其他百分比)、LZW、JPEG、DEFLATE9。

  • 选项 为GTiff定义的GDAL创建选项的文本数组(请参阅GTiff的CREATE_OPTIONS ST_GDALDrivers )。或参阅 GDAL栅格格式选项 了解更多详细信息。

  • 格栅 删除栅格的space_ref_sys。这用于填充地理配准信息

可用性:2.0.0-需要GDAL > =1.6.0。

示例:使用jpeg压缩90%

SELECT ST_AsTIFF(rast, 'JPEG90') As rasttiff
FROM dummy_rast WHERE rid=2;
                

12.12. 栅格处理:地图代数

ST_Clip — 返回由输入几何图形剪裁的栅格。如果未指定波段编号,则处理所有波段。如果 裁剪 未指定或为TRUE,则将裁剪输出栅格。
ST_ColorMap — 从源栅格和指定的标注栏中创建最多包含四个8BUI标注栏(灰度、RGB、RGBA)的新栅格。如果未指定,则假定为带1。
ST_Grayscale — 根据源栅格和表示红色、绿色和蓝色的指定波段创建新的One-8BUI波段栅格
ST_Intersection — 返回一个栅格或一组几何体-像素值对,表示两个栅格的共享部分或栅格和几何体的矢量化的几何体交集。
ST_MapAlgebra(回调函数版本) — 回调函数版本-返回给定一个或多个输入栅格、波段索引和一个用户指定的回调函数的单波段栅格。
ST_MapAlgebra(表达式版本) — 表达式版本-返回给定一个或两个输入栅格、波段索引以及一个或多个用户指定的SQL表达式的单波段栅格。
ST_MapAlgebraExpr — 1个栅格波段版本:通过对输入栅格波段和提供的像素类型应用有效的PostgreSQL代数运算来创建新的单波段栅格。如果未指定波段,则假定为波段1。
ST_MapAlgebraExpr — 2个栅格波段版本:创建通过对提供的两个输入栅格波段应用有效的PostgreSQL代数运算形成的新单波段栅格。如果未指定波段编号,则假定每个栅格的波段1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角),其范围由“extenttype”参数定义。“extenttype”的值可以是:交集、并集、第一个、第二个。
ST_MapAlgebraFct — 单波段版本-通过在输入栅格波段上应用有效的PostgreSQL函数和所生成的像素类型创建新的单波段栅格。如果未指定波段,则假定为波段1。
ST_MapAlgebraFct — 2波段版本-创建新的单波段栅格,该栅格是通过在2个输入栅格波段上应用有效的PostgreSQL函数和像素类型生成的。如果未指定波段,则假定波段1。如果未指定范围类型,则默认为相交。
ST_MapAlgebraFctNgb — 1波段版本:使用自定义PostgreSQL函数的地图代数最近邻。返回值为PLPGSQL用户函数的结果的栅格,该用户函数涉及输入栅格波段中的值的邻域。
ST_Reclass — 创建由从原始标注栏重新分类的标注栏类型组成的新栅格。nband是要更改的频带。如果未指定nband,则假定为1。所有其他波段将原封不动地返回。用例:将16BUI波段转换为8BUI,以此类推,以便更简单地呈现为可视格式。
ST_Union — 将一组栅格平铺的并集返回由1个或多个标注栏组成的单个栅格。

Name

ST_Clip — 返回由输入几何图形剪裁的栅格。如果未指定波段编号,则处理所有波段。如果 裁剪 未指定或为TRUE,则将裁剪输出栅格。

Synopsis

raster ST_Clip(raster rast, integer[] nband, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE);

raster ST_Clip(raster rast, integer nband, geometry geom, double precision nodataval, boolean crop=TRUE);

raster ST_Clip(raster rast, integer nband, geometry geom, boolean crop);

raster ST_Clip(raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE);

raster ST_Clip(raster rast, geometry geom, double precision nodataval, boolean crop=TRUE);

raster ST_Clip(raster rast, geometry geom, boolean crop);

描述

返回由输入几何裁剪的栅格 几何图形 。如果未指定波段索引,则处理所有波段。

由ST_CLIP生成的栅格必须为被剪裁的区域指定一个nodata值,每个标注栏一个。如果未提供任何值,并且输入栅格未定义nodata值,则结果栅格的nodata值将设置为ST_MinPossibleValue(ST_BandPixelType(Rast,Band))。当数组中的nodata值的数量小于频带数时,数组中的最后一个用于剩余的频段。如果无数据值的数量大于频带的数量,则忽略额外的无数据值。接受nodata值数组的所有变体也接受将分配给每个波段的单个值。

如果 裁剪 如果未指定,则假定为True,这意味着输出栅格将被裁剪到 几何图形 RAST 范围。如果 裁剪 设置为FALSE,则新栅格的范围与 RAST

可用性:2.0.0

增强版:2.1.0用C重写

此处的示例使用MassGIS站点上提供的马萨诸塞州航测数据 MassGIS航空正射影像 。坐标以马萨诸塞州平面米为单位。

示例:1波段裁剪

-- Clip the first band of an aerial tile by a 20 meter buffer.
SELECT ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20)
    ) from aerials.boston
WHERE rid = 4;
                    
-- Demonstrate effect of crop on final dimensions of raster
-- Note how final extent is clipped to that of the geometry
-- if crop = true
SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim,
    ST_XMax(clipper) As xmax_clipper,
    ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim,
    ST_XMax(ST_Envelope(rast)) As xmax_rast_orig
FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper
    FROM aerials.boston
WHERE rid = 6) As foo;

   xmax_w_trim    |   xmax_clipper   |   xmax_wo_trim   |  xmax_rast_orig
------------------+------------------+------------------+------------------
 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996
                    

裁剪前的完整栅格平铺

剪裁后

示例:1不裁剪波段并原封不动地添加回其他波段

-- Same example as before, but we need to set crop to false to be able to use ST_AddBand
-- because ST_AddBand requires all bands be the same Width and height
SELECT ST_AddBand(ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false
    ), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston
WHERE rid = 6;
                    

裁剪前的完整栅格平铺

剪裁后--超现实主义

示例:剪裁所有波段

-- Clip all bands of an aerial tile by a 20 meter buffer.
-- Only difference is we don't specify a specific band to clip
-- so all bands are clipped
SELECT ST_Clip(rast,
      ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20),
      false
    ) from aerials.boston
WHERE rid = 4;
                    

裁剪前的完整栅格平铺

剪裁后


Name

ST_ColorMap — 从源栅格和指定的标注栏中创建最多包含四个8BUI标注栏(灰度、RGB、RGBA)的新栅格。如果未指定,则假定为带1。

Synopsis

raster ST_ColorMap(raster rast, integer nband=1, text colormap=grayscale, text method=INTERPOLATE);

raster ST_ColorMap(raster rast, text colormap, text method=INTERPOLATE);

描述

应用于 色彩映射图 向乐队致敬 N带 RAST 从而产生最多由四个8BUI波段组成的新栅格。新栅格中的8BUI波段数由中定义的颜色分量数确定 色彩映射图

如果 N带 未指定,则假定为带1。

色彩映射图 可以是预定义色彩映射表的关键字,也可以是定义值和颜色分量的一组线。

有效的预定义 色彩映射图 关键词:

  • 灰度级 灰阶 对于一个灰度级的8BUI波段栅格。

  • 假彩色 对于颜色从蓝色到绿色再到红色的四个8BUI(RGBA)波段的栅格。

  • 对于颜色从黑色到红色再到淡黄色的四个8BUI(RGBA)波段的栅格。

  • 怒气冲冲 对于颜色从蓝色到淡白色再到红色的四个8BUI(RGBA)波段的栅格。

用户可以将一组条目(每行一个)传递给 色彩映射图 若要指定自定义色彩映射表,请执行以下操作。每个条目通常由五个值组成:像素值和相应的红、绿、蓝、Alpha分量(介于0和255之间的颜色分量)。可以使用百分比值代替像素值,其中0%和100%是在栅格波段中找到的最小值和最大值。值可以用逗号(‘,’)、制表符、冒号(‘:’)和/或空格分隔。像素值可以设置为 NV 无数据 作为NODATA值。下面提供了一个示例。

5 0 0 0 255
4 100:50 55 255
1 150,100 150 255
0% 255 255 255 255
nv 0 0 0 0
                    

的语法 色彩映射图 类似于GDAL的色彩浮雕模式 Gdaldem

的有效关键字 方法

  • INTERPOLATE 使用线性插值法在给定的像素值之间平滑地混合颜色

  • EXACT 以仅严格匹配在色彩映射表中找到的像素值。值与色彩映射表条目不匹配的像素将设置为0 0 0(RGBA)

  • NEAREST 使用其值最接近像素值的色彩映射表条目

[Note]

色彩映射表的一个很好的参考资料是 ColorBrewer

[Warning]

生成的新栅格波段将不会设置NODATA值。使用 ST_SetBandNoDataValue 若要设置NODATA值,请执行以下操作:

可用性:2.1.0

示例

这是一张可以摆弄的垃圾桌

-- setup test raster table --
DROP TABLE IF EXISTS funky_shapes;
CREATE TABLE funky_shapes(rast raster);

INSERT INTO funky_shapes(rast)
WITH ref AS (
    SELECT ST_MakeEmptyRaster( 200, 200, 0, 200, 1, -1, 0, 0) AS rast
)
SELECT
    ST_Union(rast)
FROM (
    SELECT
        ST_AsRaster(
            ST_Rotate(
                ST_Buffer(
                    ST_GeomFromText('LINESTRING(0 2,50 50,150 150,125 50)'),
                    i*2
                ),
                pi() * i * 0.125, ST_Point(50,50)
            ),
            ref.rast, '8BUI'::text, i * 5
        ) AS rast
    FROM ref
    CROSS JOIN generate_series(1, 10, 3) AS i
) AS shapes;
                    
SELECT
    ST_NumBands(rast) As n_orig,
    ST_NumBands(ST_ColorMap(rast,1, 'greyscale')) As ngrey,
    ST_NumBands(ST_ColorMap(rast,1, 'pseudocolor')) As npseudo,
    ST_NumBands(ST_ColorMap(rast,1, 'fire')) As nfire,
    ST_NumBands(ST_ColorMap(rast,1, 'bluered')) As nbluered,
    ST_NumBands(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As nred
FROM funky_shapes;
                    
n_orig | ngrey | npseudo | nfire | nbluered | nred
--------+-------+---------+-------+----------+------
      1 |     1 |       4 |     4 |        4 |    3
                    

示例:使用ST_AsPNG比较不同的颜色映射外观

SELECT
    ST_AsPNG(rast) As orig_png,
    ST_AsPNG(ST_ColorMap(rast,1,'greyscale')) As grey_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'pseudocolor')) As pseudo_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'nfire')) As fire_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'bluered')) As bluered_png,
    ST_AsPNG(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As red_png
FROM funky_shapes;
                    

orig_png

grey_png

pseudo_png

fire_png

bluered_png

red_png


Name

ST_Grayscale — 根据源栅格和表示红色、绿色和蓝色的指定波段创建新的One-8BUI波段栅格

Synopsis

(1) raster ST_Grayscale(raster rast, integer redband=1, integer greenband=2, integer blueband=3, text extenttype=INTERSECTION);

(2) raster ST_Grayscale(rastbandarg[] rastbandargset, text extenttype=INTERSECTION);

描述

在给定三个输入波段(从一个或多个栅格)的情况下,创建具有一个8BUI波段的栅格。像素类型不是8BUI的任何输入波段都将使用 ST_Reclass

[Note]

此函数不同于 ST_ColorMap 使用 灰度级 关键字AS ST_ColorMap仅在一个波段上操作,而此函数需要RGB的三个波段。此函数应用以下公式将RGB转换为灰度:0.2989*红色+0.5870*绿色+0.1140*蓝色

可用性:2.5.0

示例:变体1

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.enable_outdb_rasters = True;

WITH apple AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
        '/tmp/apple.png'::text,
        NULL::int[]
    ) AS rast
)
SELECT
    ST_AsPNG(rast) AS original_png,
    ST_AsPNG(ST_Grayscale(rast)) AS grayscale_png
FROM apple;
                    

original_png

grayscale_png

示例:变体2

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';
SET postgis.enable_outdb_rasters = True;

WITH apple AS (
    SELECT ST_AddBand(
        ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
        '/tmp/apple.png'::text,
        NULL::int[]
    ) AS rast
)
SELECT
    ST_AsPNG(rast) AS original_png,
    ST_AsPNG(ST_Grayscale(
        ARRAY[
            ROW(rast, 1)::rastbandarg, -- red
            ROW(rast, 2)::rastbandarg, -- green
            ROW(rast, 3)::rastbandarg, -- blue
        ]::rastbandarg[]
    )) AS grayscale_png
FROM apple;
                    

Name

ST_Intersection — 返回一个栅格或一组几何体-像素值对,表示两个栅格的共享部分或栅格和几何体的矢量化的几何体交集。

Synopsis

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

描述

返回一个栅格或一组几何体-像素值对,表示两个栅格的共享部分或栅格和几何体的矢量化的几何体交集。

前三个变量返回一组geomval,在向量空间中工作。首先对栅格进行矢量化(使用 ST_DumpAsPolygons )转换为一组几何图形行,然后使用 ST_Intersection (几何体、几何体)PostGIS函数。仅与栅格的无数据值区域相交的几何图形将返回空几何图形。的正确使用通常将它们从结果中排除。 ST_Intersects 在WHERE子句中。

您可以访问Geomval结果集的几何图形和值部分,方法是用圆括号将它们括起来,并在表达式末尾添加‘.geom’或‘.val’。例如(ST_Interval(Rast,geom)).geom

其他变量返回一个栅格,在栅格空间中工作。他们使用ST_MapAlgebraExpr的两个栅格版本来执行交集。

生成的栅格范围对应于两个栅格范围的几何交点。生成的栅格包括‘BAND1’、‘BAND2’或‘BAND2’波段,后面是作为 返回频带 参数。任何波段中存在的无数据值区都会导致结果的每个波段中都没有数据值区。换句话说,任何与无数据值像素相交的像素都将成为结果中的无数据值像素。

必须为不相交的区域指定由ST_Interval生成的栅格的nodata值。可以通过为任何结果波段提供 Nodataval[] 一个或两个无数据值的数组,具体取决于您请求的是‘BAND1’、‘BAND2’还是‘Both’。数组中的第一值替换第一带中的nodata值,第二值替换第二带中的nodata值。如果一个输入波段没有定义nodata值,并且没有以数组形式提供,则使用ST_MinPossibleValue函数选择一个。接受NODATA值数组的所有变体也可以接受将被分配给每个请求频带的单个值。

在所有变型中,如果未指定波段编号,则假定为波段1。如果需要栅格和返回栅格的几何之间的交集,请参阅 ST_Clip

[Note]

要更好地控制结果范围或遇到nodata值时返回的内容,请使用的两个栅格版本 ST_MapAlgebraExpr

[Note]

要计算栅格空间中的栅格波段与几何的交集,请使用 ST_Clip 。ST_CLIP适用于多个标注栏栅格,不返回与栅格化几何图形对应的标注栏。

[Note]

ST_INTERSION应与配合使用 ST_Intersects 以及栅格列和/或几何列上的索引。

增强:2.0.0-引入了栅格空间中的交集。在2.0.0之前的版本中,仅支持在向量空间中执行的交集。

示例:几何图形、栅格--生成几何图形

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;

 rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY
                    

Name

ST_MapAlgebra(回调函数版本) — 回调函数版本-返回给定一个或多个输入栅格、波段索引和一个用户指定的回调函数的单波段栅格。

Synopsis

raster ST_MapAlgebra(rastbandarg[] rastbandargset, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer[] nband, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=FIRST, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer nband, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=FIRST, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, regprocedure callbackfunc, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, integer distancex=0, integer distancey=0, text[] VARIADIC userargs=NULL);

raster ST_MapAlgebra(raster rast, integer nband, regprocedure callbackfunc, float8[] mask, boolean weighted, text pixeltype=NULL, text extenttype=INTERSECTION, raster customextent=NULL, text[] VARIADIC userargs=NULL);

描述

返回给定一个或多个输入栅格、波段索引和一个用户指定的回调函数的单波段栅格。

RAST、RAST1、RAST2、RASTBAND边界集

对地图代数过程进行评估的栅格。

栅格栏 允许对多个栅格和/或多个波段使用地图代数运算。请参见示例变体1。

Nband、nband 1、nband 2

要评估的栅格的波段编号。Nband可以是表示波段的整数或整数[]。对于2个栅格/2个波段的情况,nband 1是rast1上的波段,nband 2是rast2上的波段。

回调函数

The callbackfunc parameter must be the name and signature of an SQL or PL/pgSQL function, cast to a regprocedure. An example PL/pgSQL function example is:

CREATE OR REPLACE FUNCTION sample_callbackfunc(value double precision[][][], position integer[][], VARIADIC userargs text[])
    RETURNS double precision
    AS $$
    BEGIN
        RETURN 0;
    END;
    $$ LANGUAGE 'plpgsql' IMMUTABLE;
                                    

The callbackfunc must have three arguments: a 3-dimension double precision array, a 2-dimension integer array and a variadic 1-dimension text array. The first argument value is the set of values (as double precision) from all input rasters. The three dimensions (where indexes are 1-based) are: raster #, row y, column x. The second argument position is the set of pixel positions from the output raster and input rasters. The outer dimension (where indexes are 0-based) is the raster #. The position at outer dimension index 0 is the output raster's pixel position. For each outer dimension, there are two elements in the inner dimension for X and Y. The third argument userargs is for passing through any user-specified arguments.

Passing a regprocedure argument to a SQL function requires the full function signature to be passed, then cast to a regprocedure type. To pass the above example PL/pgSQL function as an argument, the SQL for the argument is:

'sample_callbackfunc(double precision[], integer[], text[])'::regprocedure
                                    

Note that the argument contains the name of the function, the types of the function arguments, quotes around the name and argument types, and a cast to a regprocedure.

遮罩

数字的n维数组(矩阵),用于筛选传递给映射代数回调函数的单元格。0表示邻居小区值应被视为无数据,1表示值应被视为数据。如果权重设置为True,则这些值将用作乘数,以乘以邻近位置中该值的像素值。

加权

布尔值(TRUE/FALSE),表示遮罩值是否应该加权(乘以原始值)(仅适用于接受遮罩的原件)。

像素类型

如果 像素类型 传入后,新栅格的一个波段将属于该像素类型。如果将Pixeltype传递为空或忽略,则新的栅格标注栏将具有与第一个栅格的指定标注栏(对于范围类型:交集、并集、第一个、自定义)或相应栅格的指定标注栏(对于范围类型:第二个、最后一个)相同的像素类型。如果有疑问,请始终指定 像素类型

输出栅格的结果像素类型必须是中列出的像素类型 ST_BandPixelType 或被省略或设置为空。

区段类型

可能的值包括交集(默认)、并集、第一个(一个栅格变体的默认)、第二个、最后一个、自定义。

自定义范围

如果 区段类型 是自定义的,则必须提供栅格 自定义范围 。见备选案文1的示例4。

远距离消费

X方向上与参考单元格的距离(以像素为单位)。因此,生成的矩阵的宽度为 2*Distancex+1 。如果未指定,则仅考虑参考单元格(0的邻域)。

距离

Y方向上与参考单元格之间的距离,以像素为单位。生成的矩阵的高度将为 2*距离+1 。如果未指定,则仅考虑参考单元格(0的邻域)。

用户参数

的第三个参数 回调函数 是一种 多变文本 数组。所有尾随文本参数都传递给指定的 回调函数 ,并包含在 用户参数 论点。

[Note]

有关VARIADIC关键字的详细信息,请参阅的PostgreSQL文档和的“参数数目可变的SQL函数”一节 查询语言(SQL)函数

[Note]

这个 文本[] 参数设置为 回调函数 是必需的,无论您是否选择将任何参数传递给回调函数进行处理。

变体1接受一个数组 粗制滥造 从而允许在许多栅格和/或许多波段上使用地图代数运算。请参见示例变体1。

变体2和3作用于一个栅格的一个或多个波段。请参见示例变体2和3。

变体4对两个栅格进行操作,每个栅格一个波段。请参见示例变体4。

可用性:2.2.0:能够添加面具

可用性:2.1.0

示例:变体1

一个栅格,一个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        ARRAY[ROW(rast, 1)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

一个栅格,多个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        ARRAY[ROW(rast, 3), ROW(rast, 1), ROW(rast, 3), ROW(rast, 2)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

几个栅格、几个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        ARRAY[ROW(t1.rast, 3), ROW(t2.rast, 1), ROW(t2.rast, 3), ROW(t1.rast, 2)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2
                    

带有邻域的Coverage瓷砖的完整示例。此查询仅适用于PostgreSQL 9.1或更高版本。

WITH foo AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast
)
SELECT
    t1.rid,
    ST_MapAlgebra(
        ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure,
        '32BUI',
        'CUSTOM', t1.rast,
        1, 1
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 4
    AND t2.rid BETWEEN 0 AND 8
    AND ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rid, t1.rast
                    

与前面的例子类似,用于包含邻域的Coverage的瓷砖,但适用于PostgreSQL 9.0。

WITH src AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast
)
WITH foo AS (
    SELECT
        t1.rid,
        ST_Union(t2.rast) AS rast
    FROM src t1
    JOIN src t2
        ON ST_Intersects(t1.rast, t2.rast)
        AND t2.rid BETWEEN 0 AND 8
    WHERE t1.rid = 4
    GROUP BY t1.rid
), bar AS (
    SELECT
        t1.rid,
        ST_MapAlgebra(
            ARRAY[ROW(t2.rast, 1)]::rastbandarg[],
            'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure,
            '32BUI',
            'CUSTOM', t1.rast,
            1, 1
        ) AS rast
    FROM src t1
    JOIN foo t2
        ON t1.rid = t2.rid
)
SELECT
    rid,
    (ST_Metadata(rast)),
    (ST_BandMetadata(rast, 1)),
    ST_Value(rast, 1, 1, 1)
FROM bar;
                    

示例:变体2和3

一个栅格,多个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        rast, ARRAY[3, 1, 3, 2]::integer[],
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

一个栅格,一个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        rast, 2,
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo
                    

示例:变体4

两个栅格,两个波段

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI', 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI', 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast, 2,
        t2.rast, 1,
        'sample_callbackfunc(double precision[], int[], text[])'::regprocedure
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2
                    

示例:使用蒙版

WITH foo AS (SELECT
   ST_SetBandNoDataValue(
ST_SetValue(ST_SetValue(ST_AsRaster(
        ST_Buffer(
            ST_GeomFromText('LINESTRING(50 50,100 90,100 50)'), 5,'join=bevel'),
            200,200,ARRAY['8BUI'], ARRAY[100], ARRAY[0]), ST_Buffer('POINT(70 70)'::geometry,10,'quad_segs=1') ,50),
  'LINESTRING(20 20, 100 100, 150 98)'::geometry,1),0)  AS rast )
SELECT 'original' AS title, rast
FROM foo
UNION ALL
SELECT 'no mask mean value' AS title, ST_MapAlgebra(rast,1,'ST_mean4ma(double precision[], int[], text[])'::regprocedure) AS rast
FROM foo
UNION ALL
SELECT 'mask only consider neighbors, exclude center' AS title, ST_MapAlgebra(rast,1,'ST_mean4ma(double precision[], int[], text[])'::regprocedure,
    '{{1,1,1}, {1,0,1}, {1,1,1}}'::double precision[], false) As rast
FROM foo

UNION ALL
SELECT 'mask weighted only consider neighbors, exclude center multi otehr pixel values by 2' AS title, ST_MapAlgebra(rast,1,'ST_mean4ma(double precision[], int[], text[])'::regprocedure,
    '{{2,2,2}, {2,0,2}, {2,2,2}}'::double precision[], true) As rast
FROM foo;
                    

原创

无掩码平均值(与掩码矩阵中全为1相同)

掩码仅考虑邻居,排除中心

遮罩加权仅考虑邻域,将中心多个其他像素值排除2


Name

ST_MapAlgebra(表达式版本) — 表达式版本-返回给定一个或两个输入栅格、波段索引以及一个或多个用户指定的SQL表达式的单波段栅格。

Synopsis

raster ST_MapAlgebra(raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebra(raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

描述

表达式版本-返回给定一个或两个输入栅格、波段索引以及一个或多个用户指定的SQL表达式的单波段栅格。

可用性:2.1.0

描述:变量1和变量2(一个栅格)

通过应用由定义的有效PostgreSQL代数运算创建新的单波段栅格 表达式 在输入栅格上( RAST )。如果 N带 未提供,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。

如果 像素类型 则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型 RAST 乐队。

  • 允许的关键字 表达式

    1. [RAST] -感兴趣像素的像素值

    2. [rast.val] -感兴趣像素的像素值

    3. [rast.x] 感兴趣的像素的基于1的像素列

    4. [rast.y] 感兴趣像素的以1为基础的像素行

描述:变量3和4(两个栅格)

通过对由定义的两个波段应用有效的PostgreSQL代数运算来创建新的单波段栅格 表达式 关于两个输入栅格波段 栅格1 、( 栅格2 )。如果没有 频带1 频带2 是指定的,则假定为带1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角)。生成的栅格将具有由 区段类型 参数。

表达式

涉及两个栅格的PostgreSQL代数表达式和PostgreSQL定义的函数/运算符,它们将在像素相交时定义像素值。例如([rast1]+[rast2])/2.0)::整数

像素类型

输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 、省略或设置为空。如果未传入或设置为空,则默认为第一个栅格的像素类型。

区段类型

控制生成的栅格的范围

  1. INTERSECTION -新栅格的范围是两个栅格的交点。这是默认设置。

  2. UNION -新栅格的范围是两个栅格的并集。

  3. FIRST -新栅格的范围与第一个栅格的范围相同。

  4. SECOND -新栅格的范围与第二个栅格的范围相同。

Nodata1expr

一种仅涉及 栅格2 或一个常量,该常量定义当像素的 栅格1 是无数据值,并且空间上对应的rast2像素具有值。

Nodata2expr

一种仅涉及 栅格1 或一个常量,该常量定义当像素的 栅格2 是无数据值,并且空间上对应的rast1像素具有值。

Nodatandataval

当空间上对应的rast1和rast2像素都为无数据值时返回的数值常量。

  • 中允许的关键字 表达式 Nodata1expr Nodata2expr

    1. [rast1] -感兴趣的像素的像素值来自 栅格1

    2. [rast1.val] -感兴趣的像素的像素值来自 栅格1

    3. [rast1.x] 感兴趣的像素的-1\f25 Pixel-1列 栅格1

    4. [rast1.y] 感兴趣的像素的-1像素行 栅格1

    5. [RAST2] -感兴趣的像素的像素值来自 栅格2

    6. [rast2.val] -感兴趣的像素的像素值来自 栅格2

    7. [rast2.x] 感兴趣的像素的-1\f25 Pixel-1列 栅格2

    8. [rast2.y] 感兴趣的像素的-1像素行 栅格2

例子:变种1和变种2

WITH foo AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast
)
SELECT
    ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])')
FROM foo;
                    

示例:变体3和4

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast, 2,
        t2.rast, 1,
        '([rast2] + [rast1.val]) / 2'
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2;
                    

Name

ST_MapAlgebraExpr — 1个栅格波段版本:通过对输入栅格波段和提供的像素类型应用有效的PostgreSQL代数运算来创建新的单波段栅格。如果未指定波段,则假定为波段1。

Synopsis

raster ST_MapAlgebraExpr(raster rast, integer band, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebraExpr(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

描述

[Warning]

ST_MapAlgebraExpr 从2.1.0开始不建议使用。使用 ST_MapAlgebra(表达式版本) 取而代之的是。

通过应用由定义的有效PostgreSQL代数运算创建新的单波段栅格 表达式 在输入栅格上( RAST )。如果没有 频带 是指定的,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。

如果 像素类型 则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型 RAST 乐队。

在表达式中,您可以使用术语 [RAST] 为了参考原始频带的像素值, [rast.x] 为了引用基于1的像素列索引, [rast.y] 引用以1为基数的像素行索引。

可用性:2.0.0

示例

从我们的原始创建一个新的1波段栅格,它是原始栅格波段的模2的函数。

ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast,NULL,'mod([rast]::numeric,2)') WHERE rid = 2;

SELECT
    ST_Value(rast,1,i,j) As origval,
    ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 3) AS i
CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;

 origval | mapval
---------+--------
     253 |      1
     254 |      0
     253 |      1
     253 |      1
     254 |      0
     254 |      0
     250 |      0
     254 |      0
     254 |      0
                    

从重新分类的原始图像创建像素类型为2BUI的新的1波段栅格,并将nodata值设置为0。

ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
UPDATE dummy_rast SET
    map_rast2 = ST_MapAlgebraExpr(rast,'2BUI'::text,'CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END'::text, '0')
WHERE rid = 2;

SELECT DISTINCT
    ST_Value(rast,1,i,j) As origval,
    ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast
CROSS JOIN generate_series(1, 5) AS i
CROSS JOIN generate_series(1,5) AS j
WHERE rid = 2;

 origval | mapval
---------+--------
     249 |      1
     250 |      1
     251 |
     252 |      2
     253 |      3
     254 |      3

SELECT
    ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast
WHERE rid = 2;

 b1pixtyp
----------
 2BUI
                    

原始(列RAST_VIEW)

rast_view_ma

创建一个新的3波段栅格相同的像素类型从我们原来的3波段栅格与第一个波段由地图代数改变,其余2个波段没有改变。

SELECT
    ST_AddBand(
        ST_AddBand(
            ST_AddBand(
                ST_MakeEmptyRaster(rast_view),
                ST_MapAlgebraExpr(rast_view,1,NULL,'tan([rast])*[rast]')
            ),
            ST_Band(rast_view,2)
        ),
        ST_Band(rast_view, 3)
    )  As rast_view_ma
FROM wind
WHERE rid=167;
                    

Name

ST_MapAlgebraExpr — 2个栅格波段版本:创建通过对提供的两个输入栅格波段应用有效的PostgreSQL代数运算形成的新单波段栅格。如果未指定波段编号,则假定每个栅格的波段1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角),其范围由“extenttype”参数定义。“extenttype”的值可以是:交集、并集、第一个、第二个。

Synopsis

raster ST_MapAlgebraExpr(raster rast1, raster rast2, text expression, text pixeltype=same_as_rast1_band, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebraExpr(raster rast1, integer band1, raster rast2, integer band2, text expression, text pixeltype=same_as_rast1_band, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

描述

[Warning]

ST_MapAlgebraExpr 从2.1.0开始不建议使用。使用 ST_MapAlgebra(表达式版本) 取而代之的是。

通过对由定义的两个波段应用有效的PostgreSQL代数运算来创建新的单波段栅格 表达式 关于两个输入栅格波段 栅格1 、( 栅格2 )。如果没有 频带1 频带2 是指定的,则假定为带1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角)。生成的栅格将具有由 区段类型 参数。

表达式

涉及两个栅格的PostgreSQL代数表达式和PostgreSQL定义的函数/运算符,它们将在像素相交时定义像素值。例如([rast1]+[rast2])/2.0)::整数

像素类型

输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 、省略或设置为空。如果未传入或设置为空,则默认为第一个栅格的像素类型。

区段类型

控制生成的栅格的范围

  1. INTERSECTION -新栅格的范围是两个栅格的交点。这是默认设置。

  2. UNION -新栅格的范围是两个栅格的并集。

  3. FIRST -新栅格的范围与第一个栅格的范围相同。

  4. SECOND -新栅格的范围与第二个栅格的范围相同。

Nodata1expr

一种仅涉及 栅格2 或一个常量,该常量定义当像素的 栅格1 是无数据值,并且空间上对应的rast2像素具有值。

Nodata2expr

一种仅涉及 栅格1 或一个常量,该常量定义当像素的 栅格2 是无数据值,并且空间上对应的rast1像素具有值。

Nodatandataval

当空间上对应的rast1和rast2像素都为无数据值时返回的数值常量。

如果 像素类型 则新栅格将具有该像素类型的带。如果传递的像素类型为空或未指定像素类型,则新栅格波段将具有与输入相同的像素类型 栅格1 乐队。

Use the term [rast1.val] [rast2.val] to refer to the pixel value of the original raster bands and [rast1.x], [rast1.y] etc. to refer to the column / row positions of the pixels.

可用性:2.0.0

示例:两个标注栏交点和并集

从我们的原始创建一个新的1波段栅格,它是原始栅格波段的模2的函数。

--Create a cool set of rasters --
DROP TABLE IF EXISTS fun_shapes;
CREATE TABLE fun_shapes(rid serial PRIMARY KEY, fun_name text, rast raster);

-- Insert some cool shapes around Boston in Massachusetts state plane meters --
INSERT INTO fun_shapes(fun_name, rast)
VALUES ('ref', ST_AsRaster(ST_MakeEnvelope(235229, 899970, 237229, 901930,26986),200,200,'8BUI',0,0));

INSERT INTO fun_shapes(fun_name,rast)
WITH ref(rast) AS (SELECT rast FROM fun_shapes WHERE fun_name = 'ref' )
SELECT 'area' AS fun_name, ST_AsRaster(ST_Buffer(ST_SetSRID(ST_Point(236229, 900930),26986), 1000),
            ref.rast,'8BUI', 10, 0) As rast
FROM ref
UNION ALL
SELECT 'rand bubbles',
            ST_AsRaster(
            (SELECT ST_Collect(geom)
    FROM (SELECT ST_Buffer(ST_SetSRID(ST_Point(236229 + i*random()*100, 900930 + j*random()*100),26986), random()*20) As geom
            FROM generate_series(1,10) As i, generate_series(1,10) As j
            ) As foo ), ref.rast,'8BUI', 200, 0)
FROM ref;

--map them -
SELECT  ST_MapAlgebraExpr(
        area.rast, bub.rast, '[rast2.val]', '8BUI', 'INTERSECTION', '[rast2.val]', '[rast1.val]') As interrast,
        ST_MapAlgebraExpr(
            area.rast, bub.rast, '[rast2.val]', '8BUI', 'UNION', '[rast2.val]', '[rast1.val]') As unionrast
FROM
  (SELECT rast FROM fun_shapes WHERE
 fun_name = 'area') As area
CROSS JOIN  (SELECT rast
FROM fun_shapes WHERE
 fun_name = 'rand bubbles') As bub
                    

地图代数交集

地图代数并

示例:将栅格作为单独的波段叠加在画布上

-- we use ST_AsPNG to render the image so all single band ones look grey --
WITH mygeoms
    AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(1,5),10) As geom
            UNION ALL
            SELECT 3 AS bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel') As geom
            UNION ALL
            SELECT 1 As bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 5,'join=bevel') As geom
            ),
   -- define our canvas to be 1 to 1 pixel to geometry
   canvas
    AS (SELECT ST_AddBand(ST_MakeEmptyRaster(200,
        200,
        ST_XMin(e)::integer, ST_YMax(e)::integer, 1, -1, 0, 0) , '8BUI'::text,0) As rast
        FROM (SELECT ST_Extent(geom) As e,
                    Max(ST_SRID(geom)) As srid
                    from mygeoms
                    ) As foo
            ),
   rbands AS (SELECT ARRAY(SELECT ST_MapAlgebraExpr(canvas.rast, ST_AsRaster(m.geom, canvas.rast, '8BUI', 100),
                 '[rast2.val]', '8BUI', 'FIRST', '[rast2.val]', '[rast1.val]') As rast
                FROM mygeoms AS m CROSS JOIN canvas
                ORDER BY m.bnum) As rasts
                )
          SELECT rasts[1] As rast1 , rasts[2] As rast2, rasts[3] As rast3, ST_AddBand(
                    ST_AddBand(rasts[1],rasts[2]), rasts[3]) As final_rast
            FROM rbands;
                    

栅格1

栅格2

栅格3

final_rast

示例:将选定地块的2米边界覆盖在航拍图像上

-- Create new 3 band raster composed of first 2 clipped bands, and overlay of 3rd band with our geometry
-- This query took 3.6 seconds on PostGIS windows 64-bit install
WITH pr AS
-- Note the order of operation: we clip all the rasters to dimensions of our region
(SELECT ST_Clip(rast,ST_Expand(geom,50) ) As rast, g.geom
    FROM aerials.o_2_boston AS r INNER JOIN
-- union our parcels of interest so they form a single geometry we can later intersect with
        (SELECT ST_Union(ST_Transform(geom,26986)) AS geom
          FROM landparcels WHERE pid IN('0303890000', '0303900000')) As g
        ON ST_Intersects(rast::geometry, ST_Expand(g.geom,50))
),
-- we then union the raster shards together
-- ST_Union on raster is kinda of slow but much faster the smaller you can get the rasters
-- therefore we want to clip first and then union
prunion AS
(SELECT ST_AddBand(NULL, ARRAY[ST_Union(rast,1),ST_Union(rast,2),ST_Union(rast,3)] ) As clipped,geom
FROM pr
GROUP BY geom)
-- return our final raster which is the unioned shard with
-- with the overlay of our parcel boundaries
-- add first 2 bands, then mapalgebra of 3rd band + geometry
SELECT ST_AddBand(ST_Band(clipped,ARRAY[1,2])
    , ST_MapAlgebraExpr(ST_Band(clipped,3), ST_AsRaster(ST_Buffer(ST_Boundary(geom),2),clipped, '8BUI',250),
     '[rast2.val]', '8BUI', 'FIRST', '[rast2.val]', '[rast1.val]') ) As rast
FROM prunion;
                    

蓝线是所选宗地的边界


Name

ST_MapAlgebraFct — 单波段版本-通过在输入栅格波段上应用有效的PostgreSQL函数和所生成的像素类型创建新的单波段栅格。如果未指定波段,则假定为波段1。

Synopsis

raster ST_MapAlgebraFct(raster rast, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, text pixeltype, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, text pixeltype, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, integer band, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, integer band, regprocedure onerasteruserfunc, text[] VARIADIC args);

raster ST_MapAlgebraFct(raster rast, integer band, text pixeltype, regprocedure onerasteruserfunc);

raster ST_MapAlgebraFct(raster rast, integer band, text pixeltype, regprocedure onerasteruserfunc, text[] VARIADIC args);

描述

[Warning]

ST_MapAlgebraFct 从2.1.0开始不建议使用。使用 ST_MapAlgebra(回调函数版本) 取而代之的是。

通过应用由指定的有效PostgreSQL函数创建新的单波段栅格 OnerasterUserFunction 在输入栅格上( RAST )。如果没有 频带 如果指定,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。

如果 像素类型 则新栅格将具有该像素类型的带。如果将像素类型传递为空,则新栅格波段将具有与输入相同的像素类型 RAST 乐队。

The onerasteruserfunc parameter must be the name and signature of a SQL or PL/pgSQL function, cast to a regprocedure. A very simple and quite useless PL/pgSQL function example is:

CREATE OR REPLACE FUNCTION simple_function(pixel FLOAT, pos INTEGER[], VARIADIC args TEXT[])
    RETURNS FLOAT
    AS $$ BEGIN
        RETURN 0.0;
    END; $$
    LANGUAGE 'plpgsql' IMMUTABLE;

The userfunction may accept two or three arguments: a float value, an optional integer array, and a variadic text array. The first argument is the value of an individual raster cell (regardless of the raster datatype). The second argument is the position of the current processing cell in the form '{x,y}'. The third argument indicates that all remaining parameters to ST_MapAlgebraFct shall be passed through to the userfunction.

传递一个 重新生产 参数传递给SQL函数需要传递完整的函数签名,然后强制转换为 注册表程序 键入。要将上述示例PL/pgSQL函数作为参数传递,参数的SQL为:

 ‘Simple_Function(Float,Integer[],Text[])’::regprocess 

请注意,参数包含函数的名称、函数参数的类型、名称两边的引号和参数类型,以及转换为 注册表程序

的第三个参数 用户函数 是一种 多变文本 数组。的所有尾随文本参数 ST_MapAlgebraFct 调用被传递到指定的 用户函数 ,并包含在 参数 论点。

[Note]

有关VARIADIC关键字的详细信息,请参阅的PostgreSQL文档和的“参数数目可变的SQL函数”一节 查询语言(SQL)函数

[Note]

这个 文本[] 参数设置为 用户函数 是必需的,无论您是否选择将任何参数传递给您的用户函数进行处理。

可用性:2.0.0

示例

从我们的原始创建一个新的1波段栅格,它是原始栅格波段的模2的函数。

ALTER TABLE dummy_rast ADD COLUMN map_rast raster;
CREATE FUNCTION mod_fct(pixel float, pos integer[], variadic args text[])
RETURNS float
AS $$
BEGIN
    RETURN pixel::integer % 2;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE;

UPDATE dummy_rast SET map_rast = ST_MapAlgebraFct(rast,NULL,'mod_fct(float,integer[],text[])'::regprocedure) WHERE rid = 2;

SELECT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast, 1, i, j) As mapval
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;

 origval | mapval
---------+--------
     253 |      1
     254 |      0
     253 |      1
     253 |      1
     254 |      0
     254 |      0
     250 |      0
     254 |      0
     254 |      0
                    

从重新分类的原始图像创建像素类型为2BUI的新的1波段栅格,并将nodata值设置为传递给用户函数(0)的参数。

ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster;
CREATE FUNCTION classify_fct(pixel float, pos integer[], variadic args text[])
RETURNS float
AS
$$
DECLARE
    nodata float := 0;
BEGIN
    IF NOT args[1] IS NULL THEN
        nodata := args[1];
    END IF;
    IF pixel < 251 THEN
        RETURN 1;
    ELSIF pixel = 252 THEN
        RETURN 2;
    ELSIF pixel > 252 THEN
        RETURN 3;
    ELSE
        RETURN nodata;
    END IF;
END;
$$
LANGUAGE 'plpgsql';
UPDATE dummy_rast SET map_rast2 = ST_MapAlgebraFct(rast,'2BUI','classify_fct(float,integer[],text[])'::regprocedure, '0') WHERE rid = 2;

SELECT DISTINCT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast2, 1, i, j) As mapval
FROM dummy_rast CROSS JOIN generate_series(1, 5) AS i CROSS JOIN generate_series(1,5) AS j
WHERE rid = 2;

 origval | mapval
---------+--------
     249 |      1
     250 |      1
     251 |
     252 |      2
     253 |      3
     254 |      3

SELECT ST_BandPixelType(map_rast2) As b1pixtyp
FROM dummy_rast WHERE rid = 2;

 b1pixtyp
----------
 2BUI
                    

原始(柱面栅格-视图)

rast_view_ma

创建一个新的3波段栅格相同的像素类型从我们原来的3波段栅格与第一个波段由地图代数改变,其余2个波段没有改变。

CREATE FUNCTION rast_plus_tan(pixel float, pos integer[], variadic args text[])
RETURNS float
AS
$$
BEGIN
    RETURN tan(pixel) * pixel;
END;
$$
LANGUAGE 'plpgsql';

SELECT ST_AddBand(
    ST_AddBand(
        ST_AddBand(
            ST_MakeEmptyRaster(rast_view),
            ST_MapAlgebraFct(rast_view,1,NULL,'rast_plus_tan(float,integer[],text[])'::regprocedure)
        ),
        ST_Band(rast_view,2)
    ),
    ST_Band(rast_view, 3) As rast_view_ma
)
FROM wind
WHERE rid=167;
                    

Name

ST_MapAlgebraFct — 2波段版本-创建新的单波段栅格,该栅格是通过在2个输入栅格波段上应用有效的PostgreSQL函数和像素类型生成的。如果未指定波段,则假定波段1。如果未指定范围类型,则默认为相交。

Synopsis

raster ST_MapAlgebraFct(raster rast1, raster rast2, regprocedure tworastuserfunc, text pixeltype=same_as_rast1, text extenttype=INTERSECTION, text[] VARIADIC userargs);

raster ST_MapAlgebraFct(raster rast1, integer band1, raster rast2, integer band2, regprocedure tworastuserfunc, text pixeltype=same_as_rast1, text extenttype=INTERSECTION, text[] VARIADIC userargs);

描述

[Warning]

ST_MapAlgebraFct 从2.1.0开始不建议使用。使用 ST_MapAlgebra(回调函数版本) 取而代之的是。

通过应用由指定的有效PostgreSQL函数创建新的单波段栅格 TworastUserFunction 在输入栅格上 栅格1 栅格2 。如果没有 频带1 频带2 如果指定,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度,但只有一个波段。

如果 像素类型 则新栅格将具有该像素类型的带。如果将像素类型传递为空或忽略,则新栅格波段将具有与输入相同的像素类型 栅格1 乐队。

The tworastuserfunc parameter must be the name and signature of an SQL or PL/pgSQL function, cast to a regprocedure. An example PL/pgSQL function example is:

CREATE OR REPLACE FUNCTION simple_function_for_two_rasters(pixel1 FLOAT, pixel2 FLOAT, pos INTEGER[], VARIADIC args TEXT[])
    RETURNS FLOAT
    AS $$ BEGIN
        RETURN 0.0;
    END; $$
    LANGUAGE 'plpgsql' IMMUTABLE;

The tworastuserfunc may accept three or four arguments: a double precision value, a double precision value, an optional integer array, and a variadic text array. The first argument is the value of an individual raster cell in rast1 (regardless of the raster datatype). The second argument is an individual raster cell value in rast2. The third argument is the position of the current processing cell in the form '{x,y}'. The fourth argument indicates that all remaining parameters to ST_MapAlgebraFct shall be passed through to the tworastuserfunc.

传递一个 重新生产 参数传递给SQL函数需要传递完整的函数签名,然后强制转换为 注册表程序 键入。要将上述示例PL/pgSQL函数作为参数传递,参数的SQL为:

 ‘Simple_Function(双精度,双精度,INTEGER[],TEXT[])’::regprocess 

请注意,参数包含函数的名称、函数参数的类型、名称两边的引号和参数类型,以及转换为 注册表程序

的第四个参数 TworastUserFunction 是一种 多变文本 数组。的所有尾随文本参数 ST_MapAlgebraFct 调用被传递到指定的 TworastUserFunction ,并包含在 用户参数 论点。

[Note]

有关VARIADIC关键字的详细信息,请参阅的PostgreSQL文档和的“参数数目可变的SQL函数”一节 查询语言(SQL)函数

[Note]

这个 文本[] 参数设置为 TworastUserFunction 是必需的,无论您是否选择将任何参数传递给您的用户函数进行处理。

可用性:2.0.0

示例:将栅格作为单独的波段叠加在画布上

-- define our user defined function --
CREATE OR REPLACE FUNCTION raster_mapalgebra_union(
    rast1 double precision,
    rast2 double precision,
    pos integer[],
    VARIADIC userargs text[]
)
    RETURNS double precision
    AS $$
    DECLARE
    BEGIN
        CASE
            WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN
                RETURN ((rast1 + rast2)/2.);
            WHEN rast1 IS NULL AND rast2 IS NULL THEN
                RETURN NULL;
            WHEN rast1 IS NULL THEN
                RETURN rast2;
            ELSE
                RETURN rast1;
        END CASE;

        RETURN NULL;
    END;
    $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000;

-- prep our test table of rasters
DROP TABLE IF EXISTS map_shapes;
CREATE TABLE map_shapes(rid serial PRIMARY KEY, rast raster, bnum integer, descrip text);
INSERT INTO map_shapes(rast,bnum, descrip)
WITH mygeoms
    AS ( SELECT 2 As bnum, ST_Buffer(ST_Point(90,90),30) As geom, 'circle' As descrip
            UNION ALL
            SELECT 3 AS bnum,
                ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 15) As geom, 'big road' As descrip
            UNION ALL
            SELECT 1 As bnum,
                ST_Translate(ST_Buffer(ST_GeomFromText('LINESTRING(60 50,150 150,150 50)'), 8,'join=bevel'), 10,-6) As geom, 'small road' As descrip
            ),
   -- define our canvas to be 1 to 1 pixel to geometry
   canvas
    AS ( SELECT ST_AddBand(ST_MakeEmptyRaster(250,
        250,
        ST_XMin(e)::integer, ST_YMax(e)::integer, 1, -1, 0, 0 ) , '8BUI'::text,0) As rast
        FROM (SELECT ST_Extent(geom) As e,
                    Max(ST_SRID(geom)) As srid
                    from mygeoms
                    ) As foo
            )
-- return our rasters aligned with our canvas
SELECT ST_AsRaster(m.geom, canvas.rast, '8BUI', 240) As rast, bnum, descrip
                FROM mygeoms AS m CROSS JOIN canvas
UNION ALL
SELECT canvas.rast, 4, 'canvas'
FROM canvas;

-- Map algebra on single band rasters and then collect with ST_AddBand
INSERT INTO map_shapes(rast,bnum,descrip)
SELECT ST_AddBand(ST_AddBand(rasts[1], rasts[2]),rasts[3]), 4, 'map bands overlay fct union (canvas)'
    FROM (SELECT ARRAY(SELECT ST_MapAlgebraFct(m1.rast, m2.rast,
            'raster_mapalgebra_union(double precision, double precision, integer[], text[])'::regprocedure, '8BUI', 'FIRST')
                FROM map_shapes As m1 CROSS JOIN map_shapes As m2
    WHERE m1.descrip = 'canvas' AND m2.descrip <> 'canvas' ORDER BY m2.bnum) As rasts) As foo;
                    

地图波段叠加(画布)(R:小路,G:圆形,B:大路)

采用额外参数的用户定义函数

CREATE OR REPLACE FUNCTION raster_mapalgebra_userargs(
    rast1 double precision,
    rast2 double precision,
    pos integer[],
    VARIADIC userargs text[]
)
    RETURNS double precision
    AS $$
    DECLARE
    BEGIN
        CASE
            WHEN rast1 IS NOT NULL AND rast2 IS NOT NULL THEN
                RETURN least(userargs[1]::integer,(rast1 + rast2)/2.);
            WHEN rast1 IS NULL AND rast2 IS NULL THEN
                RETURN userargs[2]::integer;
            WHEN rast1 IS NULL THEN
                RETURN greatest(rast2,random()*userargs[3]::integer)::integer;
            ELSE
                RETURN greatest(rast1, random()*userargs[4]::integer)::integer;
        END CASE;

        RETURN NULL;
    END;
    $$ LANGUAGE 'plpgsql' VOLATILE COST 1000;

SELECT ST_MapAlgebraFct(m1.rast, 1, m1.rast, 3,
            'raster_mapalgebra_userargs(double precision, double precision, integer[], text[])'::regprocedure,
                '8BUI', 'INTERSECT', '100','200','200','0')
                FROM map_shapes As m1
    WHERE m1.descrip = 'map bands overlay fct union (canvas)';
                    

使用来自同一栅格的额外参数和不同波段定义的用户


Name

ST_MapAlgebraFctNgb — 1波段版本:使用自定义PostgreSQL函数的地图代数最近邻。返回值为PLPGSQL用户函数的结果的栅格,该用户函数涉及输入栅格波段中的值的邻域。

Synopsis

raster ST_MapAlgebraFctNgb(raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args);

描述

[Warning]

ST_MapAlgebraFctNgb 从2.1.0开始不建议使用。使用 ST_MapAlgebra(回调函数版本) 取而代之的是。

(一个栅格版本)返回一个栅格,该栅格的值是PLPGSQL用户函数的结果,该用户函数涉及输入栅格标注栏中的值的邻域。User函数将像素值的邻域作为数字数组,对于每个像素,返回User函数的结果,将当前检查的像素的像素值替换为函数结果。

RAST

对其计算用户函数的栅格。

频带

要评估的栅格的波段编号。默认为1。

像素类型

输出栅格的结果像素类型。必须是中列出的 ST_BandPixelType 或被省略或设置为空。如果未传入或设置为空,则默认为 RAST 。如果结果大于允许的像素值类型,则结果将被截断。

NGBWIDH

邻居的宽度,以单元格为单位。

NGBHeight

社区的高度,单位为单元格。

一种转储功能

PLPGSQL/psql用户函数,用于应用于栅格的单个波段的邻近像素。第一个元素是表示矩形像素邻域的二维数组

结点模式

定义为nodata或空的邻域像素要传递给函数的值

‘Ignore’:在邻域中遇到的任何NODATA值都会被计算忽略--此标志必须发送给User回调函数,User函数决定如何忽略它。

‘NULL’:邻域中遇到的任何NODATA值都将导致结果像素为空--在这种情况下将跳过用户回调函数。

‘Value’:在邻域中遇到的任何NODATA值都将被参考像素(位于邻域中心的像素)替换。请注意,如果此值为NODATA,则行为与‘NULL’相同(对于受影响的邻域)

参数

要传递给User函数的参数。

可用性:2.0.0

示例

示例将Katrina栅格作为单个切片加载,如中所述 http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html 然后在 ST_Rescale 示例

--
-- A simple 'callback' user function that averages up all the values in a neighborhood.
--
CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[])
    RETURNS float AS
    $$
    DECLARE
        _matrix float[][];
        x1 integer;
        x2 integer;
        y1 integer;
        y2 integer;
        sum float;
    BEGIN
        _matrix := matrix;
        sum := 0;
        FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP
            FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP
                sum := sum + _matrix[x][y];
            END LOOP;
        END LOOP;
        RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ;
    END;
    $$
LANGUAGE 'plpgsql' IMMUTABLE COST 1000;

-- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction --
SELECT ST_MapAlgebraFctNgb(rast, 1,  '8BUI', 4,4,
        'rast_avg(float[][], text, text[])'::regprocedure, 'NULL', NULL) As nn_with_border
    FROM katrinas_rescaled
    limit 1;
                    

我们栅格的第一个波段

对彼此4x4像素的像素进行平均后的新栅格


Name

ST_Reclass — 创建由从原始标注栏重新分类的标注栏类型组成的新栅格。nband是要更改的频带。如果未指定nband,则假定为1。所有其他波段将原封不动地返回。用例:将16BUI波段转换为8BUI,以此类推,以便更简单地呈现为可视格式。

Synopsis

raster ST_Reclass(raster rast, integer nband, text reclassexpr, text pixeltype, double precision nodataval=NULL);

raster ST_Reclass(raster rast, reclassarg[] VARIADIC reclassargset);

raster ST_Reclass(raster rast, text reclassexpr, text pixeltype);

描述

通过应用由定义的有效PostgreSQL代数运算创建新栅格 重分类表达式 在输入栅格上( RAST )。如果没有 频带 是指定的,则假定为带1。新栅格将具有与原始栅格相同的地理参考、宽度和高度。未指定的乐队将原封不动地返回。参考 重新分类 用于描述有效的重分类表达式。

新栅格的波段将具有像素类型 像素类型 。如果 重定义集 则每个重分类定义所生成的每个波段的行为。

可用性:2.0.0

示例基本知识

从原始栅格创建新栅格,其中波段2从8BUI转换为4BUI,101-254之间的所有值都设置为nodata值。

ALTER TABLE dummy_rast ADD COLUMN reclass_rast raster;
UPDATE dummy_rast SET reclass_rast = ST_Reclass(rast,2,'0-87:1-10, 88-100:11-15, 101-254:0-0', '4BUI',0) WHERE rid = 2;

SELECT i as col, j as row, ST_Value(rast,2,i,j) As origval,
    ST_Value(reclass_rast, 2, i, j) As reclassval,
    ST_Value(reclass_rast, 2, i, j, false) As reclassval_include_nodata
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;

 col | row | origval | reclassval | reclassval_include_nodata
-----+-----+---------+------------+---------------------------
   1 |   1 |      78 |          9 |                         9
   2 |   1 |      98 |         14 |                        14
   3 |   1 |     122 |            |                         0
   1 |   2 |      96 |         14 |                        14
   2 |   2 |     118 |            |                         0
   3 |   2 |     180 |            |                         0
   1 |   3 |      99 |         15 |                        15
   2 |   3 |     112 |            |                         0
   3 |   3 |     169 |            |                         0
                    

示例:使用多个重分类的高级

从原始栅格创建新栅格,其中波段1、2、3分别转换为1BB、4BUI、4BUI并重新分类。请注意,这使用了变量 重新分类 可以接受无限数量的重分类参数作为输入的参数(理论上与您拥有的波段数相同)

UPDATE dummy_rast SET reclass_rast =
    ST_Reclass(rast,
        ROW(2,'0-87]:1-10, (87-100]:11-15, (101-254]:0-0', '4BUI',NULL)::reclassarg,
        ROW(1,'0-253]:1, 254:0', '1BB', NULL)::reclassarg,
        ROW(3,'0-70]:1, (70-86:2, [86-150):3, [150-255:4', '4BUI', NULL)::reclassarg
        ) WHERE rid = 2;

SELECT i as col, j as row,ST_Value(rast,1,i,j) As ov1,  ST_Value(reclass_rast, 1, i, j) As rv1,
    ST_Value(rast,2,i,j) As ov2, ST_Value(reclass_rast, 2, i, j) As rv2,
    ST_Value(rast,3,i,j) As ov3, ST_Value(reclass_rast, 3, i, j) As rv3
FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j
WHERE rid = 2;

col | row | ov1 | rv1 | ov2 | rv2 | ov3 | rv3
----+-----+-----+-----+-----+-----+-----+-----
  1 |   1 | 253 |   1 |  78 |   9 |  70 |   1
  2 |   1 | 254 |   0 |  98 |  14 |  86 |   3
  3 |   1 | 253 |   1 | 122 |   0 | 100 |   3
  1 |   2 | 253 |   1 |  96 |  14 |  80 |   2
  2 |   2 | 254 |   0 | 118 |   0 | 108 |   3
  3 |   2 | 254 |   0 | 180 |   0 | 162 |   4
  1 |   3 | 250 |   1 |  99 |  15 |  90 |   3
  2 |   3 | 254 |   0 | 112 |   0 | 108 |   3
  3 |   3 | 254 |   0 | 169 |   0 | 175 |   4
                    

示例:高级将单波段32BF栅格映射到多个可见波段

从只有一个32bf波段的栅格创建新的3波段(8BUI、8BUI、8BUI可见栅格

ALTER TABLE wind ADD COLUMN rast_view raster;
UPDATE wind
    set rast_view = ST_AddBand( NULL,
        ARRAY[
    ST_Reclass(rast, 1,'0.1-10]:1-10,9-10]:11,(11-33:0'::text, '8BUI'::text,0),
    ST_Reclass(rast,1, '11-33):0-255,[0-32:0,(34-1000:0'::text, '8BUI'::text,0),
    ST_Reclass(rast,1,'0-32]:0,(32-100:100-255'::text, '8BUI'::text,0)
    ]
    );
                    

Name

ST_Union — 将一组栅格平铺的并集返回由1个或多个标注栏组成的单个栅格。

Synopsis

raster ST_Union(setof raster rast);

raster ST_Union(setof raster rast, unionarg[] unionargset);

raster ST_Union(setof raster rast, integer nband);

raster ST_Union(setof raster rast, text uniontype);

raster ST_Union(setof raster rast, integer nband, text uniontype);

描述

将一组栅格平铺的并集返回到至少由一个标注栏组成的单个栅格中。生成的栅格范围是整个集合的范围。在相交的情况下,结果值由 Uniontype 它是以下之一:最后(默认)、第一、最小、最大、计数、总和、平均值、范围。

[Note]

为了联合栅格,它们必须都具有相同的对齐方式。使用 ST_SameAlignmentST_NotSameAlignmentReason 获取更多详细信息和帮助。解决对齐问题的一种方法是使用 ST_Resample 并使用相同的参考栅格进行对齐。

可用性:2.0.0

增强:2.1.0速度提高(完全基于C语言)。

可用性:2.1.0推出了ST_Union(RAST,unionarg)变体。

增强:2.1.0 ST_UNION(RAST)(变体1)合并所有输入栅格的所有波段。以前的PostGIS版本假定为第一个频段。

增强:2.1.0 ST_UNION(RAST,uniontype)(变体4)合并所有输入栅格的所有波段。

示例:重建单波段分块栅格切片

-- this creates a single band from first band of raster tiles
-- that form the original file system tile
SELECT filename, ST_Union(rast,1) As file_rast
FROM sometable WHERE filename IN('dem01', 'dem02') GROUP BY filename;
                    

示例:返回多波段栅格,该栅格是与几何图形相交的切片的并集

-- this creates a multi band raster collecting all the tiles that intersect a line
-- Note: In 2.0, this would have just returned a single band raster
-- , new union works on all bands by default
-- this is equivalent to unionarg: ARRAY[ROW(1, 'LAST'), ROW(2, 'LAST'), ROW(3, 'LAST')]::unionarg[]
SELECT ST_Union(rast)
FROM aerials.boston
WHERE ST_Intersects(rast,  ST_GeomFromText('LINESTRING(230486 887771, 230500 88772)',26986) );
                    

示例:返回多波段栅格,该栅格是与几何图形相交的切片的并集

在这里,如果我们只想要波段的子集或想要更改波段的顺序,则使用较长的语法

-- this creates a multi band raster collecting all the tiles that intersect a line
SELECT ST_Union(rast,ARRAY[ROW(2, 'LAST'), ROW(1, 'LAST'), ROW(3, 'LAST')]::unionarg[])
FROM aerials.boston
WHERE ST_Intersects(rast,  ST_GeomFromText('LINESTRING(230486 887771, 230500 88772)',26986) );
                    

12.13. 内置地图代数回调函数

ST_Distinct4ma — 栅格处理函数,用于计算邻域中唯一像素值的数量。
ST_InvDistWeight4ma — 从像素点的邻域内插像素值的栅格处理功能。
ST_Max4ma — 计算邻域中最大像素值的栅格处理函数。
ST_Mean4ma — 栅格处理函数,用于计算邻域中的平均像素值。
ST_Min4ma — 计算邻域中最小像素值的栅格处理函数。
ST_MinDist4ma — 栅格处理函数,返回感兴趣的像素与相邻像素之间的最小距离(以像素数表示)。
ST_Range4ma — 计算邻域内像素值范围的栅格处理函数。
ST_StdDev4ma — 栅格处理功能,用于计算邻域内像素值的标准偏差。
ST_Sum4ma — 计算邻域中所有像素值之和的栅格处理函数。

Name

ST_Distinct4ma — 栅格处理函数,用于计算邻域中唯一像素值的数量。

Synopsis

float8 ST_Distinct4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Distinct4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中唯一像素值的数量。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_distinct4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid | st_value
-----+----------
   2 |        3
(1 row)
                

Name

ST_InvDistWeight4ma — 从像素点的邻域内插像素值的栅格处理功能。

Synopsis

double precision ST_InvDistWeight4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

使用反距离加权方法计算像素的插值值。

可以传递两个可选参数 用户参数 。第一个参数是在反距离加权方程中使用的介于0和1之间的功率因数(下式中的变量k)。如果未指定,则默认为1。第二个参数是仅当感兴趣的像素值包含在邻域内插值中时才应用的权重百分比。如果未指定,并且感兴趣的像素具有值,则返回该值。

基本的反距离权重公式为:

K=功率因数,介于0和1之间的实数

[Note]

此函数是专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

可用性:2.1.0

示例

-- NEEDS EXAMPLE
                

Name

ST_Max4ma — 计算邻域中最大像素值的栅格处理函数。

Synopsis

float8 ST_Max4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Max4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中的最大像素值。

对于变体2,可以通过将该值传递给userargs来指定NODATA像素的替换值。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_max4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid | st_value
-----+----------
   2 |      254
(1 row)
                

Name

ST_Mean4ma — 栅格处理函数,用于计算邻域中的平均像素值。

Synopsis

float8 ST_Mean4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Mean4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中的平均像素值。

对于变体2,可以通过将该值传递给userargs来指定NODATA像素的替换值。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例:变体1

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_mean4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid |     st_value
-----+------------------
   2 | 253.222229003906
(1 row)
                

示例:变体2

SELECT
    rid,
    st_value(
              ST_MapAlgebra(rast, 1, 'st_mean4ma(double precision[][][], integer[][], text[])'::regprocedure,'32BF', 'FIRST', NULL, 1, 1)
       ,  2, 2)
  FROM dummy_rast
   WHERE rid = 2;
 rid |     st_value
-----+------------------
   2 | 253.222229003906
(1 row)

Name

ST_Min4ma — 计算邻域中最小像素值的栅格处理函数。

Synopsis

float8 ST_Min4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Min4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中的最小像素值。

对于变体2,可以通过将该值传递给userargs来指定NODATA像素的替换值。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_min4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid | st_value
-----+----------
   2 |      250
(1 row)
                

Name

ST_MinDist4ma — 栅格处理函数,返回感兴趣的像素与相邻像素之间的最小距离(以像素数表示)。

Synopsis

double precision ST_MinDist4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

返回感兴趣的像素和邻域中具有值的最近像素之间的最短距离(以像素数表示)。

[Note]

此函数的目的是提供信息性数据点,以帮助推断感兴趣像素的插值值的有用性 ST_InvDistWeight4ma 。当邻近区域人口稀少时,此功能特别有用。

[Note]

此函数是专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

可用性:2.1.0

示例

-- NEEDS EXAMPLE
                

Name

ST_Range4ma — 计算邻域内像素值范围的栅格处理函数。

Synopsis

float8 ST_Range4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Range4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中的像素值范围。

对于变体2,可以通过将该值传递给userargs来指定NODATA像素的替换值。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, NULL, 1, 1, 'st_range4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid | st_value
-----+----------
   2 |        4
(1 row)
                

Name

ST_StdDev4ma — 栅格处理功能,用于计算邻域内像素值的标准偏差。

Synopsis

float8 ST_StdDev4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_StdDev4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中像素值的标准偏差。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_stddev4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid |     st_value
-----+------------------
   2 | 1.30170822143555
(1 row)
                

Name

ST_Sum4ma — 计算邻域中所有像素值之和的栅格处理函数。

Synopsis

float8 ST_Sum4ma(float8[][] matrix, text nodatamode, text[] VARIADIC args);

double precision ST_Sum4ma(double precision[][][] value, integer[][] pos, text[] VARIADIC userargs);

描述

计算像素邻域中所有像素值的总和。

对于变体2,可以通过将该值传递给userargs来指定NODATA像素的替换值。

[Note]

变体1是一个专门的回调函数,用作 ST_MapAlgebraFctNgb

[Note]

变体2是一个专门的回调函数,用作 ST_MapAlgebra(回调函数版本)

[Warning]

不鼓励使用备选方案1,因为 ST_MapAlgebraFctNgb 自2.1.0起已被弃用。

可用性:2.0.0

增强版:2.1.0增加了变体2

示例

SELECT
    rid,
    st_value(
        st_mapalgebrafctngb(rast, 1, '32BF', 1, 1, 'st_sum4ma(float[][],text,text[])'::regprocedure, 'ignore', NULL), 2, 2
    )
FROM dummy_rast
WHERE rid = 2;
 rid | st_value
-----+----------
   2 |     2279
(1 row)
                

12.14. 栅格处理:DEM(高程)

ST_Aspect — 返回高程栅格标注栏的纵横比(默认情况下以度为单位)。对于分析地形非常有用。
ST_HillShade — 使用提供的方位角、海拔高度、亮度和比例输入返回高程栅格波段的假设照明。
ST_Roughness — 返回具有计算出的DEM“粗糙度”的栅格。
ST_Slope — 返回高程栅格标注栏的坡度(默认情况下以度为单位)。对于分析地形非常有用。
ST_TPI — 返回具有计算出的地形位置索引的栅格。
ST_TRI — 返回具有计算出的地形崎岖指数的栅格。

Name

ST_Aspect — 返回高程栅格标注栏的纵横比(默认情况下以度为单位)。对于分析地形非常有用。

Synopsis

raster ST_Aspect(raster rast, integer band=1, text pixeltype=32BF, text units=DEGREES, boolean interpolate_nodata=FALSE);

raster ST_Aspect(raster rast, integer band, raster customextent, text pixeltype=32BF, text units=DEGREES, boolean interpolate_nodata=FALSE);

描述

返回高程栅格标注栏的纵横比(默认情况下以度为单位)。利用地图代数并将纵横比方程应用于相邻像素。

单位 指示纵横比的单位。可能的值为:弧度、度数(默认)。

什么时候 单位 =弧度,值介于0和2*圆周率弧度之间,从北向顺时针测量。

什么时候 单位 =度,值在0到360度之间,从北向顺时针测量。

如果像素斜率为零,则像素纵横比为-1。

[Note]

有关坡度、坡向和山体阴影的更多信息,请参阅 ESRI-山体阴影的工作原理 ERDAS现场指南-纵横比图像

可用性:2.0.0

增强版:2.1.0使用ST_MapAlgebra()并添加了可选 interpolate_nodata 函数参数

更改:2.1.0在以前的版本中,返回值以弧度为单位。现在,返回值默认为度

示例:变体1

WITH foo AS (
    SELECT ST_SetValues(
        ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 1, 1, 1],
            [1, 2, 2, 2, 1],
            [1, 2, 3, 2, 1],
            [1, 2, 2, 2, 1],
            [1, 1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_DumpValues(ST_Aspect(rast, 1, '32BF'))
FROM foo

                                                                                                    st_dumpvalues

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------
 (1,"{{315,341.565063476562,0,18.4349479675293,45},{288.434936523438,315,0,45,71.5650482177734},{270,270,-1,90,90},{251.565048217773,225,180,135,108.434951782227},{225,198.43495178
2227,180,161.565048217773,135}}")
(1 row)
                    

示例:变体2

Coverage平铺的完整示例。此查询仅适用于PostgreSQL 9.1或更高版本。

WITH foo AS (
    SELECT ST_Tile(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_Aspect(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Name

ST_HillShade — 使用提供的方位角、海拔高度、亮度和比例输入返回高程栅格波段的假设照明。

Synopsis

raster ST_HillShade(raster rast, integer band=1, text pixeltype=32BF, double precision azimuth=315, double precision altitude=45, double precision max_bright=255, double precision scale=1.0, boolean interpolate_nodata=FALSE);

raster ST_HillShade(raster rast, integer band, raster customextent, text pixeltype=32BF, double precision azimuth=315, double precision altitude=45, double precision max_bright=255, double precision scale=1.0, boolean interpolate_nodata=FALSE);

描述

使用方位角、海拔高度、亮度和比例输入返回高程栅格标注栏的假设照明。利用地图代数并将山体阴影方程应用于相邻像素。返回的像素值介于0和255之间。

方位角 是从北向顺时针测量的介于0度和360度之间的值。

海拔高度 是介于0到90度之间的值,其中0度位于地平线上,90度位于正上方。

max_bright 是介于0和255之间的值,0表示没有亮度,255表示最大亮度。

比例尺 是垂直单位与水平单位的比率。对于英尺:拉特隆使用比例=370400,对于米:拉特龙使用比例=111120。

如果 interpolate_nodata 为真,则输入栅格中的NODATA像素值将使用 ST_InvDistWeight4ma 在计算山体阴影照度之前。

[Note]

有关山体阴影的更多信息,请参阅 山体阴影的工作原理

可用性:2.0.0

增强版:2.1.0使用ST_MapAlgebra()并添加了可选 interpolate_nodata 函数参数

更改:2.1.0在以前的版本中,方位角和高度以弧度表示。现在,方位角和高度以度为单位

示例:变体1

WITH foo AS (
    SELECT ST_SetValues(
        ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 1, 1, 1],
            [1, 2, 2, 2, 1],
            [1, 2, 3, 2, 1],
            [1, 2, 2, 2, 1],
            [1, 1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_DumpValues(ST_Hillshade(rast, 1, '32BF'))
FROM foo

                                                                                                                       st_dumpvalues

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------
 (1,"{{NULL,NULL,NULL,NULL,NULL},{NULL,251.32763671875,220.749786376953,147.224319458008,NULL},{NULL,220.749786376953,180.312225341797,67.7497863769531,NULL},{NULL,147.224319458008
,67.7497863769531,43.1210060119629,NULL},{NULL,NULL,NULL,NULL,NULL}}")
(1 row)
                    

示例:变体2

Coverage平铺的完整示例。此查询仅适用于PostgreSQL 9.1或更高版本。

WITH foo AS (
    SELECT ST_Tile(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_Hillshade(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Name

ST_Roughness — 返回具有计算出的DEM“粗糙度”的栅格。

Synopsis

raster ST_Roughness(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

描述

通过从给定区域的最小值中减去最大值来计算DEM的“粗糙度”。

可用性:2.1.0

示例

-- needs examples
                    

Name

ST_Slope — 返回高程栅格标注栏的坡度(默认情况下以度为单位)。对于分析地形非常有用。

Synopsis

raster ST_Slope(raster rast, integer nband=1, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE);

raster ST_Slope(raster rast, integer nband, raster customextent, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE);

描述

返回高程栅格标注栏的坡度(默认情况下以度为单位)。利用地图代数并将斜率方程应用于相邻像素。

单位 指示坡度的单位。可能的值有:弧度、度(默认)、百分比。

比例尺 是垂直单位与水平单位的比率。对于英尺:拉特隆使用比例=370400,对于米:拉特龙使用比例=111120。

如果 interpolate_nodata 为真,则输入栅格中的NODATA像素值将使用 ST_InvDistWeight4ma 在计算表面坡度之前。

[Note]

有关坡度、坡向和山体阴影的更多信息,请参阅 ESRI-山体阴影的工作原理 ERDAS野外指南-坡度图像

可用性:2.0.0

增强版:2.1.0使用ST_MapAlgebra()并添加了可选 单位 比例尺 interpolate_nodata 函数参数

更改:2.1.0在以前的版本中,返回值以弧度为单位。现在,返回值默认为度

示例:变体1

WITH foo AS (
    SELECT ST_SetValues(
        ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
        1, 1, 1, ARRAY[
            [1, 1, 1, 1, 1],
            [1, 2, 2, 2, 1],
            [1, 2, 3, 2, 1],
            [1, 2, 2, 2, 1],
            [1, 1, 1, 1, 1]
        ]::double precision[][]
    ) AS rast
)
SELECT
    ST_DumpValues(ST_Slope(rast, 1, '32BF'))
FROM foo

                            st_dumpvalues

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
 (1,"{{10.0249881744385,21.5681285858154,26.5650520324707,21.5681285858154,10.0249881744385},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},
{26.5650520324707,36.8698959350586,0,36.8698959350586,26.5650520324707},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},{10.0249881744385,21.
5681285858154,26.5650520324707,21.5681285858154,10.0249881744385}}")
(1 row)
                    

示例:变体2

Coverage平铺的完整示例。此查询仅适用于PostgreSQL 9.1或更高版本。

WITH foo AS (
    SELECT ST_Tile(
        ST_SetValues(
            ST_AddBand(
                ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
                1, '32BF', 0, -9999
            ),
            1, 1, 1, ARRAY[
                [1, 1, 1, 1, 1, 1],
                [1, 1, 1, 1, 2, 1],
                [1, 2, 2, 3, 3, 1],
                [1, 1, 3, 2, 1, 1],
                [1, 2, 2, 1, 2, 1],
                [1, 1, 1, 1, 1, 1]
            ]::double precision[]
        ),
        2, 2
    ) AS rast
)
SELECT
    t1.rast,
    ST_Slope(ST_Union(t2.rast), 1, t1.rast)
FROM foo t1
CROSS JOIN foo t2
WHERE ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rast;
                    

Name

ST_TPI — 返回具有计算出的地形位置索引的栅格。

Synopsis

raster ST_TPI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

描述

计算地形位置指数,该指数定义为半径为1减去中心单元格的焦点平均值。

[Note]

此函数仅支持焦点平均半径为1。

可用性:2.1.0

示例

-- needs examples
                    

Name

ST_TRI — 返回具有计算出的地形崎岖指数的栅格。

Synopsis

raster ST_TRI(raster rast, integer nband, raster customextent, text pixeltype="32BF" , boolean interpolate_nodata=FALSE );

描述

地形坚固性指数的计算方法是将中心像素与其相邻像素进行比较,取其差值的绝对值,然后对结果进行平均。

[Note]

此函数仅支持焦点平均半径为1。

可用性:2.1.0

示例

-- needs examples
                    

12.15. 栅格处理:栅格到几何图形

Box3D — 返回栅格的封闭框的框3D表示。
ST_ConvexHull — 返回栅格的凸壳几何图形,包括等于BandNoDataValue的像素值。对于形状规则且无倾斜的栅格,这将提供与ST_Entaine相同的结果,因此仅适用于形状不规则或倾斜的栅格。
ST_DumpAsPolygons — 返回给定栅格标注栏中的一组geomval(geom,val)行。如果未指定波段编号,则波段编号默认为1。
ST_Envelope — 返回栅格范围的多边形表示。
ST_MinConvexHull — 返回不包括NODATA像素的栅格凸包几何图形。
ST_Polygon — 返回由像素值不是无数据值的像素并集形成的多多边形几何图形。如果未指定波段编号,则波段编号默认为1。

Name

Box3D — 返回栅格的封闭框的框3D表示。

Synopsis

box3d Box3D(raster rast);

描述

返回表示栅格范围的框。

多边形由边界框的角点定义(( MINX MINY )、( MAXX MAXY ))

更改:2.0.0在2.0之前的版本中,原来是box2d而不是box3d。由于box2d是不推荐使用的类型,因此已更改为box3d。

示例

SELECT
    rid,
    Box3D(rast) AS rastbox
FROM dummy_rast;

rid |        rastbox
----+-------------------------------------------------
1   | BOX3D(0.5 0.5 0,20.5 60.5 0)
2   | BOX3D(3427927.75 5793243.5 0,3427928 5793244 0)
                    

另请参阅

ST_Envelope


Name

ST_ConvexHull — 返回栅格的凸壳几何图形,包括等于BandNoDataValue的像素值。对于形状规则且无倾斜的栅格,这将提供与ST_Entaine相同的结果,因此仅适用于形状不规则或倾斜的栅格。

Synopsis

geometry ST_ConvexHull(raster rast);

描述

返回包含NoDataBandValue波段像素的栅格凸壳几何图形。对于形状规则且无倾斜的栅格,这会产生与ST_Entaine大致相同的结果,因此仅适用于形状不规则或倾斜的栅格。

[Note]

ST_Entaine填充坐标,因此在栅格周围添加一些缓冲区,因此答案与ST_ConvexHull略有不同,ST_ConvexHull不填充。

示例

请参阅 PostGIS栅格规范 以获得这方面的图表。

-- Note envelope and convexhull are more or less the same
SELECT ST_AsText(ST_ConvexHull(rast)) As convhull,
    ST_AsText(ST_Envelope(rast)) As env
FROM dummy_rast WHERE rid=1;

                        convhull                        |                env
--------------------------------------------------------+------------------------------------
 POLYGON((0.5 0.5,20.5 0.5,20.5 60.5,0.5 60.5,0.5 0.5)) | POLYGON((0 0,20 0,20 60,0 60,0 0))
                
-- now we skew the raster
-- note how the convex hull and envelope are now different
SELECT ST_AsText(ST_ConvexHull(rast)) As convhull,
    ST_AsText(ST_Envelope(rast)) As env
FROM (SELECT ST_SetRotation(rast, 0.1, 0.1) As rast
    FROM dummy_rast WHERE rid=1) As foo;

                        convhull                        |                env
--------------------------------------------------------+------------------------------------
 POLYGON((0.5 0.5,20.5 1.5,22.5 61.5,2.5 60.5,0.5 0.5)) | POLYGON((0 0,22 0,22 61,0 61,0 0))
                    

Name

ST_DumpAsPolygons — 返回给定栅格标注栏中的一组geomval(geom,val)行。如果未指定波段编号,则波段编号默认为1。

Synopsis

setof geomval ST_DumpAsPolygons(raster rast, integer band_num=1, boolean exclude_nodata_value=TRUE);

描述

这是一个集返回函数(SRF)。它返回一组geomval行,由几何图形(Geom)和像素带值(Val)组成。每个多边形都是该波段中具有相同像素值的所有像素的并集,该值由val表示。

ST_DumpAsPolygon对于多边形化栅格非常有用。它与GROUP BY相反,因为它创建新行。例如,它可用于将单个栅格展开为多个多边形/MULTIPOLYGONS。

更改了3.3.0,禁用了验证和修复以提高性能。可能会产生无效的几何图形。

可用性:需要GDAL 1.7或更高版本。

[Note]

如果没有为波段设置数据值,则不会返回具有该值的像素,除非EXCLUDE_NODATA_VALUE=FALSE。

[Note]

如果只关心栅格中具有给定值的像素数,则使用它会更快 ST_ValueCount

[Note]

这与ST_PixelAsPolygons不同,在ST_PixelAsPolygons中,无论像素值如何,都会为每个像素返回一个几何体。

示例

-- this syntax requires PostgreSQL 9.3+
SELECT val, ST_AsText(geom) As geomwkt
FROM (
SELECT dp.*
FROM dummy_rast, LATERAL ST_DumpAsPolygons(rast) AS dp
WHERE rid = 2
) As foo
WHERE val BETWEEN 249 and 251
ORDER BY val;

 val |                                                       geomwkt
-----+--------------------------------------------------------------------------
 249 | POLYGON((3427927.95 5793243.95,3427927.95 5793243.85,3427928 5793243.85,
        3427928 5793243.95,3427927.95 5793243.95))
 250 | POLYGON((3427927.75 5793243.9,3427927.75 5793243.85,3427927.8 5793243.85,
        3427927.8 5793243.9,3427927.75 5793243.9))
 250 | POLYGON((3427927.8 5793243.8,3427927.8 5793243.75,3427927.85 5793243.75,
        3427927.85 5793243.8, 3427927.8 5793243.8))
 251 | POLYGON((3427927.75 5793243.85,3427927.75 5793243.8,3427927.8 5793243.8,
        3427927.8 5793243.85,3427927.75 5793243.85))
                    

Name

ST_Envelope — 返回栅格范围的多边形表示。

Synopsis

geometry ST_Envelope(raster rast);

描述

以sRID定义的空间坐标单位返回栅格范围的多边形表示。它是一个表示为多边形的浮动最小边界框。

多边形由边界框的角点定义(( MINX MINY )、( MINX MAXY )、( MAXX MAXY )、( MAXX MINY )、( MINX MINY ))

示例

SELECT rid, ST_AsText(ST_Envelope(rast)) As envgeomwkt
FROM dummy_rast;

 rid |                                         envgeomwkt
-----+--------------------------------------------------------------------
   1 | POLYGON((0 0,20 0,20 60,0 60,0 0))
   2 | POLYGON((3427927 5793243,3427928 5793243,
        3427928 5793244,3427927 5793244, 3427927 5793243))
                    

Name

ST_MinConvexHull — 返回不包括NODATA像素的栅格凸包几何图形。

Synopsis

geometry ST_MinConvexHull(raster rast, integer nband=NULL);

描述

返回不包括NODATA像素的栅格的凸包几何图形。如果 N带 为空,则考虑栅格的所有波段。

可用性:2.1.0

示例

WITH foo AS (
    SELECT
        ST_SetValues(
            ST_SetValues(
                ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 0, 0), 2, '8BUI', 1, 0),
                1, 1, 1,
                ARRAY[
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 1, 0, 0, 0, 0, 1],
                    [0, 0, 0, 1, 1, 0, 0, 0, 0],
                    [0, 0, 0, 1, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0, 0, 0, 0]
                ]::double precision[][]
            ),
            2, 1, 1,
            ARRAY[
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 1, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 1, 0, 0, 0, 0, 0, 0]
            ]::double precision[][]
        ) AS rast
)
SELECT
    ST_AsText(ST_ConvexHull(rast)) AS hull,
    ST_AsText(ST_MinConvexHull(rast)) AS mhull,
    ST_AsText(ST_MinConvexHull(rast, 1)) AS mhull_1,
    ST_AsText(ST_MinConvexHull(rast, 2)) AS mhull_2
FROM foo

               hull               |                mhull                |               mhull_1               |               mhull_2
----------------------------------+-------------------------------------+-------------------------------------+-------------------------------------
 POLYGON((0 0,9 0,9 -9,0 -9,0 0)) | POLYGON((0 -3,9 -3,9 -9,0 -9,0 -3)) | POLYGON((3 -3,9 -3,9 -6,3 -6,3 -3)) | POLYGON((0 -3,6 -3,6 -9,0 -9,0 -3))
                    

Name

ST_Polygon — 返回由像素值不是无数据值的像素并集形成的多多边形几何图形。如果未指定波段编号,则波段编号默认为1。

Synopsis

geometry ST_Polygon(raster rast, integer band_num=1);

描述

更改了3.3.0,禁用了验证和修复以提高性能。可能会产生无效的几何图形。

可用性:0.1.6需要GDAL 1.7或更高版本。

增强:2.1.0速度提升(完全基于C),并确保返回的多边形有效。

已更改:2.1.0在以前的版本中有时会返回一个多边形,更改为始终返回多重多边形。

示例

-- by default no data band value is 0 or not set, so polygon will return a square polygon
SELECT ST_AsText(ST_Polygon(rast)) As geomwkt
FROM dummy_rast
WHERE rid = 2;

geomwkt
--------------------------------------------
MULTIPOLYGON(((3427927.75 5793244,3427928 5793244,3427928 5793243.75,3427927.75 5793243.75,3427927.75 5793244)))


-- now we change the no data value of first band
UPDATE dummy_rast SET rast = ST_SetBandNoDataValue(rast,1,254)
WHERE rid = 2;
SELECt rid, ST_BandNoDataValue(rast)
from dummy_rast where rid = 2;

-- ST_Polygon excludes the pixel value 254 and returns a multipolygon
SELECT ST_AsText(ST_Polygon(rast)) As geomwkt
FROM dummy_rast
WHERE rid = 2;

geomwkt
---------------------------------------------------------
MULTIPOLYGON(((3427927.9 5793243.95,3427927.85 5793243.95,3427927.85 5793244,3427927.9 5793244,3427927.9 5793243.95)),((3427928 5793243.85,3427928 5793243.8,3427927.95 5793243.8,3427927.95 5793243.85,3427927.9 5793243.85,3427927.9 5793243.9,3427927.9 5793243.95,3427927.95 5793243.95,3427928 5793243.95,3427928 5793243.85)),((3427927.8 5793243.75,3427927.75 5793243.75,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.8 5793243.9,3427927.8 5793243.85,3427927.85 5793243.85,3427927.85 5793243.8,3427927.85 5793243.75,3427927.8 5793243.75)))

-- Or if you want the no data value different for just one time

SELECT ST_AsText(
    ST_Polygon(
        ST_SetBandNoDataValue(rast,1,252)
        )
    ) As geomwkt
FROM dummy_rast
WHERE rid =2;

geomwkt
---------------------------------
MULTIPOLYGON(((3427928 5793243.85,3427928 5793243.8,3427928 5793243.75,3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8,3427927.75 5793243.8,3427927.75 5793243.85,3427927.75 5793243.9,3427927.75 5793244,3427927.8 5793244,3427927.85 5793244,3427927.9 5793244,3427928 5793244,3427928 5793243.95,3427928 5793243.85),(3427927.9 5793243.9,3427927.9 5793243.85,3427927.95 5793243.85,3427927.95 5793243.9,3427927.9 5793243.9)))
                    

12.16. 栅格运算符

& & — 退货 TRUE 如果A的边界框与B的边界框相交。
& < — 退货 TRUE 如果A的边界框在B的左侧。
& > — 退货 TRUE 如果A的边界框在B的右侧。
= — 退货 TRUE 如果A的边界框与B的边界框相同。使用双精度边界框。
@ — 退货 TRUE 如果A的边界框包含在B的边界框中。则使用双精度边界框。
~= — 退货 TRUE 如果A的边界框与B的边界框相同。
~ — 退货 TRUE 如果A的边界框包含B的边界框。使用双精度边界框。

Name

& & — 退货 TRUE 如果A的边界框与B的边界框相交。

Synopsis

boolean &&( raster A , raster B );

boolean &&( raster A , geometry B );

boolean &&( geometry B , raster A );

描述

这个 & & 运算符返回 TRUE 如果栅格/几何A的边框与栅格/几何B的边框相交。

[Note]

此操作数将使用栅格上可能可用的任何索引。

可用性:2.0.0

示例

SELECT A.rid As a_rid, B.rid As b_rid, A.rast && B.rast As intersect
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B LIMIT 3;

 a_rid | b_rid | intersect
-------+-------+---------
     2 |     2 | t
     2 |     3 | f
     2 |     1 | f

Name

& < — 退货 TRUE 如果A的边界框在B的左侧。

Synopsis

boolean &<( raster A , raster B );

描述

这个 & < 运算符返回 TRUE 如果栅格A的边框与栅格B的边框重叠或位于栅格B的边框的左侧,或者更准确地说,与栅格B的边框重叠或不在栅格B的边框的右侧。

[Note]

此操作数将使用栅格上可能可用的任何索引。

示例

SELECT A.rid As a_rid, B.rid As b_rid, A.rast &< B.rast As overleft
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;

a_rid | b_rid | overleft
------+-------+----------
    2 |     2 | t
    2 |     3 | f
    2 |     1 | f
    3 |     2 | t
    3 |     3 | t
    3 |     1 | f
    1 |     2 | t
    1 |     3 | t
    1 |     1 | t

Name

& > — 退货 TRUE 如果A的边界框在B的右侧。

Synopsis

boolean &>( raster A , raster B );

描述

这个 & > 运算符返回 TRUE 如果栅格A的边框与栅格B的边框重叠或位于栅格B的边框的右侧,或者更准确地说,与栅格B的边框重叠或不在栅格B的边框的左侧。

[Note]

此操作数将使用几何图形上可用的任何索引。

示例

SELECT A.rid As a_rid, B.rid As b_rid, A.rast &> B.rast As overright
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;

 a_rid | b_rid | overright
-------+-------+----------
     2 |     2 | t
     2 |     3 | t
     2 |     1 | t
     3 |     2 | f
     3 |     3 | t
     3 |     1 | f
     1 |     2 | f
     1 |     3 | t
     1 |     1 | t

Name

= — 退货 TRUE 如果A的边界框与B的边界框相同。使用双精度边界框。

Synopsis

boolean =( raster A , raster B );

描述

这个 = 运算符返回 TRUE 如果栅格A的边框与栅格B的边框相同,PostgreSQL使用=, < ,以及 > 为栅格定义的运算符,用于执行栅格的内部排序和比较(即在GROUP BY或ORDER BY子句中)。

[Caution]

此操作数不会使用栅格上可能可用的任何索引。使用 ~= 取而代之的是。该运算符主要存在,因此可以按栅格列进行分组。

可用性:2.1.0

另请参阅

~=


Name

@ — 退货 TRUE 如果A的边界框包含在B的边界框中。则使用双精度边界框。

Synopsis

boolean @( raster A , raster B );

boolean @( geometry A , raster B );

boolean @( raster B , geometry A );

描述

这个 @ 运算符返回 TRUE 如果栅格/几何A的边框包含在栅格/几何B的边框中。

[Note]

该操作数将对栅格使用空间索引。

可用性:2.0.0 RASTER@RASTER,引入RASTER@GEOMETRY

提供:推出2.0.5几何@栅格

另请参阅

~


Name

~= — 退货 TRUE 如果A的边界框与B的边界框相同。

Synopsis

boolean ~=( raster A , raster B );

描述

这个 ~= 运算符返回 TRUE 如果栅格A的边框与栅格B的边框相同。

[Note]

此操作数将使用栅格上可能可用的任何索引。

可用性:2.0.0

示例

非常有用的用法是获取两组块相同但表示不同主题的单波段栅格,并创建多波段栅格

SELECT ST_AddBand(prec.rast, alt.rast) As new_rast
    FROM prec INNER JOIN alt ON (prec.rast ~= alt.rast);
        

另请参阅

ST_AddBand, =


Name

~ — 退货 TRUE 如果A的边界框包含B的边界框。使用双精度边界框。

Synopsis

boolean ~( raster A , raster B );

boolean ~( geometry A , raster B );

boolean ~( raster B , geometry A );

描述

这个 ~ 运算符返回 TRUE 如果栅格/几何A的边框包含栅格/几何B的边框。

[Note]

该操作数将对栅格使用空间索引。

可用性:2.0.0

另请参阅

@

12.17. 栅格和栅格波段空间关系

ST_Contains — 如果栅格栅格B的点没有位于栅格RASTA的外部,并且栅格B的内部至少有一个点位于RASTA的内部,则返回TRUE。
ST_ContainsProperly — 如果rastB与Rasta的内部相交,但不与Rasta的边界或外部相交,则返回TRUE。
ST_Covers — 如果栅格栅格B的点没有位于栅格RASTA之外,则返回TRUE。
ST_CoveredBy — 如果没有栅格RASTA的点位于栅格栅格B之外,则返回TRUE。
ST_Disjoint — 如果栅格RASTA在空间上不与rastB相交,则返回TRUE。
ST_Intersects — 如果栅格RASTA与栅格栅格B在空间上相交,则返回TRUE。
ST_Overlaps — 如果栅格RastA和rastB相交,但其中一个没有完全包含另一个,则返回TRUE。
ST_Touches — 如果栅格RastA和rastB至少有一个共同点,但其内部不相交,则返回TRUE。
ST_SameAlignment — 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。
ST_NotSameAlignmentReason — 返回文本,说明栅格是否对齐,如果未对齐,则说明原因。
ST_Within — 如果栅格RastA的点没有位于栅格rastB的外部,并且Rasta的内部至少有一个点位于rastB的内部,则返回TRUE。
ST_DWithin — 如果栅格RastA和rastB彼此在指定距离内,则返回TRUE。
ST_DFullyWithin — 如果栅格RastA和rastB彼此完全在指定距离内,则返回TRUE。

Name

ST_Contains — 如果栅格栅格B的点没有位于栅格RASTA的外部,并且栅格B的内部至少有一个点位于RASTA的内部,则返回TRUE。

Synopsis

boolean ST_Contains( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Contains( raster rastA , raster rastB );

描述

Raster Rasta包含rastB当且仅当rastB的点没有位于rastA的外部并且rastB的内部至少有一个点位于rastA的内部。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请对栅格使用ST_Polygon,例如ST_CONTAINS(ST_Polygon(RASTER),GEOMETRY)或ST_CONTAINS(GEOMETRY,ST_POLYGON(RASTER))。

[Note]

ST_CONTAINS()与ST_WINDOWS()相反。因此,ST_CONTAINS(RASTA,rastB)隐含ST_WINDOWS(rastB,RASTA)。

可用性:2.1.0

示例

-- specified band numbers
SELECT r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;

NOTICE:  The first raster provided has no bands
 rid | rid | st_contains
-----+-----+-------------
   1 |   1 |
   1 |   2 | f
            
-- no band numbers specified
SELECT r1.rid, r2.rid, ST_Contains(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;
 rid | rid | st_contains
-----+-----+-------------
   1 |   1 | t
   1 |   2 | f
            

另请参阅

ST_Intersects, ST_Within


Name

ST_ContainsProperly — 如果rastB与Rasta的内部相交,但不与Rasta的边界或外部相交,则返回TRUE。

Synopsis

boolean ST_ContainsProperly( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_ContainsProperly( raster rastA , raster rastB );

描述

如果rastB与rastA的内部相交,但不与rasta的边界或外部相交,则raster Rasta包含正确的rastB。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

RASTER RASTA未正确包含其自身,但确实包含其自身。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_ContainsProperly(ST_Polygon(Raster),geomy)或ST_ContainsProperly(geomety,ST_Polygon(Raster))。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_ContainsProperly(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_containsproperly
-----+-----+---------------------
   2 |   1 | f
   2 |   2 | f
            

Name

ST_Covers — 如果栅格栅格B的点没有位于栅格RASTA之外,则返回TRUE。

Synopsis

boolean ST_Covers( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Covers( raster rastA , raster rastB );

描述

RASTA覆盖RASTB当且仅当RASTA的外部没有RASTA的点。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_Coverers(ST_Polygon(Raster),geomety)或ST_overers(geomety,ST_Polygon(Raster))。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_Covers(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_covers
-----+-----+-----------
   2 |   1 | f
   2 |   2 | t
            

Name

ST_CoveredBy — 如果没有栅格RASTA的点位于栅格栅格B之外,则返回TRUE。

Synopsis

boolean ST_CoveredBy( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_CoveredBy( raster rastA , raster rastB );

描述

RASTER RASTA被rastB覆盖当且仅当rastB的外部没有RASTA的点。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请对栅格使用ST_Polygon,例如ST_CoveredBy(ST_Polygon(RASTER),GEOMETRY)或ST_COVEREDBY(GEOMETRY,ST_POLYGON(RASTER))。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_CoveredBy(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_coveredby
-----+-----+--------------
   2 |   1 | f
   2 |   2 | t
            

另请参阅

ST_Intersects, ST_Covers


Name

ST_Disjoint — 如果栅格RASTA在空间上不与rastB相交,则返回TRUE。

Synopsis

boolean ST_Disjoint( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Disjoint( raster rastA , raster rastB );

描述

如果栅格RASTA和栅格B不共享任何空间,则它们是不相交的。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数不使用任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_DISCOCT(ST_Polygon(RASTER),GEOMETRY)。

可用性:2.1.0

示例

-- rid = 1 has no bands, hence the NOTICE and the NULL value for st_disjoint
SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

NOTICE:  The second raster provided has no bands
 rid | rid | st_disjoint
-----+-----+-------------
   2 |   1 |
   2 |   2 | f
            
-- this time, without specifying band numbers
SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_disjoint
-----+-----+-------------
   2 |   1 | t
   2 |   2 | f
            

另请参阅

ST_Intersects


Name

ST_Intersects — 如果栅格RASTA与栅格栅格B在空间上相交,则返回TRUE。

Synopsis

boolean ST_Intersects( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Intersects( raster rastA , raster rastB );

boolean ST_Intersects( raster rast , integer nband , geometry geommin );

boolean ST_Intersects( raster rast , geometry geommin , integer nband=NULL );

boolean ST_Intersects( geometry geommin , raster rast , integer nband=NULL );

描述

如果raster RastA在空间上与raster rastB相交,则返回TRUE。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

增强:引入了2.0.0对栅格/栅格相交的支持。

[Warning]

已更改:2.1.0更改了ST_Intersects(栅格、几何图形)变量的行为,以匹配ST_Intersects(几何图形、栅格)的行为。

示例

-- different bands of same raster
SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2;

 st_intersects
---------------
 t
            

Name

ST_Overlaps — 如果栅格RastA和rastB相交,但其中一个没有完全包含另一个,则返回TRUE。

Synopsis

boolean ST_Overlaps( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Overlaps( raster rastA , raster rastB );

描述

如果raster RastA在空间上与raster rastB重叠,则返回TRUE。这意味着RastA和RastB相交,但其中一个并不完全包含另一个。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_Overlaps(ST_Polygon(RASTER),GEOMETRY)。

可用性:2.1.0

示例

-- comparing different bands of same raster
SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2;

 st_overlaps
-------------
 f
            

另请参阅

ST_Intersects


Name

ST_Touches — 如果栅格RastA和rastB至少有一个共同点,但其内部不相交,则返回TRUE。

Synopsis

boolean ST_Touches( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Touches( raster rastA , raster rastB );

描述

如果raster RastA在空间上接触raster rastB,则返回TRUE。这意味着Rasta和rastB至少有一个共同点,但它们的内部并不相交。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此函数将使用栅格上可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_Touches(ST_Polygon(RASTER),GEOMETRY)。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_Touches(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_touches
-----+-----+------------
   2 |   1 | f
   2 |   2 | f
            

另请参阅

ST_Intersects


Name

ST_SameAlignment — 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。

Synopsis

boolean ST_SameAlignment( raster rastA , raster rastB );

boolean ST_SameAlignment( double precision ulx1 , double precision uly1 , double precision scalex1 , double precision scaley1 , double precision skewx1 , double precision skewy1 , double precision ulx2 , double precision uly2 , double precision scalex2 , double precision scaley2 , double precision skewx2 , double precision skewy2 );

boolean ST_SameAlignment( raster set rastfield );

描述

非聚合版本(变量1和2):如果两个栅格(直接提供或使用UPERLUT、SCALE、SKEW和SRID的值生成)具有相同的比例、倾斜、SRID,并且一个栅格的任何像素的四个角中的至少一个落在另一个栅格的栅格的任意角上,则返回TRUE。如果不是,则返回FALSE,并返回详细说明对齐问题的通知。

Aggregate Version(Variant 3):从一组栅格中,如果集合中的所有栅格都对齐,则返回TRUE。在PostgreSQL的术语中,ST_SameAlign()函数是一个“聚合”函数。这意味着它对数据行进行操作,与sum()和avg()函数操作的方式相同。

可用性:2.0.0

增强:2.1.0添加Aggegate变体

示例:栅格

SELECT ST_SameAlignment(
    ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
    ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0)
) as sm;

sm
----
t
SELECT ST_SameAlignment(A.rast,b.rast)
 FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;

 NOTICE:  The two rasters provided have different SRIDs
NOTICE:  The two rasters provided have different SRIDs
 st_samealignment
------------------
 t
 f
 f
 f

Name

ST_NotSameAlignmentReason — 返回文本,说明栅格是否对齐,如果未对齐,则说明原因。

Synopsis

text ST_NotSameAlignmentReason(raster rastA, raster rastB);

描述

返回文本,说明栅格是否对齐,如果未对齐,则说明原因。

[Note]

如果栅格未对齐的原因有多种,则只会返回一种原因(第一个测试失败)。

可用性:2.1.0

示例

SELECT
    ST_SameAlignment(
        ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
        ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
    ),
    ST_NotSameAlignmentReason(
        ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
        ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
    )
;

 st_samealignment |            st_notsamealignmentreason
------------------+-------------------------------------------------
 f                | The rasters have different scales on the X axis
(1 row)
                

Name

ST_Within — 如果栅格RastA的点没有位于栅格rastB的外部,并且Rasta的内部至少有一个点位于rastB的内部,则返回TRUE。

Synopsis

boolean ST_Within( raster rastA , integer nbandA , raster rastB , integer nbandB );

boolean ST_Within( raster rastA , raster rastB );

描述

RASTER RASTA是rastB的当且仅当没有RASTA的点位于rastB的外部,并且RASTA的内部至少有一个点位于rastB的内部。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

[Note]

此操作数将使用栅格上可能可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_Wising(ST_Polygon(RASTER),GEOMETRY)或ST_WITHING(GEOMETRY,ST_POLYGON(RASTER))。

[Note]

ST_WINDOWS()是ST_CONTAINS()的反函数。因此,ST_WITHING(RASTA,rastB)隐含ST_CONTAINS(rastB,RASTA)。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_Within(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_within
-----+-----+-----------
   2 |   1 | f
   2 |   2 | t
            

Name

ST_DWithin — 如果栅格RastA和rastB彼此在指定距离内,则返回TRUE。

Synopsis

boolean ST_DWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid );

boolean ST_DWithin( raster rastA , raster rastB , double precision distance_of_srid );

描述

如果栅格RastA和rastB在彼此的指定距离内,则返回TRUE。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

距离以由栅格的空间参考系定义的单位指定。为了使此函数有意义,源栅格必须具有相同的坐标投影,并且具有相同的SRID。

[Note]

此操作数将使用栅格上可能可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_DWiThin(ST_Polygon(Raster),geometry.)。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_DWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_dwithin
-----+-----+------------
   2 |   1 | f
   2 |   2 | t
            

Name

ST_DFullyWithin — 如果栅格RastA和rastB彼此完全在指定距离内,则返回TRUE。

Synopsis

boolean ST_DFullyWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid );

boolean ST_DFullyWithin( raster rastA , raster rastB , double precision distance_of_srid );

描述

如果栅格RastA和rastB完全在彼此的指定距离内,则返回TRUE。如果未提供波段编号(或设置为空),则在测试中仅考虑栅格的凸包。如果提供了波段编号,则在测试中只考虑那些有值的像素(不考虑NODATA)。

距离以由栅格的空间参考系定义的单位指定。为了使此函数有意义,源栅格必须具有相同的坐标投影,并且具有相同的SRID。

[Note]

此操作数将使用栅格上可能可用的任何索引。

[Note]

要测试栅格和几何图形的空间关系,请在栅格上使用ST_Polygon,例如ST_DFullyWiThin(ST_Polygon(Raster),geomy)。

可用性:2.1.0

示例

SELECT r1.rid, r2.rid, ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;

 rid | rid | st_dfullywithin
-----+-----+-----------------
   2 |   1 | f
   2 |   2 | t
            

另请参阅

ST_Within, ST_DWithin

12.18. 栅格提示

Abstract

本部分记录了与PostGIS栅格相关的各种问题和提示。

12.18.1. Out-DB栅格

12.18.1.1. 包含许多文件的目录

当GDAL打开一个文件时,GDAL会急切地扫描该文件的目录,以构建其他文件的目录。如果该目录包含许多文件(例如数千个、数百万个),则打开该文件将变得极其缓慢(特别是如果该文件恰好位于网络驱动器上,如NFS)。

为了控制此行为,GDAL提供了以下环境变量: GDAL_DISABLE_READDIR_ON_OPEN 。设置 GDAL_DISABLE_READDIR_ON_OPEN TRUE 禁用目录扫描。

在Ubuntu中(假设您使用的是用于Ubuntu的PostgreSQL包), GDAL_DISABLE_READDIR_ON_OPEN 可以设置为 /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment (其中,PostgreSQL_Version是PostgreSQL的版本,例如9.6,CLUSTER_NAME是集群的名称,例如maindb)。您还可以在此处设置PostGIS环境变量。

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

12.18.1.2. 最大打开文件数

假设系统由人类用户使用,Linux和PostgreSQL允许的最大打开文件数通常是保守的(通常为每个进程1024个打开文件)。对于Out-DB Raster,单个有效的查询很容易超过这一限制(例如,一个包含10年栅格的数据集,其中每一天都有一个包含最低和最高温度的栅格,我们想知道该数据集中一个像素的绝对最小值和最大值)。

最容易进行的更改是以下PostgreSQL设置: max_files_per_process 。默认设置为1000,这对于Out-DB Raster来说太低了。安全的起始值可能是65536,但这实际上取决于您的数据集以及针对这些数据集运行的查询。此设置只能在服务器启动时进行,而且可能只能在PostgreSQL配置文件中进行(例如 /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf 在Ubuntu环境中)。

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

要做的主要更改是Linux内核的打开文件限制。这包括两个部分:

  • 整个系统的最大打开文件数

  • 每个进程打开的最大文件数

12.18.1.2.1. 整个系统的最大打开文件数

您可以使用以下示例检查整个系统当前打开的最大文件数:

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

如果返回的值不够大,请将文件添加到 /etc/sysctl.d/ 如下例所示:

$ echo "fs.file-max = 6145324" >> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
12.18.1.2.2. 每个进程打开的最大文件数

我们需要为PostgreSQL服务器进程增加每个进程打开的最大文件数。

要查看当前的PostgreSQL服务进程正在使用的最大打开文件数,请按照以下示例执行操作(确保正在运行PostgreSQL):

$ ps aux | grep postgres
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher

$ cat /proc/31718/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

在上面的示例中,我们检查了进程31718的打开文件限制。无论是哪个PostgreSQL进程,任何一个都可以。我们感兴趣的回应是 最大打开文件数

我们想要增加 软限制 硬限制 最大打开文件数 大于我们为PostgreSQL设置指定的值 max_files_per_process 。在我们的示例中,我们设置 max_files_per_process 到65536。

在Ubuntu中(假设您使用的是用于Ubuntu的PostgreSQL包),更改 软限制 硬限制 就是编辑 /etc/init.d/postgresql (SysV)或 /lib/systemd/system/postgresql*.service (System D)。

让我们首先讨论SysV Ubuntu案例,在该案例中,我们添加了 ULIMIT-H-N 262144 Ulimit-n 131072 /etc/init.d/postgresql

...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

现在来谈一谈system d Ubuntu案例。我们将添加 LimitNoFile=131072 致每一位 /lib/systemd/system/postgresql*.service 文件中的 [服务] 部分。

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

进行必要的系统ID更改后,请确保重新装载守护进程

系统ctl后台进程-重新加载

Chapter 13. PostGIS栅格常见问题解答

13.1. 我在哪里可以找到有关PostGIS栅格项目的更多信息?
13.2. 有没有什么书或教程能让我开始了解这项奇妙的发明?
13.3. 如何在我的PostGIS数据库中安装栅格支持?
13.4. 如何将栅格数据加载到PostGIS中?
13.5. 我可以将哪种类型的栅格文件格式加载到数据库中?
13.6. 我可以将我的PostGIS栅格数据导出为其他栅格格式吗?
13.7. 他们的GDAL二进制文件是否已使用PostGIS Raster支持进行编译?
13.8. 我可以使用哪些工具来查看PostGIS栅格数据?
13.9. 如何将PostGIS栅格图层添加到我的MapServer地图?
13.10. 我当前可以对我的栅格数据使用哪些函数?
13.11. 我收到错误:函数st_intersects(raster,未知)不唯一或st_Union(几何图形,文本)不唯一。我该怎么修?
13.12. PostGIS Raster与Oracle GeoRaster(SDO_GEORASTER)和SDO_RASTER类型有何不同?
13.13. 大文件的raster2pgsql加载失败,N字节的字符串对于编码转换来说是否太长?
13.14. 我收到了错误消息 错误:RASTER_FROMGDALRaster:无法使用GDAL打开BYTEA。检查BYTEA是否为GDAL支持的格式。 使用ST_FromGDALRaster或 错误:rt_raster_to_gdal:无法加载输出GDAL驱动程序 尝试使用ST_AsPNG或其他栅格输入函数时。

13.1.

我在哪里可以找到有关PostGIS栅格项目的更多信息?

请参阅 PostGIS栅格主页

13.2.

有没有什么书或教程能让我开始了解这项奇妙的发明?

有一个完整的初学者教程 使用PostGIS栅格与栅格覆盖率较大的矢量缓冲区相交 。Jorge有一系列关于PostGIS Raster的博客文章,这些文章演示了如何加载栅格数据以及如何与Oracle GeoRaster中的相同任务进行交叉比较。查看: 豪尔赫的PostGIS栅格/Oracle GeoRaster系列 。有一整章(超过35页的内容)专门介绍PostGIS栅格,可从以下网址免费下载代码和数据 邮政地理信息系统在行动-栅格章节。在第二版中也有报道。 。你可以的 购买实际中的PostGIS 现在,来自曼宁的书有硬拷贝(批量购买有很大折扣)或只有电子书格式。你也可以从亚马逊和其他各种图书分销商那里购买。所有纸质书都有一张免费优惠券,可以下载电子书版本。

以下是一位PostGIS栅格用户的评论 PostGIS栅格在城市林业土地分类中的应用

13.3.

如何在我的PostGIS数据库中安装栅格支持?

PostGIS Raster是PostGIS代码库的一部分,通常可用于大多数PostGIS二进制发行版。从PostGIS 3.0开始,PostGIS栅格现在是一个单独的扩展,需要: `CREATE EXTENSION postgis_raster;` 在您的数据库中启用它。如果您正在编译您自己的PostGIS,则需要使用GDAL进行编译,否则将不会构建postgis_raster扩展。

请参阅 下载PostGIS二进制文件 适用于包含栅格支持的流行的PostGIS发行版。

13.4.

如何将栅格数据加载到PostGIS中?

最新版本的PostGIS附带了一个 栅格2pgsql 栅格加载器可执行,能够加载多种类型的栅格,也可以生成较低分辨率的概视图,而无需任何额外的软件。请参阅 Section 11.1.1, “使用raster2pgsql加载栅格” 了解更多详细信息。

13.5.

我可以将哪种类型的栅格文件格式加载到数据库中?

您的GDAL库支持的任何内容。记录了GDAL支持的格式 GDAL文件格式

您的特定GDAL安装可能不支持所有格式。要验证特定GDAL安装支持的GDAL,您可以使用

Raster2pgsql-G

13.6.

我可以将我的PostGIS栅格数据导出为其他栅格格式吗?

PostGIS栅格具有以下功能 ST_AsGDALRaster 这将允许您使用SQL导出到您的GDAL支持的任何栅格格式。您可以使用以下命令获取这些列表 ST_GDALDrivers SQL函数。

您也可以使用GDAL命令行工具将PostGIS栅格导出为其他格式。GDAL有一个PostGIS栅格驱动程序,但只有在您选择使用PostgreSQL支持进行编译时才会进行编译。

该驱动程序目前不支持不规则分块的栅格,尽管您可以将不规则分块的栅格存储为PostGIS栅格数据类型。

如果从源代码进行编译,则需要在配置中包含

 --WITH-PG=路径/至/PG_CONFIG 

以启用驱动程序。参考 GDAL构建提示 获取有关在各种操作系统平台上构建GDAL的提示。

如果您的GDAL版本是使用PostGIS栅格驱动程序编译的,则在执行此操作时应在列表中看到PostGIS栅格

Gdalinfo--格式

要通过GDAL获取有关栅格的摘要,请使用gdalinfo:

Gdalinfo“pg:host=localhost port=5432数据库名称=‘mygisdb’user=‘postgres’password=‘Whatwhere’SCHEMA=‘SOMESCHEMA’TABLE=sometable”

要将数据导出为其他栅格格式,请使用Gdal_Translate下面将以10%的大小将表中的所有数据导出到PNG文件。

根据像素带类型的不同,如果导出格式不支持该像素类型,则某些转换可能不起作用。例如,浮点带类型和32位无符号整数不能很容易地转换为JPG或其他类型。

下面是一个简单的翻译例子

Gdal_Translate-of PNG-OutSize 10%10%“pg:host=localhost port=5432数据库名称=‘mygisdb’user=‘postgres’password=‘any’SCHEMA=‘SOMESSCHEMA’TABLE=sometable”C:\Somefile.png

还可以使用WHERE=...在导出中使用SQL WHERE子句在您的驱动程序连接字符串中。下面是一些使用WHERE子句的代码

Gdal_Translate-of PNG-OutSize 10%10%“PG:host=Localhost port=5432数据库名称=‘mygisdb’user=‘postgres’password=‘any’SCHEMA=‘SOMESSCHEMA’TABLE=sometable where=‘filename=\’abcd.sid\‘’”“C:\Somefile.png
Gdal_Translate-of PNG-OutSize 10%10%“PG:host=Localhost port=5432数据库名称=‘mygisdb’user=‘postgres’password=‘Whatwhere’SCHEMA=‘SOMESSCHEMA’TABLE=sometable where=‘ST_Intersects(RAST,ST_SetSRID(ST_Point(-71.032,42.3793),4326))’”C:\intersectregion.png

要查看更多示例和语法,请参阅 读取PostGIS栅格区的栅格数据

13.7.

他们的GDAL二进制文件是否已使用PostGIS Raster支持进行编译?

是。查看页面 GDAL二进制文件 佩奇。任何支持PostgreSQL的编译工具都应该包含PostGIS栅格。GDAL工具通常也包含在 QGIS

如果您想获得Windows的最新夜间构建--那么请查看使用Visual Studio构建的Tamas Szekeres夜间构建,其中包含GDAL主干、Python绑定、MapServer可执行文件和内置的PostGIS栅格驱动程序。只需点击SDK BAT并从那里运行您的命令。 http://www.gisinternals.com 。VS项目文件也是可用的。

13.8.

我可以使用哪些工具来查看PostGIS栅格数据?

您可以使用 MapServer 使用GDAL编译以查看栅格数据。如果安装了PostGIS栅格驱动程序,则QGIS支持查看PostGIS栅格。

理论上,任何使用GDAL渲染数据的工具都可以支持PostGIS栅格数据,或者只需很少的工作就可以支持它。同样适用于Windows,Tamas的二进制文件(包括MapServer) http://www.gisinternals.com 对于Windows用户来说是一个很好的选择,如果你不想麻烦的话必须安装编译自己的。

13.9.

如何将PostGIS栅格图层添加到我的MapServer地图?

首先,您需要使用PostGIS栅格支持编译的GDAL 1.7或更高版本。GDAL 3或更高版本是首选,因为在1.8版本中修复了许多问题,并且在主干版本中修复了更多的PostGIS栅格问题。

您可以像处理任何其他栅格一样。参考 地图服务器栅格处理选项 有关可用于MapServer栅格图层的各种处理函数的列表,请参见。

使PostGIS栅格数据特别有趣的是,由于每个切片可以具有各种标准数据库列,因此您可以在数据源中对其进行分段

以下是如何在MapServer中定义PostGIS栅格图层的示例。

[Note]

模式=2是平铺栅格所必需的,已添加到PostGIS 2.0和GDAL 1.8驱动程序中。这在GDAL 1.7驱动程序中不存在。

-- displaying raster with standard raster options
LAYER
        NAME coolwktraster
        TYPE raster
        STATUS ON
        DATA "PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever'
                schema='someschema' table='cooltable' mode='2'"
        PROCESSING "NODATA=0"
        PROCESSING "SCALE=AUTO"
        #... other standard raster processing functions here
        #... classes are optional but useful for 1 band data
        CLASS
                NAME "boring"
                EXPRESSION ([pixel] < 20)
                COLOR 250 250 250
        END
        CLASS
                NAME "mildly interesting"
                EXPRESSION ([pixel] > 20 AND [pixel] < 1000)
                COLOR 255 0 0
        END
        CLASS
                NAME "very interesting"
                EXPRESSION ([pixel] >= 1000)
                COLOR 0 255 0
        END
END
        
-- displaying raster with standard raster options and a where clause
LAYER
        NAME soil_survey2009
        TYPE raster
        STATUS ON
        DATA "PG:host=localhost port=5432 dbname='somedb' user='someuser' password='whatever'
                schema='someschema' table='cooltable' where='survey_year=2009' mode='2'"
        PROCESSING "NODATA=0"
        #... other standard raster processing functions here
        #... classes are optional but useful for 1 band data
END
        

13.10.

我当前可以对我的栅格数据使用哪些函数?

请参阅以下列表 Chapter 12, 栅格参考 。还有更多,但这仍是一项正在进行的工作。

请参阅 PostGIS栅格路线图页面 以了解未来可期待的详细情况。

13.11.

我收到错误:函数st_intersects(raster,未知)不唯一或st_Union(几何图形,文本)不唯一。我该怎么修?

如果您的其中一个参数是几何体的文本表示,而不是几何体,则会发生函数不唯一错误。在这些情况下,PostgreSQL将文本表示标记为未知类型,这意味着它可能落入st_intersects(栅格、几何)或st_intersects(栅格、栅格),从而导致不唯一的情况,因为这两个函数在理论上都可以支持您的请求。要避免这种情况,需要将几何体的文本表示形式强制转换为几何体。

例如,如果您的代码如下所示:

SELECT rast
 FROM my_raster
   WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)');

通过将代码更改为以下代码,将文本几何图形表示转换为几何图形:

SELECT rast
 FROM my_raster
   WHERE ST_Intersects(rast, 'SRID=4326;POINT(-10 10)'::geometry);

13.12.

PostGIS Raster与Oracle GeoRaster(SDO_GEORASTER)和SDO_RASTER类型有何不同?

有关这个主题的更广泛的讨论,请查看Jorge Aévalo Oracle GeoRaster和PostGIS栅格:第一印象

与逐层地理配准相比,逐栅格地理配准的主要优势在于:

*覆盖范围不一定是矩形的(栅格覆盖范围大时通常是这种情况。请参阅文档中可能的栅格排列)

*栅格到重叠(这是实现无损矢量到栅格转换所必需的)

这些安排在Oracle中也是可能的,但它们意味着存储链接到尽可能多的SDO_RASTER表的多个SDO_GEORASTER对象。复杂的覆盖可能会导致数据库中有数百个表。使用PostGIS Raster,您可以将类似的栅格排列存储到唯一的表格中。

这有点像如果PostGIS强制您只存储没有间隙或重叠的完全矩形矢量覆盖(完美的矩形拓扑层)。这在一些应用中是非常实用的,但实践表明,对于大多数地理覆盖来说,这是不现实或不可取的。矢量结构需要灵活地存储不连续和非矩形的覆盖率。我们认为,栅格结构也应该受益,这是一个很大的优势。

13.13.

大文件的raster2pgsql加载失败,N字节的字符串对于编码转换来说是否太长?

在生成要加载的文件时,raster2pgsql不会与数据库建立任何连接。如果数据库设置了与数据库编码不同的显式客户端编码,则在加载大型栅格文件(大小超过30 MB)时,可能会遇到 字节太长,无法进行编码转换

例如,如果您的数据库使用UTF8,但为了支持Windows应用程序,您将客户端编码设置为 WIN1252

要解决此问题,请确保客户端编码与加载期间的数据库编码相同。您可以通过在加载脚本中显式设置编码来实现这一点。例如,如果您使用的是Windows:

设置PGCLIENTENCODING=UTF8

如果您在Unix/Linux上

EXPORT PGCLIENTENCODING=UTF8

这个问题的血淋淋的细节在 http://trac.osgeo.org/postgis/ticket/2209

13.14.

我收到了错误消息 错误:RASTER_FROMGDALRaster:无法使用GDAL打开BYTEA。检查BYTEA是否为GDAL支持的格式。 使用ST_FromGDALRaster或 错误:rt_raster_to_gdal:无法加载输出GDAL驱动程序 尝试使用ST_AsPNG或其他栅格输入函数时。

从PostGIS 2.1.3和2.0.5开始,对安全性进行了更改,默认禁用所有GDAL驱动程序和数据库栅格。发行说明位于 PostGIS 2.0.6、2.1.3安全版本 。要重新启用特定驱动程序或所有驱动程序并重新启用数据库外支持,请参阅 Section 2.1, “简略版”

Chapter 14. PostGIS Extras

本章介绍了在PostGIS源代码tarball和源代码存储库的Extras文件夹中找到的功能。这些脚本并不总是与PostGIS二进制版本打包在一起,但通常是基于PL/pgSQL或可以按原样运行的标准外壳脚本。

14.1. 地址标准器

这是一把叉子 PAGC标准器 (这部分的原始代码是 PAGC PostgreSQL地址标准器 )。

地址标准化器是一个单行地址解析器,它接受输入地址,并根据表和助手lex和gaz表中存储的一组规则对其进行规范化。

该代码内置于一个名为 address_standardizer 它可以与一起安装 创建扩展地址_标准化器; 。除了ADDRESS_STANDIZER扩展名之外,还有一个名为 address_standardizer_data_us 构建了扩展,其中包含用于美国数据的GAZ、LEX和RULES表。可以通过以下方式安装此扩展: 创建扩展地址_标准化器_数据_我们;

此扩展模块的代码可在PostGIS中找到 extensions/address_standardizer 目前是自给自足的。

有关安装说明,请参阅: Section 2.3, “安装和使用地址标准化程序”

14.1.1. 解析器的工作原理

解析器从右到左工作,首先查看邮政编码、州/省、城市的宏元素,然后查看微观元素,以确定我们正在处理的是门牌号、街道、十字路口还是地标。它目前不寻找国家代码或名称,但这可能会在未来引入。

国家代码

假定为美国或CA,基于:邮政编码为美国或加拿大的州/省为美国或加拿大其他美国

邮政编码/邮政编码

可以使用与Perl兼容的正则表达式来识别它们。这些正则表达式当前位于parseAddress-api.c中,如果需要,可以相对简单地进行更改。

州/省

可以使用与Perl兼容的正则表达式来识别它们。这些正则表达式当前位于parseAddress-api.c中,但将来可能会移到Include中以便于维护。

14.1.2. 地址标准器类型

Abstract

本节列出了Address Standardizer扩展安装的PostgreSQL数据类型。注意:我们描述了这些函数的强制转换行为,这一点非常重要,尤其是在设计您自己的函数时。

标准地址 — 由地址元素组成的复合类型。这是的返回类型 standardize_address 功能。

Name

标准地址 — 由地址元素组成的复合类型。这是的返回类型 standardize_address 功能。

描述

由地址元素组成的复合类型。这是的返回类型 standardize_address 功能。元素的某些描述借用自 PAGC邮政属性

令牌号表示中的输出参考号 规则表

This method needs address_standardizer extension.

建房

为文本(令牌号 0 ):指建筑物编号或名称。未解析的建筑标识符和类型。对于大多数地址,通常为空。

house_num

是文本(令牌号 1 这是街道上的街道号码。示例 75 在……里面 道富银行75号

Predir

为文本(令牌号 2 ):街道名称前方向,如北、南、东、西等。

质量

为文本(令牌号 3 ):街道名称前修饰符示例 OLD 在……里面 3715老99号公路

预型

为文本(令牌号 4 ):街道前缀类型

名字

为文本(令牌号 5 ):街道名称

Suftype

为文本(令牌号 6 ):街柱类型,如ST、Ave、Cir。跟在根街道名称后面的街道类型。示例 STREET 在……里面 道富银行75号

Sufdir

为文本(令牌号 7 :Street Post-Directed街道名称后面的方向修饰符。示例 WEST 在……里面 第十大道西3715号

乡村路线

为文本(令牌号 8 ):农村路线。示例 7 在……里面 RR 7

额外的

是文本:额外信息,如楼层编号。

城市

为文本(令牌号 10 ):例如波士顿。

状态

为文本(令牌号 11 ):示例 MASSACHUSETTS

国家/地区

为文本(令牌号 12 ):示例 USA

邮政编码

是文本邮政编码(邮政编码)(令牌号 13 ):示例 02109

是文本邮箱号码(令牌号 14和15 ):示例 02109

单位

是文本公寓号还是套房号(令牌号 17 ):示例 3B 在……里面 APT 3B

14.1.3. 地址标准化器表

Abstract

本节列出了ADDRESS_STANDARIZER用于标准化地址的PostgreSQL表格式。请注意,这些表的名称不需要与此处引用的名称相同。例如,您可以为每个国家/地区或您的自定义地理编码器设置不同的lex、Gaz、Rules表。这些表的名称被传递给地址标准化函数。

打包的扩展 address_standardizer_data_us 包含标准化美国地址的数据。

规则表 — 规则表包含一组将地址输入序列令牌映射到标准化输出序列的规则。规则定义为一组输入令牌,后跟-1(终止符),后跟一组输出令牌,后跟-1,后跟表示规则类型的数字,然后是规则排名。
Lex表 — Lex表用于对字母数字输入进行分类,并将该输入与(A)输入令牌相关联(请参见 the section called “输入令牌” )和(B)标准化表述。
GAZ表 — GAZ表用于标准化地名并将该输入与(A)输入令牌相关联(请参见 the section called “输入令牌” )和(B)标准化表述。

Name

规则表 — 规则表包含一组将地址输入序列令牌映射到标准化输出序列的规则。规则定义为一组输入令牌,后跟-1(终止符),后跟一组输出令牌,后跟-1,后跟表示规则类型的数字,然后是规则排名。

描述

规则表必须至少包含以下列,但允许您添加更多列以供自己使用。

ID号

表的主键

规则

表示规则的文本字段。详细信息请访问 PAGC地址标准器规则记录

规则由一组表示输入令牌的非负整数组成,以-1结尾,后跟相同数量的表示邮政属性的非负整数,以-1结尾,然后是表示规则类型的整数,最后是表示规则等级的整数。规则的排名从0(最低)到17(最高)。

举个例子,规则是 2 0 2 22 3-1 5 5 6 7 3-1 2 6 映射到输出令牌序列 类型编号类型直接限定 到输出序列 Street Street SuFTYP SuFDIR资格 。该规则是一个排名为6的ARC_C规则。

中列出了相应输出令牌的编号 标准地址

输入令牌

每条规则都以一组输入令牌开始,后跟一个终止符 -1 。摘录自的有效输入令牌 PAGC输入令牌 具体如下:

基于表单的输入令牌

AMPERS

(13)。与符号( & )经常用来缩写单词“and”。

DASH

(9)。标点符号。

DOUBLE

(21)。两个字母的序列。通常用作标识符。

FRACT

(25)。分数有时用在公民编号或单位编号中。

MIXED

(23)。同时包含字母和数字的字母数字字符串。用于标识符。

NUMBER

(0)。一串数字。

ORD

(15)。诸如First或First等表示法。常用于街道名称中。

ORD

(18)。一封信。

WORD

(1)。单词是一串任意长度的字母。一个字母既可以是一个单词,也可以是一个单词。

基于函数的输入令牌

BOXH

(14)。用来表示邮局信箱的词。例如 邮政信箱

BUILDH

(19)。前缀用来表示建筑物或建筑群的词,通常作为前缀例如: 塔楼 在……里面 7A塔

BUILDT

(24)。用于表示建筑物或建筑群的单词和缩略语,通常作为后缀。例如: 购物中心

DIRECT

(22)。用来表示方向的词,例如

MILE

(20)。用于表示里程碑式地址的单词。

ROAD

(6)。用来表示公路和公路的词语和缩略语。例如: 州际公路 在……里面 5号州际公路

RR

(8)。用于表示乡村路线的单词和缩略语。 RR

TYPE

(2)。用来表示街头风格的词语和缩略语。例如: ST AVE

UNITH

(16)。用于表示内部子地址的单词和缩写。例如, APT UNIT

邮政类型输入令牌

QUINT

(28)。一个5位数的数字。标识邮政编码

QUAD

(二十九)。一个四位数的数字。标识ZIP4。

PCH

(27)。字母数字字母的3个字符序列。标识FSA,即加拿大邮政编码的前3个字符。

PCT

(26)。由3个字符组成的数字字母数字序列。标识LDU,即加拿大邮政编码的最后3个字符。

停顿字

STOPWORDS与单词相结合。在规则中,由多个单词和STOPWORD组成的字符串将由单个单词令牌表示。

STOPWORD

(7)。词法意义较低的词,在分析时可以省略。例如: THE

输出令牌

在第一个-1(终止符)之后,跟随输出内标识及其顺序,后跟终止符 -1 。中列出了相应输出令牌的编号 标准地址 。允许什么取决于一种规则。中列出了对每种规则类型有效的输出令牌 the section called “规则类型和等级”

规则类型和等级

规则的最后部分是规则类型,它由以下内容之一表示,后跟规则等级。规则的排名从0(最低)到17(最高)。

MACRO_C

(令牌号=“ 0 “)。用于分析宏子句的规则类,如 地点州邮政编码

宏_C输出令牌 (节选自 Http://www.pagcgeo.org/docs/html/pagc-12.html#--r-typ--

CITY

(令牌号“10”)。示例“奥尔巴尼”

STATE

(令牌号“11”)。示例“NY”

NATION

(代币号码“12”)。大多数引用文件中不使用该属性。示例“USA”

POSTAL

(代币编号“13”)。(SADS要素“邮政编码”、“加4”)。此属性用于美国邮政编码和加拿大邮政编码。

MICRO_C

(令牌号=“ 1 “)。用于解析完整微子句的规则类(如House、Street、sufdir、predir、preyp、suftype、qualif)(即ARC_C+Citic_C)。这些规则不在构建阶段使用。

Micro_C输出令牌 (节选自 Http://www.pagcgeo.org/docs/html/pagc-12.html#--r-typ--

HOUSE

是文本(令牌号 1 这是街道上的街道号码。示例 75 在……里面 道富银行75号

Predir

为文本(令牌号 2 ):街道名称前方向,如北、南、东、西等。

质量

为文本(令牌号 3 ):街道名称前修饰符示例 OLD 在……里面 3715老99号公路

预型

为文本(令牌号 4 ):街道前缀类型

街道

为文本(令牌号 5 ):街道名称

Suftype

为文本(令牌号 6 ):街柱类型,如ST、Ave、Cir。跟在根街道名称后面的街道类型。示例 STREET 在……里面 道富银行75号

Sufdir

为文本(令牌号 7 :Street Post-Directed街道名称后面的方向修饰符。示例 WEST 在……里面 第十大道西3715号

ARC_C

(令牌号=“ 2 “)。用于分析微子句的规则类,不包括House属性。因此,使用与MICRO_C减去House标记相同的一组输出标记。

CIVIC_C

(令牌号=“ 3 “)。用于解析House属性的规则类。

EXTRA_C

(令牌号=“ 4 “)。用于解析额外属性的规则类-从地理编码中排除的属性。这些规则不在构建阶段使用。

Extra_C输出令牌 (节选自 Http://www.pagcgeo.org/docs/html/pagc-12.html#--r-typ--

BLDNG

(令牌号 0 ):未解析的建筑物标识符和类型。

BOXH

(令牌号 14 ): BOX 在……里面 方框3B

BOXT

(令牌号 15 ): 3B 在……里面 方框3B

RR

(令牌号 8 ): RR 在……里面 RR 7

UNITH

(令牌号 16 ): APT 在……里面 APT 3B

UNITT

(令牌号 17 ): 3B 在……里面 APT 3B

UNKNWN

(令牌号 9 ):其他方面的非机密产出。


Name

Lex表 — Lex表用于对字母数字输入进行分类,并将该输入与(A)输入令牌相关联(请参见 the section called “输入令牌” )和(B)标准化表述。

描述

Lex(词典的缩写)表用于对字母数字输入进行分类,并将该输入与 the section called “输入令牌” 和(B)标准化陈述。您将在这些表中找到以下内容 ONE 映射到标准字: 1

在表中,Lex至少有以下列。您可以添加

ID号

表的主键

序列号

INTEGER:定义编号?

单词

文本:输入的单词

标准字

正文:标准化的替代词

令牌

INTEGER:它是哪种词。只有在这种情况下使用它,才会被取代。参考 PAGC令牌


Name

GAZ表 — GAZ表用于标准化地名并将该输入与(A)输入令牌相关联(请参见 the section called “输入令牌” )和(B)标准化表述。

描述

GAZ(地名词典的缩写)表用于标准化地名并将该输入与 the section called “输入令牌” 和(B)标准化陈述。例如,如果您在美国,则可以使用州名称和相关缩写来加载这些名称。

GAZ表在表中至少有以下列。您可以根据自己的需要添加更多的栏。

ID号

表的主键

序列号

整数:定义编号?-用于单词实例的标识符

单词

文本:输入的单词

标准字

正文:标准化的替代词

令牌

INTEGER:它是哪种词。只有在这种情况下使用它,才会被取代。参考 PAGC令牌

14.1.4. 地址标准化函数

parse_address — 获取一行地址并将其分成几个部分
standardize_address — 使用lex、gaz和规则表返回输入地址的stdaddr形式。

Name

parse_address — 获取一行地址并将其分成几个部分

Synopsis

record parse_address(text address);

描述

返回以地址作为输入,并返回由字段组成的记录输出 num 街道 街道2 地址1 城市 状态 拉链 Zipplus 国家/地区

可用性:2.2.0

This method needs address_standardizer extension.

示例

单地址

SELECT num, street, city, zip, zipplus
        FROM parse_address('1 Devonshire Place, Boston, MA 02109-1234') AS a;
num |      street      |  city  |  zip  | zipplus
-----+------------------+--------+-------+---------
 1   | Devonshire Place | Boston | 02109 | 1234                

地址表

-- basic table
CREATE TABLE places(addid serial PRIMARY KEY, address text);

INSERT INTO places(address)
VALUES ('529 Main Street, Boston MA, 02129'),
 ('77 Massachusetts Avenue, Cambridge, MA 02139'),
 ('25 Wizard of Oz, Walaford, KS 99912323'),
 ('26 Capen Street, Medford, MA'),
 ('124 Mount Auburn St, Cambridge, Massachusetts 02138'),
 ('950 Main Street, Worcester, MA 01610');

 -- parse the addresses
 -- if you want all fields you can use (a).*
SELECT addid, (a).num, (a).street, (a).city, (a).state, (a).zip, (a).zipplus
FROM (SELECT addid, parse_address(address) As a
 FROM places) AS p;
addid | num |        street        |   city    | state |  zip  | zipplus
-------+-----+----------------------+-----------+-------+-------+---------
     1 | 529 | Main Street          | Boston    | MA    | 02129 |
     2 | 77  | Massachusetts Avenue | Cambridge | MA    | 02139 |
     3 | 25  | Wizard of Oz         | Walaford  | KS    | 99912 | 323
     4 | 26  | Capen Street         | Medford   | MA    |       |
     5 | 124 | Mount Auburn St      | Cambridge | MA    | 02138 |
     6 | 950 | Main Street          | Worcester | MA    | 01610 |
(6 rows)

另请参阅


Name

standardize_address — 使用lex、gaz和规则表返回输入地址的stdaddr形式。

Synopsis

stdaddr standardize_address(text lextab, text gaztab, text rultab, text address);

stdaddr standardize_address(text lextab, text gaztab, text rultab, text micro, text macro);

描述

返回一个 标准地址 使用输入地址的格式 Lex表 表名、 GAZ表 ,以及 规则表 表名和地址。

变体1:将地址作为单行。

变体2:将地址分为两部分。一个 微观 由标准的第一行邮政地址组成,例如 House_Num街 ,以及由地址的标准邮政第二行组成的宏,例如 城市、州和国家/地区邮政编码

可用性:2.2.0

This method needs address_standardizer extension.

示例

使用ADDRESS_STANDIZER_DATA_US扩展

创建扩展地址_STANDIZER_DATA_US;--只需创建一次

变体1:单行地址。这对非美国地址不起作用

SELECT house_num, name, suftype, city, country, state, unit  FROM standardize_address('us_lex',
                           'us_gaz', 'us_rules', 'One Devonshire Place, PH 301, Boston, MA 02109');
house_num |    name    | suftype |  city  | country |     state     |      unit
----------+------------+---------+--------+---------+---------------+-----------------
1         | DEVONSHIRE | PLACE   | BOSTON | USA     | MASSACHUSETTS | # PENTHOUSE 301

使用与Tiger地理编码器打包的表。此示例仅在安装了 postgis_tiger_geocoder

SELECT *  FROM standardize_address('tiger.pagc_lex',
         'tiger.pagc_gaz', 'tiger.pagc_rules', 'One Devonshire Place, PH 301, Boston, MA 02109-1234');

为了便于阅读,我们将使用hstore扩展创建扩展hstore;您需要安装

SELECT (each(hstore(p))).*
 FROM standardize_address('tiger.pagc_lex', 'tiger.pagc_gaz',
   'tiger.pagc_rules', 'One Devonshire Place, PH 301, Boston, MA 02109') As p;
key     |      value
------------+-----------------
 box        |
 city       | BOSTON
 name       | DEVONSHIRE
 qual       |
 unit       | # PENTHOUSE 301
 extra      |
 state      | MA
 predir     |
 sufdir     |
 country    | USA
 pretype    |
 suftype    | PL
 building   |
 postcode   | 02109
 house_num  | 1
 ruralroute |
(16 rows)
                        

备选方案2:作为两部分地址

SELECT (each(hstore(p))).*
 FROM standardize_address('tiger.pagc_lex', 'tiger.pagc_gaz',
   'tiger.pagc_rules', 'One Devonshire Place, PH 301', 'Boston, MA 02109, US') As p;
key     |      value
------------+-----------------
 box        |
 city       | BOSTON
 name       | DEVONSHIRE
 qual       |
 unit       | # PENTHOUSE 301
 extra      |
 state      | MA
 predir     |
 sufdir     |
 country    | USA
 pretype    |
 suftype    | PL
 building   |
 postcode   | 02109
 house_num  | 1
 ruralroute |
(16 rows)

14.2. TIGER地理编码器

Abstract

编写的基于plpgsql的地理编码器,用于 TIGER(拓扑集成地理编码和参考系统)/线路和主地址数据库导出 由美国人口普查局发布。

地理编码器有四个组件:数据加载器功能、地址规格化程序、地址地理编码器和反向地理编码器。

尽管它是专门为美国设计的,但许多概念和功能都是适用的,可以与其他国家的地址和公路网一起使用。

该脚本构建了一个名为 老虎 以容纳所有与老虎相关的功能、可重复使用的查找数据,例如道路类型前缀、后缀、状态、用于管理数据加载的各种控制表以及所有老虎加载的表从其继承的骨架基表。

另一种模式称为 tiger_data 还创建了加载程序从人口普查站点下载并加载到数据库中的每个州的所有人口普查数据。在当前模型中,每组状态表都带有州代码前缀,例如 ma_addr ma_edges 具有仅强制实施该状态数据的约束。这些表中的每一个都继承自这些表 adr 脸孔 ,等位于 TIGER模式

所有地理编码函数仅引用基表,因此不要求调用数据方案 tiger_data 或者,该数据不能进一步分区到其他架构中--例如,每个州的不同架构,只要所有的表都继承自 老虎 架构。

有关如何在数据库中启用扩展模块以及如何使用它加载数据的说明,请参阅 Section 2.4.1, “启用PostGIS数据库的Tiger地理编码器:使用扩展模块”

[Note]

如果您使用的是Tiger地理编码器(Tiger_2010),则可以使用Extras/Tiger中附带的Upgrade_Geocoder.bat/.sh脚本来升级脚本。一个主要的变化是 tiger_2010 tiger_2011+ 那是不是 状态 表格不再按州分类。如果您有来自Tiger_2010的数据,并且想要替换为Tiger_2015,请参阅 Section 2.4.5, “升级您的Tiger地理编码器安装”

[Note]

PostGIS 2.2.0版本中的新功能是对Tiger 2015数据的支持,并将地址标准化作为PostGIS的一部分。

PostGIS2.1.0版本中的新功能是,如果您运行的是PostgreSQL 9.1+,则可以安装带有PostgreSQL扩展模型的Tiger地理编码器。参考 Section 2.4.1, “启用PostGIS数据库的Tiger地理编码器:使用扩展模块” 有关详细信息,请参阅。

这个 Pagc_Normalize_Address 作为内置产品的替代产品 Normalize_Address 。请参阅 Section 2.3, “安装和使用地址标准化程序” 以获取编译和安装说明。

设计:

该项目的目标是建立一个功能齐全的地理编码器,它可以处理任意的美国地址字符串,并使用归一化的老虎普查数据,产生反映给定地址的位置和该位置的可能性的点几何和评级。评级数字越高,结果就越糟糕。

这个 reverse_geocode 在PostGIS2.0.0中引入的函数可用于获取GPS位置的街道地址和十字街。

对于任何熟悉PostGIS的人来说,地理编码器的安装和使用都应该很简单,并且应该很容易安装,并且可以在PostGIS支持的所有平台上使用。

它应该足够强大,即使有格式和拼写错误也能正常运行。

它应该具有足够的可扩展性,以便用于未来的数据更新,或只需最少的代码更改即可用于替代数据源。

[Note]

这个 老虎 必须将架构添加到数据库搜索路径,函数才能正常工作。

Drop_Indexes_Generate_Script — 生成一个脚本,该脚本删除Tiger架构和用户指定架构上的所有非主键和非唯一索引。默认模式为 tiger_data 如果未指定架构,则返回。
Drop_Nation_Tables_Generate_Script — 生成一个脚本,该脚本删除指定架构中以 county_all state_all 或州代码,后跟 状态
Drop_State_Tables_Generate_Script — 生成一个脚本,该脚本删除指定架构中以状态缩写为前缀的所有表。默认模式为 tiger_data 如果未指定架构,则返回。
地理编码 — 接受作为字符串(或其他标准化地址)的地址,并输出一组可能的位置,其中包括NAD 83 Long Long中的点几何图形、每个点的标准化地址以及评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。可以有选择地传入最大结果,默认为10,RESTORY_REGION(默认为NULL)
Geocode_Intersection — 包含相交的2条街道和州、市、邮政编码,并输出位于交叉点处的第一条交叉街道上的一组可能位置,还包括作为NAD 83 Long Late中的点位置的Geomout,a normalized_address (Addy)每个位置,以及评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。可以选择性地传入最大结果,默认为10。使用Tiger数据(边、面、地址)、PostgreSQL模糊字符串匹配(Soundex、levenshtein)。
Get_Geocode_Setting — 返回存储在tiger.Geocode_settings表中的特定设置的值。
Get_Tract — 从几何图形所在的轨迹表返回普查区域或字段。默认返回区域的短名称。
Install_Missing_Indexes — 查找具有地理编码器联接中使用的键列的所有表,并筛选缺少这些列上使用的索引的条件,然后将它们添加到表中。
Loader_Generate_Census_Script — 为指定州的指定平台生成外壳脚本,该脚本将下载老虎人口普查州区域、BG和选项卡块数据表、暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。
Loader_Generate_Script — 为指定状态的指定平台生成外壳脚本,该脚本将下载Tiger数据、暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。最新版本支持Tiger 2010结构变化,还加载人口普查区域、区块组和区块表。
Loader_Generate_Nation_Script — 为加载县和州查找表的指定平台生成外壳脚本。
Missing_Indexes_Generate_Script — 查找地理编码器联接中使用的具有键列的所有表,这些表缺少这些列的索引,并将输出SQL DDL以定义这些表的索引。
Normalize_Address — 在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。该函数将只处理用Tiger_Geocode打包的查找数据(不需要Tiger人口普查数据)。
Pagc_Normalize_Address — 在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。该函数将只处理用Tiger_Geocode打包的查找数据(不需要Tiger人口普查数据)。需要ADDRESS_STANDIZER扩展名。
Pprint_Addy — 给出了一个 norm_addy 复合类型对象,返回它的漂亮打印表示形式。通常与Normize_Address一起使用。
Reverse_Geocode — 获取已知空间参考系统中的几何点,并返回包含理论上可能的地址数组和交叉街道数组的记录。如果Include_strnum_range=TRUE,则将街道范围包括在交叉街道中。
Topology_Load_Tiger — 将定义的老虎数据区域加载到PostGIS拓扑中,并将老虎数据转换为拓扑的空间参考,并捕捉到拓扑的精度公差。
Set_Geocode_Setting — 设置影响地理编码器功能行为的设置。

与Tiger不同,PostGIS还有其他几个开源地理编码器,它们具有支持多个国家/地区的地理编码的优势

  • 无名氏 使用OpenStreetMap地名词典格式的数据。它需要osm2pgsql来加载数据,PostgreSQL 8.4+和PostGIS1.5+才能运行。它被打包为Web服务接口,似乎被设计为作为Web服务进行调用。就像Tiger地理编码器一样,它同时有一个地理编码器和一个反向地理编码器组件。从文档中,不清楚它是否有一个像Tiger地理编码器一样的纯SQL接口,或者是否有大量的逻辑在Web接口中实现。

  • 地理信息系统地理信息系统 还利用PostGIS,与Nominatim一样,使用OpenStreetMap(OSM)数据。它带有一个加载OSM数据的加载器,与Nominatim类似,它不仅能够对美国进行地理编码。与Nominatim非常相似,它以Web服务的形式运行,并依赖于Java 1.5、Servlet应用程序和Solr。GisGraphy是跨平台的,在其他一些巧妙的功能中,还有一个反向地理编码器。

Name

Drop_Indexes_Generate_Script — 生成一个脚本,该脚本删除Tiger架构和用户指定架构上的所有非主键和非唯一索引。默认模式为 tiger_data 如果未指定架构,则返回。

Synopsis

text Drop_Indexes_Generate_Script(text param_schema=tiger_data);

描述

生成一个脚本,该脚本删除Tiger架构和用户指定架构上的所有非主键和非唯一索引。默认模式为 tiger_data 如果未指定架构,则返回。

这对于最大限度地减少索引膨胀非常有用,因为索引膨胀可能会使查询规划者感到困惑或占用不必要的空间。与…结合使用 Install_Missing_Indexes 仅添加地理编码器使用的索引。

可用性:2.0.0

示例

SELECT drop_indexes_generate_script() As actionsql;
actionsql
---------------------------------------------------------
DROP INDEX tiger.idx_tiger_countysub_lookup_lower_name;
DROP INDEX tiger.idx_tiger_edges_countyfp;
DROP INDEX tiger.idx_tiger_faces_countyfp;
DROP INDEX tiger.tiger_place_the_geom_gist;
DROP INDEX tiger.tiger_edges_the_geom_gist;
DROP INDEX tiger.tiger_state_the_geom_gist;
DROP INDEX tiger.idx_tiger_addr_least_address;
DROP INDEX tiger.idx_tiger_addr_tlid;
DROP INDEX tiger.idx_tiger_addr_zip;
DROP INDEX tiger.idx_tiger_county_countyfp;
DROP INDEX tiger.idx_tiger_county_lookup_lower_name;
DROP INDEX tiger.idx_tiger_county_lookup_snd_name;
DROP INDEX tiger.idx_tiger_county_lower_name;
DROP INDEX tiger.idx_tiger_county_snd_name;
DROP INDEX tiger.idx_tiger_county_the_geom_gist;
DROP INDEX tiger.idx_tiger_countysub_lookup_snd_name;
DROP INDEX tiger.idx_tiger_cousub_countyfp;
DROP INDEX tiger.idx_tiger_cousub_cousubfp;
DROP INDEX tiger.idx_tiger_cousub_lower_name;
DROP INDEX tiger.idx_tiger_cousub_snd_name;
DROP INDEX tiger.idx_tiger_cousub_the_geom_gist;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_least_address;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_tlid;
DROP INDEX tiger_data.idx_tiger_data_ma_addr_zip;
DROP INDEX tiger_data.idx_tiger_data_ma_county_countyfp;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_lower_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lookup_snd_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_lower_name;
DROP INDEX tiger_data.idx_tiger_data_ma_county_snd_name;
:
:

Name

Drop_Nation_Tables_Generate_Script — 生成一个脚本,该脚本删除指定架构中以 county_all state_all 或州代码,后跟 状态

Synopsis

text Drop_Nation_Tables_Generate_Script(text param_schema=tiger_data);

描述

生成一个脚本,该脚本删除指定架构中以 county_all state_all 或州代码,后跟 状态 。如果要从升级,则需要执行此操作 tiger_2010 tiger_2011 数据。

可用性:2.1.0

示例

SELECT drop_nation_tables_generate_script();
DROP TABLE tiger_data.county_all;
DROP TABLE tiger_data.county_all_lookup;
DROP TABLE tiger_data.state_all;
DROP TABLE tiger_data.ma_county;
DROP TABLE tiger_data.ma_state;

Name

Drop_State_Tables_Generate_Script — 生成一个脚本,该脚本删除指定架构中以状态缩写为前缀的所有表。默认模式为 tiger_data 如果未指定架构,则返回。

Synopsis

text Drop_State_Tables_Generate_Script(text param_state, text param_schema=tiger_data);

描述

生成一个脚本,该脚本删除指定架构中以状态缩写为前缀的所有表。默认模式为 tiger_data 如果未指定架构,则返回。此函数用于在重新加载状态之前删除状态表,以防在上次加载过程中出现错误。

可用性:2.0.0

示例

SELECT drop_state_tables_generate_script('PA');
DROP TABLE tiger_data.pa_addr;
DROP TABLE tiger_data.pa_county;
DROP TABLE tiger_data.pa_county_lookup;
DROP TABLE tiger_data.pa_cousub;
DROP TABLE tiger_data.pa_edges;
DROP TABLE tiger_data.pa_faces;
DROP TABLE tiger_data.pa_featnames;
DROP TABLE tiger_data.pa_place;
DROP TABLE tiger_data.pa_state;
DROP TABLE tiger_data.pa_zip_lookup_base;
DROP TABLE tiger_data.pa_zip_state;
DROP TABLE tiger_data.pa_zip_state_loc;
        

Name

地理编码 — 接受作为字符串(或其他标准化地址)的地址,并输出一组可能的位置,其中包括NAD 83 Long Long中的点几何图形、每个点的标准化地址以及评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。可以有选择地传入最大结果,默认为10,RESTORY_REGION(默认为NULL)

Synopsis

setof record geocode(varchar address, integer max_results=10, geometry restrict_region=NULL, norm_addy OUT addy, geometry OUT geomout, integer OUT rating);

setof record geocode(norm_addy in_addy, integer max_results=10, geometry restrict_region=NULL, norm_addy OUT addy, geometry OUT geomout, integer OUT rating);

描述

将地址作为字符串(或已标准化地址)接受,并输出一组可能的位置,其中包括NAD 83 Long Long中的点几何、 normalized_address (艾迪)每个人,以及评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。使用Tiger数据(边、面、地址)、PostgreSQL模糊字符串匹配(Soundex、levenshtein)和PostGIS线条内插函数来沿Tiger边内插地址。评级越高,地理编码越不可能是正确的。默认情况下,地理编码点从街道地址所在的中心线向一侧(L/R)偏移10米。

增强:2.0.0支持Tiger 2010结构化数据,并修改了一些逻辑,以提高地理编码的速度和精度,并将点从中心线偏移到街道地址所在的一侧。新参数 max_results 用于指定最佳结果的数量或仅返回最佳结果。

示例:基本

以下示例计时是在3.0 GHz单处理器Windows 7计算机上进行的,其中2 GB RAM运行PostgreSQL 9.1rc1/PostGIS 2.0,并加载了所有MA、MN、CA、RI状态TIGER数据。

精确匹配的计算速度更快(61ms)

SELECT g.rating, ST_X(g.geomout) As lon, ST_Y(g.geomout) As lat,
    (addy).address As stno, (addy).streetname As street,
    (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip
    FROM geocode('75 State Street, Boston MA 02109', 1) As g;
 rating |        lon        |      lat       | stno | street | styp |  city  | st |  zip
--------+-------------------+----------------+------+--------+------+--------+----+-------
      0 | -71.0557505845646 | 42.35897920691 |   75 | State  | St   | Boston | MA | 02109

即使没有传入Zip,地理编码器也能猜到(耗时约122-150毫秒)

SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat,
    (addy).address As stno, (addy).streetname As street,
    (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip
    FROM geocode('226 Hanover Street, Boston, MA',1) As g;
 rating |         wktlonlat         | stno | street  | styp |  city  | st |  zip
--------+---------------------------+------+---------+------+--------+----+-------
      1 | POINT(-71.05528 42.36316) |  226 | Hanover | St   | Boston | MA | 02113

可以处理拼写错误,并提供多个可能的解决方案和评级,并且需要更长的时间(500ms)。

SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat,
    (addy).address As stno, (addy).streetname As street,
    (addy).streettypeabbrev As styp, (addy).location As city, (addy).stateabbrev As st,(addy).zip
    FROM geocode('31 - 37 Stewart Street, Boston, MA 02116',1) As g;
 rating |         wktlonlat         | stno | street | styp |  city  | st |  zip
--------+---------------------------+------+--------+------+--------+----+-------
     70 | POINT(-71.06466 42.35114) |   31 | Stuart | St   | Boston | MA | 02116
    

使用来对地址进行批量地理编码。最简单的是设置 max_results=1 。只处理那些尚未进行地理编码的(没有评级)。

CREATE TABLE addresses_to_geocode(addid serial PRIMARY KEY, address text,
        lon numeric, lat numeric, new_address text, rating integer);

INSERT INTO addresses_to_geocode(address)
VALUES ('529 Main Street, Boston MA, 02129'),
 ('77 Massachusetts Avenue, Cambridge, MA 02139'),
 ('25 Wizard of Oz, Walaford, KS 99912323'),
 ('26 Capen Street, Medford, MA'),
 ('124 Mount Auburn St, Cambridge, Massachusetts 02138'),
 ('950 Main Street, Worcester, MA 01610');

-- only update the first 3 addresses (323-704 ms -  there are caching and shared memory effects so first geocode you do is always slower) --
-- for large numbers of addresses you don't want to update all at once
-- since the whole geocode must commit at once
-- For this example we rejoin with LEFT JOIN
-- and set to rating to -1 rating if no match
-- to ensure we don't regeocode a bad address
UPDATE addresses_to_geocode
  SET  (rating, new_address, lon, lat)
    = ( COALESCE(g.rating,-1), pprint_addy(g.addy),
       ST_X(g.geomout)::numeric(8,5), ST_Y(g.geomout)::numeric(8,5) )
FROM (SELECT addid, address
    FROM addresses_to_geocode
    WHERE rating IS NULL ORDER BY addid LIMIT 3) As a
    LEFT JOIN LATERAL geocode(a.address,1) As g ON true
WHERE a.addid = addresses_to_geocode.addid;

result
-----
Query returned successfully: 3 rows affected, 480 ms execution time.

SELECT * FROM addresses_to_geocode WHERE rating is not null;

 addid |                   address                    |    lon    |   lat    |                new_address                | rating
-------+----------------------------------------------+-----------+----------+-------------------------------------------+--------
     1 | 529 Main Street, Boston MA, 02129            | -71.07177 | 42.38357 | 529 Main St, Boston, MA 02129             |      0
     2 | 77 Massachusetts Avenue, Cambridge, MA 02139 | -71.09396 | 42.35961 | 77 Massachusetts Ave, Cambridge, MA 02139 |      0
     3 | 25 Wizard of Oz, Walaford, KS 99912323       | -97.92913 | 38.12717 | Willowbrook, KS 67502                     |    108
(3 rows)

示例:使用几何体过滤器

SELECT g.rating, ST_AsText(ST_SnapToGrid(g.geomout,0.00001)) As wktlonlat,
    (addy).address As stno, (addy).streetname As street,
    (addy).streettypeabbrev As styp,
    (addy).location As city, (addy).stateabbrev As st,(addy).zip
  FROM geocode('100 Federal Street, MA',
        3,
        (SELECT ST_Union(the_geom)
            FROM place WHERE statefp = '25' AND name = 'Lynn')::geometry
        ) As g;

 rating |         wktlonlat         | stno | street  | styp | city | st |  zip
--------+---------------------------+------+---------+------+------+----+-------
      7 | POINT(-70.96796 42.4659)  |  100 | Federal | St   | Lynn | MA | 01905
     16 | POINT(-70.96786 42.46853) | NULL | Federal | St   | Lynn | MA | 01905
(2 rows)

Time: 622.939 ms
          

Name

Geocode_Intersection — 包含相交的2条街道和州、市、邮政编码,并输出位于交叉点处的第一条交叉街道上的一组可能位置,还包括作为NAD 83 Long Late中的点位置的Geomout,a normalized_address (Addy)每个位置,以及评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。可以选择性地传入最大结果,默认为10。使用Tiger数据(边、面、地址)、PostgreSQL模糊字符串匹配(Soundex、levenshtein)。

Synopsis

setof record geocode_intersection(text roadway1, text roadway2, text in_state, text in_city, text in_zip, integer max_results=10, norm_addy OUT addy, geometry OUT geomout, integer OUT rating);

描述

在相交的2条街道和州、城市、邮政编码中,输出位于交叉点处的第一条交叉街道上的一组可能的位置,还包括NAD 83 Long Late中的点几何图形、每个位置的标准化地址和评级。评级越低,匹配的可能性就越大。结果首先按最低评级排序。可以选择传入最大结果,默认为10。返回 normalized_address (Addy)对于每个,Geomout作为NAD 83 Long Lat中的点位置,以及额定值。评级越低,匹配的可能性就越大。结果首先按最低评级排序。使用Tiger数据(边、面、地址)、PostgreSQL模糊字符串匹配(Soundex、levenshtein)

可用性:2.0.0

示例:基本

下面的示例计时是在3.0 GHz单处理器Windows 7计算机上进行的,其中2 GB RAM运行PostgreSQL 9.0/PostGIS 1.5,并加载了所有MA状态Tiger数据。当前有点慢(3000毫秒)

在加载了PostGIS 2.0 PostgreSQL 64位Tiger 2011数据的Windows 2003 64位8 GB上进行测试--(41毫秒)

SELECT pprint_addy(addy), st_astext(geomout),rating
            FROM geocode_intersection( 'Haverford St','Germania St', 'MA', 'Boston', '02130',1);
           pprint_addy            |         st_astext          | rating
----------------------------------+----------------------------+--------
98 Haverford St, Boston, MA 02130 | POINT(-71.101375 42.31376) |      0

即使没有在地理编码器中传入Zip也可以猜测(在Windows7盒子上花费了大约3500毫秒),在Windows 2003 64位上为741毫秒

SELECT pprint_addy(addy), st_astext(geomout),rating
                FROM geocode_intersection('Weld', 'School', 'MA', 'Boston');
          pprint_addy          |        st_astext         | rating
-------------------------------+--------------------------+--------
 98 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) |      3
 99 Weld Ave, Boston, MA 02119 | POINT(-71.099 42.314234) |      3

Name

Get_Geocode_Setting — 返回存储在tiger.Geocode_settings表中的特定设置的值。

Synopsis

text Get_Geocode_Setting(text setting_name);

描述

返回存储在tiger.Geocode_settings表中的特定设置的值。设置允许您切换函数的调试。以后的计划将是通过设置来控制评级。当前设置列表如下:

name              | setting |  unit   | category  |                                                             short_desc
--------------------------------+---------+---------+-----------+------------------------------------------------------------------------------------------------------------------------------
 debug_geocode_address          | false   | boolean | debug     | outputs debug information in notice log such as queries when geocode_address is called if true
 debug_geocode_intersection     | false   | boolean | debug     | outputs debug information in notice log such as queries when geocode_intersection is called if true
 debug_normalize_address        | false   | boolean | debug     | outputs debug information in notice log such as queries and intermediate expressions when normalize_address is called if true
 debug_reverse_geocode          | false   | boolean | debug     | if true, outputs debug information in notice log such as queries and intermediate expressions when reverse_geocode
 reverse_geocode_numbered_roads | 0       | integer | rating    | For state and county highways, 0 - no preference in name,
                                                                  1 - prefer the numbered highway name, 2 - prefer local state/county name
 use_pagc_address_parser        | false   | boolean | normalize | If set to true, will try to use the address_standardizer extension (via pagc_normalize_address)
                                                                 instead of tiger normalize_address built one    

已更改:2.2.0:默认设置现在保留在名为Geocode_Setting_Default的表中。使用自定义设置位于Geocode_Setting中,并且仅包含已由用户设置的设置。

可用性:2.1.0

返回调试设置示例

SELECT get_geocode_setting('debug_geocode_address) As result;
result
---------
false
        

Name

Get_Tract — 从几何图形所在的轨迹表返回普查区域或字段。默认返回区域的短名称。

Synopsis

text get_tract(geometry loc_geom, text output_field=name);

描述

给定的几何图形将返回该几何图形的人口普查区域位置。如果未指定空间参考系统,则假定为NAD 83 Long。

[Note]

此函数使用人口普查 默认情况下不会加载。如果您已经加载了状态表,则可以使用 Loader_Generate_Census_Script 剧本。

如果您尚未加载状态数据并希望加载这些附加表,请执行以下操作

UPDATE tiger.loader_lookupables set LOAD=TRUE WHERE LOAD=FALSE AND LOOKUP_NAME IN(‘TRACE’,‘BG’,‘TABBLOCK’);

然后,它们将被包括在 Loader_Generate_Script

可用性:2.0.0

示例:基本

SELECT get_tract(ST_Point(-71.101375, 42.31376) ) As tract_name;
tract_name
---------
1203.01
        
--this one returns the tiger geoid
SELECT get_tract(ST_Point(-71.101375, 42.31376), 'tract_id' ) As tract_id;
tract_id
---------
25025120301

另请参阅

地理编码 >


Name

Install_Missing_Indexes — 查找具有地理编码器联接中使用的键列的所有表,并筛选缺少这些列上使用的索引的条件,然后将它们添加到表中。

Synopsis

boolean Install_Missing_Indexes();

描述

查找中的所有表 老虎 tiger_data 在地理编码器连接和过滤器中使用的具有键列的模式缺少这些列上的索引,并将输出SQL DDL来定义这些表的索引,然后执行生成的脚本。这是一个帮助器函数,用于添加使查询速度更快所需的新索引,这些索引在加载过程中可能已丢失。此函数是与 Missing_Indexes_Generate_Script 除了生成CREATE INDEX脚本之外,还执行它。它被调用为 update_geocode.sql 升级脚本。

可用性:2.0.0

示例

SELECT install_missing_indexes();
         install_missing_indexes
-------------------------
 t
        

Name

Loader_Generate_Census_Script — 为指定州的指定平台生成外壳脚本,该脚本将下载老虎人口普查州区域、BG和选项卡块数据表、暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。

Synopsis

setof text loader_generate_census_script(text[] param_states, text os);

描述

为将下载TIGER数据人口普查州的指定州的指定平台生成外壳脚本 、数据块组 BG ,以及 选项卡块 数据表,暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。

它在Linux上使用unzip(在Windows上默认使用7-Zip),并使用wget进行下载。它用 Section 4.7.2, “使用Shapefile加载器” 以加载数据。注意,它所做的最小单位是一个完整的状态。它将仅处理临时文件夹和临时文件夹中的文件。

它使用以下控制表来控制进程和不同的操作系统外壳语法变化。

  1. loader_variables 跟踪各种变量,如普查地点、年份、数据和分段方案

  2. loader_platform 各种平台的配置文件以及各种可执行文件所在的位置。自带Windows和Linux。还可以添加更多内容。

  3. loader_lookuptables 每条记录定义一种表(州、县),是否处理其中的记录以及如何加载它们。定义导入数据、暂存数据、添加和删除每个列、索引和约束的步骤。每个表都带有STATE前缀,并且继承自Tiger模式中的一个表。例如,创建 tiger_data.ma_faces 它继承自 tiger.faces

可用性:2.0.0

[Note]

Loader_Generate_Script 包括这一逻辑,但如果您在PostGIS2.0.0alpha5之前安装了Tiger地理编码器,则需要在已经完成的州上运行此命令,才能获得这些附加表。

示例

生成脚本,以Windows外壳脚本格式加载选定州的数据。

SELECT loader_generate_census_script(ARRAY['MA'], 'windows');
-- result --
set STATEDIR="\gisdata\www2.census.gov\geo\pvs\tiger2010st\25_Massachusetts"
set TMPDIR=\gisdata\temp\
set UNZIPTOOL="C:\Program Files\7-Zip\7z.exe"
set WGETTOOL="C:\wget\wget.exe"
set PGBIN=C:\projects\pg\pg91win\bin\
set PGPORT=5432
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=yourpasswordhere
set PGDATABASE=tiger_postgis20
set PSQL="%PGBIN%psql"
set SHP2PGSQL="%PGBIN%shp2pgsql"
cd \gisdata

%WGETTOOL% http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html
del %TMPDIR%\*.* /Q
%PSQL% -c "DROP SCHEMA tiger_staging CASCADE;"
%PSQL% -c "CREATE SCHEMA tiger_staging;"
cd %STATEDIR%
for /r %%z in (*.zip) do %UNZIPTOOL% e %%z  -o%TMPDIR%
cd %TMPDIR%
%PSQL% -c "CREATE TABLE tiger_data.MA_tract(CONSTRAINT pk_MA_tract PRIMARY KEY (tract_id) ) INHERITS(tiger.tract); "
%SHP2PGSQL% -c -s 4269 -g the_geom   -W "latin1" tl_2010_25_tract10.dbf tiger_staging.ma_tract10 | %PSQL%
%PSQL% -c "ALTER TABLE tiger_staging.MA_tract10 RENAME geoid10 TO tract_id;  SELECT loader_load_staged_data(lower('MA_tract10'), lower('MA_tract')); "
%PSQL% -c "CREATE INDEX tiger_data_MA_tract_the_geom_gist ON tiger_data.MA_tract USING gist(the_geom);"
%PSQL% -c "VACUUM ANALYZE tiger_data.MA_tract;"
%PSQL% -c "ALTER TABLE tiger_data.MA_tract ADD CONSTRAINT chk_statefp CHECK (statefp = '25');"
: 

生成sh脚本

STATEDIR="/gisdata/www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts"
TMPDIR="/gisdata/temp/"
UNZIPTOOL=unzip
WGETTOOL="/usr/bin/wget"
export PGBIN=/usr/pgsql-9.0/bin
export PGPORT=5432
export PGHOST=localhost
export PGUSER=postgres
export PGPASSWORD=yourpasswordhere
export PGDATABASE=geocoder
PSQL=${PGBIN}/psql
SHP2PGSQL=${PGBIN}/shp2pgsql
cd /gisdata

wget http://www2.census.gov/geo/pvs/tiger2010st/25_Massachusetts/25/ --no-parent --relative --accept=*bg10.zip,*tract10.zip,*tabblock10.zip --mirror --reject=html
rm -f ${TMPDIR}/*.*
${PSQL} -c "DROP SCHEMA tiger_staging CASCADE;"
${PSQL} -c "CREATE SCHEMA tiger_staging;"
cd $STATEDIR
for z in *.zip; do $UNZIPTOOL -o -d $TMPDIR $z; done
:
: 

Name

Loader_Generate_Script — 为指定状态的指定平台生成外壳脚本,该脚本将下载Tiger数据、暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。最新版本支持Tiger 2010结构变化,还加载人口普查区域、区块组和区块表。

Synopsis

setof text loader_generate_script(text[] param_states, text os);

描述

为指定状态的指定平台生成外壳脚本,该脚本将下载Tiger数据、暂存并加载到 tiger_data 架构。每个状态脚本都作为单独的记录返回。

它在Linux上使用unzip(在Windows上默认使用7-Zip),并使用wget进行下载。它用 Section 4.7.2, “使用Shapefile加载器” 以加载数据。注意,它所做的最小单位是整个状态,但您可以通过自己下载文件来覆盖它。它将仅处理临时文件夹和临时文件夹中的文件。

它使用以下控制表来控制进程和不同的操作系统外壳语法变化。

  1. loader_variables 跟踪各种变量,如普查地点、年份、数据和分段方案

  2. loader_platform 各种平台的配置文件以及各种可执行文件所在的位置。自带Windows和Linux。还可以添加更多内容。

  3. loader_lookuptables 每条记录定义一种表(州、县),是否处理其中的记录以及如何加载它们。定义导入数据、暂存数据、添加和删除每个列、索引和约束的步骤。每个表都带有STATE前缀,并且继承自Tiger模式中的一个表。例如,创建 tiger_data.ma_faces 它继承自 tiger.faces

可用性:2.0.0以支持Tiger 2010结构化数据并加载人口普查区域(TRAIL)、块组(BG)和块(选项卡块)表。

[Note]

如果您使用的是pgAdmin 3,请注意,默认情况下,pgAdmin 3会截断长文本。要修复,就得改变 文件- > 选项- > 查询工具- > 查询编辑器- > 麦克斯。每列字符数 超过50000个字符。

示例

使用psql,其中gistest是您的数据库, /gisdata/data_load.sh 是使用要运行的外壳命令创建的文件。

psql -U postgres -h localhost -d gistest -A -t \
 -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'gistest')" > /gisdata/data_load.sh;

生成脚本,以Windows外壳脚本格式加载2个州的数据。

SELECT loader_generate_script(ARRAY['MA','RI'], 'windows') AS result;
-- result --
set TMPDIR=\gisdata\temp\
set UNZIPTOOL="C:\Program Files\7-Zip\7z.exe"
set WGETTOOL="C:\wget\wget.exe"
set PGBIN=C:\Program Files\PostgreSQL\9.4\bin\
set PGPORT=5432
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=yourpasswordhere
set PGDATABASE=geocoder
set PSQL="%PGBIN%psql"
set SHP2PGSQL="%PGBIN%shp2pgsql"
cd \gisdata

cd \gisdata
%WGETTOOL% ftp://ftp2.census.gov/geo/tiger/TIGER2015/PLACE/tl_*_25_* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html
cd \gisdata/ftp2.census.gov/geo/tiger/TIGER2015/PLACE
:
:

生成sh脚本

SELECT loader_generate_script(ARRAY['MA','RI'], 'sh') AS result;
-- result --
TMPDIR="/gisdata/temp/"
UNZIPTOOL=unzip
WGETTOOL="/usr/bin/wget"
export PGBIN=/usr/lib/postgresql/9.4/bin
-- variables used by psql: https://www.postgresql.org/docs/current/static/libpq-envars.html
export PGPORT=5432
export PGHOST=localhost
export PGUSER=postgres
export PGPASSWORD=yourpasswordhere
export PGDATABASE=geocoder
PSQL=${PGBIN}/psql
SHP2PGSQL=${PGBIN}/shp2pgsql
cd /gisdata

cd /gisdata
wget ftp://ftp2.census.gov/geo/tiger/TIGER2015/PLACE/tl_*_25_* --no-parent --relative --recursive --level=2 --accept=zip --mirror --reject=html
cd /gisdata/ftp2.census.gov/geo/tiger/TIGER2015/PLACE
rm -f ${TMPDIR}/*.*
:
:

Name

Loader_Generate_Nation_Script — 为加载县和州查找表的指定平台生成外壳脚本。

Synopsis

text loader_generate_nation_script(text os);

描述

为指定的平台生成外壳脚本,该脚本加载到 county_all county_all_lookup state_all 将表转换为 tiger_data 架构。它们分别继承自 county_lookup 状态 中的表格 老虎 架构。

它在Linux上使用unzip(在Windows上默认使用7-Zip),并使用wget进行下载。它用 Section 4.7.2, “使用Shapefile加载器” 以加载数据。

它使用以下控制表 tiger.loader_platform tiger.loader_variables ,以及 tiger.loader_lookuptables 以控制进程和不同操作系统外壳的语法变化。

  1. loader_variables 跟踪各种变量,如普查地点、年份、数据和分段方案

  2. loader_platform 各种平台的配置文件以及各种可执行文件所在的位置。附带Windows和Linux/Unix。还可以添加更多内容。

  3. loader_lookuptables 每条记录定义一种表(州、县),是否处理其中的记录以及如何加载它们。定义导入数据、暂存数据、添加和删除每个列、索引和约束的步骤。每个表都带有STATE前缀,并且继承自Tiger模式中的一个表。例如,创建 tiger_data.ma_faces 它继承自 tiger.faces

增强:2.4.1修复了邮政编码5制表区域(Zcta5)加载步骤,启用后,zcta5数据将作为国家脚本加载的一部分作为名为zcta5_all的单个表进行加载。

可用性:2.1.0

[Note]

如果您希望将邮政编码5表格区域(Zcta5)包括在您的国家/地区脚本加载中,请执行以下操作:

UPDATE tiger.loader_lookupables set Load=true where table_name=‘zcta510’;
[Note]

如果你在跑步 tiger_2010 版本,并且您希望使用较新的Tiger数据重新加载为状态,则需要为第一个LOAD GENERATE和RUN DROP语句 Drop_Nation_Tables_Generate_Script 在运行此脚本之前。

示例

生成脚本以加载国家数据窗口。

SELECT loader_generate_nation_script('windows'); 

为Linux/Unix系统生成加载数据的脚本。

SELECT loader_generate_nation_script('sh'); 

Name

Missing_Indexes_Generate_Script — 查找地理编码器联接中使用的具有键列的所有表,这些表缺少这些列的索引,并将输出SQL DDL以定义这些表的索引。

Synopsis

text Missing_Indexes_Generate_Script();

描述

查找中的所有表 老虎 tiger_data 地理编码器联接中使用的具有键列的架构缺少这些列上的索引,并将输出SQL DDL来定义这些表的索引。这是一个帮助器函数,用于添加使查询速度更快所需的新索引,这些索引在加载过程中可能已丢失。随着地理编码器的改进,此函数将更新以适应正在使用的新索引。如果此函数不输出任何内容,则意味着您的所有表都具有我们认为已经就位的关键索引。

可用性:2.0.0

示例

SELECT missing_indexes_generate_script();
-- output: This was run on a database that was created before many corrections were made to the loading script ---
CREATE INDEX idx_tiger_county_countyfp ON tiger.county USING btree(countyfp);
CREATE INDEX idx_tiger_cousub_countyfp ON tiger.cousub USING btree(countyfp);
CREATE INDEX idx_tiger_edges_tfidr ON tiger.edges USING btree(tfidr);
CREATE INDEX idx_tiger_edges_tfidl ON tiger.edges USING btree(tfidl);
CREATE INDEX idx_tiger_zip_lookup_all_zip ON tiger.zip_lookup_all USING btree(zip);
CREATE INDEX idx_tiger_data_ma_county_countyfp ON tiger_data.ma_county USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_cousub_countyfp ON tiger_data.ma_cousub USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_edges_countyfp ON tiger_data.ma_edges USING btree(countyfp);
CREATE INDEX idx_tiger_data_ma_faces_countyfp ON tiger_data.ma_faces USING btree(countyfp);
        

Name

Normalize_Address — 在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。该函数将只处理用Tiger_Geocode打包的查找数据(不需要Tiger人口普查数据)。

Synopsis

norm_addy normalize_address(varchar in_address);

描述

在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。这是将所有地址转换为标准化邮政格式的地理编码过程的第一步。除了与地理编码器一起打包的数据外,不需要其他数据。

此函数仅使用随Tiger_Geocoder预加载的各种方向/州/后缀查找表,这些查找表位于 老虎 模式,因此您不需要下载老虎普查数据或任何其他附加数据即可使用它。您可能会发现需要向中的各种查找表添加更多缩写或替代名称 老虎 架构。

它使用位于以下位置的各种控件查找表 老虎 用于标准化输入地址的架构。

中的字段 norm_addy TYPE OBJECT由该函数按以下顺序返回,其中()表示地理编码器需要的字段,[]表示可选字段:

(地址)[predirAbbrev](街道名称)[streetTypeAbbrev][postdirabbrev][内部][位置][stateAbbrev][压缩][已解析][ZIP4][地址_字母数字]

增强:2.4.0 Norm_Addy对象包括附加字段ZIP4和Address_AlphanNumeric。

  1. 地址 是一个整数:街道编号

  2. 前缀缩略语 是varchar:道路的方向前缀,如N、S、E、W等。这些是使用 direction_lookup 桌子。

  3. 街道名称 Varchar

  4. StreetTypeAbbrev 街道类型的varchar缩写版本:例如ST、Ave、Cir。这些都是使用 street_type_lookup 桌子。

  5. 后迪尔缩略语 道路N、S、E、W等的缩写方向。这些都是使用 direction_lookup 桌子。

  6. 内部 Varchar内部地址,如公寓或套房编号。

  7. 位置 瓦尔察尔通常是一个城市或管理省份。

  8. 状态缩略语 Varchar两个字符的美国州。例如密歇根州纽约州马萨诸塞州。这些属性由 state_lookup 桌子。

  9. 拉链 Varchar 5位数字邮政编码。例如02109。

  10. 已解析 Boolean-表示addess是否由规格化过程形成。NORMALIZE_ADDRESS函数在返回地址之前将其设置为真。

  11. ZIP4 9位邮政编码的最后4位。提供:PostGIS 2.4.0。

  12. address_alphanumeric 完整的街道编号,即使它有17R这样的字母字符。对此进行解析更好地使用 Pagc_Normalize_Address 功能。提供:PostGIS 2.4.0。

示例

输出选择字段。使用 Pprint_Addy 如果您想要一个漂亮的文本输出。

SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev
 FROM (SELECT address, normalize_address(address) As na
        FROM addresses_to_geocode) As g;

                        orig                         |  streetname   | streettypeabbrev
-----------------------------------------------------+---------------+------------------
 28 Capen Street, Medford, MA                        | Capen         | St
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | Mount Auburn  | St
 950 Main Street, Worcester, MA 01610                | Main          | St
 529 Main Street, Boston MA, 02129                   | Main          | St
 77 Massachusetts Avenue, Cambridge, MA 02139        | Massachusetts | Ave
 25 Wizard of Oz, Walaford, KS 99912323              | Wizard of Oz  |
        

Name

Pagc_Normalize_Address — 在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。该函数将只处理用Tiger_Geocode打包的查找数据(不需要Tiger人口普查数据)。需要ADDRESS_STANDIZER扩展名。

Synopsis

norm_addy pagc_normalize_address(varchar in_address);

描述

在给定文本街道地址的情况下,返回一个复合 norm_addy 具有道路后缀、前缀和标准化类型、街道、街道名称等的类型划分为单独的字段。这是将所有地址转换为标准化邮政格式的地理编码过程的第一步。除了与地理编码器一起打包的数据外,不需要其他数据。

此函数仅使用随Tiger_Geocoder预加载的各种Pagc_*查找表,这些查找表位于 老虎 模式,因此您不需要下载老虎普查数据或任何其他附加数据即可使用它。您可能会发现需要向中的各种查找表添加更多缩写或替代名称 老虎 架构。

它使用位于以下位置的各种控件查找表 老虎 用于标准化输入地址的架构。

中的字段 norm_addy TYPE OBJECT由该函数按以下顺序返回,其中()表示地理编码器需要的字段,[]表示可选字段:

的大小写和格式略有不同。 Normalize_Address

可用性:2.1.0

This method needs address_standardizer extension.

(地址)[predirAbbrev](街道名称)[streetTypeAbbrev][postdirAbbrev][内部][位置][stateAbbrev][压缩]

现在,ADDRESS_STANDIZER扩展的原生标准地址比NORM_ADDY要丰富一些,因为它旨在支持国际地址(包括国家/地区)。标准地址等效字段为:

House_num,predir,名称,suftype,sufdir,单位,城市,州,邮政编码

增强:2.4.0 Norm_Addy对象包括附加字段ZIP4和Address_AlphanNumeric。

  1. 地址 是一个整数:街道编号

  2. 前缀缩略语 是varchar:道路的方向前缀,如N、S、E、W等。这些是使用 direction_lookup 桌子。

  3. 街道名称 Varchar

  4. StreetTypeAbbrev 街道类型的varchar缩写版本:例如ST、Ave、Cir。这些都是使用 street_type_lookup 桌子。

  5. 后迪尔缩略语 道路N、S、E、W等的缩写方向。这些都是使用 direction_lookup 桌子。

  6. 内部 Varchar内部地址,如公寓或套房编号。

  7. 位置 瓦尔察尔通常是一个城市或管理省份。

  8. 状态缩略语 Varchar两个字符的美国州。例如密歇根州纽约州马萨诸塞州。这些属性由 state_lookup 桌子。

  9. 拉链 Varchar 5位数字邮政编码。例如02109。

  10. 已解析 Boolean-表示addess是否由规格化过程形成。NORMALIZE_ADDRESS函数在返回地址之前将其设置为真。

  11. ZIP4 9位邮政编码的最后4位。提供:PostGIS 2.4.0。

  12. address_alphanumeric 完整的街道编号,即使它有17R这样的字母字符。对此进行解析更好地使用 Pagc_Normalize_Address 功能。提供:PostGIS 2.4.0。

示例

单次呼叫示例

SELECT addy.*
FROM pagc_normalize_address('9000 E ROO ST STE 999, Springfield, CO') AS addy;


 address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal  |  location   | stateabbrev | zip | parsed
---------+--------------+------------+------------------+---------------+-----------+-------------+-------------+-----+--------
    9000 | E            | ROO        | ST               |               | SUITE 999 | SPRINGFIELD | CO          |     | t

批处理呼叫。目前,postgis_Tiger_Geocoder包装地址_标准化器的方式存在速度问题。这些问题有望在以后的版本中得到解决。要解决这些问题,如果需要提高批处理地理编码在批处理模式下调用生成标准网格的速度,建议您直接调用ADDRESS_STANDIZER STANDIZE_ADDRESS函数,如下所示,该练习与我们在中所做的类似 Normalize_Address 使用在中创建的数据 地理编码

WITH g AS (SELECT address, ROW((sa).house_num, (sa).predir, (sa).name
  , (sa).suftype, (sa).sufdir, (sa).unit , (sa).city, (sa).state, (sa).postcode, true)::norm_addy As na
 FROM (SELECT address, standardize_address('tiger.pagc_lex'
       , 'tiger.pagc_gaz'
       , 'tiger.pagc_rules', address) As sa
        FROM addresses_to_geocode) As g)
SELECT address As orig, (g.na).streetname, (g.na).streettypeabbrev
 FROM  g;

 orig                                                |  streetname   | streettypeabbrev
-----------------------------------------------------+---------------+------------------
 529 Main Street, Boston MA, 02129                   | MAIN          | ST
 77 Massachusetts Avenue, Cambridge, MA 02139        | MASSACHUSETTS | AVE
 25 Wizard of Oz, Walaford, KS 99912323              | WIZARD OF     |
 26 Capen Street, Medford, MA                        | CAPEN         | ST
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | MOUNT AUBURN  | ST
 950 Main Street, Worcester, MA 01610                | MAIN          | ST

Name

Pprint_Addy — 给出了一个 norm_addy 复合类型对象,返回它的漂亮打印表示形式。通常与Normize_Address一起使用。

Synopsis

varchar pprint_addy(norm_addy in_addy);

描述

给出了一个 norm_addy 复合类型对象,返回它的漂亮打印表示形式。除了与地理编码器一起打包的数据外,不需要其他数据。

通常与…连用 Normalize_Address

示例

漂亮地打印出一个地址

SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;
            pretty_address
---------------------------------------
 202 E Fremont St, Las Vegas, NV 89101
        

漂亮的印刷体地址一张地址表

SELECT address As orig, pprint_addy(normalize_address(address)) As pretty_address
        FROM addresses_to_geocode;

                        orig                         |              pretty_address
-----------------------------------------------------+-------------------------------------------
 529 Main Street, Boston MA, 02129                   | 529 Main St, Boston MA, 02129
 77 Massachusetts Avenue, Cambridge, MA 02139        | 77 Massachusetts Ave, Cambridge, MA 02139
 28 Capen Street, Medford, MA                        | 28 Capen St, Medford, MA
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | 124 Mount Auburn St, Cambridge, MA 02138
 950 Main Street, Worcester, MA 01610                | 950 Main St, Worcester, MA 01610

另请参阅

Normalize_Address


Name

Reverse_Geocode — 获取已知空间参考系统中的几何点,并返回包含理论上可能的地址数组和交叉街道数组的记录。如果Include_strnum_range=TRUE,则将街道范围包括在交叉街道中。

Synopsis

record Reverse_Geocode(geometry pt, boolean include_strnum_range=false, geometry[] OUT intpt, norm_addy[] OUT addy, varchar[] OUT street);

描述

获取已知空间REF中的几何点,并返回包含理论上可能的地址数组和交叉街道数组的记录。如果Include_strnum_range=TRUE,则将街道范围包括在交叉街道中。如果没有传入,Include_strnum_range默认为FALSE。地址是根据一个点离哪条路最近来排序的,所以第一个地址很可能是正确的。

为什么我们说理论地址而不是实际地址。Tiger的数据没有真实的地址,只有街道范围。因此,理论地址是基于街道范围的内插地址。例如,插入我的一个地址会返回26号法院街和26号法院面积,尽管没有26号法院面积这样的地方。这是因为一个点可能位于两条街道的拐角处,因此逻辑沿这两条街道进行内插。逻辑还假设地址沿街道均匀分布,这当然是错误的,因为你可以让一座市政建筑占据街道范围的很大一部分,而其余建筑聚集在街道的尽头。

注:嗯,此功能依赖于TIGER数据。如果您还没有加载覆盖该点区域的数据,那么嗯,您将得到一条空值填充的记录。

返回的记录元素如下:

  1. 插图 是一组点:这些点是街道上最接近输入点的中心点。有多少地址,就有多少点。

  2. 艾迪 是Norm_Addy(标准化地址)的数组:这些是适合输入点的可能地址的数组。数组中的第一个最有可能。通常应该只有一个,除了当一个点在2条或3条街道的拐角处,或者该点在道路上的某个地方而不是在一边的情况下。

  3. 街道 一组varchar:这些是交叉街道(或街道)(相交的街道或投影点所在的街道)。

增强:2.4.1如果加载了可选的zcta5数据集,即使没有加载特定的州数据,Reverse_Geocode函数也可以解析为STATE和ZIP。参考 Loader_Generate_Nation_Script 有关加载zcta5数据的详细信息。

可用性:2.0.0

示例

位于两条街道的拐角处,但最接近一条街道的点。这是麻省理工学院的大致位置:77 Massachusetts Ave,Cambridge,MA 02139请注意,虽然我们没有3条街,但PostgreSQL只会为超过上限的条目返回NULL,因此可以安全使用。这包括街道范围

SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3,
            array_to_string(r.street, ',') As cross_streets
        FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 42.359446)',4269),true) As r;

 result
 ------
      st1                                  | st2 | st3 |               cross_streets
-------------------------------------------+-----+-----+----------------------------------------------
 67 Massachusetts Ave, Cambridge, MA 02139 |     |     | 67 - 127 Massachusetts Ave,32 - 88 Vassar St

在这里,我们选择不包括十字路口的地址范围,并选择了一个非常接近2条街道的拐角的位置,因此可以通过两个不同的地址来知道。

SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2,
pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_str
FROM reverse_geocode(ST_GeomFromText('POINT(-71.06941 42.34225)',4269)) As r;

result
--------
               st1               |               st2               | st3 | cross_str
---------------------------------+---------------------------------+-----+------------------------
 5 Bradford St, Boston, MA 02118 | 49 Waltham St, Boston, MA 02118 |     | Waltham St

对于这个例子,我们重用了我们的地理编码示例 地理编码 而且我们只想要主要地址和最多2条十字路口。

SELECT actual_addr, lon, lat, pprint_addy((rg).addy[1]) As int_addr1,
    (rg).street[1] As cross1, (rg).street[2] As cross2
FROM (SELECT address As actual_addr, lon, lat,
    reverse_geocode( ST_SetSRID(ST_Point(lon,lat),4326) ) As rg
    FROM addresses_to_geocode WHERE rating > -1) As foo;

                     actual_addr                     |    lon    |   lat    |                 int_addr1                 |     cross1      |   cross2
-----------------------------------------------------+-----------+----------+-------------------------------------------+-----------------+------------
 529 Main Street, Boston MA, 02129                   | -71.07181 | 42.38359 | 527 Main St, Boston, MA 02129             | Medford St      |
 77 Massachusetts Avenue, Cambridge, MA 02139        | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | Vassar St       |
 26 Capen Street, Medford, MA                        | -71.12377 | 42.41101 | 9 Edison Ave, Medford, MA 02155           | Capen St        | Tesla Ave
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | -71.12304 | 42.37328 | 3 University Rd, Cambridge, MA 02138      | Mount Auburn St |
 950 Main Street, Worcester, MA 01610                | -71.82368 | 42.24956 | 3 Maywood St, Worcester, MA 01603         | Main St         | Maywood Pl

Name

Topology_Load_Tiger — 将定义的老虎数据区域加载到PostGIS拓扑中,并将老虎数据转换为拓扑的空间参考,并捕捉到拓扑的精度公差。

Synopsis

text Topology_Load_Tiger(varchar topo_name, varchar region_type, varchar region_id);

描述

将定义的Tiger数据区域加载到PostGIS拓扑中。将面、节点和边变换到目标拓扑的空间参考系,并将点捕捉到目标拓扑的公差。创建的面、节点、边保持与原始TIGER数据面、节点、边相同的ID,以便将来的数据集可以更容易地与TIGER数据进行协调。返回有关进程的摘要详细信息。

例如,这对于重新划分数据非常有用,在这些数据中,您需要新形成的多边形沿街道中心线移动,并且生成的多边形不重叠。

[Note]

该功能依赖于Tiger数据以及PostGIS拓扑模块的安装。有关详细信息,请参阅 Chapter 10, 拓扑学Section 2.2.3, “生成配置” 。如果尚未加载覆盖感兴趣区域的数据,则不会创建任何拓扑记录。如果您尚未使用拓扑功能创建拓扑,则此功能也将失败。

[Note]

大多数拓扑验证错误都是公差问题的结果,在公差问题中,转换后的边点不完全对齐或重叠。为了解决这种情况,如果拓扑验证失败,您可能需要提高或降低精度。

必需的参数:

  1. topo_name 要将数据加载到的现有PostGIS拓扑的名称。

  2. region_type 边界区域的类型。目前仅限 地点 是受支持的。计划是再增加几个。这是要查看的表,以定义区域边界。E.g tiger.place tiger.county

  3. region_id 这就是老虎所说的大地水准面。它是表中区域的唯一标识符。对于地方来说,它是 PLCIDFP 中的列 tiger.place 。对于县城来说,这是 Cntyidfp 中的列 tiger.county

可用性:2.0.0

示例:马萨诸塞州波士顿拓扑学

为马萨诸塞州波士顿创建一个拓扑,位于马萨诸塞州的马萨诸塞州平面英尺(2249),公差为0.25英尺,然后加载波士顿城市虎面、边、节点。

SELECT topology.CreateTopology('topo_boston', 2249, 0.25);
createtopology
--------------
   15
-- 60,902 ms ~ 1 minute on windows 7 desktop running 9.1 (with 5 states tiger data loaded)
SELECT tiger.topology_load_tiger('topo_boston', 'place', '2507000');
-- topology_loader_tiger --
29722 edges holding in temporary. 11108 faces added. 1875 edges of faces added.  20576 nodes added.
19962 nodes contained in a face.  0 edge start end corrected.  31597 edges added.

-- 41 ms --
SELECT topology.TopologySummary('topo_boston');
 -- topologysummary--
Topology topo_boston (15), SRID 2249, precision 0.25
20576 nodes, 31597 edges, 11109 faces, 0 topogeoms in 0 layers

-- 28,797 ms to validate yeh returned no errors --
SELECT * FROM
    topology.ValidateTopology('topo_boston');

       error       |   id1    |    id2
-------------------+----------+-----------
      

示例:马萨诸塞州萨福克市拓扑学

在质量州平面米(26986)中创建马萨诸塞州萨福克市的拓扑,公差为0.25米,然后加载到萨福克县的虎面、边、节点。

SELECT topology.CreateTopology('topo_suffolk', 26986, 0.25);
-- this took 56,275 ms ~ 1 minute on Windows 7 32-bit with 5 states of tiger loaded
-- must have been warmed up after loading boston
SELECT tiger.topology_load_tiger('topo_suffolk', 'county', '25025');
-- topology_loader_tiger --
 36003 edges holding in temporary. 13518 faces added. 2172 edges of faces added.
 24761 nodes added.  24075 nodes contained in a face.  0 edge start end corrected.  38175 edges added.
-- 31 ms --
SELECT topology.TopologySummary('topo_suffolk');
 -- topologysummary--
 Topology topo_suffolk (14), SRID 26986, precision 0.25
24761 nodes, 38175 edges, 13519 faces, 0 topogeoms in 0 layers

-- 33,606 ms to validate --
SELECT * FROM
    topology.ValidateTopology('topo_suffolk');

       error       |   id1    |    id2
-------------------+----------+-----------
 coincident nodes  | 81045651 |  81064553
 edge crosses node | 81045651 |  85737793
 edge crosses node | 81045651 |  85742215
 edge crosses node | 81045651 | 620628939
 edge crosses node | 81064553 |  85697815
 edge crosses node | 81064553 |  85728168
 edge crosses node | 81064553 |  85733413
      

Name

Set_Geocode_Setting — 设置影响地理编码器功能行为的设置。

Synopsis

text Set_Geocode_Setting(text setting_name, text setting_value);

描述

设置中存储的特定设置的值 tiger.geocode_settings 桌子。设置允许您切换函数的调试。以后的计划将是通过设置来控制评级。中列出了当前的设置列表 Get_Geocode_Setting

可用性:2.1.0

返回调试设置示例

如果你跑 地理编码 当此功能为真时,通知日志将输出计时和查询。

SELECT set_geocode_setting('debug_geocode_address', 'true') As result;
result
---------
true

Chapter 15. PostGIS Special Functions Index

15.1. PostGIS Aggregate Functions

The functions given below are spatial aggregate functions provided with PostGIS that can be used just like any other sql aggregate function such as sum, average.

  • ST_3DExtent - 返回几何图形的3D边界框的聚合函数。
  • ST_3DUnion - 执行3D合并。
  • ST_AsFlatGeobuf - 返回一组行的FlatGeobuf表示形式。
  • ST_AsGeobuf - 返回一组行的Geobuf表示形式。
  • ST_AsMVT - 返回一组行的MapBox向量平铺表示形式的聚合函数。
  • ST_ClusterIntersecting - 聚合函数,用于将输入几何图形聚集到相连的集合中。
  • ST_ClusterWithin - 按分隔距离对输入几何图形进行聚类的聚合函数。
  • ST_Collect - 从一组几何图形创建GeometryCollection或Multi*几何图形。
  • ST_Extent - 返回几何图形边界框的聚合函数。
  • ST_MakeLine - 从点、多点或线串几何图形创建线串。
  • ST_MemUnion - 以内存效率较高但速度较慢的方式合并几何图形的聚合函数
  • ST_Polygonize - 计算由一组几何图形的线条形成的多边形集合。
  • ST_SameAlignment - 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。
  • ST_Union - 计算表示输入几何图形的点集并集的几何图形。
  • TopoElementArray_Agg - 返回一个 拓扑元素阵列 对于一组Element_id,输入ARRAYS(TopoElements)。

15.2. PostGIS Window Functions

The functions given below are spatial window functions provided with PostGIS that can be used just like any other sql window function such as row_numer(), lead(), lag(). All these require an SQL OVER() clause.

  • ST_ClusterDBSCAN - 使用DBSCAN算法返回每个输入几何图形的群集ID的窗口函数。
  • ST_ClusterKMeans - 窗口函数,使用K-Means算法返回每个输入几何图形的群集ID。

15.3. PostGIS SQL-MM Compliant Functions

The functions given below are PostGIS functions that conform to the SQL/MM 3 standard

[Note]

SQL-MM defines the default SRID of all geometry constructors as 0. PostGIS uses a default SRID of -1.

  • ST_3DDWithin - 如果两个3D几何在给定的3D距离内,则返回True This method implements the SQL/MM specification. SQL-MM?
  • ST_3DDistance - 以投影单位返回两个几何图形之间的3D笛卡尔最小距离(基于空间参考)。 This method implements the SQL/MM specification. SQL-MM?
  • ST_3DIntersects - 如果两个几何图形在三维空间上相交,则返回TRUE-仅对于点、线串、多边形、多面体曲面(面积)。 This method implements the SQL/MM specification. SQL-MM 3:?
  • ST_AddEdgeModFace - 添加新边,如果这样做会拆分面,则修改原始面并添加新面。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.13
  • ST_AddEdgeNewFaces - 添加新边,如果这样做会分割一个面,则删除原始面并用两个新面替换它。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.12
  • ST_AddIsoEdge - 添加由几何图形定义的隔离边 线绳 连接两个现有隔离节点的拓扑 阳极 和 另一个节点 并返回新边的边ID。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.4
  • ST_AddIsoNode - 将隔离节点添加到拓扑中的面,并返回新节点的节点ID。如果Faces为空,仍会创建该节点。 This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X+1.3.1
  • ST_Area - 返回多边形几何体的面积。 This method implements the SQL/MM specification. SQL-MM 3:8.1.2、9.5.3
  • ST_AsBinary - 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。 This method implements the SQL/MM specification. SQL-MM 3:5.1.37
  • ST_AsText - 返回不带SRID元数据的几何图形/地理图形的熟知文本(WKT)表示。 This method implements the SQL/MM specification. SQL-MM 3:5.1.25
  • ST_Boundary - 返回几何图形的边界。 This method implements the SQL/MM specification. SQL-MM 3:5.1.14
  • ST_Buffer - 计算覆盖距几何图形给定距离内的所有点的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.17
  • ST_Centroid - 返回几何图形的几何中心。 This method implements the SQL/MM specification. SQL-MM 3:8.1.4、9.5.5
  • ST_ChangeEdgeGeom - 更改边的形状,而不影响拓扑结构。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息X.3.6
  • ST_Contains - 如果B的点都不在A的外部,并且A和B至少有一个内点相同,则返回TRUE。 This method implements the SQL/MM specification. SQL-MM 3:5.1.31
  • ST_ConvexHull - 计算几何体的凸包。 This method implements the SQL/MM specification. SQL-MM 3:5.1.16
  • ST_CoordDim - 返回几何图形的坐标尺寸。 This method implements the SQL/MM specification. SQL-MM 3:5.1.3
  • ST_CreateTopoGeo - 将几何图形集合添加到给定的空拓扑中,并返回一条详细说明成功的消息。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程细节--X.3.18
  • ST_Crosses - 如果两个几何图形有一些(但不是全部)共有的内部点,则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.29
  • ST_CurveToLine - 将包含曲线的几何图形转换为线性几何图形。 This method implements the SQL/MM specification. SQL-MM 3:7.1.7
  • ST_Difference - 计算表示几何图形A中不与几何图形B相交的部分的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.20
  • ST_Dimension - 返回几何图形的拓扑尺寸。 This method implements the SQL/MM specification. SQL-MM 3:5.1.2
  • ST_Disjoint - 如果两个几何图形不相交(它们没有共同点),则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.26
  • ST_Distance - 返回两个几何图形或地理值之间的距离。 This method implements the SQL/MM specification. SQL-MM 3:5.1.23
  • ST_EndPoint - 返回LineString或CircularLineString的最后一点。 This method implements the SQL/MM specification. SQL-MM 3:7.1.4
  • ST_Envelope - 返回表示几何图形的边框的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.15
  • ST_Equals - 如果两个几何图形包含相同的点集,则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.24
  • ST_ExteriorRing - 返回表示多边形外环的线串。 This method implements the SQL/MM specification. SQL-MM 3:8.2.3、8.3.3
  • ST_GMLToSQL - 从GML表示法返回指定的ST_Geometry值。这是ST_GeomFromGML的别名 This method implements the SQL/MM specification. SQL-MM 3:5.1.50(曲线支持除外)。
  • ST_GeomCollFromText - 使用给定的SRID从集合WKT创建集合几何图形。如果未提供SRID,则默认为0。 This method implements the SQL/MM specification.
  • ST_GeomFromText - 从熟知文字表示法(WKT)返回指定的ST_Geometry值。 This method implements the SQL/MM specification. SQL-MM 3:5.1.40
  • ST_GeomFromWKB - 从熟知的二进制几何图形表示(WKB)和可选SRID创建几何图形实例。 This method implements the SQL/MM specification. SQL-MM 3:5.1.41
  • ST_GeometryFromText - 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名 This method implements the SQL/MM specification. SQL-MM 3:5.1.40
  • ST_GeometryN - 返回几何图形集合的元素。 This method implements the SQL/MM specification. SQL-MM 3:9.1.5
  • ST_GeometryType - 以文本形式返回几何图形的SQL-MM类型。 This method implements the SQL/MM specification. SQL-MM 3:5.1.4
  • ST_GetFaceEdges - 返回一组绑定的有序边 正面 。 This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.5
  • ST_GetFaceGeometry - 返回给定拓扑中具有指定面ID的多边形。 This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.16
  • ST_InitTopoGeo - 创建新的拓扑方案,并将此新方案注册到topology。拓扑表和过程的详细信息摘要中。 This method implements the SQL/MM specification. SQL-MM 3 Topo-Geo和Topo-Net 3:例程详细信息:X.3.17
  • ST_InteriorRingN - 返回多边形的第N个内环(孔)。 This method implements the SQL/MM specification. SQL-MM 3:8.2.6、8.3.5
  • ST_Intersection - 计算表示几何图形A和B的共享部分的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.18
  • ST_Intersects - 如果两个几何图形相交(它们至少有一个共同点),则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.27
  • ST_IsClosed - 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。 This method implements the SQL/MM specification. SQL-MM 3:7.1.5、9.3.3
  • ST_IsEmpty - 测试几何图形是否为空。 This method implements the SQL/MM specification. SQL-MM 3:5.1.7
  • ST_IsRing - 测试线串是否闭合且简单。 This method implements the SQL/MM specification. SQL-MM 3:7.1.6
  • ST_IsSimple - 测试几何体是否没有自交点或自切点。 This method implements the SQL/MM specification. SQL-MM 3:5.1.8
  • ST_IsValid - 测试几何图形在二维中是否格式良好。 This method implements the SQL/MM specification. SQL-MM 3:5.1.9
  • ST_Length - 返回线性几何图形的二维长度。 This method implements the SQL/MM specification. SQL-MM 3:7.1.2、9.3.4
  • ST_LineFromText - 使用给定的SRID从WKT创建几何图形表示。如果未提供SRID,则默认为0。 This method implements the SQL/MM specification. SQL-MM 3:7.2.8
  • ST_LineFromWKB - 使之成为 LINESTRING 从具有给定SRID的WKB This method implements the SQL/MM specification. SQL-MM 3:7.2.9
  • ST_LinestringFromWKB - 使用给定的SRID从WKB创建几何图形。 This method implements the SQL/MM specification. SQL-MM 3:7.2.9
  • ST_M - 返回点的M坐标。 This method implements the SQL/MM specification.
  • ST_MLineFromText - 从WKT表示法返回指定的ST_MultiLineString值。 This method implements the SQL/MM specification. SQL-MM 3:9.4.4
  • ST_MPointFromText - 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。 This method implements the SQL/MM specification. SQL-MM 3:9.2.4
  • ST_MPolyFromText - 使用给定的SRID从WKT创建多重多边形几何图形。如果未提供SRID,则默认为0。 This method implements the SQL/MM specification. SQL-MM 3:9.6.4
  • ST_ModEdgeHeal - 通过删除连接两条边的节点、修改第一条边并删除第二条边来修复两条边。返回已删除节点的ID。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9
  • ST_ModEdgeSplit - 通过沿现有边创建新节点、修改原始边并添加新边来分割边。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9
  • ST_MoveIsoNode - 将拓扑中的隔离节点从一点移动到另一点。如果是新的 尖点 几何体以抛出错误的节点的形式存在。返回Move的描述。 This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X.3.2
  • ST_NewEdgeHeal - 通过删除连接两条边的节点、删除两条边并将其替换为方向与提供的第一条边相同的边来修复两条边。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.9
  • ST_NewEdgesSplit - 通过沿现有边创建新节点、删除原始边并将其替换为两条新边来分割边。返回连接新边而创建的新节点的ID。 This method implements the SQL/MM specification. SQL-MM:Topo-Net例程:X.3.8
  • ST_NumGeometries - 返回几何图形集合中的元素数。 This method implements the SQL/MM specification. SQL-MM 3:9.1.4
  • ST_NumInteriorRings - 返回多边形的内环(孔)数。 This method implements the SQL/MM specification. SQL-MM 3:8.2.5
  • ST_NumPatches - 返回多面体曲面上的面数。对于非多面体几何图形将返回NULL。 This method implements the SQL/MM specification. SQL-MM 3:?
  • ST_NumPoints - 返回LineString或CircularString中的点数。 This method implements the SQL/MM specification. SQL-MM 3:7.2.4
  • ST_OrderingEquals - 如果两个几何图形表示相同的几何图形并且具有相同方向顺序的点,则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.43
  • ST_Overlaps - 如果两个几何图形相交且具有相同的尺寸,但不完全包含在彼此之间,则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.32
  • ST_PatchN - 返回多面体曲面的第N个几何图形(面)。 This method implements the SQL/MM specification. SQL-MM 3:?
  • ST_Perimeter - 返回多边形几何图形或地理区域的边界长度。 This method implements the SQL/MM specification. SQL-MM 3:8.1.3、9.5.4
  • ST_Point - 使用X、Y和SRID值创建点。 This method implements the SQL/MM specification. SQL-MM 3:6.1.2
  • ST_PointFromText - 使用给定的SRID从WKT生成点几何图形。如果未提供SRID,则默认为未知。 This method implements the SQL/MM specification. SQL-MM 3:6.1.8
  • ST_PointFromWKB - 使用给定的SRID从WKB创建几何图形 This method implements the SQL/MM specification. SQL-MM 3:6.1.9
  • ST_PointN - 返回几何图形中第一条直线串或圆形直线串中的第N点。 This method implements the SQL/MM specification. SQL-MM 3:7.2.5、7.3.5
  • ST_PointOnSurface - 计算保证位于多边形内或几何体上的点。 This method implements the SQL/MM specification. SQL-MM 3:8.1.5、9.5.6。规范仅为曲面几何图形定义ST_PointOnSurface。PostGIS扩展了该功能,以支持所有常见的几何类型。其他数据库(Oracle、DB2、ArcSDE)似乎仅支持曲面的此功能。SQL Server 2008支持所有常见几何图形类型。
  • ST_Polygon - 从具有指定SRID的线串创建多边形。 This method implements the SQL/MM specification. SQL-MM 3:8.3.2
  • ST_PolygonFromText - 使用给定的SRID从WKT创建几何图形。如果未提供SRID,则默认为0。 This method implements the SQL/MM specification. SQL-MM 3:8.3.6
  • ST_Relate - 测试两个几何图形是否具有匹配相交矩阵模式的拓扑关系,或计算其相交矩阵 This method implements the SQL/MM specification. SQL-MM 3:5.1.25
  • ST_RemEdgeModFace - 删除一条边,如果删除的边分隔了两个面,则删除其中一个面并修改另一个边以占据两个面的空间。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.15
  • ST_RemEdgeNewFace - 删除边,如果删除的边分隔两个面,则删除原始面并将其替换为新面。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X.3.14
  • ST_RemoveIsoEdge - 删除隔离边并返回操作说明。如果边缘不是孤立的,则会引发异常。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X+1.3.3
  • ST_RemoveIsoNode - 删除隔离节点并返回操作说明。如果节点不是孤立的(是边的开始或结束),则会引发异常。 This method implements the SQL/MM specification. SQL-MM:Topo-Geo和Topo-Net 3:例程详细信息:X+1.3.3
  • ST_SRID - 返回几何图形的空间参考标识符。 This method implements the SQL/MM specification. SQL-MM 3:5.1.5
  • ST_StartPoint - 返回线串的第一个点。 This method implements the SQL/MM specification. SQL-MM 3:7.1.3
  • ST_SymDifference - 计算表示几何图形A和B不相交部分的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.21
  • ST_Touches - 如果两个几何图形至少有一个共同点,但其内部不相交,则返回True。 This method implements the SQL/MM specification. SQL-MM 3:5.1.28
  • ST_Transform - 返回坐标转换到不同空间参考系的新几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.6
  • ST_Union - 计算表示输入几何图形的点集并集的几何图形。 This method implements the SQL/MM specification. SQL-MM 3:5.1.19涉及多边形时的z索引(高程)。
  • ST_WKBToSQL - 从熟知二进制表示法(WKB)返回指定的ST_Geometry值。这是不带sRID的ST_GeomFromWKB的别名 This method implements the SQL/MM specification. SQL-MM 3:5.1.36
  • ST_WKTToSQL - 从熟知文字表示法(WKT)返回指定的ST_Geometry值。这是ST_GeomFromText的别名 This method implements the SQL/MM specification. SQL-MM 3:5.1.34
  • ST_Within - 如果A的点都不在B的外部,并且A和B至少有一个内点相同,则返回TRUE。 This method implements the SQL/MM specification. SQL-MM 3:5.1.30
  • ST_X - 返回点的X坐标。 This method implements the SQL/MM specification. SQL-MM 3:6.1.3
  • ST_Y - 返回点的Y坐标。 This method implements the SQL/MM specification. SQL-MM 3:6.1.4
  • ST_Z - 返回点的Z坐标。 This method implements the SQL/MM specification.

15.4. PostGIS Geography Support Functions

The functions and operators given below are PostGIS functions/operators that take as input or return as output a geography data type object.

[Note]

Functions with a (T) are not native geodetic functions, and use a ST_Transform call to and from geometry to do the operation. As a result, they may not behave as expected when going over dateline, poles, and for large geometries or geometry pairs that cover more than one UTM zone. Basic transform - (favoring UTM, Lambert Azimuthal (North/South), and falling back on mercator in worst case scenario)

  • ST_Area - 返回多边形几何体的面积。
  • ST_AsBinary - 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。
  • ST_AsEWKT - 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。
  • ST_AsGML - 将几何图形作为GML版本2或3元素返回。
  • ST_AsGeoJSON - 将几何图形作为GeoJSON元素返回。
  • ST_AsKML - 将几何图形作为KML元素返回。
  • ST_AsSVG - 返回几何图形的SVG路径数据。
  • ST_AsText - 返回不带SRID元数据的几何图形/地理图形的熟知文本(WKT)表示。
  • ST_Azimuth - 返回两点之间直线的北向方位角。
  • ST_Buffer - 计算覆盖距几何图形给定距离内的所有点的几何图形。
  • ST_Centroid - 返回几何图形的几何中心。
  • ST_CoveredBy - 如果A中没有点在B之外,则返回TRUE
  • ST_Covers - 如果B中没有点在A之外,则返回TRUE
  • ST_DWithin - 如果两个几何在给定距离内,则返回True
  • ST_Distance - 返回两个几何图形或地理值之间的距离。
  • ST_GeogFromText - 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。
  • ST_GeogFromWKB - 从熟知二进制几何表示(WKB)或扩展熟知二进制(EWKB)创建地理实例。
  • ST_GeographyFromText - 从熟知文本表示形式或扩展(WKT)中返回指定的地理值。
  • = - 退货 TRUE 如果几何/地理A的坐标和坐标顺序与几何/地理B的坐标和坐标顺序相同。
  • ST_Intersection - 计算表示几何图形A和B的共享部分的几何图形。
  • ST_Intersects - 如果两个几何图形相交(它们至少有一个共同点),则返回True。
  • ST_Length - 返回线性几何图形的二维长度。
  • ST_Perimeter - 返回多边形几何图形或地理区域的边界长度。
  • ST_Project - 返回从起点按距离和方位角(方位角)投影的点。
  • ST_Segmentize - 返回线段长度不超过给定距离的修改后的几何图形/地理图形。
  • ST_Summary - 返回几何图形内容的文本摘要。
  • < - > - 返回A和B之间的2D距离。
  • & & - 退货 TRUE 如果A的2D边界框与B的2D边界框相交。

15.5. PostGIS Raster Support Functions

The functions and operators given below are PostGIS functions/operators that take as input or return as output a 栅格 data type object. Listed in alphabetical order.

  • Box3D - 返回栅格的封闭框的框3D表示。
  • @ - 退货 TRUE 如果A的边界框包含在B的边界框中。则使用双精度边界框。
  • ~ - 退货 TRUE 如果A的边界框包含B的边界框。使用双精度边界框。
  • = - 退货 TRUE 如果A的边界框与B的边界框相同。使用双精度边界框。
  • & & - 退货 TRUE 如果A的边界框与B的边界框相交。
  • & < - 退货 TRUE 如果A的边界框在B的左侧。
  • & > - 退货 TRUE 如果A的边界框在B的右侧。
  • ~= - 退货 TRUE 如果A的边界框与B的边界框相同。
  • ST_Retile - 从任意平铺的栅格覆盖中返回一组配置的平铺。
  • ST_AddBand - 返回在给定索引位置添加了给定初始值的给定类型新波段的栅格。如果未指定索引,则将带区添加到末尾。
  • ST_AsBinary/ST_AsWKB - 返回栅格的熟知二进制(WKB)表示形式。
  • ST_AsGDALRaster - 以指定的GDAL栅格格式返回栅格平铺。栅格格式是编译后的库支持的格式之一。使用ST_GDALDrivers()获取您的库支持的格式列表。
  • ST_AsHexWKB - 返回栅格的祸不单行表示形式的熟知二进制(Wkb)。
  • ST_AsJPEG - 将栅格拼贴选定的带区作为单个联合照片导出组(JPEG)图像(字节数组)返回。如果未指定标注栏且有1个或3个以上标注栏,则仅使用第一个标注栏。如果只有3个波段,则使用所有3个波段并将其映射到RGB。
  • ST_AsPNG - 将栅格平铺所选波段作为单个便携网络图形(PNG)图像(字节数组)返回。如果栅格中的1、3或4个标注栏未指定标注栏,则将使用所有标注栏。如果超过2个或4个标注栏但未指定标注栏,则仅使用标注栏1。标注栏映射到RGB或RGBA空间。
  • ST_AsRaster - 将PostGIS几何图形转换为PostGIS栅格。
  • ST_AsTIFF - 将栅格选定波段作为单个TIFF图像(字节数组)返回。如果未指定标注栏或栅格中不存在任何指定标注栏,则将尝试使用所有标注栏。
  • ST_Aspect - 返回高程栅格标注栏的纵横比(默认情况下以度为单位)。对于分析地形非常有用。
  • ST_Band - 将现有栅格的一个或多个波段作为新栅格返回。对于从现有栅格构建新栅格非常有用。
  • ST_BandFileSize - 返回存储在文件系统中的带的文件大小。如果未指定带宽,则假定为1。
  • ST_BandFileTimestamp - 返回存储在文件系统中的带的文件时间戳。如果未指定带宽,则假定为1。
  • ST_BandIsNoData - 如果带区仅填充无数据值,则返回TRUE。
  • ST_BandMetaData - 返回特定栅格波段的基本元数据。如果未指定,则假定波段编号为1。
  • ST_BandNoDataValue - 返回给定区段中表示无数据的值。如果没有频带数,则假定为1。
  • ST_BandPath - 返回存储在文件系统中的带的系统文件路径。如果未指定带宽,则假定为1。
  • ST_BandPixelType - 返回给定波段的像素类型。如果未指定带宽,则假定为1。
  • ST_Clip - 返回由输入几何图形剪裁的栅格。如果未指定波段编号,则处理所有波段。如果 裁剪 未指定或为TRUE,则将裁剪输出栅格。
  • ST_ColorMap - 从源栅格和指定的标注栏中创建最多包含四个8BUI标注栏(灰度、RGB、RGBA)的新栅格。如果未指定,则假定为带1。
  • ST_Contains - 如果栅格栅格B的点没有位于栅格RASTA的外部,并且栅格B的内部至少有一个点位于RASTA的内部,则返回TRUE。
  • ST_ContainsProperly - 如果rastB与Rasta的内部相交,但不与Rasta的边界或外部相交,则返回TRUE。
  • ST_Contour - 从提供的栅格波段生成一组矢量等高线,使用 GDAL等高线算法 。
  • ST_ConvexHull - 返回栅格的凸壳几何图形,包括等于BandNoDataValue的像素值。对于形状规则且无倾斜的栅格,这将提供与ST_Entaine相同的结果,因此仅适用于形状不规则或倾斜的栅格。
  • ST_Count - 返回栅格或栅格覆盖的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。
  • ST_CountAgg - 聚合。返回一组栅格的给定波段中的像素数。如果未指定波段,则默认为波段1。如果EXCLUDE_NODATA_VALUE设置为TRUE,将只计算不等于NODATA值的像素。
  • ST_CoveredBy - 如果没有栅格RASTA的点位于栅格栅格B之外,则返回TRUE。
  • ST_Covers - 如果栅格栅格B的点没有位于栅格RASTA之外,则返回TRUE。
  • ST_DFullyWithin - 如果栅格RastA和rastB彼此完全在指定距离内,则返回TRUE。
  • ST_DWithin - 如果栅格RastA和rastB彼此在指定距离内,则返回TRUE。
  • ST_Disjoint - 如果栅格RASTA在空间上不与rastB相交,则返回TRUE。
  • ST_DumpAsPolygons - 返回给定栅格标注栏中的一组geomval(geom,val)行。如果未指定波段编号,则波段编号默认为1。
  • ST_DumpValues - 以二维数组的形式获取指定波段的值。
  • ST_Envelope - 返回栅格范围的多边形表示。
  • ST_FromGDALRaster - 从支持的GDAL栅格文件返回栅格。
  • ST_GeoReference - 返回坐标文件中常见的GDAL或ESRI格式的地理参考元数据。默认值为GDAL。
  • ST_Grayscale - 根据源栅格和表示红色、绿色和蓝色的指定波段创建新的One-8BUI波段栅格
  • ST_HasNoBand - 如果不存在具有给定波段编号的波段,则返回TRUE。如果未指定波段编号,则假定波段编号为1。
  • ST_Height - 返回以像素为单位的栅格高度。
  • ST_HillShade - 使用提供的方位角、海拔高度、亮度和比例输入返回高程栅格波段的假设照明。
  • ST_Histogram - 返回一组记录,其中汇总了栅格或栅格覆盖率数据分布的单独面元范围。如果未指定,则自动计算垃圾箱的数量。
  • ST_InterpolateRaster - 基于三维点的输入集对栅格曲面进行内插,使用X和Y值来定位栅格上的点,并使用点的Z值作为曲面高程。
  • ST_Intersection - 返回一个栅格或一组几何体-像素值对,表示两个栅格的共享部分或栅格和几何体的矢量化的几何体交集。
  • ST_Intersects - 如果栅格RASTA与栅格栅格B在空间上相交,则返回TRUE。
  • ST_IsEmpty - 如果栅格为空(宽度=0,高度=0),则返回TRUE。否则,返回FALSE。
  • ST_MakeEmptyCoverage - 使用空栅格平铺网格覆盖地理参考区域。
  • ST_MakeEmptyRaster - 返回给定尺寸(宽度)的空栅格(没有波段 & 高度)、左上角X和Y、像素大小和旋转(scalex、scaleY、skewx & Skewy)和参考系(SRID)。如果传入栅格,则返回具有相同大小、对齐和SRID的新栅格。如果省略sRID,则空间参考设置为未知(0)。
  • ST_MapAlgebra(回调函数版本) - 回调函数版本-返回给定一个或多个输入栅格、波段索引和一个用户指定的回调函数的单波段栅格。
  • ST_MapAlgebraExpr - 1个栅格波段版本:通过对输入栅格波段和提供的像素类型应用有效的PostgreSQL代数运算来创建新的单波段栅格。如果未指定波段,则假定为波段1。
  • ST_MapAlgebraExpr - 2个栅格波段版本:创建通过对提供的两个输入栅格波段应用有效的PostgreSQL代数运算形成的新单波段栅格。如果未指定波段编号,则假定每个栅格的波段1。生成的栅格将在第一个栅格定义的栅格上对齐(缩放、倾斜和像素角),其范围由“extenttype”参数定义。“extenttype”的值可以是:交集、并集、第一个、第二个。
  • ST_MapAlgebraFct - 单波段版本-通过在输入栅格波段上应用有效的PostgreSQL函数和所生成的像素类型创建新的单波段栅格。如果未指定波段,则假定为波段1。
  • ST_MapAlgebraFct - 2波段版本-创建新的单波段栅格,该栅格是通过在2个输入栅格波段上应用有效的PostgreSQL函数和像素类型生成的。如果未指定波段,则假定波段1。如果未指定范围类型,则默认为相交。
  • ST_MapAlgebraFctNgb - 1波段版本:使用自定义PostgreSQL函数的地图代数最近邻。返回值为PLPGSQL用户函数的结果的栅格,该用户函数涉及输入栅格波段中的值的邻域。
  • ST_MapAlgebra(表达式版本) - 表达式版本-返回给定一个或两个输入栅格、波段索引以及一个或多个用户指定的SQL表达式的单波段栅格。
  • ST_MemSize - 返回栅格占用的空间量(以字节为单位)。
  • ST_MetaData - 返回有关栅格对象的基本元数据,如像素大小、旋转(倾斜)、左上角、左下角等。
  • ST_MinConvexHull - 返回不包括NODATA像素的栅格凸包几何图形。
  • ST_NearestValue - 返回最接近的非 NODATA 由Columnx和Rowy或在与栅格相同的空间参考坐标系中表示的几何点指定的给定波段的像素值。
  • ST_Neighborhood - 对象的二维双精度数组。 NODATA 由ColumnX和Rowy指定的给定波段像素周围的值,或在与栅格相同的空间参考坐标系中表示的几何点。
  • ST_NotSameAlignmentReason - 返回文本,说明栅格是否对齐,如果未对齐,则说明原因。
  • ST_NumBands - 返回栅格对象中的波段数。
  • ST_Overlaps - 如果栅格RastA和rastB相交,但其中一个没有完全包含另一个,则返回TRUE。
  • ST_PixelAsCentroid - 返回像素表示的区域的质心(点几何图形)。
  • ST_PixelAsCentroids - 返回栅格标注栏的每个像素的质心(点几何图形)以及每个像素的值、X和Y栅格坐标。点几何图形是由像素表示的区域的质心。
  • ST_PixelAsPoint - 返回像素左上角的点几何图形。
  • ST_PixelAsPoints - 返回栅格波段的每个像素的点几何图形以及每个像素的值、X和Y栅格坐标。点几何图形的坐标位于像素的左上角。
  • ST_PixelAsPolygon - 返回限定特定行和列的像素的多边形几何图形。
  • ST_PixelAsPolygons - 返回限定栅格带的每个像素的多边形几何图形,以及每个像素的值、X和Y栅格坐标。
  • ST_PixelHeight - 返回以空间参考系的几何单位表示的像素高度。
  • ST_PixelOfValue - 获取其值等于搜索值的像素的Columnx,Rowy坐标。
  • ST_PixelWidth - 返回以空间参考系的几何单位表示的像素宽度。
  • ST_Polygon - 返回由像素值不是无数据值的像素并集形成的多多边形几何图形。如果未指定波段编号,则波段编号默认为1。
  • ST_Quantile - 在样本或总体的上下文中计算栅格或栅格表覆盖率的分位数。因此,可以将值检查为位于栅格的25%、50%、75%的百分位数。
  • ST_RastFromHexWKB - 从熟知二进制(Wkb)栅格的祸不单行表示中返回栅格值。
  • ST_RastFromWKB - 从熟知的二进制(WKB)栅格返回栅格值。
  • ST_RasterToWorldCoord - 在给定列和行的情况下,以几何X和Y(经度和纬度)形式返回栅格的左上角。列和行从1开始。
  • ST_RasterToWorldCoordX - 返回栅格、列和行的左上角几何X坐标。列和行的编号从1开始。
  • ST_RasterToWorldCoordY - 返回栅格、列和行的几何Y坐标左上角。列和行的编号从1开始。
  • ST_Reclass - 创建由从原始标注栏重新分类的标注栏类型组成的新栅格。nband是要更改的频带。如果未指定nband,则假定为1。所有其他波段将原封不动地返回。用例:将16BUI波段转换为8BUI,以此类推,以便更简单地呈现为可视格式。
  • ST_Resample - 使用指定的重采样算法、新尺寸、任意栅格角以及从其他栅格定义或借用的一组栅格地理参考属性对栅格进行重采样。
  • ST_Rescale - 通过仅调整其比例(或像素大小)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。
  • ST_Resize - 将栅格大小调整为新的宽度/高度
  • ST_Reskew - 通过仅调整其倾斜(或旋转参数)来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认为NearestNeighbor。
  • ST_Rotation - 返回栅格以弧度为单位的旋转。
  • ST_Roughness - 返回具有计算出的DEM“粗糙度”的栅格。
  • ST_SRID - 返回在SPATIAL_REF_SYS表中定义的栅格的空间参考标识符。
  • ST_SameAlignment - 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。
  • ST_ScaleX - 以坐标参考系为单位返回像素宽度的X分量。
  • ST_ScaleY - 以坐标参考系为单位返回像素高度的Y分量。
  • ST_SetBandIndex - 更新数据库外波段的外部波段编号
  • ST_SetBandIsNoData - 将波段的isnodata标志设置为true。
  • ST_SetBandNoDataValue - 设置表示无数据的给定标注栏的值。如果未指定波段,则假定波段1。要将波段标记为没有nodata值,请将nodata值设置为NULL。
  • ST_SetBandPath - 更新数据库外波段的外部路径和波段编号
  • ST_SetGeoReference - 在单个调用中设置地理参考6个地理参考参数。数字之间应该用空格隔开。接受GDAL或ESRI格式的输入。默认值为GDAL。
  • ST_SetM - 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。
  • ST_SetRotation - 以弧度设置栅格的旋转。
  • ST_SetSRID - 将栅格的SRID设置为在SPATIAL_REF_SYS表中定义的特定整数sRID。
  • ST_SetScale - 以坐标参考系为单位设置像素的X和Y大小。数字单位/像素宽度/高度。
  • ST_SetSkew - 设置地理参考X和Y倾斜(或旋转参数)。如果只传入一个,则将X和Y设置为相同的值。
  • ST_SetUpperLeft - 将栅格像素左上角的值设置为投影的X和Y坐标。
  • ST_SetValue - 返回因设置给定列x、行像素或与特定几何图形相交的像素中的给定波段的值而修改的栅格。波段编号从1开始,如果未指定,则假定为1。
  • ST_SetValues - 返回通过设置给定波段的值而修改的栅格。
  • ST_SetZ - 返回与输入几何图形具有相同X/Y坐标的几何图形,并使用请求的重采样算法将栅格中的值复制到Z维度。
  • ST_SkewX - 返回地理参考X倾斜(或旋转参数)。
  • ST_SkewY - 返回地理参考Y倾斜(或旋转参数)。
  • ST_Slope - 返回高程栅格标注栏的坡度(默认情况下以度为单位)。对于分析地形非常有用。
  • ST_SnapToGrid - 通过将栅格捕捉到栅格来重采样栅格。使用NearestNeighbor(英式或美式拼写)、双线性、立方、立方样条线或Lanczos重采样算法计算新的像素值。默认值为NearestNeighbor。
  • ST_Summary - 返回栅格内容的文本摘要。
  • ST_SummaryStats - 返回由栅格或栅格Coverage的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。
  • ST_SummaryStatsAgg - 聚合。返回由一组栅格的给定栅格波段的COUNT、SUM、Mean、STDDEV、MIN、MAX组成的摘要统计信息。假定带区1未指定带区。
  • ST_TPI - 返回具有计算出的地形位置索引的栅格。
  • ST_TRI - 返回具有计算出的地形崎岖指数的栅格。
  • ST_Tile - 根据输出栅格的所需尺寸,返回通过拆分输入栅格产生的一组栅格。
  • ST_Touches - 如果栅格RastA和rastB至少有一个共同点,但其内部不相交,则返回TRUE。
  • ST_Transform - 使用指定的重采样算法将已知空间参考系中的栅格重投影到另一个已知空间参考系。选项包括NearestNeighbor、双线性、立方、三次样条、默认为NearestNeighbor的Lanczos。
  • ST_Union - 将一组栅格平铺的并集返回由1个或多个标注栏组成的单个栅格。
  • ST_UpperLeftX - 返回投影空间参考中栅格的左上角X坐标。
  • ST_UpperLeftY - 返回投影空间参考中栅格的左上角Y坐标。
  • ST_Value - 返回给定列x、行像素或特定几何点处的给定带区的值。波段编号从1开始,如果未指定,则假定为1。如果 exclude_nodata_value 设置为False,则所有像素都包括 无数据 像素被视为相交并返回值。如果 exclude_nodata_value 不传入,然后从栅格元数据中读取它。
  • ST_ValueCount - 返回一组记录,其中包含像素带值和具有给定值的栅格(或栅格覆盖)的给定波段中的像素数的计数。如果未指定带,则默认为带1。默认情况下,不计算nodata值像素。并且输出像素中的所有其他值,并且将像素带值四舍五入为最接近的整数。
  • ST_Width - 返回以像素为单位的栅格宽度。
  • ST_Within - 如果栅格RastA的点没有位于栅格rastB的外部,并且Rasta的内部至少有一个点位于rastB的内部,则返回TRUE。
  • ST_WorldToRasterCoord - 在给定几何X和Y(经度和纬度)或以栅格的空间参考坐标系表示的点几何图形的情况下,将左上角返回为列和行。
  • ST_WorldToRasterCoordX - 返回点几何图形的栅格中的列(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。
  • ST_WorldToRasterCoordY - 返回点几何图形的栅格中的行(Pt)或在栅格的世界空间参考系中表示的X和Y世界坐标(xw,yw)。
  • 更新栅格SRID - 更改用户指定的列和表中所有栅格的SRID。

15.6. PostGIS Geometry / Geography / Raster Dump Functions

The functions given below are PostGIS functions that take as input or return as output a set of or single geometry_dump or geomval data type object.

  • ST_DumpAsPolygons - 返回给定栅格标注栏中的一组geomval(geom,val)行。如果未指定波段编号,则波段编号默认为1。
  • ST_Intersection - 返回一个栅格或一组几何体-像素值对,表示两个栅格的共享部分或栅格和几何体的矢量化的几何体交集。
  • ST_Dump - 返回一组 geometry_dump 几何图形组件的行。
  • ST_DumpPoints - 返回一组 geometry_dump 几何图形中坐标的行。
  • ST_DumpRings - 返回一组 geometry_dump 多边形的外环和内环的行。
  • ST_DumpSegments - 返回一组 geometry_dump 几何图形中线段的行。

15.7. PostGIS Box Functions

The functions given below are PostGIS functions that take as input or return as output the box* family of PostGIS spatial types. The box family of types consists of box2d, and box3d

  • 方框2D - 返回表示几何图形的2D范围的BOX2D。
  • Box3D - 返回表示几何图形的3D范围的BOX3D。
  • Box3D - 返回栅格的封闭框的框3D表示。
  • ST_3DExtent - 返回几何图形的3D边界框的聚合函数。
  • ST_3DMakeBox - 创建由两个三维点几何图形定义的BOX3D。
  • ST_AsMVTGeom - 将几何图形变换到 地图框向量平铺 。
  • ST_AsTWKB - 将几何图形返回为TWKB,也称为“极小的熟知二进制”
  • ST_Box2dFromGeoHash - 从GeoHash字符串返回BOX2D。
  • ST_ClipByBox2D - 计算落在矩形内的几何图形部分。
  • ST_EstimatedExtent - 返回空间表的估计范围。
  • ST_Expand - 返回从另一个边框或几何图形展开的边框。
  • ST_Extent - 返回几何图形边界框的聚合函数。
  • ST_MakeBox2D - 创建由两个二维点几何图形定义的BOX2D。
  • ST_XMax - 返回二维或三维边界框或几何图形的X最大值。
  • ST_XMin - 返回二维或三维边界框或几何图形的X最小值。
  • ST_YMax - 返回二维或三维边界框或几何图形的Y最大值。
  • ST_YMin - 返回二维或三维边界框或几何图形的Y最小值。
  • ST_ZMax - 返回二维或三维边界框或几何图形的Z最大值。
  • ST_ZMin - 返回二维或三维边界框或几何图形的Z最小值。
  • ValidateTopology - 返回一组validatetopology_returtype对象,这些对象详细说明了拓扑问题。
  • ~(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含另一个2D浮点精度边界框(BOX2DF)。
  • ~(box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)包含几何图形的2D粘合框。
  • ~(几何体,长方体2df) - 退货 TRUE 如果几何体的2D粘合框包含2D浮点精度边界框(GIDX)。
  • @(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含在另一个2D浮点精度边界框中。
  • @(box2df,几何体) - 退货 TRUE 如果将2D浮点精度边界框(BOX2DF)包含在几何体的2D边界框中。
  • @(几何体,长方体2df) - 退货 TRUE 如果几何体的2D边界框包含在2D浮点精度边界框(BOX2DF)中。
  • & & (box2df,box2df) - 退货 TRUE 如果两个2D浮点精度边界框(BOX2DF)彼此相交。
  • & & (box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)与几何体的(缓存)2D边界框相交。
  • & & (几何体,长方体2df) - 退货 TRUE 如果几何体的(缓存)2D边界框与2D浮点精度边界框(BOX2DF)相交。

15.8. PostGIS Functions that support 3D

The functions given below are PostGIS functions that do not throw away the Z-Index.

  • AddGeometryColumn - 将几何图形列添加到现有表格。
  • Box3D - 返回表示几何图形的3D范围的BOX3D。
  • DropGeometryColumn - 从空间表中删除几何图形列。
  • GeometryType - 以文本形式返回几何图形的类型。
  • ST_3DArea - 计算三维曲面几何图形的面积。对于实体将返回0。
  • ST_3DClosestPoint - 返回G1上最接近G2的三维点。这是3D最短直线的第一个点。
  • ST_3DConvexHull - 计算几何体的三维凸包。
  • ST_3DDFullyWithin - 如果两个3D几何完全在给定的3D距离内,则返回True
  • ST_3DDWithin - 如果两个3D几何在给定的3D距离内,则返回True
  • ST_3DDifference - 执行三维差异
  • ST_3DDistance - 以投影单位返回两个几何图形之间的3D笛卡尔最小距离(基于空间参考)。
  • ST_3DExtent - 返回几何图形的3D边界框的聚合函数。
  • ST_3DIntersection - 执行三维相交
  • ST_3DIntersects - 如果两个几何图形在三维空间上相交,则返回TRUE-仅对于点、线串、多边形、多面体曲面(面积)。
  • ST_3DLength - 返回线性几何图形的三维长度。
  • ST_3DLongestLine - 返回两个几何之间的3D最长线
  • ST_3DMaxDistance - 以投影单位返回两个几何图形之间的3D笛卡尔最大距离(基于空间参考)。
  • ST_3DPerimeter - 返回多边形几何体的3D周长。
  • ST_3DShortestLine - 返回两个几何之间的3D最短线
  • ST_3DUnion - 执行3D合并。
  • ST_AddMeasure - 沿线性几何图形内插测量。
  • ST_AddPoint - 将点添加到线串。
  • ST_Affine - 将3D仿射变换应用于几何体。
  • ST_ApproximateMedialAxis - 计算面状几何图形的近似中轴。
  • ST_AsBinary - 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。
  • ST_AsEWKB - 返回具有SRID元数据的几何体的扩展熟知二进制(EWKB)表示。
  • ST_AsEWKT - 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。
  • ST_AsGML - 将几何图形作为GML版本2或3元素返回。
  • ST_AsGeoJSON - 将几何图形作为GeoJSON元素返回。
  • ST_AsHEXEWKB - 使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(文本形式)的几何图形。
  • ST_AsKML - 将几何图形作为KML元素返回。
  • ST_AsX3D - 返回X3DXML节点元素格式的几何图形:ISO-IEC-19776-1.2-X3DEncoding-xml
  • ST_Boundary - 返回几何图形的边界。
  • ST_BoundingDiagonal - 返回几何体边界框的对角线。
  • ST_CPAWithin - 测试两个轨迹的最接近点是否在指定距离内。
  • ST_ClosestPointOfApproach - 返回两个轨迹的最接近点处的度量值。
  • ST_Collect - 从一组几何图形创建GeometryCollection或Multi*几何图形。
  • ST_ConstrainedDelaunayTriangles - 返回围绕给定输入几何图元的约束Delaunay三角剖分。
  • ST_ConvexHull - 计算几何体的凸包。
  • ST_CoordDim - 返回几何图形的坐标尺寸。
  • ST_CurveToLine - 将包含曲线的几何图形转换为线性几何图形。
  • ST_DelaunayTriangles - 返回几何体顶点的Delaunay三角剖分。
  • ST_Difference - 计算表示几何图形A中不与几何图形B相交的部分的几何图形。
  • ST_DistanceCPA - 返回两个轨迹的最近接近点之间的距离。
  • ST_Dump - 返回一组 geometry_dump 几何图形组件的行。
  • ST_DumpPoints - 返回一组 geometry_dump 几何图形中坐标的行。
  • ST_DumpRings - 返回一组 geometry_dump 多边形的外环和内环的行。
  • ST_DumpSegments - 返回一组 geometry_dump 几何图形中线段的行。
  • ST_EndPoint - 返回LineString或CircularLineString的最后一点。
  • ST_ExteriorRing - 返回表示多边形外环的线串。
  • ST_Extrude - 将曲面挤出到相关体积
  • ST_FlipCoordinates - 返回X轴和Y轴翻转的几何体版本。
  • ST_Force2D - 强制几何图形进入“2维模式”。
  • ST_ForceCurve - 如果适用,将几何图形向上转换为其曲线类型。
  • ST_ForceLHR - 强制LHR方向
  • ST_ForcePolygonCCW - 逆时针方向调整所有外环方向,顺时针方向调整所有内环方向。
  • ST_ForcePolygonCW - 顺时针定向所有外环,逆时针定向所有内环。
  • ST_ForceRHR - 强制多边形中顶点的方向遵循右手规则。
  • ST_ForceSFS - 强制几何图形仅使用SFS 1.1几何图形类型。
  • ST_Force_3D - 强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。
  • ST_Force_3DZ - 强制几何图形进入XYZ模式。
  • ST_Force_4D - 强制几何图形进入XYZM模式。
  • ST_Force_Collection - 将几何图形转换为GEOMETRYCOLLECTION。
  • ST_GeomFromEWKB - 从扩展熟知二进制表示法(EWKB)返回指定的ST_Geometry值。
  • ST_GeomFromEWKT - 从扩展熟知文本表示法(EWKT)返回指定的ST_Geometry值。
  • ST_GeomFromGML - 将几何的GML表示作为输入并输出PostGIS几何对象
  • ST_GeomFromGeoJSON - 将几何的Geojson制图表达作为输入并输出PostGIS几何对象
  • ST_GeomFromKML - 将几何的KML表示作为输入并输出PostGIS几何对象
  • ST_GeometricMedian - 返回多点的几何中值。
  • ST_GeometryN - 返回几何图形集合的元素。
  • ST_GeometryType - 以文本形式返回几何图形的SQL-MM类型。
  • ST_HasArc - 测试几何图形是否包含圆弧
  • ST_InteriorRingN - 返回多边形的第N个内环(孔)。
  • ST_InterpolatePoint - 返回最接近点的几何图形的内插度量。
  • ST_Intersection - 计算表示几何图形A和B的共享部分的几何图形。
  • ST_IsClosed - 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。
  • ST_IsCollection - 测试几何图形是否为几何图形集合类型。
  • ST_IsPlanar - 检查曲面是否为平面
  • ST_IsPolygonCCW - 测试多边形是否具有逆时针方向的外环和顺时针方向的内环。
  • ST_IsPolygonCW - 测试多边形是否具有顺时针方向的外环和逆时针方向的内环。
  • ST_IsSimple - 测试几何体是否没有自交点或自切点。
  • ST_IsSolid - 测试几何图形是否为实体。不执行有效性检查。
  • ST_IsValidTrajectory - 测试几何图形是否为有效轨迹。
  • ST_Length_Spheroid - 返回椭球体上经度/纬度几何图形的二维或三维长度/周长。
  • ST_LineFromMultiPoint - 从多点几何图形创建线串。
  • ST_LineInterpolatePoint - 返回沿直线在分数位置处插补的点。
  • ST_LineInterpolatePoints - 返回以分数间隔沿线插值点。
  • ST_LineSubstring - 返回两个小数位置之间的线的一部分。
  • ST_LineToCurve - 将线性几何图形转换为曲线几何图形。
  • ST_LocateBetweenElevations - 返回位于高程(Z)范围内的几何图形部分。
  • ST_M - 返回点的M坐标。
  • ST_MakeLine - 从点、多点或线串几何图形创建线串。
  • ST_MakePoint - 创建二维、三维或四维点。
  • ST_MakePolygon - 从壳和可选的孔列表创建多边形。
  • ST_MakeSolid - 将几何图形投射到实体中。不执行任何检查。要获取有效实体,输入几何图形必须是闭合多面体曲面或闭合三角网。
  • ST_MakeValid - 尝试在不丢失顶点的情况下使无效几何体有效。
  • ST_MemSize - 返回几何体占用的内存空间量。
  • ST_MemUnion - 以内存效率较高但速度较慢的方式合并几何图形的聚合函数
  • ST_NDims - 返回几何图形的坐标尺寸。
  • ST_NPoints - 返回几何体中的点(顶点)数。
  • ST_NRings - 返回多边形几何体中的环形数。
  • ST_Node - 节点是线条的集合.
  • ST_NumGeometries - 返回几何图形集合中的元素数。
  • ST_NumPatches - 返回多面体曲面上的面数。对于非多面体几何图形将返回NULL。
  • ST_Orientation - 确定曲面方向
  • ST_PatchN - 返回多面体曲面的第N个几何图形(面)。
  • ST_PointFromWKB - 使用给定的SRID从WKB创建几何图形
  • ST_PointN - 返回几何图形中第一条直线串或圆形直线串中的第N点。
  • ST_PointOnSurface - 计算保证位于多边形内或几何体上的点。
  • ST_Points - 返回包含几何图形坐标的多点。
  • ST_Polygon - 从具有指定SRID的线串创建多边形。
  • ST_RemovePoint - 从线串中删除点。
  • ST_RemoveRepeatedPoints - 返回删除了重复点的几何图形版本。
  • ST_Reverse - 返回顶点顺序颠倒的几何体。
  • ST_Rotate - 绕原点旋转几何图形。
  • ST_RotateX - 绕X轴旋转几何图形。
  • ST_RotateY - 绕Y轴旋转几何图形。
  • ST_RotateZ - 绕Z轴旋转几何图形。
  • ST_Scale - 按给定因子缩放几何图形。
  • ST_Scroll - 更改闭合线串的起点。
  • ST_SetPoint - 将线串的点替换为给定点。
  • ST_Shift_Longitude - 在-180..180和0..360之间移动几何体的经度坐标。
  • ST_SnapToGrid - 将输入几何体的所有点捕捉到规则栅格。
  • ST_StartPoint - 返回线串的第一个点。
  • ST_StraightSkeleton - 从几何图形计算直骨架
  • ST_SwapOrdinates - 返回交换了给定纵坐标的给定几何图形的版本。
  • ST_SymDifference - 计算表示几何图形A和B不相交部分的几何图形。
  • ST_Tesselate - 执行面或多面体表面的表面镶嵌,并以TIN或TIN集合的形式返回
  • ST_TransScale - 按给定的偏移和因子平移和缩放几何图形。
  • ST_Translate - 按给定偏移平移几何图形。
  • ST_UnaryUnion - 计算单个几何图形的组件的并集。
  • ST_Union - 计算表示输入几何图形的点集并集的几何图形。
  • ST_Volume - 计算三维实体的体积。如果应用于曲面(即使是闭合的)几何图形将返回0。
  • ST_WrapX - 将几何体环绕在X值周围。
  • ST_X - 返回点的X坐标。
  • ST_XMax - 返回二维或三维边界框或几何图形的X最大值。
  • ST_XMin - 返回二维或三维边界框或几何图形的X最小值。
  • ST_Y - 返回点的Y坐标。
  • ST_YMax - 返回二维或三维边界框或几何图形的Y最大值。
  • ST_YMin - 返回二维或三维边界框或几何图形的Y最小值。
  • ST_Z - 返回点的Z坐标。
  • ST_ZMax - 返回二维或三维边界框或几何图形的Z最大值。
  • ST_ZMin - 返回二维或三维边界框或几何图形的Z最小值。
  • ST_Zmflag - 返回指示几何图形的ZM坐标尺寸的代码。
  • TG_Equals - 如果两个拓扑几何由相同的拓扑基元组成,则返回True。
  • TG_Intersects - 如果两个拓扑几何中的任何一对基元相交,则返回True。
  • UpdateGeometrySRID - 更新几何图形列中所有要素的SRID和表元数据。
  • geometry_overlaps_nd - 退货 TRUE 如果A的n维边界框与B的n维边界框相交。
  • overlaps_nd_geometry_gidx - 退货 TRUE 如果几何体的(缓存)n维边界框与n维浮点精度边界框(GIDX)相交。
  • overlaps_nd_gidx_geometry - 退货 TRUE 如果n维浮点精度边界框(GIDX)与几何体的(缓存)n维边界框相交。
  • overlaps_nd_gidx_gidx - 退货 TRUE 如果两个n维浮点精度边界框(GIDX)彼此相交。
  • postgis_sfcgal_full_version - 返回正在使用的SFCGAL的完整版本,包括CGAL和Boost版本
  • postgis_sfcgal_version - 返回正在使用的SFCGAL的版本

15.9. PostGIS Curved Geometry Support Functions

The functions given below are PostGIS functions that can use CIRCULARSTRING, CURVEPOLYGON, and other curved geometry types

  • AddGeometryColumn - 将几何图形列添加到现有表格。
  • 方框2D - 返回表示几何图形的2D范围的BOX2D。
  • Box3D - 返回表示几何图形的3D范围的BOX3D。
  • DropGeometryColumn - 从空间表中删除几何图形列。
  • GeometryType - 以文本形式返回几何图形的类型。
  • PostGIS_AddBBox - 将边界框添加到几何图形。
  • PostGIS_DropBBox - 从几何体中删除边界框缓存。
  • PostGIS_HasBBox - 如果此几何图形的BBox已缓存,则返回True,否则返回False。
  • ST_3DExtent - 返回几何图形的3D边界框的聚合函数。
  • ST_Affine - 将3D仿射变换应用于几何体。
  • ST_AsBinary - 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。
  • ST_AsEWKB - 返回具有SRID元数据的几何体的扩展熟知二进制(EWKB)表示。
  • ST_AsEWKT - 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。
  • ST_AsHEXEWKB - 使用小端(NDR)或大端(XDR)编码返回HEXEWKB格式(文本形式)的几何图形。
  • ST_AsText - 返回不带SRID元数据的几何图形/地理图形的熟知文本(WKT)表示。
  • ST_Collect - 从一组几何图形创建GeometryCollection或Multi*几何图形。
  • ST_CoordDim - 返回几何图形的坐标尺寸。
  • ST_CurveToLine - 将包含曲线的几何图形转换为线性几何图形。
  • ST_Distance - 返回两个几何图形或地理值之间的距离。
  • ST_Dump - 返回一组 geometry_dump 几何图形组件的行。
  • ST_DumpPoints - 返回一组 geometry_dump 几何图形中坐标的行。
  • ST_EndPoint - 返回LineString或CircularLineString的最后一点。
  • ST_EstimatedExtent - 返回空间表的估计范围。
  • ST_FlipCoordinates - 返回X轴和Y轴翻转的几何体版本。
  • ST_Force2D - 强制几何图形进入“2维模式”。
  • ST_ForceCurve - 如果适用,将几何图形向上转换为其曲线类型。
  • ST_ForceSFS - 强制几何图形仅使用SFS 1.1几何图形类型。
  • ST_Force3D - 强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。
  • ST_Force3DM - 强制几何图形进入XYM模式。
  • ST_Force3DZ - 强制几何图形进入XYZ模式。
  • ST_Force4D - 强制几何图形进入XYZM模式。
  • ST_ForceCollection - 将几何图形转换为GEOMETRYCOLLECTION。
  • ST_GeoHash - 返回几何图形的GeoHash表示形式。
  • ST_GeogFromWKB - 从熟知二进制几何表示(WKB)或扩展熟知二进制(EWKB)创建地理实例。
  • ST_GeomFromEWKB - 从扩展熟知二进制表示法(EWKB)返回指定的ST_Geometry值。
  • ST_GeomFromEWKT - 从扩展熟知文本表示法(EWKT)返回指定的ST_Geometry值。
  • ST_GeomFromText - 从熟知文字表示法(WKT)返回指定的ST_Geometry值。
  • ST_GeomFromWKB - 从熟知的二进制几何图形表示(WKB)和可选SRID创建几何图形实例。
  • ST_GeometryN - 返回几何图形集合的元素。
  • = - 退货 TRUE 如果几何/地理A的坐标和坐标顺序与几何/地理B的坐标和坐标顺序相同。
  • & < | - 退货 TRUE 如果A的边界框重叠或低于B的边界框。
  • ST_HasArc - 测试几何图形是否包含圆弧
  • ST_Intersects - 如果两个几何图形相交(它们至少有一个共同点),则返回True。
  • ST_IsClosed - 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。
  • ST_IsCollection - 测试几何图形是否为几何图形集合类型。
  • ST_IsEmpty - 测试几何图形是否为空。
  • ST_LineToCurve - 将线性几何图形转换为曲线几何图形。
  • ST_MemSize - 返回几何体占用的内存空间量。
  • ST_NPoints - 返回几何体中的点(顶点)数。
  • ST_NRings - 返回多边形几何体中的环形数。
  • ST_PointFromWKB - 使用给定的SRID从WKB创建几何图形
  • ST_PointN - 返回几何图形中第一条直线串或圆形直线串中的第N点。
  • ST_Points - 返回包含几何图形坐标的多点。
  • ST_Rotate - 绕原点旋转几何图形。
  • ST_RotateZ - 绕Z轴旋转几何图形。
  • ST_SRID - 返回几何图形的空间参考标识符。
  • ST_Scale - 按给定因子缩放几何图形。
  • ST_SetSRID - 在几何图形上设置SRID。
  • ST_StartPoint - 返回线串的第一个点。
  • ST_Summary - 返回几何图形内容的文本摘要。
  • ST_SwapOrdinates - 返回交换了给定纵坐标的给定几何图形的版本。
  • ST_TransScale - 按给定的偏移和因子平移和缩放几何图形。
  • ST_Transform - 返回坐标转换到不同空间参考系的新几何图形。
  • ST_Translate - 按给定偏移平移几何图形。
  • ST_XMax - 返回二维或三维边界框或几何图形的X最大值。
  • ST_XMin - 返回二维或三维边界框或几何图形的X最小值。
  • ST_YMax - 返回二维或三维边界框或几何图形的Y最大值。
  • ST_YMin - 返回二维或三维边界框或几何图形的Y最小值。
  • ST_ZMax - 返回二维或三维边界框或几何图形的Z最大值。
  • ST_ZMin - 返回二维或三维边界框或几何图形的Z最小值。
  • ST_Zmflag - 返回指示几何图形的ZM坐标尺寸的代码。
  • 更新几何SRID - 更新几何图形列中所有要素的SRID和表元数据。
  • ~(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含另一个2D浮点精度边界框(BOX2DF)。
  • ~(box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)包含几何图形的2D粘合框。
  • ~(几何体,长方体2df) - 退货 TRUE 如果几何体的2D粘合框包含2D浮点精度边界框(GIDX)。
  • & & - 退货 TRUE 如果A的2D边界框与B的2D边界框相交。
  • & & & - 退货 TRUE 如果A的n维边界框与B的n维边界框相交。
  • @(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含在另一个2D浮点精度边界框中。
  • @(box2df,几何体) - 退货 TRUE 如果将2D浮点精度边界框(BOX2DF)包含在几何体的2D边界框中。
  • @(几何体,长方体2df) - 退货 TRUE 如果几何体的2D边界框包含在2D浮点精度边界框(BOX2DF)中。
  • & & (box2df,box2df) - 退货 TRUE 如果两个2D浮点精度边界框(BOX2DF)彼此相交。
  • & & (box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)与几何体的(缓存)2D边界框相交。
  • & & (几何体,长方体2df) - 退货 TRUE 如果几何体的(缓存)2D边界框与2D浮点精度边界框(BOX2DF)相交。
  • & & & (几何体,gidx) - 退货 TRUE 如果几何体的(缓存)n维边界框与n维浮点精度边界框(GIDX)相交。
  • & & & (gidx,几何体) - 退货 TRUE 如果n维浮点精度边界框(GIDX)与几何体的(缓存)n维边界框相交。
  • & & & (gidx,gidx) - 退货 TRUE 如果两个n维浮点精度边界框(GIDX)彼此相交。

15.10. PostGIS Polyhedral Surface Support Functions

The functions given below are PostGIS functions that can use POLYHEDRALSURFACE, POLYHEDRALSURFACEM geometries

  • 方框2D - 返回表示几何图形的2D范围的BOX2D。
  • Box3D - 返回表示几何图形的3D范围的BOX3D。
  • GeometryType - 以文本形式返回几何图形的类型。
  • ST_3DArea - 计算三维曲面几何图形的面积。对于实体将返回0。
  • ST_3DClosestPoint - 返回G1上最接近G2的三维点。这是3D最短直线的第一个点。
  • ST_3DConvexHull - 计算几何体的三维凸包。
  • ST_3DDFullyWithin - 如果两个3D几何完全在给定的3D距离内,则返回True
  • ST_3DDWithin - 如果两个3D几何在给定的3D距离内,则返回True
  • ST_3DDifference - 执行三维差异
  • ST_3DDistance - 以投影单位返回两个几何图形之间的3D笛卡尔最小距离(基于空间参考)。
  • ST_3DExtent - 返回几何图形的3D边界框的聚合函数。
  • ST_3DIntersection - 执行三维相交
  • ST_3DIntersects - 如果两个几何图形在三维空间上相交,则返回TRUE-仅对于点、线串、多边形、多面体曲面(面积)。
  • ST_3DLongestLine - 返回两个几何之间的3D最长线
  • ST_3DMaxDistance - 以投影单位返回两个几何图形之间的3D笛卡尔最大距离(基于空间参考)。
  • ST_3DShortestLine - 返回两个几何之间的3D最短线
  • ST_3DUnion - 执行3D合并。
  • ST_Affine - 将3D仿射变换应用于几何体。
  • ST_ApproximateMedialAxis - 计算面状几何图形的近似中轴。
  • ST_Area - 返回多边形几何体的面积。
  • ST_AsBinary - 返回不带SRID元数据的几何图形/地理图形的OGC/ISO熟知二进制(WKB)表示形式。
  • ST_AsEWKB - 返回具有SRID元数据的几何体的扩展熟知二进制(EWKB)表示。
  • ST_AsEWKT - 返回具有SRID元数据的几何图形的熟知文本(WKT)表示。
  • ST_AsGML - 将几何图形作为GML版本2或3元素返回。
  • ST_AsX3D - 返回X3DXML节点元素格式的几何图形:ISO-IEC-19776-1.2-X3DEncoding-xml
  • ST_CoordDim - 返回几何图形的坐标尺寸。
  • ST_Dimension - 返回几何图形的拓扑尺寸。
  • ST_Dump - 返回一组 geometry_dump 几何图形组件的行。
  • ST_DumpPoints - 返回一组 geometry_dump 几何图形中坐标的行。
  • ST_Expand - 返回从另一个边框或几何图形展开的边框。
  • ST_Extent - 返回几何图形边界框的聚合函数。
  • ST_Extrude - 将曲面挤出到相关体积
  • ST_FlipCoordinates - 返回X轴和Y轴翻转的几何体版本。
  • ST_Force2D - 强制几何图形进入“2维模式”。
  • ST_ForceLHR - 强制LHR方向
  • ST_ForceRHR - 强制多边形中顶点的方向遵循右手规则。
  • ST_ForceSFS - 强制几何图形仅使用SFS 1.1几何图形类型。
  • ST_Force3D - 强制几何图形进入XYZ模式。这是ST_Force3DZ的别名。
  • ST_Force3DZ - 强制几何图形进入XYZ模式。
  • ST_ForceCollection - 将几何图形转换为GEOMETRYCOLLECTION。
  • ST_GeomFromEWKB - 从扩展熟知二进制表示法(EWKB)返回指定的ST_Geometry值。
  • ST_GeomFromEWKT - 从扩展熟知文本表示法(EWKT)返回指定的ST_Geometry值。
  • ST_GeomFromGML - 将几何的GML表示作为输入并输出PostGIS几何对象
  • ST_GeometryN - 返回几何图形集合的元素。
  • ST_GeometryType - 以文本形式返回几何图形的SQL-MM类型。
  • = - 退货 TRUE 如果几何/地理A的坐标和坐标顺序与几何/地理B的坐标和坐标顺序相同。
  • & < | - 退货 TRUE 如果A的边界框重叠或低于B的边界框。
  • ~= - 退货 TRUE 如果A的边界框与B的边界框相同。
  • ST_IsClosed - 测试LineStrings的起点和终点是否重合。对于多面体曲面,测试其是否闭合(体积)。
  • ST_IsPlanar - 检查曲面是否为平面
  • ST_IsSolid - 测试几何图形是否为实体。不执行有效性检查。
  • ST_MakeSolid - 将几何图形投射到实体中。不执行任何检查。要获取有效实体,输入几何图形必须是闭合多面体曲面或闭合三角网。
  • ST_MemSize - 返回几何体占用的内存空间量。
  • ST_NPoints - 返回几何体中的点(顶点)数。
  • ST_NumGeometries - 返回几何图形集合中的元素数。
  • ST_NumPatches - 返回多面体曲面上的面数。对于非多面体几何图形将返回NULL。
  • ST_PatchN - 返回多面体曲面的第N个几何图形(面)。
  • ST_RemoveRepeatedPoints - 返回删除了重复点的几何图形版本。
  • ST_Reverse - 返回顶点顺序颠倒的几何体。
  • ST_Rotate - 绕原点旋转几何图形。
  • ST_RotateX - 绕X轴旋转几何图形。
  • ST_RotateY - 绕Y轴旋转几何图形。
  • ST_RotateZ - 绕Z轴旋转几何图形。
  • ST_Scale - 按给定因子缩放几何图形。
  • ST_ShiftLongitude - 在-180..180和0..360之间移动几何体的经度坐标。
  • ST_StraightSkeleton - 从几何图形计算直骨架
  • ST_Summary - 返回几何图形内容的文本摘要。
  • ST_SwapOrdinates - 返回交换了给定纵坐标的给定几何图形的版本。
  • ST_Tesselate - 执行面或多面体表面的表面镶嵌,并以TIN或TIN集合的形式返回
  • ST_Transform - 返回坐标转换到不同空间参考系的新几何图形。
  • ST_Volume - 计算三维实体的体积。如果应用于曲面(即使是闭合的)几何图形将返回0。
  • ~(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含另一个2D浮点精度边界框(BOX2DF)。
  • ~(box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)包含几何图形的2D粘合框。
  • ~(几何体,长方体2df) - 退货 TRUE 如果几何体的2D粘合框包含2D浮点精度边界框(GIDX)。
  • & & - 退货 TRUE 如果A的2D边界框与B的2D边界框相交。
  • & & & - 退货 TRUE 如果A的n维边界框与B的n维边界框相交。
  • @(box2df,box2df) - 退货 TRUE 如果一个2D浮点精度边界框(BOX2DF)包含在另一个2D浮点精度边界框中。
  • @(box2df,几何体) - 退货 TRUE 如果将2D浮点精度边界框(BOX2DF)包含在几何体的2D边界框中。
  • @(几何体,长方体2df) - 退货 TRUE 如果几何体的2D边界框包含在2D浮点精度边界框(BOX2DF)中。
  • & & (box2df,box2df) - 退货 TRUE 如果两个2D浮点精度边界框(BOX2DF)彼此相交。
  • & & (box2df,几何体) - 退货 TRUE 如果2D浮点精度边界框(BOX2DF)与几何体的(缓存)2D边界框相交。
  • & & (几何体,长方体2df) - 退货 TRUE 如果几何体的(缓存)2D边界框与2D浮点精度边界框(BOX2DF)相交。
  • & & & (几何体,gidx) - 退货 TRUE 如果几何体的(缓存)n维边界框与n维浮点精度边界框(GIDX)相交。
  • & & & (gidx,几何体) - 退货 TRUE 如果n维浮点精度边界框(GIDX)与几何体的(缓存)n维边界框相交。
  • & & & (gidx,gidx) - 退货 TRUE 如果两个n维浮点精度边界框(GIDX)彼此相交。
  • postgis_sfcgal_full_version - 返回正在使用的SFCGAL的完整版本,包括CGAL和Boost版本
  • postgis_sfcgal_version - 返回正在使用的SFCGAL的版本

15.11. PostGIS Function Support Matrix

Below is an alphabetical listing of spatial specific functions in PostGIS and the kinds of spatial types they work with or OGC/SQL compliance they try to conform to.

  • A means the function works with the type or subtype natively.
  • A means it works but with a transform cast built-in using cast to geometry, transform to a "best srid" spatial ref and then cast back. Results may not be as expected for large areas or areas at poles and may accumulate floating point junk.
  • A means the function works with the type because of a auto-cast to another such as to box3d rather than direct type support.
  • A means the function only available if PostGIS compiled with SFCGAL support.
  • A means the function support is provided by SFCGAL if PostGIS compiled with SFCGAL support, otherwise GEOS/built-in support.
  • geom - Basic 2D geometry support (x,y).
  • geog - Basic 2D geography support (x,y).
  • 2.5D - basic 2D geometries in 3 D/4D space (has Z or M coord).
  • PS - Polyhedral surfaces
  • T - Triangles and Triangulated Irregular Network surfaces (TIN)

Functiongeomgeog2.5DCurvesSQL MMPST
方框2D    
Box3D   
GeometryType   
PostGIS_AddBBox      
PostGIS_DropBBox      
PostGIS_Extensions_Upgrade        
PostGIS_Full_Version        
PostGIS_GEOS_Version        
PostGIS_HasBBox      
PostGIS_LibXML_Version        
PostGIS_Lib_Build_Date        
PostGIS_Lib_Version        
PostGIS_Liblwgeom_Version        
PostGIS_PROJ_Version        
PostGIS_Scripts_Build_Date        
PostGIS_Scripts_Installed        
PostGIS_Scripts_Released        
PostGIS_Version        
PostGIS_Wagyu_Version        
ST_3DArea    
ST_3DClosestPoint     
ST_3DConvexHull    
ST_3DDifference    
ST_3DDistance    
ST_3DExtent   
ST_3DIntersection    
ST_3DLength      
ST_3DLineInterpolatePoint       
ST_3DLongestLine     
ST_3DMakeBox       
ST_3DMaxDistance     
ST_3DPerimeter      
ST_3DShortestLine     
ST_3DUnion    
ST_AddMeasure      
ST_AddPoint      
ST_Affine   
ST_AlphaShape       
ST_Angle       
ST_ApproximateMedialAxis    
ST_Area    
ST_Azimuth      
ST_Boundary     
ST_BoundingDiagonal      
ST_Buffer     
ST_BuildArea       
ST_CPAWithin      
ST_Centroid     
ST_ChaikinSmoothing       
ST_ClipByBox2D       
ST_ClosestPoint       
ST_ClosestPointOfApproach      
ST_ClusterDBSCAN       
ST_ClusterIntersecting       
ST_ClusterKMeans       
ST_ClusterWithin       
ST_Collect     
ST_CollectionExtract       
ST_CollectionHomogenize       
ST_ConcaveHull       
ST_ConstrainedDelaunayTriangles     
ST_ConvexHull     
ST_CoordDim  
ST_CurveToLine    
ST_DelaunayTriangles     
ST_Difference     
ST_Dimension    
ST_Distance    
ST_DistanceCPA      
ST_DistanceSphere       
ST_DistanceSpheroid       
ST_Dump   
ST_DumpPoints   
ST_DumpRings      
ST_DumpSegments     
ST_EndPoint    
ST_Envelope      
ST_EstimatedExtent      
ST_Expand     
ST_Extent     
ST_ExteriorRing     
ST_Extrude    
ST_FilterByM       
ST_FlipCoordinates   
ST_Force2D    
ST_ForceCurve     
ST_ForceLHR    
ST_ForcePolygonCCW      
ST_ForcePolygonCW      
ST_ForceRHR     
ST_ForceSFS   
ST_Force3D    
ST_Force3DM      
ST_Force3DZ    
ST_Force4D     
ST_ForceCollection    
ST_FrechetDistance       
ST_GeneratePoints       
ST_GeometricMedian      
ST_GeometryN  
ST_GeometryType    
ST_HasArc     
ST_HausdorffDistance       
ST_Hexagon       
ST_HexagonGrid       
ST_InteriorRingN     
ST_InterpolatePoint      
ST_Intersection    
ST_IsClosed   
ST_IsCollection     
ST_IsEmpty     
ST_IsPlanar    
ST_IsPolygonCCW      
ST_IsPolygonCW      
ST_IsRing      
ST_IsSimple     
ST_IsSolid    
ST_IsValid      
ST_IsValidDetail       
ST_IsValidReason       
ST_IsValidTrajectory      
ST_Length     
ST_Length2D       
ST_LengthSpheroid      
ST_Letters       
ST_LineFromMultiPoint      
ST_LineInterpolatePoint      
ST_LineInterpolatePoints      
ST_LineLocatePoint       
ST_LineMerge       
ST_LineSubstring      
ST_LineToCurve     
ST_LocateAlong       
ST_LocateBetween       
ST_LocateBetweenElevations      
ST_LongestLine       
ST_M     
ST_MakeBox2D       
ST_MakeEnvelope       
ST_MakeLine      
ST_MakePoint      
ST_MakePointM       
ST_MakePolygon      
ST_MakeSolid    
ST_MakeValid      
ST_MaxDistance       
ST_MaximumInscribedCircle       
ST_MemSize   
ST_MemUnion      
ST_MinimumBoundingCircle       
ST_MinimumBoundingRadius       
ST_MinimumClearance       
ST_MinimumClearanceLine       
ST_MinkowskiSum       
ST_Multi       
ST_NDims      
ST_NPoints    
ST_NRings     
ST_Node      
ST_Normalize       
ST_NumGeometries   
ST_NumInteriorRing       
ST_NumInteriorRings      
ST_NumPatches    
ST_NumPoints      
ST_OffsetCurve       
ST_OptimalAlphaShape       
ST_Orientation      
ST_OrientedEnvelope       
ST_PatchN    
ST_Perimeter     
ST_Perimeter2D       
ST_Point      
ST_PointM       
ST_PointN    
ST_PointOnSurface     
ST_PointZ       
ST_PointZM       
ST_Points     
ST_Polygon     
ST_Polygonize       
ST_Project       
ST_QuantizeCoordinates       
ST_ReducePrecision       
ST_RemovePoint      
ST_RemoveRepeatedPoints     
ST_Reverse     
ST_Rotate   
ST_RotateX    
ST_RotateY    
ST_RotateZ   
ST_SRID     
ST_Scale   
ST_Scroll      
ST_Segmentize      
ST_SetEffectiveArea       
ST_SetPoint      
ST_SetSRID      
ST_SharedPaths       
ST_ShiftLongitude    
ST_ShortestLine       
ST_Simplify       
ST_SimplifyPreserveTopology       
ST_SimplifyVW       
ST_Snap       
ST_SnapToGrid      
ST_Split       
ST_Square       
ST_SquareGrid       
ST_StartPoint    
ST_StraightSkeleton    
ST_Subdivide       
ST_Summary   
ST_SwapOrdinates   
ST_SymDifference     
ST_Tesselate    
ST_TileEnvelope       
ST_TransScale     
ST_Transform    
ST_Translate     
ST_UnaryUnion      
ST_Union     
ST_Volume    
ST_VoronoiLines       
ST_VoronoiPolygons       
ST_WrapX      
ST_X     
ST_XMax     
ST_XMin     
ST_Y     
ST_YMax     
ST_YMin     
ST_Z     
ST_ZMax     
ST_ZMin     
ST_Zmflag     
postgis.backend        
postgis.enable_outdb_rasters        
postgis.gdal_datapath        
postgis.gdal_enabled_drivers        
postgis.gdal_config_options        
postgis_sfcgal_full_version     
postgis_sfcgal_version     

15.12. New, Enhanced or changed PostGIS Functions

15.12.1. PostGIS Functions new or enhanced in 3.3

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 3.3

15.12.2. PostGIS Functions new or enhanced in 3.2

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 3.2

15.12.3. PostGIS Functions new or enhanced in 3.1

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 3.1

15.12.4. PostGIS Functions new or enhanced in 3.0

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 3.0

15.12.5. PostGIS Functions new or enhanced in 2.5

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 2.5

15.12.6. PostGIS Functions new or enhanced in 2.4

The functions given below are PostGIS functions that were added or enhanced.

Functions changed in PostGIS 2.4

All PostGIS aggregates now marked as parallel safe. This will force a drop and recreate of aggregates during upgrade which may fail if any user views or sql functions rely on PostGIS aggregates.

15.12.7. PostGIS Functions new or enhanced in 2.3

The functions given below are PostGIS functions that were added or enhanced.

[Note]

PostGIS 2.3.0: PostgreSQL 9.6+ support for parallel queries.

[Note]

PostGIS 2.3.0: PostGIS extension, all functions schema qualified to reduce issues in database restore.

[Note]

PostGIS 2.3.0: PostgreSQL 9.4+ support for BRIN indexes. Refer to Section 4.9.2, “Brin指数”.

[Note]

PostGIS 2.3.0: Tiger Geocoder upgraded to work with TIGER 2016 data.

15.12.8. PostGIS Functions new or enhanced in 2.2

The functions given below are PostGIS functions that were added or enhanced.

[Note]

postgis_sfcgal now can be installed as an extension using CREATE EXTENSION postgis_sfcgal;

[Note]

PostGIS 2.2.0: Tiger Geocoder upgraded to work with TIGER 2015 data.

[Note]

address_standardizer, address_standardizer_data_us extensions for standardizing address data refer to Section 14.1, “地址标准器” for details.

[Note]

Many functions in topology rewritten as C functions for increased performance.

15.12.9. PostGIS Functions new or enhanced in 2.1

The functions given below are PostGIS functions that were added or enhanced.

[Note]

More Topology performance Improvements. Please refer to Chapter 10, 拓扑学 for more details.

[Note]

Bug fixes (particularly with handling of out-of-band rasters), many new functions (often shortening code you have to write to accomplish a common task) and massive speed improvements to raster functionality. Refer to Chapter 12, 栅格参考 for more details.

[Note]

PostGIS 2.1.0: Tiger Geocoder upgraded to work with TIGER 2012 census data. geocode_settings added for debugging and tweaking rating preferences, loader made less greedy, now only downloads tables to be loaded. PostGIS 2.1.1: Tiger Geocoder upgraded to work with TIGER 2013 data. Please refer to Section 14.2, “TIGER地理编码器” for more details.

15.12.10. PostGIS Functions new, behavior changed, or enhanced in 2.0

The functions given below are PostGIS functions that were added, enhanced, or have Section 15.12.11, “PostGIS Functions changed behavior in 2.0” breaking changes in 2.0 releases.

New geometry types: TIN and Polyhedral surfaces was introduced in 2.0

[Note]

Greatly improved support for Topology. Please refer to Chapter 10, 拓扑学 for more details.

[Note]

In PostGIS 2.0, raster type and raster functionality has been integrated. There are way too many new raster functions to list here and all are new so please refer to Chapter 12, 栅格参考 for more details of the raster functions available. Earlier pre-2.0 versions had raster_columns/raster_overviews as real tables. These were changed to views before release. Functions such as ST_AddRasterColumn were removed and replaced with AddRasterConstraints, DropRasterConstraints as a result some apps that created raster tables may need changing.

[Note]

Tiger Geocoder upgraded to work with TIGER 2010 census data and now included in the core PostGIS documentation. A reverse geocoder function was also added. Please refer to Section 14.2, “TIGER地理编码器” for more details.

15.12.11. PostGIS Functions changed behavior in 2.0

The functions given below are PostGIS functions that have changed behavior in PostGIS 2.0 and may require application changes.

[Note]

Most deprecated functions have been removed. These are functions that haven't been documented since 1.2 or some internal functions that were never documented. If you are using a function that you don't see documented, it's probably deprecated, about to be deprecated, or internal and should be avoided. If you have applications or tools that rely on deprecated functions, please refer to Q: 9.2 for more details.

[Note]

Bounding boxes of geometries have been changed from float4 to double precision (float8). This has an impact on answers you get using bounding box operators and casting of bounding boxes to geometries. E.g ST_SetSRID(abbox) will often return a different more accurate answer in PostGIS 2.0+ than it did in prior versions which may very well slightly change answers to view port queries.

[Note]

The arguments hasnodata was replaced with exclude_nodata_value which has the same meaning as the older hasnodata but clearer in purpose.

15.12.12. PostGIS Functions new, behavior changed, or enhanced in 1.5

15.12.13. PostGIS Functions new, behavior changed, or enhanced in 1.4

The functions given below are PostGIS functions that were introduced or enhanced in the 1.4 release.

15.12.14. PostGIS Functions new in 1.3

The functions given below are PostGIS functions that were introduced in the 1.3 release.

Chapter 16. 报告问题

16.1. 报告软件错误

有效的错误报告是帮助PostGIS开发的根本途径。最有效的错误报告是使PostGIS开发人员能够重现它,因此理想情况下,它将包含触发它的脚本以及有关检测到它的环境的所有信息。足够好的信息可以在运行时提取 选择Postgis_Full_Version() [适用于PostGIS]和 选择版本() [适用于PostgreSQL]。

如果您使用的不是最新版本,那么值得一看它的 版本更改日志 首先,找出您的错误是否已经修复。

使用 PostGIS错误跟踪器 将确保您的报告不会被丢弃,并将随时向您通报其处理过程。在报告新的错误之前,请查询数据库以确定它是否是已知的错误,如果是,请添加有关它的任何新信息。

你可能想读一下西蒙·塔瑟姆的论文 如何有效地报告漏洞 在提交新的报告之前。

16.2. 报告文档问题

文档应准确反映软件的功能和行为。如果没有,可能是因为软件错误,或者因为文档有错误或有缺陷。

文档问题也可以报告给 PostGIS错误跟踪器

如果您的修订是琐碎的,只需在新的错误跟踪器问题中描述它,并在文档中详细说明它的位置。

如果您的更改范围更广,补丁肯定是首选。在Unix上,这是一个四个步骤的过程(假设您已经 吉特 已安装):

  1. 克隆PostGIS的git存储库。在Unix上,键入:

    Git克隆https://git.osgeo.org/gitea/postgis/postgis.git

    该文件将存储在postgis目录中

  2. 使用您最喜欢的文本编辑器对文档进行更改。在Unix上,键入(例如):

    Vim文档/postgis.xml

    请注意,文档是用DocBook XML而不是HTML编写的,因此如果您不熟悉它,请按照文档其余部分的示例进行操作。

  3. 制作包含与文档主副本不同的补丁文件。在Unix上,键入:

    Git diff文档/postgis.xml > doc.patch

  4. 将补丁附加到Bug Tracker中的新问题上。

Appendix A. 附录

发行说明

Table of Contents
A.1. PostGIS 3.2.0(Olivier Courtin Edition)
A.2. PostGIS 3.2.0测试版3
A.3. 版本3.2.0 Beta2
A.4. 版本3.2.0Beta1
A.5. 版本3.2.0 Alpha1
A.6. 版本3.1.0Beta1
A.7. 版本3.1.0 Alpha3
A.8. 版本3.1.0 Alpha2
A.9. 版本3.1.0Alpha1
A.10. 版本3.0.0
A.11. 版本3.0.0rc2
A.12. 版本3.0.0rc1
A.13. 版本3.0.0Beta1
A.14. 版本3.0.0Alpha4
A.15. 版本3.0.0Alpha3
A.16. 版本3.0.0Alpha2
A.17. 版本3.0.0Alpha1
A.18. 版本2.5.0
A.19. 版本2.4.5
A.20. 版本2.4.4
A.21. 版本2.4.3
A.22. 版本2.4.2
A.23. 版本2.4.1
A.24. 版本2.4.0
A.25. 版本2.3.3
A.26. 版本2.3.2
A.27. 版本2.3.1
A.28. 版本2.3.0
A.29. 版本2.2.2
A.30. 版本2.2.1
A.31. 版本2.2.0
A.32. 版本2.1.8
A.33. 版本2.1.7
A.34. 版本2.1.6
A.35. 版本2.1.5
A.36. 版本2.1.4
A.37. 版本2.1.3
A.38. 版本2.1.2
A.39. 版本2.1.1
A.40. 版本2.1.0
A.41. 版本2.0.5
A.42. 版本2.0.4
A.43. 版本2.0.3
A.44. 版本2.0.2
A.45. 版本2.0.1
A.46. 版本2.0.0
A.47. 版本1.5.4
A.48. 版本1.5.3
A.49. 版本1.5.2
A.50. 版本1.5.1
A.51. 版本1.5.0
A.52. 版本1.4.0
A.53. 版本1.3.6
A.54. 版本1.3.5
A.55. 版本1.3.4
A.56. 版本1.3.3
A.57. 版本1.3.2
A.58. 版本1.3.1
A.59. 版本1.3.0
A.60. 版本1.2.1
A.61. 版本1.2.0
A.62. 版本1.1.6
A.63. 版本1.1.5
A.64. 版本1.1.4
A.65. 版本1.1.3
A.66. 版本1.1.2
A.67. 版本1.1.1
A.68. 版本1.1.0
A.69. 版本1.0.6
A.70. 版本1.0.5
A.71. 版本1.0.4
A.72. 版本1.0.3
A.73. 版本1.0.2
A.74. 版本1.0.1
A.75. 版本1.0.0
A.76. 版本1.0.0RC6
A.77. 版本1.0.0RC5
A.78. 版本1.0.0RC4
A.79. 版本1.0.0RC3
A.80. 版本1.0.0RC2
A.81. 版本1.0.0RC1

A.1. PostGIS 3.2.0(Olivier Courtin Edition)

2021/12/18

如果您运行的是GEOS 3.9+(以及ST_MakeValid 3.10+增强)、Proj 6.1+和PostgreSQL 14+,则此版本需要PostgreSQL 9.6或更高版本、GEOS 3.6或更高版本以及Proj 4.9+。

由于新的PG14快速索引版本的一些查询性能下降,我们决定在得到更多关于真实查询的真实影响的用户测试之前,在默认情况下禁用该功能。如果您运行的是PG14+,则可以通过执行以下操作重新启用它:

ALTER OPERATOR FAMILY gist_geometry_ops_2d USING gist
            ADD FUNCTION 11 (geometry)
            geometry_gist_sortsupport_2d (internal);
        

要恢复更改,请执行以下操作:

ALTER OPERATOR FAMILY gist_geometry_ops_2d using gist
        DROP FUNCTION 11 (geometry);

然后为您的基本索引重新编制索引

突破性变化

5008,ST_DWiThin(Sandro Santilli)未报告空几何图形在无限距离内

4824,已删除 --无和酒 构建选项。现在,在支持MVT的情况下构建时必须使用Wagyu。

4933,topology.GetFaceByPoint将不适用于具有无效边链接的拓扑。

4981,ST_Startpoint支持任何几何图形。对于非行字符串不再返回NULL。

4149,ST_AsMVTGeom现在可以在接近目标范围的比例下保留更多原始几何体的细节。如果需要先前的简化行为,可以提前ST_SIMPLIZE几何图形。(Darafei Praliaskouski)

-需要项目4.9或更高版本

5000,关闭ST_AsMVT Aggregate中的窗口支持,因为它没有实际的用例,并且它在随机输入时崩溃(Paul Ramsey)

增强

4997,FlatGeobuf格式输入/输出(Björn Harrtell)

4575,将拓扑元数据表的SELECT权限授予PUBLIC(Sandro Santilli)

2592,不允许CreateTopology使用SRID定义拓扑 < 0(桑德罗·桑蒂利)

3232,防止将孤立节点移动到不同的面(Sandro Santilli)

-在编辑基本拓扑体时考虑集合Topo Geometries。(桑德罗·桑蒂利)

3248,防止在拓扑几何图形中使用时删除孤立边(Sandro Santilli)

3231,防止在拓扑几何体中使用隔离节点(Sandro Santilli)

3239,如果在拓扑几何的定义中使用连接节点,则防止标题拓扑边(Sandro Santilli)

4950,加速检查ValiateTopology中节点的CONTAING_FACE(Sandro Santilli)

4945,验证拓扑中的多壳面检查(Sandro Santilli)

4944,验证拓扑中的侧位置冲突检查(Sandro Santilli)

3042,边链接的有效拓扑检查(Sandro Santilli)

3276,Face的MBR验证拓扑检查(Sandro Santilli)

4936,边界框受限验证拓扑(Sandro Santilli)

4933,在存在大面的情况下加快拓扑构建(桑德罗·桑蒂利)

3233,节点的Containing_Face的有效拓扑检查(Sandro Santilli)

4830,边侧面包容的验证拓扑检查(Sandro Santilli)

4827,允许在WKT输入中使用NaN坐标(Paul Ramsey)

-ST_Value()接受重采样参数以添加双线性选项(Paul Ramsey)

3778,#4401,ST_边界现在适用于三角网,并且不会线性化曲线(Aliaksandr Kalenik)

4881,#4884,将线性拓扑几何的edge_id的符号存储在关系表中以保持方向(Sandro Santilli)

4628,添加选项以禁用加载Shapefile时的分析(Stefan Corneliu Petrea)

4924,大型多点上更快的ST_RemoveRepeatedPoints,O(NlogN)而不是O(N^2)(Aliakandr Kalenik,Darafei Praliaskouski)

4925,修复ST_DumpPoints以不忽略点(Aliaksandr Kalenik)

-ST_SRID(拓扑几何)替代,以加速查找(Sandro Santilli)

2175,避免在将相同的闭合线添加到拓扑时创建额外的节点(Sandro Santilli)

4974,ADDRESS_STANDIZER_DATA_US的升级路径(Aiven,Regina OBE的Jan Katins)

4975,PostGIS升级更改为不使用临时表(Aiven的Jan Katins)

4981,ST_Startpoint支持任何几何体(Aliaksandr Kalenik)

4799,将SRS包含在GeoJSON中,而SRS存在于space_ref_sys中。

4986,现在使用希尔伯特排序方法可以更快地创建Postgres 14上的GIST索引。(韩王,AliakSandr Kalenik,Darafei Praliaskouski,Giuseppe Broccolo)

4949,使用PROJ_NORAMIZE_FOR_VISUIZATION来做出“轴心交换”决定(保罗·拉姆齐)

-GH647,ST_PixelAsCentroid,ST_PixelAsCentroid在C函数上重新实现(Sergei Shoulbakov)

-GH648,ST_AsMVTGeom现在使用更快的裁剪(AliakSandr Kalenik)

5018,pgsql2shp基本支持WITH CTE子句(Regina OBE)

5019,地址_标准:添加对pcre2的支持(Paul Ramsey)

新功能

4923,Topology.ValiateTopologyRelation(Sandro Santilli)

4933,topology.GetFaceContainingPoint(Sandro Santilli)

2175,ST_Scroll(Sandro Santilli)

4841,快速获取拓扑记录的FindTopology(Sandro Santilli)

4869,FindLayer以快速获取层记录(Sandro Santilli)

4851,TopGeom_addTopGeom函数(Sandro Santilli)

ST_MakeValid(几何体,选项)允许使用GEOS 3.10替代有效性构建算法(Paul Ramsey)

ST_InterpolateRaster()使用GDAL(Paul Ramsey)中的算法填充采样点之间的栅格像元(加权距离倒数、平均值等)

ST_Conour()使用GDAL的算法从栅格值生成等高线(Paul Ramsey)

ST_Setz()/ST_SetM()使用从栅格读取的数据填充几何图形的z/m坐标(Paul Ramsey)

新的postgis.gdal_vsi_Options GUC允许使用身份验证密钥等访问VSI网络服务上的Out-DB栅格(Paul Ramsey)

ST_DumpSegments返回一组输入几何的线段(Aliaksandr Kalenik)

4859,ST_Point,ST_Pointz,ST_PointM,ST_PointZM,带SRID参数的构造函数(Paul Ramsey)

4808,ST_ClusterKMeans现在支持max_Radius参数。当您不确定集群的数量,但您知道集群的大小应该是多少时,可以使用它。(Darafei Praliaskouski)

A.2. PostGIS 3.2.0测试版3

2021/12/04

如果您运行的是GEOS 3.9+(以及ST_MakeValid 3.10+增强)、Proj 6.1+和PostgreSQL 14+,则此版本需要PostgreSQL 9.6或更高版本、GEOS 3.6或更高版本以及Proj 4.9+。

由于新的PG14快速索引版本的一些查询性能下降,我们决定在得到更多关于真实查询的真实影响的用户测试之前,在默认情况下禁用该功能。如果您运行的是PG14+,则可以通过执行以下操作重新启用它:

ALTER OPERATOR FAMILY gist_geometry_ops_2d USING gist
        ADD FUNCTION 11 (geometry)
        geometry_gist_sortsupport_2d (internal);
    

要恢复更改,请执行以下操作:

ALTER OPERATOR FAMILY gist_geometry_ops_2d using gist
     DROP FUNCTION 11 (geometry);

然后为您的基本索引重新编制索引

自PostGIS 3.2.0beta2版本以来的更改:

破坏性更改/修复

5028,ST_AsFlatGeobuf在混合几何输入上崩溃(Björn Harrtell)

5029,ST_AsFlatGeobuf索引输出损坏(Björn Harrtell)

5014,在ST_TableFromFlatGeobuf上崩溃(比约恩·哈特尔)

将ST_TableFromFlatGeobuf重命名为ST_FromFlatGeobufToTable(Björn Harrtell)

默认情况下,禁用PG14快速索引构建。(保罗·拉姆齐)

A.3. 版本3.2.0 Beta2

发布日期:2021/11/26

如果您运行的是GEOS 3.9+(以及ST_MakeValid 3.10+增强)、Proj 6.1+和PostgreSQL 14+,则此版本需要PostgreSQL 9.6或更高版本、GEOS 3.6或更高版本以及Proj 4.9+。自PostGIS 3.2.0beta1版本以来的更改:

破坏性更改/修复

5016,加载器(Shp2pgsq):尊重LDFLAGS(Greg Troxel)

5005,当几何列不是第一列时,ST_AsFlatGeoBuf在表上崩溃(Björn Harrtell)

5017,topology.Validate拓扑错误关系“SHELL_CHECK”已存在(Sandro Santilli)

增强

5018,pgsql2shp基本支持WITH CTE子句(Regina OBE)

5019,地址_标准:添加对pcre2的支持(Paul Ramsey)

GH647,ST_AsMVTGeom现在使用更快的裁剪(AliakSandr Kalenik)

GH648、ST_PixelAsCentroid、ST_PixelAsCentroid在C函数上重新实现(Sergei Shoulbakov)

A.4. 版本3.2.0Beta1

上映日期:2021/10/23

如果您运行的是GEOS 3.9+(以及ST_MakeValid 3.10+增强)、Proj 6.1+和PostgreSQL 14+,则此版本需要PostgreSQL 9.6或更高版本、GEOS 3.6或更高版本以及Proj 4.9+。

错误修复和突破性更改

5012,相对于发布的GEOS 3.10.0的干净回归(Regina OBE,Paul Ramsey)

5000,关闭ST_AsMVT Aggregate中的窗口支持,因为它没有实际的用例,并且它在随机输入时崩溃(Paul Ramsey)

4994,shp2pgsql有时缺少INSERT语句(Sandro Santilli)

4990,i386上的getfacecontainingpoint失败(Sandro Santilli)

5008,使带有空操作数的ST_DWiThin始终返回FALSE(Sandro Santilli)

默认情况下,liblwgeom应使用警告标志进行构建(Sandro Santilli)

增强

4997,FlatGeobuf格式输入/输出(Björn Harrtell)

A.5. 版本3.2.0 Alpha1

发布日期:2021/09/10

此版本需要PostgreSQL 9.6或更高版本,GEOS 3.6或更高版本,以及Proj 4.9或更高版本,如果您运行的是GEOS 3.9+(更多是GEOS 3.10+)、Proj 6.1+或PostgreSQL 14+,则需要启用其他功能。

突破性变化

#4824,已删除 `--without-wagyu` 构建选项。现在,在支持MVT的情况下构建时必须使用Wagyu。

#4933,topology.GetFaceByPoint将不适用于具有无效边链接的拓扑。

#4981,ST_Startpoint支持任何几何体。对于非行字符串不再返回NULL。

#4149,ST_AsMVTGeom现在可以在接近目标范围的比例下保留更多原始几何体的细节。如果需要先前的简化行为,可以提前ST_SIMPLIZE几何图形。(Darafei Praliaskouski)

需要项目4.9或更高版本。

增强

#2592,不允许CreateTopology使用SRID定义拓扑 > 0(桑德罗·桑蒂利)

#3232,防止将孤立节点移动到不同的面(Sandro Santilli)

在编辑拓扑基本体时,请考虑集合Topo Geometries。(桑德罗·桑蒂利)

#3248,在拓扑几何体中使用时防止删除孤立边(Sandro Santilli)

#3231,在拓扑几何中使用时防止删除孤立节点(Sandro Santilli)

#3239,如果在拓扑几何的定义中使用连接节点,则防止标题拓扑边(Sandro Santilli)

#4950,加速检查ValiateTopology中的节点CONTAING_FACE(Sandro Santilli)

#4945,验证拓扑中的多壳面检查(Sandro Santilli)

#4944,验证拓扑中的侧位置冲突检查(Sandro Santilli)

#3042,边链接的验证拓扑检查(Sandro Santilli)

#3276,Face的MBR验证拓扑检查(Sandro Santilli)

#4936,边界框受限验证拓扑(Sandro Santilli)

#4933,在有大面孔的情况下加速拓扑构建(桑德罗·桑蒂利)

#3233,节点的Containing_Face的有效拓扑检查(Sandro Santilli)

#4830,边侧面包容的验证拓扑检查(Sandro Santilli)

#4827,允许在WKT输入中使用NaN坐标(Paul Ramsey)

ST_Value()接受重采样参数以添加双线性选项(Paul Ramsey)

#3778,#4401,ST_边界现在适用于TIN,并且不会线性化曲线(AliakSandr Kalenik)

#4881,#4884,将线性拓扑几何的edge_id的符号存储在关系表中以保持方向(Sandro Santilli)

#4628,添加加载shapefile时禁用分析的选项(Stefan Corneliu Petrea)

#4924,大型多点上更快的ST_RemoveRepeatedPoints,O(NlogN)而不是O(N^2)(AliakSandr Kalenik,Darafei Praliaskouski)

#4925,修复ST_DumpPoints以不忽略点(AliakSandr Kalenik)

ST_SRID(拓扑几何)替代,以加速查找(Sandro Santilli)

#2175,在将相同的闭合线添加到拓扑时避免创建额外的节点(Sandro Santilli)

#4974,ADDRESS_STANDIZER_DATA_US的升级路径(Aiven,Regina OBE的Jan Katins)

#4975,PostGIS升级更改为不使用临时表(Aiven的Jan Katins)

#4981,ST_Startpoint支持任何几何体(Aliaksandr Kalenik)

#4799,将SRS包括在GeoJSON中,其中它存在于space_ref_sys中。

#4986,现在使用希尔伯特排序方法可以更快地创建Postgres 14上的GIST索引。(韩王,AliakSandr Kalenik,Darafei Praliaskouski,Giuseppe Broccolo)

#4949,使用PROJ_NORAMIZE_FOR_VISUIZATION来做出“轴心交换”决定(保罗·拉姆齐)

新功能

#4923,topology.ValiateTopologyRelation(Sandro Santilli)

#4933,topology.GetFaceContainingPoint(Sandro Santilli)

#2175,ST_Scroll(Sandro Santilli)

#4841,快速获取拓扑记录的FindTopology(Sandro Santilli)

#4869,FindLayer快速获取层记录(Sandro Santilli)

#4851,TopGeom_addTopoGeom函数(Sandro Santilli)

ST_MakeValid(几何体,选项)允许使用GEOS 3.10替代有效性构建算法(Paul Ramsey)

ST_InterpolateRaster()使用GDAL(Paul Ramsey)中的算法填充采样点之间的栅格像元(加权距离倒数、平均值等)

ST_Conour()使用GDAL的算法从栅格值生成等高线(Paul Ramsey)

ST_Setz()/ST_SetM()使用从栅格读取的数据填充几何图形的z/m坐标(Paul Ramsey)

新的postgis.gdal_vsi_Options GUC允许使用身份验证密钥等访问VSI网络服务上的Out-DB栅格(Paul Ramsey)

ST_DumpSegments返回一组输入几何的线段(Aliaksandr Kalenik)

#4859,ST_Point,ST_Pointz,ST_PointM,ST_PointZM,带SRID参数的构造函数(Paul Ramsey)

#4808,ST_ClusterKMeans现在支持max_Radius参数。当您不确定集群的数量,但您知道集群的大小应该是多少时,可以使用它。(Darafei Praliaskouski)

A.6. 版本3.1.0Beta1

上映日期:2020/12/09

仅列出自3.1.0alpha2以来的更改。如果您运行的是Proj6+、PostgreSQL 12+和GEOS 3.9.0dev,则此版本需要启用PostgreSQL 9.6-13和GEOS >=3.6+的附加功能和增强功能

突破性变化

4214,不推荐使用ST_Count(表名,...)、ST_ApproxCount(表名,...)ST_SummaryStats(表名,..)、ST_Columgraph(表名,...)、ST_Approx历史图(表名,...)、ST_Quantile(表名,...)、ST_ApproxQuantile(表名,...)已删除。(Darafei Praliaskouski)

增强

4801,ST_ClusterK Means支持点[Z]M几何图形中的权重(Darafei Praliaskouski)

4804,ST_ReducePrecision(GEOS 3.9+)允许有效的精度降低(Paul Ramsey)

4805,_ST_SorableHash暴露为解决Postgres中的并行排序性能问题的方法。如果表很大,请使用ORDER BY_ST_SorableHash(Geom)而不是ORDER BY geom来提高并行排序速度(Darafei Praliaskouski)

4625,现在计算了相关统计数据。运行Analyze以启动Brin索引。(Darafei Praliaskouski)

修复ST_GeomFromGML()(Even Roualt)中的urn:ogc:def:crs:epsg的轴顺序问题

A.7. 版本3.1.0 Alpha3

上映日期:2020/11/19

仅列出自3.1.0alpah2以来的更改。如果您运行的是Proj6+、PostgreSQL 12+和GEOS 3.9.0dev,则此版本需要启用PostgreSQL 9.6-13和GEOS >=3.6+的附加功能和增强功能

突破性变化

4737,将最低协议buf-c要求增加到1.1.0(Raúl Marín)如果该要求未得到满足或显式禁用(--不带-协议buf),配置步骤现在将失败

4258,将postgis_sfcga从postgis解开到其自己的lib文件中(Regina OBE)

新功能

4698,向ST_AsEWKT(Raúl Marín)添加精度参数

向ST_UNION、ST_UnaryUnion、ST_Difference、ST_SymDifference、ST_SubDivide添加GridSize可选参数需要GEOS 3.9(Sandro Santilli)

增强

4789,加快具有多个孔的面拓扑几何的TopOJSON输出(Sandro Santilli)

4758,提高拓扑节点健壮性(Sandro Santilli)

使ST_SUBDIVE可中断(Sandro Santilli)

4660,双/坐标打印中的更改(Raúl Marín)-使用最短的表示法(足以保证往返)。-对小于1e-8的绝对数使用科学记数法。之前的行为是,对于小于1e-12的绝对值,输出0,对于大于1e-12的绝对值,输出固定记数法。-对大于1e+15的绝对数使用科学记数法(相同的行为)。-精度参数现在也影响科学计数法(在其固定之前[5-8])。-所有输出函数现在都尊重所请求的精度(没有任何限制)。-默认精度相同(GeoJSON为9,其他均为15)。

4729,WKT/KML:直接将双面打印到字符串缓冲区(Raúl Marín)

4533,使用标准坐标打印系统打印方框类型(Raúl Marín)

4686,避免在几何体完全位于BBox内部或外部时影响Analyze、_ST_PointOutside、Postgis_Geobbox、ST_CombineBbox(box2D,几何)、ST_ClipByBox2D(Raúl Marín)(Raúl Marín)。

4741,不要使用ST_PointInside Circle如果需要索引,请使用ST_DWiThin。文件调整(Darafei Praliaskouski)

4737,在ST_AsMVT中提高性能并减少内存使用,特别是在涉及并行性的查询中(Raúl Marín)

4746,对序列化过程的微观优化(Raúl Marín)

4719,当SRID不匹配ST_交集(几何、栅格)以及函数中的模式限定调用时,快速失败。(Regina OBE)

4784,添加具有提取最高坐标维度的分量的默认行为的ST_CollectionExtract(几何图形)。(保罗·拉姆齐)

错误修复

4691,修复带有空几何图形的GIST索引创建过程中的段错误(Raúl Marín)

修复错误的WKB输入(Oracle类型)的处理和格式错误的WKB的单元测试。删除格式错误的WKB案例中的内存泄漏。(保罗·拉姆齐)

4740,地理距离树中的舍入值,就像我们在地理距离上所做的那样(Raúl Marín,Paul Ramsey,Regina OBE)

4739,确保使用postgis_id的所有函数初始化内部缓存(Raúl Marín)

4767、#4768、#4771、#4772,修复解析无效WKB时的段错误(Raúl Marín)

4769,修复st_addband(Raúl Marín)中的段错误

4790,修复具有相同顶点的ST_3相交计算(Nicklas Avén)

4742,Tiger地理编码器在Tiger升级时恢复到2018版本(Regina OBE)

3372,拓扑元素数组不能为空-更改域约束(Regina OBE)

A.8. 版本3.1.0 Alpha2

上映日期:2020/07/18

仅列出自3.1.0alpah1以来的更改。如果您运行的是Proj6+、PostgreSQL 12+和GEOS 3.9.0dev,则此版本需要启用PostgreSQL 9.6-13和GEOS >=3.6+的附加功能和增强功能

新特点

4656,为隐式GeoJSON接收强制转换Geojson_Text::Geomety(Raúl Marín)

4687,Exposed GEOS MaximumIncribedCircle(Paul Ramsey)

4710,ST_ClusterK Means现在处理3D几何图形(Darafei Praliaskouski)

增强

4675,topology.GetRingEdges现在用C实现(Sandro Santilli)

4681,ST_GetFaceGeometry:打印损坏信息(Sandro Santilli)

4651,ST_SIMPLIZE:如果未删除任何内容,则不复制(Raúl Marín)

尽可能避免敬酒(保罗拉姆齐)

4490,调整功能成本(Raúl Marín)

4672,缓存getSRSbySRID和getSRIDbySRS(Raúl Marín)

4676,避免将烘焙几何解压为只读标题(Raúl Marín)优化转换为PostgreSQL点类型(Raúl Marín)

4620,将内部wagyu更新为0.5.0(Raúl Marín)

4623,优化varlena返回函数(Raúl Marín)

4677,在不同的缓存类型之间共享串行化对象(Raúl Marín)

使用MSVC编译器修复编译/标准化Shebangs(Lo Aic Bartoletti)

错误修复

4652,修复ST_GeomFromGML(Raúl Marín)中与内存相关的几个错误

4661,修复使用非默认架构(Raúl Marín)访问SPATIAL_REF_sys

4670,ST_AddPoint:请求正面位置时修复错误(Raúl Marín)

4699,ST_UNION(RASTER,OTHARG)的NULL输入崩溃(Jaime Casanova,2ndQuadant)

4716,修复配置脚本(Raúl Marín)中的pkg-config的几个问题

A.9. 版本3.1.0Alpha1

发布日期:2020/02/01

如果您运行的是Proj6+、PostgreSQL 12+和GEOS 3.8.0,则此版本需要启用PostgreSQL 9.6+-13和GEOS >=3.6+的附加功能和增强功能

突破性变化

版本输出中的svn编号被git散列替换(Sandro Santilli,Raúl Marín)

4577,放弃对PostgreSQL 9.5的支持(Raúl Marín)

4579,丢弃postgis_proc_set_earch_path.pl(Raúl Marín)

4601,ST_TileEntaine签名已更改。

3057、ST_Force3D、ST_Force3DZ、ST_Force3 DM和ST_Force4D签名已更改。

新功能

4601,添加ST_瓷砖信封页边距参数(Yuri Astrakhan)

2972,将静音模式(-q)添加到pgsql2shp(Kristian Thy)

4617,添加配置开关 `--without-phony-revision` (劳尔·马林)

3057,Force3D*、Force4D函数的可选值PARAMS(Kristian Thy)

4624、ST_六角网格和ST_SquareGrid设置返回函数以生成平面的平铺(Paul Ramsey)

增强

4539,统一libm包括(Raúl Marín)

4569,允许将未知的SRID几何图形插入到类型的SRID列(Paul Ramsey)

4149,ST_SIMPLICE(geom,0)现在是O(N)。ST_Affine(ST_Translate、ST_TransScale、ST_Rotate)已优化。ST_SnapToGrid已优化。(Darafei Praliaskouski)

4574,启用链接时间优化(Darafei Praliaskouski)

4578,将并行化和成本性质添加到布林函数(Raúl Marín)

4473,沉默Yacc警告(Raúl Marín)

4589,在不使用“--Enable-DEBUG”(Raúl Marín)的情况下构建时禁用C断言

4543,介绍Ryu印刷双面(Raúl Marín)

4626,支持libxml2的pkg-config(Bas Couwenberg)

4615,加快Geojson输出(Raúl Marín)

A.10. 版本3.0.0

上映日期:2019/10/20

如果您运行的是Proj6+、PostgreSQL 12和GEOS 3.8.0,则此版本需要启用PostgreSQL 9.5+-12和GEOS >=3.6+的附加功能和增强功能

新特点

2902,postgis_geos_noop(Sandro Santilli)

4128,ST_AsMVT对功能ID的支持(StepanKuzmin)

4230,SP-GIST和对ND盒操作员的GIST支持重叠,包含在相等的范围内(来自自由布卢克塞尔大学的Esteban Zimányi和Arthur Lesuisse,Darafei Praliaskouski)

4171,ST_3DLineInterpolatePoint(Julien Cabieces,文森特·莫拉)

4311,引入和余来验证MVT多边形。此选项需要C++11编译器,并将使用CXXFLAGS(而不是CFLAGS)。增列 `--without-wagyu` 禁用此选项并保持2.5版的行为(Raúl Marín)

1833,ST_AsGeoJSON(ROW)生成完整的GeoJSON要素(Joe Conway)

3687,为隐式GeoJSON生成强制转换json(几何图形)和jsonb(几何图形)(Paul Ramsey)

4198,新增ST_ConstrainedDelaunay Triangles SFCGAL函数(Darafei Praliaskouski)

突破性变化

4267,将GEOS的最低版本提高到3.6(Regina OBE,Darafei Praliaskouski)

3888,栅格支持现已作为单独的扩展模块提供(Sandro Santilli)

3807,扩展库文件不再包含次要版本。如果您需要旧的行为,请使用新的配置开关--带有库次要版本(Regina OBE)

4230,ND框运算符(重叠、包含、范围、等于)现在不会查看两个操作对象中都不存在的维度。请在升级后重新索引您的ND索引。(Darafei Praliaskouski)

4229,不再支持PostgreSQL < 9.5.(Darafei Praliaskouski)

4260,不再安装liblwgeom标头。如果您的项目依赖于它们的可用性,请改用Librttopo。(Darafei Praliaskouski)

4258,删除SFCGAL对ST_Area、ST_Distance、ST_Interval、ST_Difference、ST_Union、ST_Intersects、ST_3DIntersects、ST_3DDistance和postgis.Backend Switch(Darafei Praliaskouski)的支持

4267,启用项目6过时的API(Darafei Praliaskouski、Raúl Marín)

4268,将SFCGAL的最低版本升级到1.3.1(Darafei Praliaskouski)

4331,ST_3DMakeBox现在返回错误而不是小方框(Regina OBE)

4342,删除了ST_AsGeoJSON和ST_AsKML的“版本化”变体(Paul Ramsey)

4356,ST_ACCUM已删除。改用ARRAY_AGG。(Darafei Praliaskouski)

4414,将版本号包含在地址标准化程序库(Raúl Marín)中

4334,修复与重命名函数参数相关的升级问题(Raúl Marín)

4442,raster2pgsql现在跳过NODATA平铺。如果您出于某种原因仍希望它们留在数据库中,请使用-k选项。(Darafei Praliaskouski)

4433,32位散列修复(需要重新索引散列(几何)索引)(Raúl Marín)

3383,现在使用希尔伯特曲线和Postgres缩写比较进行排序。如果您有btree索引,则需要对其重新编制索引。(Darafei Praliaskouski)

增强

4341,在ST_Intersects等提供索引支持的机制下,使用PgSQL 12+中的支持函数API代替SQL内联作为提供索引支持的机制

4330,当输出通过管道传输到中间进程时,postgis_Restore OOM(Hugh Ranalli)

4322,支持Proj 6+API,带来更准确的基准面转换并支持WKT投影

4153,ST_Segentize现在按比例分割分段(Darafei Praliaskouski)。

4162,ST_DW表中存储几何图形和半径的文档示例(Darafei Praliaskouski,GitHub用户Boscope)。

4161和#4294,ST_AsMVTGeom:小于分辨率的快捷几何图形(Raúl Marín)

4176,ST_Intersects支持GEOMETRYCOLLECTION(Darafei Praliaskouski)

4181,ST_AsMVTGeom:避免因验证而更改类型(Raúl Marín)

4183,ST_AsMVTGeom:简化后删除无效几何图形(Raúl Marín)

4196,将postgis_扩展_升级()打包为未打包的扩展(Sandro Santilli)

4215,在ST_DumpAsPolygons中使用浮点比较(Darafei Praliaskouski)

4155,支持ST_LocateBeting和ST_LocateBetweenElevations中的几何坐标、多边形、三角网、三角形(Darafei Praliaskouski)

2767,AddRasterConstraint可选参数的文档(Sunveer Singh)

4244,避免BOX2D_OUT中的未对齐内存访问(Raúl Marín)

4139,正确建立混合维度ND索引构建树(Darafei Praliaskouski,Arthur Lesuisse,Andrew Gierth,Raúl Marín)

4262,文档ST_LineToCurve的多曲面兼容性(Steven Otten)

4276,ST_AsGeoJSON文档刷新(Darafei Praliaskouski)

4292,ST_AsMVT:以双精度小数形式解析JSON数值(Raúl Marín)

4300,ST_AsMVTGeom:始终返回最简单的几何图形(Raúl Marín)

4301,ST_SUBDIVE:在接近边界重合的坐标上修复无限循环(Darafei Praliaskouski)

4289,ST_AsMVTGeom:剪裁前变换坐标空间(Raúl Marín)

4272,改进无法计算统计数据时的通知消息(Raúl Marín)

4313,#4307,PostgreSQL 12兼容性(Laurenz Albe,Raúl Marín)

4299,#4304,ST_GeneratePoints现在是易失性的。添加了种子参数的不可变版本。(迈克·塔夫斯)

4278、ST_3DDistance和ST_3D Intersects现在支持实体三角网和实体多面体曲面(Darafei Praliaskouski)

4348,ST_AsMVTGeom(GEOS):始终执行验证(Raúl Marín)

4295,允许在ST_Overlaps、ST_Containers、ST_ContainsProperly、ST_Coverers、ST_CoveredBy、ST_Crosses、ST_Touches、ST_Disjo、ST_Relate、ST_Equals(Esteban Zimányi)中进行几何测量收集

4340,ST_UNION Aggregate现在可以处理超过1 GB的几何图形(Darafei Praliaskouski)

4378,允许将TIN作为输入传递到GEOS支持的函数(Darafei Praliaskouski)

4368,重新排序LWGEOM结构成员以最大限度地减少额外的填充(Raúl Marín)

4141,使用uint64处理拓扑扩展中的行数(Raúl Marín)

4412,支持使用NODATA=NaN(Darafei Praliaskouski)插入栅格

4413,栅格2pgsql-t AUTO(Darafei Praliaskouski)上的栅格平铺大小遵循GeoTIFF块大小

4422,更新Python2代码,为Python3做好准备(克里斯蒂安·克劳斯)

4352,为PG12+使用CREATE或REPLACE Aggregate(Raúl Marín)

4394,允许几何相等运算符上的完全外连接(Darafei Praliaskouski)

4441,使主罚对多列索引友好,并更快地构建单列索引。(Darafei Praliaskouski)

4403,支持使用复制模式(-D)(Regina OBE)重项目的shp2pgsql能力

4410,有关SRID不匹配的更多描述性错误消息(Darafei Praliaskouski)

在所有输出函数中支持4399、TIN和三角形输出(Darafei Praliaskouski)

3719,在线性化过程中规定每条弧线段的最小数量(Dan Baston/City of Helsinki,Raúl Marín)

4277,ST_GeomFromGeoJSON现在默认将SRID标记为4326根据RFC7946,ST_AsGeoJSON在JSON输出中设置SRID(如果与4326不同)。(Darafei Praliaskouski)

3979,postgis_sfcga_noop()往返函数(Lucas C.Villa Real)

4328,二维三角网的ST_3D相交。(Darafei Praliaskouski)

4509,更新Tiger 2019地理编码器(Regina OBE)

A.11. 版本3.0.0rc2

上映日期:2019/10/13

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6。如果运行Proj6+和/或PostgreSQL 12,则启用其他功能。如果运行GEOS 3.8+,则性能增强

主要亮点

4534,修复lwcurvepoly_from_WKB_STATE(Raúl Marín)中的泄漏

4536,修复lwCollection_from_WKB_STATE中的泄漏(Raúl Marín)

4537,修复WKT集合解析器中的泄漏(Raúl Marín)

4535,WKB:避免缓冲区溢出(Raúl Marín)

A.12. 版本3.0.0rc1

上映日期:2019/10/08

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6。如果运行Proj6+和/或PostgreSQL 12,则启用其他功能。如果运行GEOS 3.8+,则性能增强

主要亮点

4519,修复getSRIDbySRS崩溃(Raúl Marín)

4520,在检测C++库时使用干净的环境(Raúl Marín)

恢复ST_Union()聚合签名,以便删除不需要的agg,并重新进行性能/大小增强,以继续避免在ST_Union()期间使用数组类型,希望避免数组大小限制。(保罗·拉姆齐)

A.13. 版本3.0.0Beta1

发布日期:2019/09/28

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6。如果运行Proj6+和/或PostgreSQL 12,则启用其他功能。如果运行GEOS 3.8+,则性能增强

主要亮点

4492,修复ST_SIMPLIZE忽略第三个参数的值(Raúl Marín)

4494,修复具有过时BBox的ST_SIMPLIZE输出(Raúl Marín)

4493,修复具有过时BBox的ST_RemoveRepeatedPoints输出(Raúl Marín)

4495,修复具有过时BBox的ST_SnapToGrid输出(Raúl Marín)

4496,请求时折叠ST_SIMPLIZE(三角形)(Raúl Marín)

4501,允许非超级用户安装postgis_Tiger_Geocoder(Regina OBE)

4503,加速笛卡尔BBox的计算(Raúl Marín)

4504,shp2pgsql-D不适用于架构限定表(Regina OBE)

4505,加快几何图形与GEOS之间的转换(Dan Baston)

4507,将GEOSMakeValid和GEOSBuildArea用于GEOS 3.8+(Dan Baston)

4491,加速ST_RemoveRepeatedPoints(Raúl Marín)

4509,更新Tiger 2019地理编码器(Regina OBE)

4338,人口普查块级数据(选项卡块表)未加载(Regina OBE)

A.14. 版本3.0.0Alpha4

发布日期:2019/08/11

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6。如果运行Proj6+和/或PostgreSQL 12,则启用其他功能

主要亮点

4433,32位散列修复(需要重新索引散列(几何)索引)(Raúl Marín)

4445,修复GEOMETRY_LE中的错误(Raúl Marín)

4451,修复GSerialized_max_Header_Size的计算(Raúl Marín)

4450,加速ST_GeometryType(Raúl Marín)

4452,添加ST_TileEntaine()(Paul Ramsey)

4403,支持使用复制模式(-D)(Regina OBE)重项目的shp2pgsql能力

4417,使用新条目更新space_ref_sys(Paul Ramsey)

4449,加速ST_X、ST_Y、ST_Z和ST_M(Raúl Marín)

4454,加速_ST_OrderingEquals(Raúl Marín)

4453,加速ST_IsEmpty(Raúl Marín)

在PG_UPDATE(Raúl Marín)之后,4271,postgis_扩展_升级()也会更新

4466,修复_postgis_gSerialized_stats中的未定义行为(Raúl Marín)

4209,处理pgsql2shp中的空几何值(Paul Ramsey)

4419,使用协议Buf版本启用/禁用MVT/Geobuf(Paul Ramsey)

4437,形状装载机/翻车机中的手柄点空(保罗·拉姆齐)

4456,添加Rasberg PI 32位Jenkins机器人进行测试(Bruce Rindahl,Regina OBE)

4420,ADDRESS_STANDIZER扩展(Regina OBE)不存在更新路径

A.15. 版本3.0.0Alpha3

发布日期:2019/07/01

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6

主要亮点

4414,将版本号包含在地址标准化程序库(Raúl Marín)中

4352,为PG12+使用CREATE或REPLACE Aggregate(Raúl Marín)

4334,修复与重命名参数相关的升级问题(Raúl Marín)

4388,AddRasterConstraints:生成约束时忽略空值(Raúl Marín)

4327,避免忽略getenv的结果(Raúl Marín)

4406,解码Geohash时抛出无效字符(Raúl Marín)

4429,使用PROJ6避免资源泄漏(Raúl Marín)

4372,PROJ6:速度提升(Raúl Marín)

3437,使用点加速ST_Intersects(Raúl Marín)

4438,更新序列化以支持扩展标志区域(Paul Ramsey)

4443,Fix wagyu配置丢弃CPPFLAGS(Raúl Marín)

4440,FDW中的类型查找失败(Paul Ramsey)

4442,raster2pgsql现在跳过NODATA平铺。如果您出于某种原因仍希望它们留在数据库中,请使用-k选项。(Darafei Praliaskouski)

4441,使主罚对多列索引友好,并更快地构建单列索引。(Darafei Praliaskouski)

A.16. 版本3.0.0Alpha2

发布日期:2019/06/02

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6

主要亮点

#4404,修复支持功能的选择性问题(Paul Ramsey)

#4311,将和设置为验证多边形的默认选项。此选项需要C++11编译器,并将使用CXXFLAGS(而不是CFLAGS)。仅当使用MVT支持(协议错误)添加时才会启用它 `--without-wagyu` 禁用此选项并保持2.5版的行为(Raúl Marín)

#4198,新增ST_ConstrainedDelaunay Triangles SFCGAL函数(Darafei Praliaskouski)

A.17. 版本3.0.0Alpha1

发布日期:2019/05/26

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.5-PostgreSQL 12 GEOS > =3.6

新特点

如果您运行的是Proj6+,则启用其他功能

有关更多详细信息,请阅读包含的tarball中的新闻文件

A.18. 版本2.5.0

发布日期:2018/09/23

如果使用PostgreSQL+JIT进行编译,则需要LLVM >=6

此版本支持的PostgreSQL版本为:PostgreSQL 9.4-PostgreSQL 12(开发中)GEOS > =3.5

新特点

#1847,SPGIST 2D和3D对PG 11+的支持(来自布鲁克塞尔自由大学(UniversityéLibre de Bruxelle,Darafei Praliaskouski)的Esteban Zimányi和Arthur Lesuisse)

#4056,ST_FilterByM(尼克拉斯大道)

#4050,ST_Chaikin平滑(Nicklas Avén)

#3989,ST_BUFFER单面选项(Stephen Knox)

#3876,ST_Angel函数(Rémi Cura)

#3564,ST_LineInterpolatePoints(Dan Baston)

#3896,PostGIS_Expanses_Upgrade()(Regina OBE)

#3913,从未打包的扩展创建扩展时升级(Sandro Santilli)

#2256,_POSTGIS_INDEX_EXTEND(),表示从索引开始的范围(Paul Ramsey)

#3176,添加ST_OrientedEntaine(Dan Baston)

#4029,添加ST_Quantize坐标(Dan Baston)

#4063,ST_Scale的可选假原点(Paul Ramsey)

#4082,添加ST_BandFileSize和ST_BandFileTimestamp,扩展ST_BandMetadata(偶数Rouault)

#2597,添加ST_GrayScale(Bborie Park)

#4007,新增ST_SetBandPath(Bborie Park)

#4008,新增ST_SetBandIndex(Bborie Park)

突破性变化

来自多个旧版本的升级脚本现在都是指向单个升级脚本的符号链接(Sandro Santilli)

#3944,更新至EPSG寄存器V9.2(偶数Rouault)

#3927,ST_AsMVT的并行实现

#3925,在生成MVT之前使用贴图网格像元大小简化几何图形

#3899,BTree排序顺序现在定义在空几何图形和相同前缀几何图形的集合上(Darafei Praliaskouski)

#3864,点几何排序的性能改进(Darafei Praliaskouski)

#3900,GCC警告已修复,Make-j现在正在工作(Darafei Praliaskouski)-Topo Geo_addLinestring健壮性改进(Sandro Santilli)#1855,#1946,#3718,#3838

#3234,不接受空点作为拓扑节点(Sandro Santilli)

#1014,可散列几何,允许在CTE签名中直接使用(保罗·拉姆齐)

#3097,真的允许在ST_Split()中安装多个刀片(Paul Ramsey)

#3942,Geojson:不包含json-c的私有标头 > =0.13(比约恩·埃塞尔)

#3954,ST_GeometricMedian现在支持点权重(Darafei Praliaskouski)

#3965、#3971、#3977、#4071 ST_ClusterK重写:更好的初始化、更快的收敛、更快的K=2(Darafei Praliaskouski)

#3982,ST_AsEncodedPolyline支持LINESTRING空和多点空(Darafei Praliaskouski)

#3986,ST_AsText现在有第二个参数来限制小数位数(Marc Ducobu,Darafei Praliaskouski)

#4020,从box3d投射到几何体现在返回正确连接的多面体曲面(Matthias Bay)

#2508,ST_OffsetCurve现在可以处理集合(Darafei Praliaskouski)

#4006,ST_GeomFromGeoJSON支持json和jsonb作为输入(Paul Ramsey,Regina OBE)

#4038,ST_SubDivide现在为重复使用输入顶点的几何体分割选择枢轴。(Darafei Praliaskouski)

#4025、#4032修复了ST_ClosestPointOfApproach、ST_DistanceCPA和ST_CPAWiThin(Paul Ramsey、Darafei Praliaskouski)中的精度问题

#4076,减少在拓扑实施中使用GEOS(比约恩·哈特尔)

#4080,将外部栅格波段索引添加到ST_BandMetaData-将栅格提示部分添加到文档中,以了解有关栅格行为的信息(例如,Out-DB性能、最大打开文件数)

#4084:修复错误代码-关于BOX3D(Matthias Bay)正面/背面的注释

#4060、#4094,PostgreSQL JIT支持(Raúl Marín、Laurenz Albe)

#3960,ST_Centroid现在使用lwgeom_centroid(Darafei Praliaskouski)

#4027,删除lwgeom_geos中的重复代码(Darafei Praliaskouski,Daniel Baston)

#4115,修复了在并行计划(Raúl Marín)下创建具有错误属性值的MVT的错误。

#4120,ST_AsMVTGeom:使用平铺坐标(Raúl Marín)进行剪辑。

#4132,栅格上的ST_交集现在不会抛出TopologyException(Vinícius A.B.Schmidt,Darafei Praliaskouski)

#4177、#4180支持PostgreSQL 12开发分支(Laurenz Albe、Raúl Marín)

#4156,ST_Chaikin平滑:默认情况下也平滑多边形的起点/终点(Darafei Praliaskouski)

A.19. 版本2.4.5

发布日期:2018/09/12

这是一个错误修复和性能改进版本。

错误修复

#4031,传递给ST_CurveToLine(Sandro Santilli)的MaxError容差很大

#4058,修复大半径小圆弧线性化中的无限循环(Sandro Santilli)

#4071,ST_ClusterKMeans在Null/Empty上崩溃已修复(Darafei Praliaskouski)

#4079,确保ST_AsMVTGeom输出CW方向的多边形(Paul Ramsey)

#4070,对GEOS中断使用标准中断错误代码(Paul Ramsey)

#3980,延迟释放输入直到处理完成(Lucasvr)

#4090,PG 11支持(保罗·拉姆齐,劳尔·马林)

#4077,特定空几何图形情况的序列化失败(保罗·拉姆齐)

#3997,修复lwgeom_Medium中的错误并避免被零除(Raúl Marín)

#4093,qort回调(Yugr)结果不一致

#4081,某些情况下的地理数据()问题(保罗·拉姆齐)

#4105,Tarball的并行构建(Bas Couwenberg)

#4163,MVT:修复第一个几何体为空时的资源泄漏(Raúl Marín)

A.20. 版本2.4.4

发布日期:2018/04/08

这是一个错误修复和性能改进版本。

错误修复

#3055,[RASTER]ST_CLIP()在没有波段的栅格上使服务器崩溃(Regina OBE)

#3942,Geojson:不包含json-c >=0.13的私有头部(Björn Esser)

#3952,ST_Transform在并行模式下失败(Paul Ramsey)

#3978,修复从2.1或更早版本升级时的KNN(Sandro Santilli)

#4003,lwpoli_Construction_Circle:避免被零除(Raúl Marín Rodríguez)

#4004,构建btree索引时避免内存耗尽(Edmund Horner)

#4016,项目5.0.0支持(Raúl Marín Rodríguez)

#4017,lwgeom lexer内存损坏(Peter E)

#4020,从box3d投射到几何体现在返回正确连接的多面体曲面(Matthias Bay)

#4025,#4032关于时间上“几乎重叠”范围的错误答案(Paul Ramsey,Darafei Praliaskouski)

#4052,模式限定地理中的几个函数(Regina OBE)

#4055,ST_ClusterIntersecting丢弃SRID(Daniel Baston)

增强

#3946,对PgSQL 11的编译支持(Paul Ramsey)

#3992,使用pkg.m4中的PKG_PROG_PKG_CONFIG宏检测pkg-CONFIG(Bas Couwenberg)

#4044,PgSQL 11升级支持(Regina OBE)

A.21. 版本2.4.3

发布日期:2018/01/17

这是一个错误修复和性能改进版本。

错误修复和增强

#3713,支持恰好输出‘\’字符的编码

#3827,将配置默认设置为不进行中断测试,导致许多人的假阴性。(Regina OBE)在#3988中修订为符合标准(Greg Troxel)

#3930,32位平台上的最小边界圆问题

#3965,ST_ClusterK表示在初始化时会丢失一些集群(Darafei Praliaskouski)

#3956,Brin opClass对象未正确升级(Sandro Santilli)

#3982,ST_AsEncodedPolyline支持LINESTRING空和多点空(Darafei Praliaskouski)

#3975,ST_Transform在没有架构限定的情况下对SPATIAL_REF_SYS运行查询。导致了恢复问题。(保罗·拉姆齐)

A.22. 版本2.4.2

上映日期:2017/11/15

这是一个错误修复和性能改进版本。

错误修复和增强

#3917,修复zcta5加载

#3667,修复了地理ST_Segentize中的错误

#3926,添加缺失的2.2.6和2.3.4升级路径(Muhammad Usama)

A.23. 版本2.4.1

上映日期:2017/10/18

这是一个错误修复和性能改进版本。

错误修复和增强

#3864,修复BTREE运算符中的内存泄漏

#3869,使用“Gold”链接器修复版本

#3845,优雅地处理短尺问题

#3871,几何体CMP函数的性能调整

#3879,在某些弧形情况下被零除

#3878,标头中Signum的单一定义

#3880,TYPMOD_GET_SRID中的未定义行为

#3875,修复换班操作中的未定义行为

#3864,b树几何排序的性能改进

#3874,lw_Dist2d_pt_arc零除

#3882,具有负输入的Z字形中的未定义行为

#3891,POINTARRAY_TO_ENCODED_POLYINE中的未定义行为

#3895,格式错误的WKB输入引发错误

#3886,修复几何体细分中罕见的缺失长方体

#3907,为所有可能的Gbox字符串输出分配足够的空间(Raúl Marín Rodríguez)

A.24. 版本2.4.0

发布日期:2017/09/30

新特点

#3822,让postgis_Full_Version()还显示并检查构建脚本时所依据的PostgreSQL版本(Sandro Santilli)

#2411,ST_Reverse中的曲线支持(Sandro Santilli)

#2951,ST_Centroid for Geology(丹尼·格特)

#3788,允许postgis_Restore.pl处理目录式(-fd)转储(Roger Crew)

#3772,方向不可知ST_CurveToLine输出(Sandro Santilli/KKGeo)

#2464,支持MaxError容错的ST_CurveToLine(Sandro Santilli/KKGeo)

#3599,通过ST_AsGeobuf支持Geobuf输出(比约恩·哈特尔)

#3661,通过ST_AsMVT(Björn Harrtell/CartoDB)支持Mapbox矢量瓷砖输出

#3689,添加方位检查和强制功能(Dan Baston)

#3753,2D和ND点的Gist点球速度改进(Darafei Praliaskouski,Andrey Borodin)

#3677,ST_FrechetDistance(杉山新一)

大多数聚合(栅格和几何)以及标记为平行安全的所有稳定/不可变(栅格和几何)

#2249,ST_MakeEmptyCoverage for RASTER(David Zwarg,Anoomieli)

#3709,允许ST_Project的签名距离(Darafei Praliaskouski)

#524,涵盖了对多边形、线上线、线上点的地理支持(丹尼·格特)

增强功能和修复

对文档的许多更正和几个翻译几乎完成。安德烈亚斯·斯柴尔德,他对核心文件提供了许多更正。邮政地理信息系统日语翻译团队率先完成翻译工作。

支持PostgreSQL 10

对PostgreSQL 11的初步支持

#3645,避免从shapefile加载逻辑删除的记录

#3747,将ZIP4和ADDRESS_ALPANNUMERIC作为属性添加到Norm_Addy Tiger_Geocoder类型。

#3748,ADDRESS_STANDIZER查找表更新,因此PAGIC_NORAMIZE_ADDRESS更好地标准化缩写

#3647,使用GEOSNode更好地处理ST_Node中的节点(WoutGeraedts)

#3684,更新到EPSG寄存器v9(偶数路由)

#3830,修复不兼容类型的初始化( >=9.6)ADDRESS_STANDIZER

#3662,通过将DEBUG发送到stderr使shp2pgsql在调试模式下工作

#3405,修复了lwgeom_to_point中的内存泄漏

#3832,支持shp2pgsql中的宽整数字段为int8

#3841,btree地理中对空几何图形的确定性排序支持

#3844, Make = operator a strict equality test, and < > to rough "spatial sorting"

#3855,ST_AsTWKB内存和速度提升

突破性变化

已放弃对PostgreSQL 9.2的支持。

#3810、GEOS 3.4.0或更高版本的最低编译要求

大多数聚集体现在被标记为平行安全,这意味着大多数AGG必须被删除/重新创建。如果您的视图使用了PostGIS AGG,则需要在升级前删除并在升级后重新创建

#3578,ST_NumInteriorRings(Polygon Empty)现在返回0而不是NULL

当ST_DumpPoints在C++中重新实现时,在PostGIS 2.1.0之后不再需要_ST_DumpPoints

B-Tree index operators < = > changed to provide better spatial locality on sorting and have expected behavior on GROUP BY. If you have btree index for geometry or geography, you need to REINDEX it, or review if it was created by accident and needs to be replaced with GiST index. If your code relies on old left-to-right box compare ordering, update it to use << >> operators.

A.25. 版本2.3.3

发布日期:2017/07/01

这是一个错误修复和性能改进版本。

错误修复和增强

#3777,按异常分组,几何图形为空

#3711,将2.5D边添加到拓扑时出现方位角错误

#3726,dblatex的PDF手册为节目清单提供了花哨的引语(Mike Toews)

#3738,RASTER:在raster2pgsql中使用-s而不使用-Y转换栅格数据,而不是设置sRID

#3744,ST_SUBDIVE丢失倒置几何体的子部分(Darafei Praliaskouski Komzpa)

#3750,@and~运算符并不总是在几何和栅格函数中限定架构。导致恢复问题。(Axiom数据科学公司的Shane StClair)

#3682,pgsql2shp结果中布尔值的奇怪字段长度

#3701,避免pgsql2shp中的双引号问题

#3704,ST_AsX3D在空几何图形上崩溃

#3730,当ST_CLIP无法计算波段时,将ST_CLIP从错误更改为通知

A.26. 版本2.3.2

发布日期:2017/01/31

这是一个错误修复和性能改进版本。

错误修复和增强

#3418,9.5+中的KNN重新检查失败,索引返回的元组顺序错误

#3675,关系函数在某些情况下不使用索引

#3680,PostGIS升级脚本缺少针对视图的GRANT

#3683,从Postgres PG_Upgrade升级后无法更新postgis < 9.5至PG > 9.4

#3688,ST_AsLatLonText:循环分钟

A.27. 版本2.3.1

上映日期:2016/11/28

这是一个错误修复和性能改进版本。

错误修复和增强

#1973,st_conavehull()从gde返回有时为空的几何集合Fix

#3501,添加栅格约束最大范围超过大型表的数组大小限制

#3643,PostGIS不基于最新的OSX XCode

#3644,中断时死锁

#3650、标记ST_Extent、ST_3DExtent和ST_Mem*agg的功能为并行安全,因此它们可以并行化

#3652,收集时崩溃(MultiCurve())

#3656,修复从2.2或更低版本的聚合升级

#3659,使用错误的内存上下文创建扩展后定义的栅格GUC导致崩溃。(马内姆)

#3665,来自Julien Rouhaud(Dalibo)的Brin索引补丁中的索引损坏和内存泄漏

#3667,来自Hugo Mercier(奥斯兰迪亚)的地理ST_Segentize错误补丁

A.28. 版本2.3.0

发布日期:2016/09/26

这是一个新的功能版本,有新的功能,改进的性能,所有相关的错误修复,从PostGIS2.2.3,和其他好东西。

重要/突破性变化

#3466,从方框3D投射到几何体现在返回3D几何体(Dalibo的Julien Rouhaud)

#3396,ST_EstimatedExtent,抛出警告而不是错误(Regina OBE)

新特点

在postgis_Restore.pl(Christoph Motch-Tegeder)中添加对定制TOC的支持

在ST_PointN和ST_SetPoint(Rémi Cura)中添加对负索引的支持

添加地理ST_BUFFER的参数(Thomas Bonfort)

TopGeom_addElement、TopGeom_em Element(Sandro Santilli)

填充_拓扑_层(桑德罗·桑蒂利)

#454,ST_WRapX和lwgeom_wrapx(Sandro Santilli)

#1758,ST_Normize(Sandro Santilli)

#2236,shp2pgsql-d现在发出“DROP TABLE IF EXISTS”

#2259,ST_VoronoiPolygons和ST_VoronoiLines(Dan Baston)

#2841和#2996,使用Welzl算法(Dan Baston)的新的ST_MinimumBordingRadius和新的ST_MinimumBordingCircle实现(Dan Baston)

#2991,启用ST_Transform以使用PROJ.4文本(Mike Toews)

#3059,允许在ST_Expand(Dan Baston)中传递每个维度的参数

#3339,ST_GeneratePoints(Paul Ramsey)

#3362,ST_ClusterDBSCAN(Dan Baston)

#3364,ST_GeometricMedian(Dan Baston)

#3391,在ST_EstimatedExtent(Alessandro Pasotti)中增加表继承支持

#3424,ST_MinimumClearance(Dan Baston)

#3428,ST_Points(Dan Baston)

#3465,ST_ClusterKMeans(保罗·拉姆齐)

#3469,ST_MakeLine With MULTIPOINT(保罗·诺曼)

#3549,尽量支持PgSQL 9.6并行查询模式(Paul Ramsey,Regina OBE)

#3557,基于查询统计数据的几何函数成本(Paul Norman)

#3591,添加对Brin索引的支持。需要PostgreSQL 9.4以上版本。(第二象限的Giuseppe Broccolo,Dalibo的Julien Rouhaud和Ronan Dunklau)

#3496,使postgis不可重定位以安装扩展,函数中的架构限定调用(Regina OBE)应一次性解决扩展#3494、#3486、#3076

#3547,更新Tiger Geocode以支持Tiger 2016并同时支持http和ftp。

#3613,使用等长分段对地理进行分段(奥斯兰迪亚的雨果·梅西尔)

错误修复

PostGIS 2.2.3中的所有相关错误修复

#2841,ST_最小边界圆不包括原始

#3604,pgCommon/Makefile.in订单CFLAGS错误导致错误的liblwgeom.h(Greg Troxel)

性能增强

#75,增强到PIP短路(丹·巴斯顿)

#3383,避免在索引操作期间反序列化小几何图形(Dan Baston)

#3400,PIP例程的微小优化(丹·巴斯顿)

使向拓扑添加行成为可中断的(桑德罗·桑蒂利)

Mike Toews提供的文档更新

A.29. 版本2.2.2

发布日期:2016/03/22

这是一个错误修复和性能改进版本。

新特点

#3463,修复面折叠边更改时的崩溃

#3422,提高标准精度双系统(arm64、ppc64el、s390c、PowerPC等)上的ST_Split健壮性

#3427,将space_ref_sys更新到EPSG 8.8版

#3433,ST_ClusterIntersecting对于多点不正确

#3435,ST_AsX3D修复凹面几何图形的渲染

#3436,ptarray_CLONE_Depth中的内存处理错误

#3437,多点的ST_Intersects不正确

#3461,当有内边界和没有外边界时,ST_GeomFromKML崩溃Postgres

#3429,在某些平台上升级到2.3或从2.1可能会导致循环/挂起

升级后出现#3460,ST_ClusterWithing‘Tear Not Defined’(未定义容差)错误

#3490,栅格数据还原问题,实例化视图。脚本postgis_proc_set_earch_path.sql,rtpostgis_proc_set_search_path.sql请参阅http://postgis.net/docs/manual-2.2/RT_FAQ.html#faq_raster_data_not_restore

#3426,有趣架构上的失败点空测试

A.30. 版本2.2.1

发布日期:2016/01/06

这是一个错误修复和性能改进版本。

新特点

#2232,避免SVG舍入累积误差

#3321,修复拓扑加载中的性能回归

#3329,修复Topo_addPoint中的健壮性回归

#3349,修复postgis_topology脚本安装路径

#3351,在ST_RemoveIsoEdge(和LWT_RemIsoEdge)上设置端节点隔离

#3355,地理ST_Segentize具有几何边界框

#3359,修复拓扑几何定义中低id基元的丢失

#3360,_RASTER_CONSTRAINT_INFO_SCALE无效输入语法

#3375,重复移除采集点时崩溃(点)

#3378,修复了在存在多个拓扑的情况下层次拓扑几何的处理

#3380、#3402,在拓扑负载上抽取线路

#3388、#3410,修复ST_RemovePoints中缺少的端点

#3389,lwgeom_to_Geojson中的缓冲区溢出

#3390,编译postgis和postgis_topology扩展时,在阿尔卑斯Linux 3.2下编译时出现错误

#3393,ST_AREA NAN用于某些面

#3401,提高32位系统上的ST_Split健壮性

#3404,ST_ClusterWiThin后端崩溃

#3407,修复拆分面或边定义多个拓扑几何对象时发生的崩溃

#3411,不使用空间索引的集群函数

#3412,提高Topo Geo_addLinestring中捕捉步骤的健壮性

#3415,修复pkgsrc下的OSX 10.9版本

修复LWT_ChangeEdgeGeom[liblwgeom]中的内存泄漏

A.31. 版本2.2.0

上映日期:2015/10/07

这是一个新的功能版本,具有新的功能、改进的性能和其他好处。

新特点

Liblwgeom中的拓扑API(Sandro Santilli/Regione Toscana-Sita)

Liblwgeom中新的lwgeom_unaryUnion方法

Liblwgeom中新的lwgeom_linEmerge方法

Liblwgeom中新的lwgeom_is_Simple方法

#3169 ,添加SFCGAL 1.1支持:添加ST_3DDifference、ST_3DUnion、ST_Volume、ST_MakeSolid、ST_IsSolid(文森特·莫拉/奥斯兰迪亚)

#3169 ,ST_ApposateMeial Axis(Sandro Santilli)

ST_CPAWiThin(桑德罗·桑蒂利/无边界)

添加|=|运算符,支持CPA语义和PgSQL 9.5+的KNN(Sandro Santilli/无边界)

#3131 ,KNN对地理类型的支持(Paul Ramsey/CartoDB)

#3023 ,ST_ClusterIntersecting/ST_ClusterWiThin(Dan Baston)

#2703 ,所有几何体类型的精确KNN结果,也称为“KNN重新检查”(Paul Ramsey/CartoDB)

#1137 ,允许ST_RemoveRepeatedPoints中的容差值(Paul Ramsey/CartoDB)

#3062 ,允许将M因子传递给ST_Scale(Sandro Santilli/无边界)

#3139 ,ST_BORKING对角线(桑德罗·桑蒂利/无边界)

#3129 ,ST_IsValidTrajecary(Sandro Santilli/无边界)

#3128 ,ST_ClosestPointOfApproach(Sandro Santilli/无边界)

#3152 ,ST_DistanceCPA(桑德罗·桑蒂利/无边界)

索引键类型的规范输出

ST_SWAPCOMPANATES(桑德罗·桑蒂利/无边界)

#2918 ,使用测地学的Gegraph Lib函数(Mike Toews)

#3074 ,ST_SUBDIVE以分解大型几何体(Paul Ramsey/CartoDB)

#3040 ,基于KNN主旨指数的质心( < < - > > )n-D距离运算符(Sandro Santilli/无界)

Liblwgeom中断性接口(Sandro Santilli/CartoDB)

#2939 ,ST_ClipByBox2D(Sandro Santilli/CartoDB)

#2247 、ST_retile和ST_CreateSurvey:创建数据库中的栅格总览(Sandro Santilli/Vizzuality)

#899 ,-m shp2pgsql属性名称映射-m开关(Regina OBE/Sandro Santilli)

#1678 ,添加了GUC postgis.gdal_datapath以指定GDAL配置变量GDAL_DATA

#2843 ,支持栅格导入的重新投影(Sandro Santilli/Vizzuality)

#2349 ,支持Encode_Polyline输入/输出(Kashif Rasul)

#2159 ,从postgis_Full_Version()报告libjson版本

#2770 ,ST_MemSize(栅格)

添加postgis_noop(栅格)

添加了缺少的ST_TPI()、ST_tri()和ST_Rough()变体

添加了GUC postgis.gdal_ENABLED_DRIVERS以指定GDAL配置变量GDAL_SKIP

添加了GUC postgis.able_outdb_raster以启用对具有数据库外波段的栅格的访问

#2387 ,ADDRESS_STANDIZER EXTENSION作为PostGIS的一部分(Stephen Woodbridge/imaptools.com、Walter Sclair、Regina OBE)

#2816 ,ADDRESS_STANDUIZER_DATA_US扩展提供了ADDRESS_STANDIZER的参考Lex、GAZ和规则(Stephen Woodbridge/imaptools.com、Walter Sclair、Regina OBE)

#2341 ,ST_MapAlgebra的新掩码参数

#2397 ,在shapefile加载器中自动读取编码信息

#2430 ,ST_ForceCurve

#2565 、ST_SummaryStatsAgg()

#2567 、ST_CountAgg()

#2632 ,ST_AsGML()支持曲线要素

#2652 ,将--升级路径开关添加到run_test.pl

#2754 ,sfcga包装为扩展名

#2227 ,Visvalingam-Whyatt算法简化ST_SimplifyVW,ST_SetEffectiveArea(Nicklas Avén)

编码和解码TWKB ST_AsTWKB、ST_GeomFromTWKB(Paul Ramsey/Nicklas Avén/CartoDB)的函数

增强

#3223 ,将MemcMP短路添加到ST_EQUALS(Daniel Baston)

#3227 ,Tiger Geocode升级为支持Tiger 2015人口普查

#2278 ,使liblwgeom在次要版本之间兼容

#897 ,ST_AsX3D支持地理坐标和系统“GD”“WE”翻转x/y轴的能力(使用选项=2,3)

ST_Split:允许按多线、多点和(多)面边界拆分线

#3070 ,简化几何图形类型约束

#2839 ,实现了函数索引的选择性估计器,加快了对栅格表的空间查询。(Sandro Santilli/Vizzuality)

#2361 ,向RASTER_COLUMNS视图添加了SPATIAL_INDEX列

#2390 ,pgsql2shp的测试套件

#2527 ,向raster2pgsql添加了-k标志以跳过检查波段是否为NODATA

#2616 ,减少拓扑构建和导出过程中的文本投射

#2717 ,支持复合曲线的起点、终点、点数、点数

#2747 ,添加对GDAL 2.0的支持

#2754 ,SFCGAL现在可以使用CREATE扩展名(Vincent Mora@Oslandia)安装

#2828 ,将ST_Entaine(栅格)从SQL转换为C

#2829 ,如果几何完全包含栅格且未指定NODATA,则为快捷方式ST_CLIP(栅格

#2906 ,更新Tiger地理编码器以处理Tiger 2014数据

#3048 ,加快几何简化(J.Santana@CartoDB)

#3092 ,具有多个表的GEOMETRY_COLUMNS的性能较慢

A.32. 版本2.1.8

上映日期:2015-07-07

这是一个关键的错误修复版本。

错误修复

#3159,不要在ST_Affine上强制BBox缓存

#3018,GROUP BY GEOGORY有时返回重复行

#3084,shp2pgsql-设置特定系统区域设置时数字格式非法

#3094,格式错误的GeoJSON输入崩溃后端

#3104,st_asgml在ID字段中引入随机字符

#3155,在进行卸载时删除liblwgeom.h

#3177,GSerialized_IS_EMPTY无法处理嵌套的空案例

修复ST_LineLocatePoint中的崩溃

A.33. 版本2.1.7

发布日期:2015-03-30

这是一个关键的错误修复版本。

错误修复

#3086,ST_DumpValues()在清理无效波段索引时后端崩溃

#3088,不要(重新)在liblwgeom.h中定义strCasestr

#3094,格式错误的GeoJSON输入崩溃后端

A.34. 版本2.1.6

上映日期:2015-03-20

这是一个错误修复和性能改进版本。

增强

#3000,确保边分割和修复算法使用索引

#3048,加速几何简化(J.Santana@CartoDB)

#3050,加快几何类型读取(J.Santana@CartoDB)

错误修复

#2941,允许SRID不是4326的地理列

#3069,小物件在箱子里不适当地起毛了

#3068,让postgis_tymod_dims为不受约束的dims返回NULL

#3061、JSON、GML、GML ST_GeomFrom*函数中允许重复点

#3058,修复ND-Gist拾取拆分方法以在最佳平面上拆分

#3052,Make运算符 < - > 和 < # > 适用于PostgreSQL < 9.1

#3045,修复中的维度混淆 & & & 操作员

#3016,允许注销损坏的拓扑层

#3015,避免Topology中的异常汇总

#3020,ST_AddBand out-db错误,其中高度使用宽度值

#3031,允许恢复转储为空的几何(点)表

A.35. 版本2.1.5

上映日期:2014/12/18

这是一个错误修复和性能改进版本。

增强

#2933 ,加速构建大型多几何对象

错误修复

#2947 ,修复了单组件集合输入的lwgeom_make_valid中的内存泄漏

#2949 ,修复曲线输入的lwgeom_minDistance2d中的内存泄漏

#2931 ,框表示区分大小写

#2942 ,支持PostgreSQL 9.5

#2953 ,当Z/M值为极值时不会生成2D统计信息

#3009 ,地理类型转换可能会影响基础元组

A.36. 版本2.1.4

上映日期:2014-09-10

这是一个错误修复和性能改进版本。

增强

#2745 ,加速针对点的ST_SIMPLIZE调用

#2747 ,支持GDAL 2.0

#2749 ,使rtpostgis_upgrade_20_21.sql酸

#2811 ,在加载shapefile/栅格时不要指定索引名称

#2829 ,如果几何完全包含栅格且未指定NODATA,则为快捷方式ST_CLIP(栅格

#2895 ,将ST_ConvexHull(栅格)的成本提高到300以获得更好的查询方案

错误修复

#2605 ,Armel:_ST_Covers()为孔中的点返回TRUE

#2911 ,修复比例为1/-1和偏移为0/0的栅格的ST_RESALE/ST_RESAMPLE/ST_RESIZE上的输出比例。

修复ST_UNION(栅格)中的故障

#2704 ,ST_GeomFromGML()不能与gml:pos(Even Roualt)数组一起正常工作

#2708 如果未指定架构,则更新几何图形不会更新sRID检查。马克·詹森的补丁

#2720 ,lwpolAdd_ring应在重新锁定后更新最大环

#2759 ,修复了postgis_Restore.pl对嵌入SQL注释的多行对象注释的处理

#2774 ,修复ptarray_Calculate_Gbox_Geodetic中的未定义行为

修复ST_MakeValid中的潜在内存故障

#2784 ,修复了对--with-sfcga伪参数的处理

#2772 ,raster_getBandPath(ST_BandPath)中的提前内存释放

#2755 ,修复针对所有版本的SFCGAL的回归测试

#2775 ,lwline_from_lwmpoint泄漏内存

#2802 ,ST_MapAlgebra检查有效的回调函数返回值

#2803 ,ST_MapAlgebra不处理任何用户参数和严格的回调函数

#2834 、ST_ESTIMATED_EXTEND和MIXEDCASE表名(回归错误)

#2845 ,从ST_AddPoint创建的错误几何

#2870 ,BINARY INSERT INSERT到GEOGORY列结果插入几何

#2872 ,制作安装版本文档(Greg Troxell)

#2819 ,在Centos5/Solaris上查找isfined或替换

#2899 ,地理编码限制%1未返回最佳答案(Tiger地理编码器)

#2903 ,无法在FreeBSD上编译

#2927 REVERSE_Geocode未填充方向前缀(Tiger Geocoder)删除已弃用的ST_Line_Locate_Point

A.37. 版本2.1.3

上映日期:2014/05/13

这是一个错误修复和安全版本。

重要变化

从该版本开始,默认情况下禁用脱机栅格访问和使用GDAL驱动程序。

引入了一个环境变量来启用特定的GDAL驱动程序:POSTGIS_GDAL_ENABLED_DRIVERS。默认情况下,所有GDAL驱动程序都处于禁用状态

引入环境变量以允许启用数据库外栅格波段:POSTGIS_ENABLE_OUTDB_RASTERS。默认情况下,禁用Out-db栅格波段

必须为PostgreSQL进程设置环境变量,并决定整个集群的行为。

错误修复

#2697 ,无效的GeoJSON面输入导致服务器进程崩溃

#2700 ,修复了具有空行的高维数据集的转储

#2706 ,ST_DumpPoints of Empty几何体使服务器崩溃

A.38. 版本2.1.2

发布日期:2014/03/31

这是一个错误修复版本,解决了自2.1.1版本以来一直存在的问题。

错误修复

#2666 ,如果找不到任何SQL预处理器,则在配置时出错

#2534 ,st_Distance为大型地理区域返回不正确的结果

#2539 ,在json/json.h之前检查json-c/json.h的存在/可用性

#2543 ,来自简单查询的无效连接选择性错误

#2546 ,带有字符串坐标的GeoJSON解析不正确

#2547 ,修复分层拓扑学的ST_SIMPLIZE(拓扑几何)

#2552 ,修复ST_AsPNG、ST_AsTIFF和ST_AsJPEG中的空栅格处理

#2555 ,修复了ST_Reclass的范围参数的解析问题

#2556 ,地理ST_Intersects结果取决于插入顺序

#2580 ,不允许在同一数据库中安装两次postgis。

#2589 ,删除不必要的空指针的使用

#2607 ,不能在一个进程中打开超过1024个out-db文件

#2610 ,确保人脸分割算法使用边缘索引

#2615 ,EstimatedExtent(因此,基础统计信息)收集了错误的BBox

#2619 ,GeoJSON面中的空环数组导致崩溃

#2634 ,球体距离编码中的回归

#2638 ,M个几何上的地理距离有时是错误的

#2648 #2653 ,修复了当“topology”不在搜索路径中时的拓扑功能

#2654 ,从拓扑中丢弃不推荐使用的呼叫

#2655 ,让没有拓扑权限的用户调用postgis_Full_Version()

#2674 ,修复栅格上缺少运算符=和hash_raster_ops opclass的问题

#2675 #2534 #2636 #2634 #2638 ,地理距离问题与树的优化

增强

#2494 ,避免在GIST索引中复制备忘录(Hayamiz)

#2560 ,软升级:避免删除/重新创建未更改的聚合

A.39. 版本2.1.1

发布日期:2013/11/06

这是一个错误修复版本,解决了自2.1.0版本以来一直存在的问题。

重要变化

#2514 ,将栅格许可从GPL v3+更改为v2+,允许将PostGIS扩展作为GPLv2进行分发。

错误修复

#2396 ,使回归测试更加不受字符顺序限制

#2434 ,修复极少数情况下的ST_交集(geog,geog)回归

#2454 ,修复ST_PixelAsXXX函数关于EXCLUDE_NODATA_VALUE参数的行为

#2489 ,修复了从2.0升级后留下的过时函数签名

#2525 ,修复嵌套集合中SRID的处理

#2449 ,修复索引构建中的潜在无限循环

#2493 ,修复传递空栅格时ST_DumpValues的行为

#2502 ,修复postgis_topology_脚本_Installed()安装方案

#2504 ,修复虚假pgsql2shp调用上的段错误

#2512 ,在RASTER_COLUMNS和RASTER_OVERVIEWS中支持外部表和实例化视图

增强

#2478 ,支持Tiger 2013

#2463 ,支持对弧形几何图形进行精确的长度计算

A.40. 版本2.1.0

发布日期:2013/08/17

这是一个次要版本,解决了错误修复以及自2.0.3版本以来解决问题的性能和功能增强。如果您要从2.0+升级,则只需要软升级。如果您要从1.5或更早版本升级,则需要进行硬升级。

重要/突破性变化

#1653 ,从ST_ResSample(栅格)中删除了sRID参数,并且带有参考栅格的变体不再应用参考栅格的SRID。

#1962 ST_Segentize-由于引入了地理支持,结构: SELECT ST_Segentize(‘LINESTRING(1 2,3 4)’,0.5); 将导致二义性函数错误

#2026 ,ST_UNION(栅格)现在合并所有栅格的所有波段

#2089 ,liblwgeom:lwgeom_set_handters取代了lwgeom_init_allocator。

#2150 ,Regular_BLOCKING不再是一种约束。现在,RASTER_COLUMNS中的同名列将检查是否存在SPISALLY_UNIQUE和COVERAGE_TILE约束

ST_Intersects(栅格、几何图形)的行为方式与ST_Intersects(几何图形、栅格)相同。

ST_SetValue(栅格)的点变量以前不检查输入几何图形和栅格的SRID。

ST_Hillshade参数的方位角和高度现在以度为单位,而不是弧度。

ST_Slope和ST_Aspect以度为单位返回像素值,而不是以弧度为单位。

#2104 ST_World2RasterCoord、ST_World2RasterCoordX和ST_World2RasterCoordY重命名为ST_WorldToRasterCoord、ST_WorldToRasterCoordX和ST_WorldToRasterCoordY。ST_Raster2WorldCoord、ST_Raster2WorldCoordX和ST_Raster2WorldCoordY重命名为ST_RasterToWorldCoord、ST_RasterToWorldCoordX和ST_RasterToWorldCoordY

ST_Estimated_Extent已重命名为ST_EstimatedExtent

ST_Line_Interpolate_Point重命名为ST_LineInterpolatePoint

ST_Line_子字符串已重命名为ST_LineSubstring

ST_Line_Locate_Point重命名为ST_LineLocatePoint

ST_Force_XXX重命名为ST_ForceXXX

ST_MapAlgebraFctNgb和ST_MapAlgebraFct的1和2栅格变体。改用ST_MapAlgebra

ST_MapAlgebraExpr的1和2个栅格变体。改用ST_MapAlgebra的表达式变体

新特点

-有关新功能的完整列表,请参阅http://postgis.net/docs/manual-2.1/PostGIS_Special_Functions_Index.html#NewFunctions_2_1

#310 ,ST_DumpPoints转换为C函数(Nathan Wagner),速度更快

#739 ,UpdateRasterSRID()

#945 、改进的连接选择性、N-D选择性计算、用户可访问的选择性和用于测试的统计读取器功能(Paul Ramsey/OpenGeo)

带有拓扑几何体的ToTopGeom(Sandro Santilli/Vizzuality)

ClearTopoGeom(Sandro Santilli/Vizzuality)

ST_Segentize(地理)(Paul Ramsey/OpenGeo)

ST_Delaunay三角形(Sandro Santilli/Vizzuality)

ST_NearestValue,ST_Neighborhood(Bborie Park/加州大学戴维斯分校)

ST_PixelAsPoint,ST_PixelAsPoints(Bborie Park/UC Davis)

ST_PixelAsCentroid,ST_PixelAsCentroid(Bborie Park/UC Davis)

ST_Raster2WorldCoord,ST_World2RasterCoord(Bborie Park/UC Davis)

其他栅格/栅格空间关系函数(ST_CONTAINS、ST_ContainsProperly、ST_Coverers、ST_CoveredBy、ST_Disjotic、ST_Overlaps、ST_Touches、ST_Withing、ST_DWiThin、ST_DFullyWiThin)(Bborie Park/UC Davis)

添加了ST_SetValues()的数组变体,以在一次调用中设置一个波段的多个像素值(Bborie Park/UC Davis)

#1293 ,ST_RESIZE(栅格)以根据宽度/高度调整栅格大小

#1627 ,将Tiger_Geocoder打包为PostgreSQL扩展

#1643 #2076 ,升级Tiger地理编码器以支持加载由Hunter Systems Group资助的Tiger 2011和2012(Regina OBE/Paragon Corporation)

对ST_MakeValid的地理测量收集支持(Sandro Santilli/Vizzuality)

#1709 ,ST_NotSameAlignmentReason(栅格,栅格)

#1818 ,ST_GeomFromGeoHash and Friends(Jason Smith(暗熊猫))

#1856 ,首选编号公路名称的反向地理编码器评级设置

ST_PixelOfValue(Bborie Park/UC Davis)

向/从PostgreSQL地理类型(点/路径/多边形)进行转换。

添加了ST_SetValues()的geomval数组变量,以在一次调用中使用一组几何图形和相应的值设置波段的多个像素值(Bborie Park/UC Davis)

ST_Tile(栅格)将栅格分解为平铺(Bborie Park/UC Davis)

#1895 ,新的r-树节点分裂算法(Alex Korotkov)

#2011 ,ST_DumpValues将栅格输出为数组(Bborie Park/UC Davis)

#2018 ,ST_Distance支持CircularString、CurvePolygon、MultiCurve、MultiSurface、CompoundCurve

#2030 ,n栅格(和n波段)ST_MapAlgebra(Bborie Park/UC Davis)

#2193 ,使用PAGC解析器作为老虎规格化器的替代(Steve Woodbridge,Regina OBE)

#2210 ,ST_MinConvexHull(栅格)

Liblwgeom中的lwgeom_from_Geojson(Sandro Santilli/Vizzuality)

#1687 ,ST_SIMPLIZY FOR TOPO几何体(Sandro Santilli/Vizzuality)

#2228 ,Topo几何图形的Topo JSON输出(Sandro Santilli/Vizzuality)

#2123 ,ST_FromGDALRaster

#613 ,ST_SetGeoReference使用数值参数而不是文本

#2276 ,ST_AddBand(栅格)变体,用于数据库外波段

#2280 ,ST_摘要(栅格)

#2163 ,ST_TPI用于栅格(纳撒尼尔·克莱)

#2164 ,ST_tri表示栅格(纳撒尼尔·克莱)

#2302 ,栅格的ST_粗糙度(纳撒尼尔·克莱)

#2290 ,ST_ColorMap(栅格)以生成RGBA波段

#2254 ,添加SFCGAL后端支持。(通过Postgis.Backend var进行后端选择)通过GEOS或SFCGAL提供的功能:ST_Intersects、ST_3DIntersects、ST_Intersects、ST_Area、ST_Distance、ST_3DDistance仅在SFCGAL后端提供的新功能:ST_3DIntersects、ST_Tesselate、ST_3DArea、ST_Extrude、ST_ForceLHR ST_Orientation、ST_Minkowski、ST_StraightSkeleon postgis_sfcals_Version PostGIS中提供的新功能:ST_ForceSFS(Olivier Courtin和Hugo Mercier/Oslandia)

增强

有关新增功能和功能改进的详细信息,请参阅 Section 15.12.9, “PostGIS Functions new or enhanced in 2.1”

更快的栅格ST_UNION、ST_CLIP和更多函数添加操作

对于几何/地理,更好的规划器选择性和更多的功能。

#823 ,Tiger地理编码器:减少对LOADER_GENERATE_SCRIPT下载部分的贪婪

#826 ,raster2pgsql不再默认为填充平铺。FLAG-P可用于填充瓷砖

#1363 ,ST_AddBand(栅格,...)用C重写的数组版本

#1364 ,ST_UNION(栅格,...)用C++重写的聚合函数

#1655 ,ST_Slope参数的其他缺省值

#1661 ,添加ST_SameAlign的聚合变量

#1719 ,添加对Point和GeometryCollection ST_MakeValid输入的支持

#1780 ,支持地理上的ST_GeoHash

#1796 ,地理距离计算的性能大幅提升

#1802 ,改进了功能中断性。

#1823 ,在ST_AsGML中添加参数以将id列用于GML 3输出(从GML 3.2.1起成为必填项)

#1856 ,Tiger地理编码器:首选编号公路名称的反向地理编码器评级设置

#1938 ,重构基本ST_AddBand,在一次调用中添加多个新频段

#1978 ,计算闭合圆弧(圆)的长度时回答错误

#1989 ,将输入几何处理为仅与要裁剪的栅格相交

#2021 ,向ST_UNION(栅格,...)添加了多波段支持聚合函数

#2006 ,更好地支持极点和日期线上的ST_Area(地理)

#2065 ,ST_Clip(栅格,...)现在是一个C函数

#2069 ,将参数添加到ST_Tile(栅格)以控制切片的填充

#2078 ,ST_Slope、ST_Aspect和ST_HillShade的新变体提供了在Coverage中处理切片的解决方案

#2097 ,为ST_UNION(栅格)添加了范围统一类型选项

#2105 ,添加了用于将输出与参考栅格对齐的ST_Transform(栅格)变量

#2119 、传递给ST_ResSample()、ST_Resample()、ST_Reskew()和ST_SnapToGrid()的栅格不再需要SRID

#2141 ,当约束无法添加到栅格列时,输出更加冗长

#2143 ,更改了栅格的块大小约束以允许多个值

#2148 ,为栅格添加了Coverage_Tile约束

#2149 ,为栅格添加了SPACE_UNIQUE约束

Topology摘要输出现在包括未注册的层以及从其自然层中丢失的Topo Geometry对象的计数。

ST_HillShade()、ST_Aspect()和ST_Slope()有一个新的可选参数,用于在运行操作之前对NODATA像素进行内插。

ST_SetValue(栅格)的点变量现在是ST_SetValues(Rast)的geomval变量的包装。

在核心API和加载器中正确支持栅格波段的isnodata标志。

ST_Aspect和ST_HillShade参数的其他缺省值

#2178 ,ST_摘要现在使用[S]标志通告已知SR_ID的存在

#2202 ,将libjson-c设置为可选(--不带-json配置开关)

#2213 ,添加支持libjson-c 0.10+

#2231 ,raster2pgsql支持使用-n对文件名列进行用户命名

#2200 ,ST_UNION(栅格,uniontype)合并所有栅格的所有波段

#2264 ,postgis_Restore.pl支持在自定义模式中使用postgis恢复到数据库

#2244 ,如果栅格具有超出数据库的波段,则在更改栅格的地理配准时发出警告

#2222 ,添加参数OutAsIn以标记ST_AsBinary是否应将Out-db波段作为In-db波段返回

修复

#1839 ,在raster2pgsql中处理GeoTIFF中的子数据集。

#1840 ,修复了何时计算raster2pgsql中的瓦片数量的逻辑。

#1870 ,将文档与栅格的ST_Intersects的实际行为对齐

#1872 ,修复ST_ApproxSummarystats以防止被零除

#1875 ,ST_SummaryStats在count为零时为除count以外的所有参数返回NULL

#1932 ,修复索引表空间的语法的raster2pgsql

#1936 ,CurvePolygon上的ST_GeomFromGML导致服务器崩溃

#1939 ,删除自定义数据类型:摘要统计信息、直方图、分位数、值计数

#1951 ,删除零长度行字符串上的崩溃

#1957 ,ST_Distance到单点线串返回NULL

#1976 ,地理点环码经过全面检查,可靠性更高

#1981 ,清理导致GCC 4.6+警告的未使用变量

#1996 ,支持点在GeoJSON输出中为空

#2062 ,提高距离计算的性能

#2057 ,修复了raster2psql到libpq的链接问题

#2077 ,修复了从ST_Hillshade()返回的错误值

#2019 ,ST_FlipOrganates不更新BBox

#2100 ,ST_AsRaster可能不会返回指定像素类型的栅格

#2126 ,更好地处理ST_ConvexHull()中的空栅格

#2165 ,ST_NumPoints使用CircularString进行回归失败

#2168 ,ST_Distance并不总是可交换的

#2182 ,修复了没有SRID和ST_RESIZE的outdb栅格的问题

#2188 ,修复了从GDAL数据集中复制数据时导致问题的函数参数值溢出

#2198 ,修复了在ST_Tile()中生成数据库外栅格的波段时使用的错误尺寸

#2201 ,ST_GeoHash边界错误

#2203 ,更改了将具有未知SRID和默认地理变换的栅格传递到GDAL Warp API时的处理方式

#2215 ,修复了隐式索引名称冲突的栅格排除约束

#2251 ,修复了使用默认地理变换矩阵重新缩放栅格时的错误维度

#2133 ,修复ST_MapAlgebra表达式变量中的性能回归

#2257 ,Gbox变量在使用空几何进行测试时未初始化

#2271 ,防止平行制作栅格

#2282 ,修复调试模式下对未定义函数nd_stats_to_grid()的调用

#2307 ,ST_MakeValid输出的几何无效

#2309 ,在尝试获取SRS信息时删除令人困惑的信息消息

#2336 ,FIPS 20(KS)导致通配符扩展wget所有文件

#2348 ,提供从2.0到2.1的栅格升级路径

#2351 ,地理位置之间的距离错误

#2359 ,修复了添加概览约束时对架构名称的处理

#2371 ,支持1位以上微码的GEOS版本

#2383 ,从栅格警告消息中删除\‘的不安全使用

#2384 ,ST_Neighborhood的变量数据类型不正确

已知问题

#2111 、栅格波段只能引用Out-db栅格的前256个波段

A.41. 版本2.0.5

发布日期:2014/03/31

这是一个错误修复版本,解决了自2.0.4版本以来一直存在的问题。如果您使用的是PostGIS 2.0+,则需要进行软升级。对于PostGIS 1.5或更低版本的用户,需要进行硬升级。

错误修复

#2494 ,避免GIST索引中的MemcPy

#2502 ,修复postgis_topology_脚本_Installed()安装方案

#2504 ,修复虚假pgsql2shp调用上的段错误

#2528 ,修复ST_Split/lwline_Split_by_line中的内存泄漏

#2532 ,添加缺少的栅格/几何交换符

#2533 ,删除重复的签名

#2552 ,修复ST_AsPNG、ST_AsTIFF和ST_AsJPEG中的空栅格处理

#2555 ,修复了ST_Reclass的范围参数的解析问题

#2589 ,删除不必要的空指针的使用

#2607 ,无法打开超过1024个正在处理的out-db文件

#2610 ,确保人脸分割算法使用边缘索引

#2619 ,GeoJSON多边形中的空环形数组导致崩溃

#2638 ,M个几何上的地理距离有时是错误的

重要变化

# #2514 ,将栅格许可从GPL v3+更改为v2+,允许将PostGIS扩展作为GPLv2进行分发。

A.42. 版本2.0.4

发布日期:2013/09/06

这是一个错误修复版本,解决了自2.0.3版本以来一直存在的问题。如果您使用的是PostGIS 2.0+,则需要进行软升级。对于PostGIS 1.5或更低版本的用户,需要进行硬升级。

错误修复

#2110 ,空和原点上的点之间的相等运算符

允许使用Topo Geo_addPoint以精确距离添加点

#1968 ,修复toTopGeom返回中缺少的边

#2165 ,ST_NumPoints使用CircularString进行回归失败

#2168 ,ST_Distance并不总是可交换的

#2186 ,gui进度条更新太频繁

#2201 ,ST_GeoHash边界错误

#2257 ,Gbox变量在使用空几何进行测试时未初始化

#2271 ,防止平行制作栅格

#2267 ,分析表中的服务器崩溃

#2277 ,潜在的分段故障已删除

#2307 ,ST_MakeValid输出的几何无效

#2351 ,地理位置之间的距离错误

#2359 ,不正确地处理概述约束的架构

#2371 ,支持1位以上微码的GEOS版本

#2372 ,无法解析空格填充的KML坐标

修复安装了系统范围的liblwgeom的版本

#2383 ,修复警告消息中\‘的不安全使用

#2410 ,确定共线曲线的分段

#2412 ,ST_LineToCurve支持折点少于4的线

#2415 ,ST_MULTI支持组合曲线和曲线多点

#2420 ,ST_LineToCurve:至少需要8条边才能定义完整的圆

#2423 ,ST_LineToCurve:要求所有弧边形成相同的角度

#2424 ,ST_CurveToLine:在MULTICURVE中添加对COMPOUNDCURVE的支持

#2427 ,确保保留ST_CurveToLine上的曲线的第一个点

增强

#2269 ,避免在分析时无用地去除完整几何图形

已知问题

#2111 、栅格波段只能引用Out-db栅格的前256个波段

A.43. 版本2.0.3

发布日期:2013/03/01

这是一个错误修复版本,解决了自2.0.2版本以来一直存在的问题。如果您使用的是PostGIS 2.0+,则需要进行软升级。对于PostGIS 1.5或更低版本的用户,需要进行硬升级。

错误修复

#2126 ,更好地处理ST_ConvexHull()中的空栅格

#2134 ,确保在将SRS传递给GDAL函数之前对其进行处理

修复liblwgeom中的各种内存泄漏

#2173 ,修复了拆分具有自己的顶点的直线时也会影响拓扑构建的稳健性问题( #2172 )

#2174 ,修复错误函数lwpoly_free()的用法

#2176 ,修复ST_ChangeEdgeGeom的健壮性问题

#2184 ,正确复制具有Z值的拓扑

Postgis_Restore.pl支持转储中的混合大小写几何列名

#2188 ,修复了从GDAL数据集中复制数据时导致问题的函数参数值溢出

#2216 ,在多面GeoJSON解析中出现更多内存错误(带洞)

修复GeoJSON解析器中的内存泄漏

增强

#2141 ,当约束无法添加到栅格列时,输出更加冗长

加速ST_ChangeEdgeGeom

A.44. 版本2.0.2

发布日期:2012/12/03

这是一个错误修复版本,解决了自2.0.1版本以来一直存在的问题。

错误修复

#1287 ,在这些情况下,丢弃“gist_geometryops”中断了几个客户机包Legacy_gist.sql

#1391 ,从1.5升级期间出错

#1828 ,对ST_D的选择性估计较差

#1838 ,导入老虎/行数据时出错

#1869 ,ST_AsBinary不是唯一添加到Legacy_Minor/Legacy.sql脚本的

#1885 ,TERGER2010中的选项卡块表中缺少字段

#1891 ,在构建liblwgeom时使用LDFLAGS环境

#1900 ,为大端系统修复pgsql2shp

#1932 ,修复了设置索引表空间的无效语法的raster2pgsql

#1936 ,CurvePolygon上的ST_GeomFromGML导致服务器崩溃

#1955 、ST_ModEdgeHeal和ST_NewEdgeHeal用于双连通边

#1957 ,ST_Distance到单点线串返回NULL

#1976 ,地理点环码经过全面检查,可靠性更高

#1978 ,计算闭合圆弧(圆)长度的错误答案

#1981 ,删除未使用但设置的变量,如GCC 4.6+所示

#1987 ,恢复ST_SIMPLIZE的1.5.x行为

#1989 ,将输入几何处理为仅与要裁剪的栅格相交

#1991 ,在PostgreSQL 9.2上进行地理编码非常慢

#1996 ,支持点在GeoJSON输出中为空

#1998, Fix ST_{Mod,New}EdgeHeal joining edges sharing both endpoints

#2001 如果几何实际上不包含弧,则ST_CurveToLine不起作用

#2015 ,ST_IsEmpty(‘Polygon(Empty)’)返回FALSE

#2019 ,ST_FlipOrganates不更新BBox

#2025 ,修复Topo Geo_AddLineString处的侧位置冲突

#2026 ,提高距离计算的性能

#2033 ,修复将拆分点添加到2.5D拓扑中

#2051 ,修复ST_AsGeoJSON输出中的超出精度

#2052 ,修复lwgeom_to_Geojson中的缓冲区溢出

#2056 ,修复了ST_SetValue()中缺少栅格和几何的SRID检查的问题

#2057 ,修复了raster2psql到libpq的链接问题

#2060 ,修复GetTopoGeomElement数组的“Dimension”检查违规

#2072 ,删除了阻止ST_Intersects(栅格)处理数据库外波段的过时检查

#2077 ,修复了ST_Hillshade(栅格)中的错误答案

#2092 ,ST_GeomFromKML的命名空间问题,libxml 2.8+的ST_GeomFromGML

#2099 ,修复ST_OffsetCurve中异常的双重释放

#2100 ,ST_AsRaster()可能不会返回指定像素类型的栅格

#2108 ,确保ST_Line_Interpolate_Point始终返回点

#2109 ,确保ST_Centroid始终返回点

#2117 ,确保ST_PointOnSurface始终返回点

#2129 ,修复带有集合输入的ST_HORMINIZE输出中的SRID

#2130 ,修复多面GeoJson解析中的内存错误

更新Maven JAR的URL

增强

#1581 ,ST_Clip(栅格,...)如果源栅格中的相应波段没有NODATA,则不再对波段施加NODATA

#1928 ,接受GML输入多Geom输入(Kashif Rasul和Shoaib Burq/SpacialDB)中的数组属性

#2082 ,在拓扑边表的Start_Node和End_Node上增加索引

#2087 ,加速拓扑。使用递归CTE获取RetRingEdges

A.45. 版本2.0.1

发布日期:2012/06/22

这是一个错误修复版本,解决了自2.0.0版本以来一直存在的问题。

错误修复

#1264 ,修复st_din(geog,geog,0)。

#1468 Shp2pgsql-gui表列模式被移位

#1694 ,用叮当声修缮建筑。(文斯)

#1708 ,改进PostGIS 2.0之前备份的恢复。

#1714 ,更强健地处理高拓扑容错。

#1755 ,ST_Gegraph_FromText支持更高的维度。

#1759 ,在启用了栅格的数据库中加载转换后的shapefile。

#1761 ,在raster2pgsql中处理NetCDF、HDF4和HDF5中的子数据集。

#1763 ,topology.toTopoGeom与自定义Search_PATH一起使用。

#1766 ,不要让ST_RemEdge*破坏外围拓扑几何对象。

#1774 ,在将边几何图形设置为无效边几何图形时出现更明显的错误。

#1775 、ST_ChangeEdgeGeom与2顶点目标的碰撞检测。

#1776 ,修复ST_SymDifference(Empty,geom)以返回geom。

#1779 ,安装SQL注释文件。

#1782 ,修复了栅格中的空间参考字符串处理。

#1789 ,修正了ValiateTopology中错误的边节点交叉报告。

#1790 ,修复为TopoGeom对重复基本体的处理。

#1791 ,使用非常接近但不同的点修复ST_Azimuth。

#1797 ,FIX(ValiateTopology(Xxx)).*语法调用。

#1805 ,将900913 SRID条目放回。

#1813 ,仅显示元数据表中的可读关系。

#1819 ,修复了ST_World2RasterCoord和ST_Raster2WorldCoord变量的浮点问题。

#1820 在9.2beta1上编译。

#1822 ,PostgreSQL 9.2beta1上的拓扑负载。

#1825 ,修复准备好的几何缓存查找

#1829 ,修复GeoJSON解析器中未初始化的读取

#1834 ,将Postgis扩展修改为仅备份用户指定的space_ref_sys

#1839 ,在raster2pgsql中处理GeoTIFF中的子数据集。

#1840 ,修复了何时计算raster2pgsql中的瓦片数量的逻辑。

#1851 ,修复EPSG的SPIAL_REF_SYSTEM参数:3844

#1857 ,修复在ST_AddEdge*Face*中检测到端点不匹配的故障

#1865 ,当数据行具有前导破折号时,postgis_Restore.pl中的数据丢失。

#1867 ,捕获传递给topogeo_add*的无效拓扑名

#1872 ,修复ST_ApproxSummarystats以防止被零除

#1873 ,修复ptarray_LOCATE_POINT以返回在线情况下的插补Z/M值

#1875 ,ST_SummaryStats在count为零时为除count以外的所有参数返回NULL

#1881 ,shp2pgsql-gui--编辑字段有时会触发删除行

#1883 ,地理编码器安装尝试运行CREATE_COUNTION_BASE_TABLES()失败(Brian Panulla)

增强

来自拓扑编辑功能的更详细的异常消息。

#1786 ,改进了构建依赖关系

#1806 、ST_BuildArea、ST_MakeValid和ST_GetFaceGeometry的加速比。

#1812 ,在LIBLWGEOM中添加lwgeom_Normize,以获得更稳定的测试。

A.46. 版本2.0.0

发布日期:2012/04/03

这是一个重要的版本。需要进行硬升级。是的,这意味着完全转储、重新加载和一些特殊准备,如果您使用的是过时的函数。参考 Section 3.4.2, “硬升级” 以了解有关升级的详细信息。参考 Section 15.12.10, “PostGIS Functions new, behavior changed, or enhanced in 2.0” 有关更多详细信息和更改/新增的功能。

测试者--我们的无名英雄

我们最感谢的是PostGIS社区中的众多成员,他们勇敢地测试了这个版本中的新功能。没有这些人,任何重大发行都不可能成功。

下面是那些最勇敢的人,他们提供了非常详细和彻底的错误报告和详细的分析。

Andrea Peri-对拓扑进行了大量测试,检查正确性
Andreas forřTollefsen-栅格测试
Chris English-拓扑压力测试加载器函数
塞尔瓦托·拉罗萨-拓扑稳健性测试
布莱恩·哈姆林-标杆(在被折叠成核心之前也是实验性的实验分支),对包括Tiger和Topology在内的各种部件进行一般测试。在各种服务器虚拟机上进行测试
Mike Pease-Tiger地理编码器测试-非常详细的问题报告
Tom van Tilburg-栅格测试

重要/突破性变化

#722 #302 ,删除了最不推荐使用的函数(超过250个函数)(Regina OBE,Paul Ramsey)

未知SRID从-1更改为0。(保罗·拉姆齐)

-- (most deprecated in 1.2) removed non-ST variants buffer, length, intersects (and internal functions renamed) etc.

-- If you have been using deprecated functions CHANGE your apps or suffer the consequences. If you don't see a function documented -- it ain't supported or it is an internal function. Some constraints in older tables were built with deprecated functions. If you restore you may need to rebuild table constraints with populate_geometry_columns(). If you have applications or tools that rely on deprecated functions, please refer to Q: 9.2 for more details.

#944 对于创建的表,GEOMETRY_COLUMNS现在是一个视图而不是表(Paul Ramsey,Regina OBE),旧方法读取(sRID,TYPE,DIMS)使用类型修饰符创建的几何列的约束读取只读列定义

#1081 #1082 #1084 #1088 -管理函数支持tymod几何列创建函数,现在默认为tymod创建(Regina OBE)

#1083 PROBE_GEOMETRY_COLUMNS()、RENAME_GEOMETRY_TABLE_CONSTRAINTS()、FIX_GEOMETRY_COLUMNS();已删除-现在与GEOMETRY_COLUMN视图过时(Regina OBE)

#817 将旧的3D函数重命名为约定ST_3D(Nicklas Avén)

#548 (Sorta),ST_NumGeometries,ST_GeometryN现在返回1(或几何图形),而不是单个几何图形的NULL(Sandro Santilli,Maxime van Noppen.)

新特点

基于KNN Gist指数的质心( < - > )和方框( < # > )距离运营商(Paul Ramsey/由Vizzuality提供资金)

支持TIN和PolyHedralSurface,并增强了许多功能以支持3D(Olivier Courtin/Oslandia)

集成和记录的栅格支持 (皮埃尔·拉辛、豪尔赫·阿雷瓦洛、Mateusz Loskot、Sandro Santilli、David Zwarg、Regina OBE、Bborie Park)(公司开发商和资金:University Laval、Deimos Space、CADCORP、密歇根理工学院、Azavea、Paragon Corporation、加州大学戴维斯分校媒介传播疾病中心)

制作3D空间索引-正在进行中(Paul Ramsey,Mark Cave-Aland)

改进了拓扑支持(更多功能)、记录、测试(Sandro Santilli/Faunalia for RT-SIGTA)、Andrea Peri、Regina OBE、Jose Carlos Martinez Llari

3D关系和测量支持功能(Nicklas Avén)

ST_3DDistance、ST_3DClosestPoint、ST_3DIntersects、ST_3DShorestLine等...

N维空间索引(Paul Ramsey/OpenGeo)

ST_Split(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_IsValidDetail(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_MakeValid(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_RemoveRepeatedPoints(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_GeometryN和ST_NumGeometries支持非集合(Sandro Santilli)

ST_IsCollection(桑德罗·桑蒂利,马克西姆·范·诺彭)

ST_SharedPath(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_Snap(Sandro Santilli)

ST_RelateMatch(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_CavaveHull(Regina OBE和Leo Hsu/Paragon Corporation)

ST_UnaryUnion(用于RT-SIGTA的Sandro Santilli/Faunalia)

ST_AsX3D(Regina OBE/到货3D资金)

ST_OffsetCurve(Sandro Santilli,Rafal Magda)

ST_GeomFromGeoJSON(Kashif Rasul,Paul Ramsey/Vizzuality Funding)

增强

使Shape文件加载器允许在某些免费的全球Shapefile中找到截断的多字节值(Sandro Santilli)

对shp2pgsql的大量错误修复和增强增强了对加载器的回归测试,在导入期间重新投影对几何和地理的支持(Jeff Adams/Azavea,Mark Cave-Aland)

Pgsql2shp从预定义列表转换(Loic Dachary/Mark Cave-Aland)

SHP-pgsql图形用户界面加载器-支持一次加载多个文件。(马克·莱斯利)

额外升级的Tiger_Geocode从使用旧的Tiger格式到使用新的Tiger shp和文件结构格式(Stephen Frost)

额外的-修改了Tiger_Geocode以处理Tiger Coping 2010数据,添加了反向Geocode功能,各种错误修复,精度增强,限制最大结果返回,速度改进,加载例程。(Regina OBE,Leo Hsu/Paragon Corporation/由Hunter Systems Group提供资金)

文件的整体校对和更正。(卡西夫·拉苏尔)

清理PostGIS JDBC类,修改为使用Maven Build。(玛丽亚·阿里亚斯·德·雷纳,桑德罗·桑蒂利)

错误修复

#1335 ST_AddPoint在Linux(甚至Rouault)上返回错误结果

发布特定信用额度

我们感谢 美国国务院人类信息部(HIU) 振奋性 以获得普遍的货币支持,以使PostGIS2.0走出大门。

A.47. 版本1.5.4

发布日期:2012/05/07

这是一个错误修复版本,解决了自1.5.3版本以来提交的问题。

错误修复

#547 ,ST_包含内存问题(Sandro Santilli)

#621 ,寻找与地理交叉的问题(保罗拉姆齐)

#627 ,PostGIS/PostgreSQL进程死于无效的几何图形(Paul Ramsey)

#810 ,提高面积计算的精确度(保罗拉姆齐)

#852 ,提高空间谓词的稳健性(Sandro Santilli,Nicklas Avén)

#877 ,ST_ESTIMATED_EXTEND在空表上返回NULL(Sandro Santilli)

#1028 ,ST_AsSVG在故障时终止整个Postgres服务器(Paul Ramsey)

#1056 ,修复弧线和圆圈划代码的方框(保罗拉姆齐)

#1121 ,使用不推荐使用的函数填充_GEOMETRY_COLUMNS(Regin OBE,Paul Ramsey)

#1135 ,提高测试套件的可预测性(Andreas‘Ads’Scherbaum)

#1146 ,图像生成器崩溃(Bronaugh)

#1170 ,北极交叉口失败(保罗·拉姆齐)

#1179 ,ST_AsText崩溃,值错误(KJurka)

#1184 ,在文档制作文件中表彰DESTDIR(Bryce L Nordgren)

#1227 ,服务器在无效的GML上崩溃

#1252 ,SRID出现在WKT(保罗·拉姆齐)

#1264 ,st_din(g,g,0)不工作(保罗·拉姆齐)

#1344 ,允许导出具有无效几何图形的表(Sandro Santilli)

#1389 ,SRID 31300和31370的项目4文本错误(保罗·拉姆齐)

#1406 ,shp2pgsql在加载到地理位置时崩溃(Sandro Santilli)

#1595 ,修复了ST_Line_SubString(Sandro Santilli)中的SRID冗余

#1596 ,在UpdateGeometrySRID中检查SRID(Mike Toews,Sandro Santilli)

#1602 ,修复ST_Polygonize以保留Z(Sandro Santilli)

#1697 ,修复了GIST索引中空条目的崩溃(保罗·拉姆齐)

#1772 ,使用折叠输入修复ST_Line_Locate_Point(Sandro Santilli)

#1799 ,保护ST_Segentize不受max_long=0的影响(Sandro Santilli)

更改900913中的参数顺序(保罗·拉姆齐)

支持使用“gmake”(Greg Troxel)构建

A.48. 版本1.5.3

发布日期:2011/06/25

这是一个错误修复版本,解决了自1.5.2版本以来提交的问题。如果您运行的是PostGIS1.3+,则软升级就足够了,否则建议进行硬升级。

错误修复

#1056 ,为圆弧几何图形生成正确的边界框,修复索引错误(保罗拉姆齐)

#1007 ,ST_IsValid崩溃修复需要GEOS 3.3.0+或3.2.3+(Sandro Santilli,Birgit Laggner报道)

#940 ,支持PostgreSQL 9.1测试版1(Regina OBE,Paul Ramsey,stl提交的补丁)

#845 ,ST_Intersects精度错误(Sandro Santilli,Nicklas Avén)由cdestigter报告

#884 ,ST_WITHING、ST_INTERSETS的结果不稳定(Chris Hodgson)

#779 ,shp2pgsql-S选项似乎在点上失败(杰夫·亚当斯)

#666 ,ST_DumpPoints不为空安全(Regina OBE)

#631 ,更新新西兰投影以支持网格变换(Jpalmer)

#630 ,David Bitner在ST_Collect(Chris Hodgson)中报告的数组中的特殊Null处理

#624 ,ST_GeogFromText中的内存泄漏(RYang,Paul Ramsey)

#609 ,手册第5.2节中的错误源代码Java客户端(SIMOC、Regina OBE)

#604 ,shp2pgsql使用修饰(Mike Toews,Paul Ramsey)

#573 ST_UNION在一组线串上失败而不是PostGIS错误,已在GEOS 3.3.0中修复

#457 ST_CollectionExtract返回非请求类型(Nicklas Avén,Paul Ramsey)

#441 几何集合错误的ST_AsGeoJson Bbox(Olivier Courtin)

#411 能够备份区域Toscana报告的无效几何图形(Sando Santilli)

#409 ST_AsSVG-Sdikiy报告的降级(Olivier Courtin)

#373 由psvensso报告的硬升级中的文档语法错误(Paul Ramsey)

A.49. 版本1.5.2

发布日期:2010/09/27

这是一个错误修复版本,解决了自1.5.1版本以来一直存在的问题。如果您运行的是PostGIS1.3+,则软升级就足够了,否则建议进行硬升级。

错误修复

加载器:修复了对shapefile中空(0-顶点)几何图形的处理。(桑德罗·桑蒂利)

#536 、地理ST_Intersects、ST_Coverers、ST_Coveredby和几何ST_Equals不使用空间索引(Regina OBE、Nicklas Aven)

#573 ,对ST_CONTAINS地理位置的改进(保罗·拉姆齐)

加载器:在Mac GTK版本中添加对命令-Q关闭的支持(Paul Ramsey)

#393 ,Loader:为大型DBF文件添加临时补丁(Maxime Guillaud,Paul Ramsey)

#507 ,修复GeoJSON和GML输出中的错误OGC URN(Olivier Courtin)

Space_ref_sys.sql为投影SRID 3021添加基准面转换(Paul Ramsey)

地理位置-当所有地理位置都不在估计范围内时,删除崩溃(保罗·拉姆齐)

#469 ,修复ARRAY_AGGATION错误(Greg Stark、Paul Ramsey)

#532 ,临时地理表出现在其他用户会话中(Paul Ramsey)

#562 ,大型地理位置的ST_DWING错误(保罗·拉姆齐)

#513 ,图形加载图形用户界面在加载仅DBF模式时尝试创建空间索引(Paul Ramsey)

#527 ,形状加载图形用户界面应始终附加日志消息(Mark Cave-Aland)

#504 ,shp2pgsql应重命名xmin/xmax字段(Sandro Santilli)

#458 ,postgis_Comments安装在Contrrib而不是Version文件夹中(Mark Cave-Aland)

#474 ,分析具有地理列崩溃服务器的表(保罗·拉姆齐)

#581 ,LWGEOM-Expand产生不一致的结果(Mark Cave-Aland)

#513 ,将DBF过滤器添加到shp2pgsql-gui并仅允许上传DBF(Paul Ramsey)

修复针对PostgreSQL 9.0(Mark Cave-Aland)的进一步构建问题

#572 ,Shape文件的密码空格(Mark Cave-Aland)

#603 ,shp2pgsql:“-w”为多个*对象生成无效的wkt。(马克·凯夫-艾兰德)

A.50. 版本1.5.1

发布日期:2010/03/11

这是一个错误修复版本,解决了自1.4.1版本以来一直存在的问题。如果您运行的是PostGIS1.3+,则软升级就足够了,否则建议进行硬升级。

错误修复

#410 ,在将ST_SetPoint、ST_AddPoint ST_RemovePoint应用于线串时更新嵌入的BBox(Paul Ramsey)

#411 ,允许转储具有无效几何图形的表(Sandro Santilli,适用于Regione Toscana-SIGTA)

#414 ,在运行升级脚本时包含GEOGRAPHY_COLUMNS视图(Paul Ramsey)

#419 ,允许在ST_Line_Substring中支持多线串(Paul Ramsey,针对Lidwala咨询工程师)

#421 ,修复ST_AsGML()(Olivier Courtin)中计算的字符串长度

#441 ,使用异类集合修复GML生成(Olivier Courtin)

#443 ,GML 3生成中的不正确坐标反转(Olivier Courtin)

#450 #451 ,跨越日期线的地理特征的面积计算错误(保罗拉姆齐)

确保支持即将发布的9.0 PgSQL版本(Paul Ramsey)

A.51. 版本1.5.0

发布日期:2010/02/04

此版本通过新的地理类型提供对地理坐标(经度/经度)的支持。还有性能增强、新的输入格式支持(GML、KML)和通用维护。

API稳定性

在小版本(0.0.X)期间,PostGIS的公共API不会改变。

=~运算符的定义已从精确几何相等检查更改为边界框相等检查。

兼容性

现在,GEOS、Proj4和LibXML2是强制依赖项

以下库版本是PostGIS 1.5的最低要求

所有平台上的PostgreSQL 8.3和更高版本

仅限GEOS 3.1及更高版本(GEOS 3.2+可利用所有功能)

LibXML2 2.5+与新的ST_GeomFromGML/KML功能相关

仅项目4 4.5和更高版本

新特点

Section 15.12.12, “PostGIS Functions new, behavior changed, or enhanced in 1.5”

添加了Hausdorff距离计算( #209 (文森特·皮卡韦)

向ST_BUFFER操作添加了参数参数,以支持单边缓冲和其他缓冲样式(Sandro Santilli)

添加其他与距离相关的可视化和分析功能(Nicklas Aven)

  • ST_ClosestPoint

  • ST_DFullyWithin

  • ST_LongestLine

  • ST_MaxDistance

  • ST_ShortestLine

ST_DumpPoints(马克西姆·范·诺本)

通过ST_GeomFromGML和ST_GeomFromKML(Olivier Courtin)输入的KML、GML

使用ST_CollectionExtract提取同类集合(Paul Ramsey)

使用ST_AddMeasure将度量值添加到现有线串(Paul Ramsey)

使用Utils实现历史表(George Silva)

地理类型和支持功能

  • 球形算法(Dave Skea)

  • 对象/索引实现(Paul Ramsey)

  • 选择性实施(马克洞穴-艾兰德)

  • KML、GML和JSON的序列化(Olivier Courtin)

  • ST_Area、ST_Distance、ST_DWiThin、ST_GeogFromText、ST_GeogFromWKB、ST_Intersects、ST_Covers、ST_Buffer(Paul Ramsey)

增强

ST_Distance的性能改进(Nicklas Aven)

文档更新和改进(Regina OBE,Kevin Neufeld)

测试和质量控制(Regina OBE)

PostGIS 1.5支持PostgreSQL 8.5干线(Guillaume Lelarge)

Win32对核心shp2pgsql-gui(Mark Cave-Aland)的支持和改进

适当的‘检查’支持(保罗·拉姆齐)

A.52. 版本1.4.0

发布日期:2009/07/24

此版本提供了性能增强、改进的内部结构和测试、新功能以及升级的文档。如果您运行的是PostGIS 1.1+,则软升级就足够了,否则建议进行硬升级。

API稳定性

从1.4版本系列开始,PostGIS的公共API在次要版本期间不会发生变化。

兼容性

以下版本是PostGIS 1.4的*最低*要求

所有平台上的PostgreSQL 8.2及更高版本

仅限GeOS 3.0及更高版本

仅PROJ4 4.5和更高版本

新特点

在针对GEOS 3.1+(Paul Ramsey)进行编译时,ST_Union()使用高速级联联合

ST_ContainsProperly()需要GEOS 3.1+

ST_Intersects()、ST_CONTAINS()、ST_WINDOWS()针对GEOS 3.1+使用高速缓存的准备好的几何图形(Paul Ramsey/由Zonar Systems资助)

大大改进了文档和参考手册(Regina OBE & Kevin Neufeld)

参考手册中的图表和图例(凯文·纽菲尔德)

ST_IsValidReason()返回有效性失败的可读解释(Paul Ramsey)

ST_GeoHash()返回几何图形的Geohash.org签名(Paul Ramsey)

用于加载形状文件的GTK+多平台图形用户界面(Paul Ramsey)

ST_LineCrossingDirection()返回交叉方向(Paul Ramsey)

ST_LocateBetweenElevations()返回基于Z坐标的子字符串。(保罗·拉姆齐)

几何解析器返回有关语法错误位置的显式错误消息(Mark Cave-Aland)

ST_AsGeoJSON()返回JSON格式的几何图形(Olivier Courtin)

PUPATE_GEOMETRY_COLUMNS()--自动将记录添加到表和视图的GEOMETRY_COLUMNS(Kevin Neufeld)

ST_最小边界圆()--返回可以包含几何体的最小圆多边形(Bruce Rindahl)

增强

核心几何系统搬进了独立库liblwgeom。(马克·凯夫-艾兰德)

新的构建系统使用PostgreSQL“pgxs”构建引导程序。(马克·凯夫-艾兰德)

调试框架形式化、简单化。(马克·凯夫-艾兰德)

所有Build-Time#定义在配置时生成,并放置在标题中以便于跨平台支持(Mark Cave-Aland)

正式和简化的日志记录框架(Mark Cave-Aland)

扩展和更稳定地支持CIRCULARSTRING、COMPOUNDCURVE和CURVEPOLYGON,更好的解析,更广泛的函数支持(Mark Leslie & 马克·凯夫-艾兰德)

改进了对OpenSolaris构建的支持(Paul Ramsey)

改进了对MSVC版本的支持(Mateusz Loskot)

更新的KML支持(Olivier Courtin)

Liblwgeom的单元测试框架(Paul Ramsey)

全面行使邮政地理信息系统各项功能的新测试框架(Regine OBE)

所有几何聚合函数的性能改进(Paul Ramsey)

支持即将推出的PostgreSQL 8.4(Mark Cave-Aland、Talha Bin Rizwan)

Shp2pgsql和pgsql2shp重新工作,以依赖于liblwgeom(Mark Cave-Aland)中的公共解析/未解析代码

使用PDF DbLatex构建PDF文档和初步构建说明(Jean David Techer)

自动生成用户文档(PDF和HTML)和开发人员DOOXO文档(Kevin Neufeld)

使用ImageMagick从WKT几何文本文件自动构建文档图像(Kevin Neufeld)

更吸引人的用于HTML文档的CSS(Dane Springmeyer)

A.53. 版本1.3.6

发布日期:2009/05/04

如果您运行的是PostGIS 1.1+,则软升级就足够了,否则建议进行硬升级。此版本增加了对PostgreSQL8.4的支持,从数据库中导出带有形状数据的prj文件,修复了shp2pgsql的一些崩溃修复,并修复了在处理“曲线”类型时的几个小错误,仅导入DBF文件的逻辑错误,改进了AddGeometryColumns的错误处理。

A.54. 版本1.3.5

发布日期:2008/12/15

如果您运行的是PostGIS 1.1+,则软升级就足够了,否则建议进行硬升级。此版本是一个错误修复版本,旨在解决ST_Force_Collection和相关函数中的一个故障,该故障严重影响将MapServer与LINE Layer一起使用。

A.55. 版本1.3.4

发布日期:2008/11/24

此版本增加了对使用PostgreSQL 8.4构建的GeoJSON输出的支持,提高了文档质量和输出美感,添加了函数级SQL文档,并提高了一些空间谓词(点在多边形中的测试)的性能。

错误修复包括删除了在处理许多函数的循环字符串时的崩溃,删除了一些内存泄漏,对顶点上的测量的线性引用失败,等等。有关详细信息,请参阅新闻文件。

A.56. 版本1.3.3

发布日期:2008/04/12

此版本修复了错误shp2pgsql,添加了对SVG和KML支持的增强,添加了ST_SimplifyPpresveTopology函数,使构建对GEOS版本更加敏感,并修复了少数严重但罕见的失败案例。

A.57. 版本1.3.2

发布日期:2007/12/01

此版本修复了ST_Endpoint()和ST_Entaine中的错误,改进了对JDBC构建和OS/X的支持,并通过ST_AsGML()增加了对GML输出的更好支持,包括GML3输出。

A.58. 版本1.3.1

发布日期:2007/08/13

此版本修复了上一版本中有关版本编号、文档和标记的一些疏忽。

A.59. 版本1.3.0

发布日期:2007/08/09

此版本增强了关系函数的性能,添加了新的关系函数,并开始使用空间类型(SP)前缀将我们的函数名迁移到SQL-MM约定。

增加的功能

JDBC:增加了休眠方言(感谢诺曼·巴克)

新增ST_COVERS和ST_COVEREDBY关系函数。有关这些功能的说明和理由,请参阅 http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html

在关系函数中添加了ST_DWide。

性能增强

为函数ST_CONTAINS、ST_INTERSETS、ST_WINDING和ST_DISCOCT添加了缓存和索引面中点短路

添加了对关系函数的内联索引支持(ST_DISCOCT除外)

其他变化

将曲线几何支持扩展到几何访问器和一些处理函数中

开始将函数迁移到SQL-MM命名约定;使用空间类型(ST)前缀。

添加了对PostgreSQL 8.3的初始支持

A.60. 版本1.2.1

发布日期:2007/01/11

此版本修复了PostgreSQL8.2支持中的错误,并对性能进行了一些小的改进。

变化

修复了()中的多边形点快捷方式错误。

修复了索引的PostgreSQL 8.2 NULL处理。

更新了RPM规范文件。

添加了不可操作情况下Transform()的短路。

JDBC:修复了多维几何图形的JTS处理(多亏了Thomas Marti的提示和部分补丁)。此外,现在对JavaDoc进行了编译和打包。修复了GCJ的类路径问题。修复了pgjdbc 8.2兼容性,失去了对JDK 1.3及更早版本的支持。

A.61. 版本1.2.0

发布日期:2006/12/08

此版本提供了类型定义以及针对SQL-MM定义的曲线几何的序列化/反序列化功能,以及性能增强。

变化

添加了对序列化/反序列化的曲线几何类型支持

向CONTAINS和INSING函数添加了多边形中点短路,以提高这些情况下的性能。

A.62. 版本1.1.6

发布日期:2006/11/02

这是一个错误修复版本,特别是修复了64位系统中GEOS接口的一个严重错误。包括SRS参数的更新和重新预测的改进(考虑到Z)。升级是 鼓励

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

修复了破坏64位平台的CAPI更改

加载器/转储程序:修复了回归测试和使用输出

修复了JDBC中的setSRID()错误,这要感谢Thomas Marti

其他变化

在重新投影中使用Z坐标

Space_ref_sys.sql已更新至EPSG 6.11.1

简化的Version.config基础架构,可以使用单个版本变量包来处理所有事情。

在加载器/转储器使用消息中包括Version.config

用属性替换手工制作的脆弱的JDBC版本解析器

A.63. 版本1.1.5

发布日期:2006/10/13

这是一个错误修复版本,包括Win32上的一个严重段错误。升级是 鼓励

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

修复了为PostgreSQL 8.2编译时导致pgsql2shp在Win32上分段错误的MingW链接错误

修复了Java中Geometry.equals()方法中的空指针异常

添加了EJB3Spatial.odt以满足GPL发布“首选修改形式”的要求

已从JDBC JTS代码中删除过时的同步。

通过将shp2pgsql/pgsql2shp与手册页合并,更新了严重过时的自述文件。

修复了JDBC代码中在“1.1.4”版本中仍为“1.1.3”的版本标记。

新特点

为shp2pgsql添加了非多几何图形的-S选项

A.64. 版本1.1.4

发布日期:2006/09/27

这是一个错误修复版本,其中包括对Java接口的一些改进。升级是 鼓励

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

修复了对PostgreSQL 8.2的支持

修复了Collect()函数丢弃输入的SRID的错误

在MakeBox2d和MakeBox3d中添加了SRID匹配检查

修复了使用GEOS-3.0.0通过的回归测试

改进了pgsql2shp运行并发性。

Java更改

修改了JTS支持,以反映新的上游JTS开发人员对SRID处理的态度。简化了代码,并减少了依赖GNU trove的构建。

添加了由“Geodetix s.r.l公司”慷慨捐赠的EJB2支持

添加了由Norman Barker捐赠的EJB3教程/示例 < nbarker@ittvis.com >

重新组织了一些Java目录布局。

A.65. 版本1.1.3

发布日期:2006/06/30

这是一个错误修复版本,还包括一些新功能(最引人注目的是长事务支持)和可移植性增强。升级是 鼓励

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复/正确性

修正了距离(多边形、多边形)产生错误结果的错误。

修复了pgsql2shp成功返回代码中的错误。

修复了shp2pgsql处理多行wkt的错误。

无法更新边界框的仿射()中的错误修复。

WKT解析器:禁止构造包含空元素的多几何图形(仍支持GEOMETRYCOLLECTION)。

新功能

新的多头交易支持。

新的DumpRings()函数。

新增AsHEXEWKB(geom,xdr|ndr)函数。

JDBC更改

改进的回归检验:多点和科学坐标

修复了JDBC代码中的一些小错误

为所有字段添加了适当的访问器函数,为以后将这些字段设置为私有做好准备

其他变化

对装载机/翻车机的新回归测试支持。

添加了--with-proj-libdir和--with-geos-libdir配置开关。

支持构建Tru64构建。

使用Jade生成文档。

不要将pgsql2shp链接到超过所需的库。

对PostgreSQL 8.2的初始支持。

A.66. 版本1.1.2

发布日期:2006/03/30

这是一个错误修复版本,包括一些新功能和可移植性增强。升级是 鼓励

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

SnapToGrid()计算输出边界框中的错误修复

EnforceRHR()中的错误修复

JTS代码中的jdbc2 SRID处理修复

修复了对64位Archs的支持

新功能

回归测试现在可以在安装Postgis之前运行

新的仿射()矩阵变换函数

新的旋转{,X,Y,Z}()函数

旧的平移和缩放函数现在内部使用仿射()

针对pgsql的构建嵌入了Estimated_Extent()中的访问控制 > =8.0.0

其他变化

可移植程度更高。/配置脚本

已更改./run_test脚本,使其具有更合理的默认行为

A.67. 版本1.1.1

发布日期:2006/01/23

这是一个重要的错误修复版本,升级是 强烈推荐 。以前的版本在postgis_Restore.pl中包含错误,阻止 硬升级 要完成的过程以及GEOS-2.2+连接器中阻止在拓扑操作中使用GeometryCollection对象的错误。

升级

如果您要从1.0.3版或更高版本升级,请遵循 软升级 程序。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

修复了postgis_Restore.pl中的提前退出

GEOS-CAPI连接器的几何集合处理中的错误修复

Solaris 2.7和MingW支持改进

行_位置_点()中的错误修复

修复了对PostgreSQL路径的处理

修正line_substring()中的错误

在回归测试器中添加了对本地化集群的支持

新功能

LINE_SUBSTRING()中的新Z和M内插

Line_interpolate_point()中的新Z和M插值法

由于OpenGIS的模糊性,添加了NumInteriorRing()别名

A.68. 版本1.1.0

发布日期:2005/12/21

这是一个较小的版本,包含许多改进和新内容。最值得注意的是:构建过程大大简化;Transform()性能显著提高;更稳定的GEOS连接(CAPI支持);大量新功能;草案拓扑支持。

它是 强烈推荐 在安装PostGIS之前升级到GEOS-2.2.x,这将确保未来的GEOS升级不需要重新构建PostGIS库。

学分

此版本包括Mark Cave Aland提供的用于缓存proj4对象的代码。Markus Schaber在他的JDBC2代码中添加了许多改进。Alex Bodnaru帮助缓解了PostgreSQL对源代码的依赖,并提供了Debian规范文件。迈克尔·福尔在Solaris Arch上测试了一些新东西。David Techer和Gerald Fenoy帮助测试了GEOS C-API连接器。Hartmut Tschauner提供了azimuth()函数的代码。Devrim Gunduz提供了RPM规格文件。卡尔·安德森帮助完成了新区域的建筑功能。请参阅 学分 部分可以找到更多的名字。

升级

如果您要从1.0.3版或更高版本升级, 请勿 需要转储/重新加载。只需在所有现有数据库中查找新的lwpostgis_upgrade.sql脚本就可以了。请参阅 软升级 章节以了解更多信息。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

新功能

翻译()的配套方法Scale()和TransScale()

行_子字符串()

Line_Locate_Point()

M(点)

线条合并(几何图形)

Shift_经度(几何体)

方位角(几何体)

LOCATE_ALOW_MEASURE(几何体,浮动8)

LOCATE_BETWEEN_MEASURES(几何,浮动8,浮动8)

按点偏移捕捉到栅格(最多支持4d)

BuildArea(ANY_GEOMETRY)

OGC BdPolyFromText(LINESTRING_WKT,SRID)

OGC BdMPolyFromText(LINESTRING_WKT,SRID)

RemovePoint(线串,偏移)

替换点(线串、偏移、点)

错误修复

修复了Polygonize()中的内存泄漏问题

修复了lwgeom_as_anytype强制转换函数中的错误

修复了postgis_version()输出的USE_GEOS、USE_PROJ和USE_STATS元素,以始终反映库状态。

功能语义变化

SnapToGrid不会丢弃更高维度

如果请求的维度不可用,则将Z()函数更改为返回NULL

性能改进

转换()函数的速度要快得多,缓存proj4对象

删除了AddGeometryColumns()和UPDATE_GEOMETRY_STATS()中对FIX_GEOMETRY_COLUMNS()的自动调用

JDBC2工作正常

Makefile改进

JTS支持改进

改进的回归测试系统

几何集合的基本一致性检查方法

支持(十六进制)(E)WKB

用于HexWKB/EWKT切换的自动探测驱动程序包装器

修复了早期JDK发行版的ValueSetter中的编译问题。

修复EWKT构造函数以接受SRID=4711;表示

添加了对java2d几何图形的初步只读支持

其他新事物

完全基于Autoconf的配置,可解除对PostgreSQL源代码的依赖

GEOS C-API支持(2.2.0及更高版本)

对拓扑建模的初始支持

Debian和RPM规范文件

新的lwpostgis_upgrade.sql脚本

其他变化

JTS支持改进

DBF与SQL整型和字符串属性之间更严格的映射

更广泛、更清晰的回归测试套件

从发行版中删除旧的JDBC代码

已过时的直接使用postgis_proc_upgrade.pl

脚本版本与发布版本统一

A.69. 版本1.0.6

发布日期:2005/12/06

包含一些错误修复和改进。

升级

如果您要从1.0.3版或更高版本升级, 请勿 需要转储/重新加载。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

修复了集合反序列化程序中的palloc(0)调用(仅在--Enable-Cassert中出现问题)

修复了BBox缓存处理错误

修复geom_accum(NULL,NULL)段错误

修复了addPoint()中的段错误

修复了lwCollection_clone()中的短分配问题

修复了Segentize()中的错误

SnapToGrid输出的固定BBox计算

改进

对PostgreSQL 8.2的初始支持

在GEOS操作中添加了缺少的SRID不匹配检查

A.70. 版本1.0.5

发布日期:2005/11/25

包含库中的内存对齐修复、加载器处理UTF8属性时的段错误修复以及一些改进和清理。

[Note]

Shp2pgsql的返回代码从以前的版本更改为符合Unix标准(成功时返回0)。

升级

如果您要从1.0.3版或更高版本升级, 请勿 需要转储/重新加载。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

库更改

修复了内存对齐问题

分析仪中空值分数的固定计算

修复了getPoint4d_p()低级函数中的一个小错误

串行化程序函数的加速

修复了force_3dm()、force_3dz()和force_4d()中的错误

加载器更改

修复shp2pgsql的返回码

修复了加载器中的向后兼容性问题(加载空的shapefile)

修复了对DBF数值属性中尾随点的处理

修复shp2pgsql(UTF8编码)中的段故障

其他变化

支持模式感知的postgis_proc_upgrade.pl,支持pgsql 7.2+

手册中新增“报告错误”一章

A.71. 版本1.0.4

发布日期:2005/09/09

包含重要的错误修复和一些改进。特别是,它修复了阻止成功构建大型空间表的GIST索引的内存泄漏。

升级

如果您要从1.0.3版升级, 请勿 需要转储/重新加载。

如果您要从发行版升级 在1.0.0RC6和1.0.2之间 (含)并且真的想要实时升级阅读 升级部分 1.0.3发行说明章节的。

从1.0.0RC6之前的任何版本升级需要 硬升级

错误修复

在主旨索引中插入内存泄漏

修复了处理proj4错误的Transform()中的段错误

修复了space_ref_sys中的一些proj4文本(缺少+proj)

加载器:修复了字符串函数的用法,修改了空对象检查,修复了MULTILINESTRING输入上的段错误。

修复了MakeLine尺寸处理中的错误

修复了Translate()损坏输出边界框中的错误

改进

文档改进

更稳健的选择性估计器

距离略微加速()

次要清理

GIST索引清理

在box3d解析器中接受更宽松的语法

A.72. 版本1.0.3

发布日期:2005/08/08

包含一些错误修复- 包括影响存储几何的正确性的严重问题 -以及一些改进。

升级

由于边界框计算例程中存在错误,升级过程需要特别注意,因为缓存在数据库中的边界框可能不正确。

一个 硬升级 程序(转储/重新加载)将强制重新计算所有边界框(不包括在转储中)。这是 必填项 如果从1.0.0RC6之前的版本升级。

如果要从1.0.0RC6或更高版本升级,此版本包括Perl脚本(utils/rebuild_bbox_caches.pl),以强制重新计算几何体的边界框,并调用传播其中的最终更改所需的所有操作(几何体统计信息更新、重建索引)。在Make Install之后调用该脚本(运行时不使用参数获取语法帮助)。或者,运行utils/postgis_proc_upgrade.pl以刷新postgis过程和函数签名(请参见 软升级 )。

错误修复

Lwgeom二维包围盒计算中的严重错误修复

加载器中wkt(-w)点处理中的错误修复

修复64位计算机上转储程序中的错误

用户定义查询的转储处理中的错误修复

修复了create_unde.pl脚本中的错误

改进

规范输入函数的性能改进不大

装载机中的次要清理

在加载器中支持多字节字段名

对postgis_Restore.pl脚本的改进

新的rebuild_bbox_caches.pl util脚本

A.73. 版本1.0.2

发布日期:2005/07/04

包含一些错误修复和改进。

升级

如果您要从1.0.0RC6或更高版本升级 请勿 需要转储/重新加载。

从旧版本升级需要转储/重新加载。请参阅 升级换代 章节,了解更多信息。

错误修复

容错btree操作

在pg_error中插入内存泄漏

Rtree索引修复

更干净的构建脚本(避免混用CFLAGS和CXXFLAGS)

改进

加载器中的新索引创建功能(-i开关)

对PostgreSQL 8.1dev的初始支持

A.74. 版本1.0.1

发布日期:2005/05/24

包含一些错误修复和一些改进。

升级

如果您要从1.0.0RC6或更高版本升级 请勿 需要转储/重新加载。

从旧版本升级需要转储/重新加载。请参阅 升级换代 章节,了解更多信息。

库更改

修正了长度_球体()三维计算中的错误

修复连接选择性估计器中的错误

其他更改/添加

Shp2pgsql转义函数中的错误修复

在多个模式中更好地支持并发PostGIS

文档修复

Jdbc2:默认使用“-Target 1.2-Source1.2”进行编译

Pgsql2shp的新-k开关

在postgis_Restore.pl中新增对自定义createdb选项的支持

Pgsql2shp属性名称单一性强制中的错误修复

修复巴黎投影定义中的错误

Postgis_Restore.pl清理

A.75. 版本1.0.0

发布日期:2005/04/19

最终的1.0.0版本。包含一些错误修复、加载器中的一些改进(最明显的是对较旧的postgis版本的支持)和更多文档。

升级

如果您要从1.0.0RC6版升级, 请勿 需要转储/重新加载。

从任何其他先前版本升级需要转储/重新加载。请参阅 升级换代 章节,了解更多信息。

库更改

修复了Transform()释放随机内存地址的错误

FORCE_3DM()中的错误修复,分配的内存少于所需的内存

连接选择性估计器中的错误修复(默认、泄漏、元组计数、SD)

其他更改/添加

对以制表符或单引号开头的值进行shp2pgsql转义时的错误修复

装载机/翻车机的新手册页

对旧(HWGEOM)postgis版本的新shp2pgsql支持

Shp2pgsql的新-p(准备)标志

关于OGC合规强制执行的新手册章节

对JTS库的新AutoConf支持

修复估计器测试程序中的错误(支持LWGEOM和模式解析)

A.76. 版本1.0.0RC6

发布日期:2005/03/30

版本1.0.0的第六个候选版本。包含一些错误修复和清理。

升级

您需要转储/重新加载才能从以前的版本升级。请参阅 升级换代 章节,了解更多信息。

库更改

修复了多个()中的错误

从MULTI()提前返回[何时停止]

脚本更改

删除了{x,y}{min,max}(Box2d)个函数

其他变化

修复postgis_Restore.pl脚本中的错误

修复转储程序64位支持中的错误

A.77. 版本1.0.0RC5

发布日期:2005/03/25

1.0.0的第五个候选版本。包含一些错误修复和改进。

升级

如果您要从1.0.0RC4版升级, 请勿 需要转储/重新加载。

从任何其他先前版本升级需要转储/重新加载。请参阅 升级换代 章节,了解更多信息。

库更改

修复了box3d计算中的错误(分段错误)(是的,又是一个错误!)

Estimated_Extent()中的错误修复(分段故障)。

其他变化

小型构建脚本和实用程序的改进。

记录的其他性能提示。

A.78. 版本1.0.0RC4

发布日期:2005/03/18

1.0.0的第四个候选版本。包含错误修复和一些改进。

升级

您需要转储/重新加载才能从以前的版本升级。请参阅 升级换代 章节,了解更多信息。

库更改

Geom_accum()中的错误修复(段故障)。

修复了64位架构支持中的错误。

修复了带有集合的box3d计算函数中的错误。

选择性估计器中的新子选择支持。

FORCE_COLLECTION提前返回。

SnapToGrid()中的一致性检查修复。

Box2d输出更改回15位有效数字。

脚本更改

新的距离球体()函数。

已将GET_PROJ4_FROM_SRID实现更改为使用PL/PGSQL而不是SQL。

其他变化

修复了多线形状的装载机和翻车机处理中的错误

修正了加载器中的错误,跳过了除第一个多边形洞以外的所有多边形洞。

Jdbc2:代码清理,Makefile改进

包含*pgsql Makefile.global之后*设置的Flex和YACC变量,并且仅当pgsql*STREPED*版本的计算结果为空字符串时

在版本中添加了已生成的解析器

构建脚本优化

改进了版本处理,集中了Version.config

Postgis_Restore.pl中的改进

A.79. 版本1.0.0RC3

发布日期:2005/02/24

1.0.0的第三个候选版本。包含许多错误修复和改进。

升级

您需要转储/重新加载才能从以前的版本升级。请参阅 升级换代 章节,了解更多信息。

库更改

修复了Transform()中的错误:缺少SRID,错误处理更好。

内存对齐处理中的错误修复

FORCE_COLLECTION()中的错误修复导致简单(单一)几何体类型上的映射服务器连接器故障。

添加BBox缓存时缺少GeometryFromText()中的错误修复。

降低了box2D输出的精度。

在调试宏前面加上前缀pgis_,以避免与pgsql宏冲突

堵住了GEOS2POSTGIS转换器的泄漏

通过提前释放查询上下文分配的查询来减少内存使用。

脚本更改

修复了72个索引绑定中的错误。

修复了PROBE_GEOMETRY_COLUMNS()中的错误,以使用PG72并支持单个表中的多个几何列

新bool::文本强制转换

为了提高性能,一些函数从稳定变为不可变。

JDBC更改

Jdbc2:小补丁、盒2D/3D测试、修订的文档和许可证。

Jdbc2:pgjdbc 8.0类型自动注册中的错误修复和测试用例

Jdbc2:删除了仅使用jdk1.4功能,以支持使用较旧的JDK版本进行构建。

Jdbc2:添加了对pg72jdbc2.jar构建的支持

Jdbc2:已更新和清理生成文件

Jdbc2:添加了对jts几何图形类的测试版支持

Jdbc2:跳过针对较旧的PostGIS服务器的已知失败测试。

Jdbc2:修复了对EWKT中测量的几何图形的处理。

其他变化

手册中的新性能提示章节

文档更新:pgsql72要求,lwpostgis.sql

AutoConf中的更改很少

BUILDDATE提取变得更便携

已修复space_ref_sys.sql,以避免清空整个数据库。

SPATIAL_REF_SYS:更改了PARIS条目,以匹配使用0.x分发的条目。

A.80. 版本1.0.0RC2

发布日期:2005/01/26

1.0.0的第二个候选版本,包含错误修复和一些改进。

升级

您需要转储/重新加载才能从以前的版本升级。请参阅 升级换代 章节,了解更多信息。

库更改

修复点阵射线盒3d计算中的错误

距离球体定义中的错误修复

更新BBox缓存时缺少转换()中的错误修复

新的JDBC驱动程序(Jdbc2)

支持向后兼容的GEOMETRYCOLLECTION(空)语法

更快的二进制输出

更严格的OGC WKB/WKT构造函数

脚本更改

在lwpostgis.sql中更正确、稳定、不变、严格的用法

更严格的OGC WKB/WKT构造函数

其他变化

更快、更健壮的加载器(包括i18n和非)

初始自动会议脚本

A.81. 版本1.0.0RC1

发布日期:2005/01/13

这是主要的postgis版本的第一个候选版本,Postgis类型的内部存储重新设计为在索引查询上更小、更快。

升级

您需要转储/重新加载才能从以前的版本升级。请参阅 升级换代 章节,了解更多信息。

变化

更快的规范输入解析。

无损规范输出。

带PG的EWKB标准二进制IO > 73.

支持高达4d的坐标,提供无损的Shapefile- > 邮局- > Shapefile转换。

新函数:UpdateGeometrySRID()、AsGML()、SnapToGrid()、ForceRHR()、Estimated_Extent()、Acum()。

垂直定位索引运算符。

连接选择性功能。

更多几何构造器/编辑器。

PostGIS扩展API。

在装载机中支持UTF8。