已被阅读 2233 次 | 文章分类:geoserver | 2019-12-25 23:15
作为空间数据库,空间实体之间的关系是必不可少需要了解的;本节认识postgis空间数据库中关于几何实体空间关系的查询方法
一:ST_Equals(geometry A, geometry B)用于测试两个图形的空间相等性。
如果两个几何实体的坐标值全部相等,那么该方法会返回true
输入如下语句,先查询所有银行点信息
然后将geom,几何实体字段作为条件查询;比如查询和几何实体"010100000093812CD9EB145D402DA027D0EDC34240"一样的几何点
select name,geom,ST_AsText(geom) from bank
WHERE ST_Equals(geom, '010100000093812CD9EB145D402DA027D0EDC34240');
二:ST_Intersects用于测试几何实体是否相交
如果两个几何图形有重合或者相接的地方,那么就可以称为相交
这里以线数据表为例,选择山东省高速路线数据测试,可查询表数据如下
然后查询与第一条G22高速路相交的几何对象有哪些
select name,geom,ST_AsText(geom) from highspeedrail
WHERE ST_Intersects(
geom,
ST_GeomFromText(
'MULTILINESTRING((117.57951288 38.03127696,117.57962196 38.03105403,117.57978684 38.03070897,117.57992616 38.0304,117.58001508 38.03019399,117.58004892 38.03006799,117.58012812 38.02968603,117.58016088 38.02959999,117.58071492 38.028312,117.58120812 38.02727097,117.58175388 38.02619799,117.582345 38.02511196,117.583173 38.02351797,117.58385592 38.02222503,117.58488012 38.02026204,117.58560084 38.018889,117.58666284 38.01690999,117.58707 38.01613599,117.58718484 38.01589497,117.588168 38.01401397,117.58911408 38.012247,117.58934196 38.01182301,117.58997592 38.01063402,117.59023008 38.01014802,117.59119812 38.008278,117.591714 38.007189,117.59212584 38.00630403,117.59263812 38.005164,117.59310108 38.00405196,117.59317704 38.00388402,117.59330016 38.00359098,117.59373684 38.00241,117.59412204 38.00136096,117.59448384 38.00031696,117.59475888 37.99943703))'))
为方便理解,找一条相交较多的,我们用arcgis或者其他工具打开看一下数据
可以看到与济南殷家林枢纽立交 高速路相交的应该较多
我们随便选择一条济南殷家林枢纽立交结合线段查询可得与之相交的线段有如下六条记录
三:ST_Within和ST_Contains
ST_Within和ST_Contains;表示一个几何对象是否完全包含与另一个集合对象
1、如果第一个几何图形完全位于第二个几何图形内,则ST_Within(geometry A, geometry B)返回TRUE
2、如果第一个几何图形完全包含第二个几何图形内,则ST_Contains(geometry A, geometry B)返回TRUE
多边形完全包含另一个多边形几何对象
SELECT ST_CONTAINS(
ST_GeometryFromText('POLYGON((0 0,10 0,10 10,0 10,0 0))'),
ST_GeometryFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))'));
点完全包含在线内部,如下看出只有内部点才返回true,两个端点返回false
四:ST_Distance
此方法可以得出点到其他几何对象的距离,不比计算直接使用即可
SELECT ST_Distance(
ST_GeometryFromText('POINT(1 5)'),
ST_GeometryFromText('LINESTRING(3 5, 5 2)'));
QQ:3410192267 | 技术支持 微信:popstarqqsmall
Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号