PostgreSQL已经支持空间数据类型,运算符和索引。
PostGIS到底提供了什么,使得有必要作为PostgreSQL的扩展而存在?
为什么我们不都使用PostgreSQL的空间功能?
PostgreSQL已经支持空间数据类型,运算符和索引。
PostGIS到底提供了什么,使得有必要作为PostgreSQL的扩展而存在?
为什么我们不都使用PostgreSQL的空间功能?
Answers:
如果将宇宙重新缠绕到2001年初,不仅让PostGIS的发明者看到未来,而且让PgSQL的PSC看到未来,那么PostGIS可能是PgSQL上的一系列补丁。但是至少,如果我们最初是作为核心的补丁开始的,那么我们遇到的第一件事就是:
核心PgSQL会说:“不,当然不是,区域具有现有的易于理解的语义,我们不能像这样进行向后不兼容的更改”。
作为非核心开发人员,PostGIS能够淘汰多年的每月和每月六个月的发行版,而PgSQL核心随着年度和更长的发行版而下降。由于我们在项目中拥有提交权限,因此我们还可以随时添加所需的任何功能,但是在PgSQL中获得提交权限需要很长时间。
到PostGIS展示足够的外部价值时,PgSQL内核便开始对自己说:“呵呵,作为一个附加功能,将其包含在内核中将是一件很不错的事”,已经有如此多的代码具有与标准不同的标准和样式。 PgSQL(更不用说使用不兼容的许可证了),合并的想法实际上是不可能的。
取而代之的是,PostGIS已成为“真正的大型复杂扩展”的典型示例,该扩展可帮助PgSQL保持模块化和可扩展性。当核心PgSQL评估某些更改时,经常会问到“如何影响PostGIS之类的问题”。这也是一件好事,也许还不如PostGIS作为核心的一部分那么好,但是足够好。
还有其他原因,例如PgSQL核心不愿看到的一长串依赖关系,他们本来希望不断改善的普遍较低的代码一致性和API清洁度。即使从概念上来说,PostGIS对于PgSQL来说也是一个巨大的障碍,无法一口吞下。
事实并非如此,PostgreSQL不支持Spatial数据类型。它支持几何类型。这些对于某些事情来说是完美的,但它们与现实世界的坐标系统完全分开。本机类型
至于索引问题,在FAQ中
为什么不支持PostgreSQL R-Tree索引?
PostGIS的早期版本使用PostgreSQL R-Tree索引。但是,自版本0.6起,PostgreSQL R-Trees已被完全丢弃,并且通过GiST上的R-Tree提供了空间索引。
我们的测试表明,本地R-Tree和GiST的搜索速度相当。本地PostgreSQL R-Tree有两个限制,这使它们不适合与GIS功能一起使用(请注意,这些限制是由于当前PostgreSQL本地R-Tree实现,而不是通常的R-Tree概念引起的):
PostgreSQL中的R-Tree索引不能处理大于8K的功能。GiST索引可以使用“有损”技巧将边界框替换为要素本身。
PostgreSQL中的R-Tree索引不是“空安全的”,因此在包含空几何的几何列上建立索引将失败。[GiST索引为null安全]
PostGIS是PostgreSQL对象关系数据库的空间数据库扩展程序 。它增加了对地理对象的支持,允许在SQL中运行位置查询。
SELECT superhero.name FROM city, superhero WHERE ST_Contains(city.geom, superhero.geom) AND city.name = 'Gotham';
除了基本的位置意识外,PostGIS还提供了许多其他竞争性空间数据库(如Oracle Locator / Spatial和SQL Server)中很少见的功能。有关更多详细信息,请参见PostGIS功能列表。
PostGIS功能列表还扩展了这些功能:
PostGIS向PostgreSQL数据库添加了额外的类型(几何,地理,栅格和其他类型)。它还添加了适用于这些空间类型的函数,运算符和索引增强功能。这些附加功能,运算符,索引绑定和类型增强了核心PostgreSQL DBMS的功能,使其成为一种快速,功能丰富且健壮的空间数据库管理系统。
功能列表
PostGIS 2+系列提供:
- 矢量和栅格数据的处理和分析功能,用于拼接,切块,变形,重分类以及使用SQL栅格地图代数的功能进行收集/联合,以进行细粒度的栅格处理
- 向量和栅格数据的空间重投影SQL可调用函数通过命令行和GUI打包工具支持导入/导出ESRI shapefile向量数据,并通过其他第三方开放源代码工具支持更多格式
用于从多种标准格式导入栅格数据的打包命令行:GeoTiff,NetCDF,PNG,JPG
使用SQL为标准文本格式(例如KML,GML,GeoJSON,GeoHash和WKT)呈现和导入矢量数据支持功能以各种标准格式GeoTIFF,PNG,JPG,NetCDF渲染栅格数据,仅举几例
无缝的栅格/矢量SQL可调用函数,用于按几何区域挤出像素值,按区域运行统计信息,按几何剪切栅格以及对栅格进行矢量化3D对象支持,空间索引和功能网络拓扑支持打包的Tiger Loader / Geocoder / Reverse Geocoder /利用美国人口普查老虎数据
此外,本文已经提到的要点/部分。我想补充的PostGIS的网站上提到它是如何工作
由于PostGIS是用C语言编写的,因此它可以使用C和C ++中的其他库,而且使用起来很自由。PostGIS取决于: