当 Postgres 已经具有地理类型时需要 Postgis

Posted

技术标签:

【中文标题】当 Postgres 已经具有地理类型时需要 Postgis【英文标题】:Need for Postgis when Postgres already has geo type 【发布时间】:2022-01-12 03:48:23 【问题描述】:

我正在讨论为 Postgres 安装 PostGIS 扩展。但是,从 Postgres 本身的类型来看,它似乎支持基本的Geometric types,包括:

8.8.1. Points
8.8.2. Lines
8.8.3. Line Segments
8.8.4. Boxes
8.8.5. Paths
8.8.6. Polygons
8.8.7. Circles

那么,使用 PostGIS 的用例是什么?在处理空间数据时 Postgres 本身不会给我带来什么? (忽略 UI 考虑)。

【问题讨论】:

嗯,简而言之,在平面上发生的二维几何与在椭圆体上发生的地理空间几何之间存在差异(在某些情况下可能可以忽略不计,而在其他情况下则不然……)。 “GIS”中的“g”代表“geo(graph(y|ic)?)”,所以是后者。 地理空间计算变得非常复杂。 (搜索“haversine 公式”)。那是为了点对点距离的简单操作。 Postgis 提供了一套完整的地理空间功能; Postgres 本身不包含这些功能。 @Belayer 我明白了。为什么 postgres 没有任何 ST_ 函数?它似乎只是有一些可以使用的常见“形状”。 如果您确实需要地理空间计算,那么 PostGIS 就没有办法了。如果您只需要存储(几何)形状,那么核心 Postgres 就足够了。对几何形状的操作不同于对地理空间对象的操作。 【参考方案1】:

这完全取决于您的用例。如果您计划应用简单的空间操作,例如包含或距离,则本机几何数据类型可以解决问题。但无论如何,这里有几件事可以说明 PostGIS:

PostGIS 是一个不断发展的大型开源项目。 它实际上有超过 1.3k kickass functions 抽象出时空查询中涉及的大部分繁琐数学。只考虑诸如空间参考系统 (SRS) 转换、投影或简单地处理polyhedral surfaces 之类的操作,您很快就会意识到地理空间数据所涉及的复杂性。相信我,这不是微不足道的。即使是以 WKT、KML 或 GeoJSON 等不同格式呈现地理空间数据的简单功能也可以为您节省大量时间! 它使您能够轻松访问大多数现代 GI 软件的数据。想将您的数据绘制成地图吗? ;) 它可以作为OGC Standard web services 的数据源,例如Web Feature Service (WFS) 或Web Map Service (WMS)。看看GeoServer。 它在 GIS 社区中得到了很好的采用,这意味着您可以在网上找到大量的内容和支持。 它支持矢量和栅格数据类型。 它提供(多维)空间索引。众所周知,地理空间数据集非常庞大,因此必须采用适当的索引机制才能在适当的查询时间内执行空间操作。 它提供网络拓扑支持。 它是其他非常方便的扩展的构建块,例如pgRouting 和 ogrfdw。

优势不胜枚举。

这里有一些可以通过 PostGIS 轻松解决的实际用例:

PostGIS convert meters to degree using epsg 5186 Getting all Buildings in range of 5 miles from specified coordinates Postgres - Calculate distance with postgis Buffers (Circle) in PostGIS

【讨论】:

【参考方案2】:

地球表面不是无限的二维平面。将其近似为一个是否合理取决于您在做什么。

【讨论】:

以上是关于当 Postgres 已经具有地理类型时需要 Postgis的主要内容,如果未能解决你的问题,请参考以下文章

GeoServer 开发还是使用?如何与地理服务器集成?

应用程序在后台时不会触发地理围栏转换

地理围栏 - 检查用户是不是已经在围栏内

如何使用 SQL 查询将值传递给具有空间/地理数据类型的存储过程

postgres:具有无类型返回值的函数

Page Object 设计模式 与 实战