PostgreSQL PostGIS 的5种空间距离排序(knn
摘要: 标签 PostgreSQL , PostGIS , operator , ops , knn 背景 PostgreSQL GiST索引支持排序接口,可以支撑空间、标准、数组、文本向量、文本等类型的排序。
标签
PostgreSQL , PostGIS , operator , ops , knn
背景
PostgreSQL GiST索引支持排序接口,可以支撑空间、标准、数组、文本向量、文本等类型的排序。
分别表示:
1、给定一空间位置,按空间距离排序输出
2、给定一数组、全文检索值、字符串,按数组、全文检索、字符串相似度排序输出
3、给定一标准类型的值,按标准类型的距离排序
数据库目前支持哪些排序操作符,可以参考:《PostgreSQL 如何确定某个opclass支持哪些操作符(支持索引),JOIN方法,排序》
![](https://img.haomeiwen.com/i2509688/593e9ff15c1b46a5.png)
安装了PostGIS后,对于空间排序,目前支持5种算法
PostGIS 空间排序算法
1、2D平面,两个对象实际距离
![](https://img.haomeiwen.com/i2509688/761e74cbb554e104.png)
![](https://img.haomeiwen.com/i2509688/9c107d0115733d9e.png)
![](https://img.haomeiwen.com/i2509688/9810cd5efe3a1c4e.png)
2、计算两条有效轨迹类型的距离(如果两个轨迹没有交集, 返回空)
![](https://img.haomeiwen.com/i2509688/332684d3241f4495.png)
![](https://img.haomeiwen.com/i2509688/4756e2c86f75671c.png)
![](https://img.haomeiwen.com/i2509688/64973af7994162eb.png)
3、2D平面,两个对象bound box实面的距离(所以如果BOUND BOX与另一对象 相交,包含,说明距离为0)
![](https://img.haomeiwen.com/i2509688/3d85c9ea7e7db49b.png)
![](https://img.haomeiwen.com/i2509688/8d80ba47865bf8e7.png)
![](https://img.haomeiwen.com/i2509688/d273d70f1f8b62f1.png)
4、与1类似,多维对象,返回两个bound box 中心点的距离
![](https://img.haomeiwen.com/i2509688/17e55ef4ce2ef5eb.png)
5、与3类似,多维对象,返回两个bound box 实体的距离
![](https://img.haomeiwen.com/i2509688/46c16b6080f063b7.png)
例子
1、点和线段的实际距离
![](https://img.haomeiwen.com/i2509688/38d66fb5940ff43a.png)
2、点和线段(BOUND BOX实体)的距离
![](https://img.haomeiwen.com/i2509688/38d35b25acaae8b1.png)
3、两个不相交轨迹(范围没有相交)的距离
![](https://img.haomeiwen.com/i2509688/1e736ba2dab22aa7.png)
4、两个有相交(范围有交集)的距离 (lower1upper1 与 lower2upper2 有相交)
![](https://img.haomeiwen.com/i2509688/4322e0df87938ddb.png)
5、两个有相交(范围有交集)的距离
![](https://img.haomeiwen.com/i2509688/c5e1e91953227ffa.png)
排序用法
![](https://img.haomeiwen.com/i2509688/10c71df22f4cb126.png)
参考
http://workshops.boundlessgeo.com/postgis-intro/knn.html
http://postgis.net/docs/manual-2.4/reference.html#Operators
http://postgis.net/docs/manual-2.4/geometry_distance_cpa.html
http://postgis.net/docs/manual-2.4/ST_DistanceCPA.html
《PostgreSQL 如何确定某个opclass支持哪些操作符(支持索引),JOIN方法,排序》
本文作者:德哥
本文为云栖社区原创内容,未经允许不得转载。