postgis空间函数介绍

postgis空间函数介绍

  1. ST_Contains
    ST_Contains 是 PostGIS 提供的一个空间关系函数,用于判断一个几何对象是否完全包含另一个几何对象。具体来说,它接收两个几何参数,并返回一个布尔值(true 或 false),表示第一个几何对象(通常称为“容器”)是否完全包围了第二个几何对象(通常称为“被包含对象”)。以下是关于 ST_Contains 函数的详细介绍:
    参数说明:
    geometry A: 第一个几何对象,即潜在的“容器”。可以是点(POINT)、线串(LINESTRING)、多边形(POLYGON)、多点集合(MULTIPOINT)、多线集合(MULTILINESTRING)、多边形集合(MULTIPOLYGON)、地理集合(GEOMETRYCOLLECTION)等任何有效的PostGIS几何类型。
    geometry B: 第二个几何对象,即待检测是否被包含的几何体。类型应与参数A兼容,且必须能够被参数A完全包含。
    返回值:
    boolean: 如果参数A完全包含参数B,则返回true;否则,返回false。如果两个几何对象不相交或重叠,或者它们的类型不兼容,ST_Contains也会返回false。
    应用场景示例:
    点与多边形的关系:确定一个点是否位于一个多边形内部。例如,判断某个地理位置坐标(点)是否位于城市行政区划(多边形)内。
    多边形与多边形的关系:检查一个区域(多边形)是否完全包含在另一个更大的区域之内。如,验证一个地块是否完全位于某个行政区内。
    数据过滤:在SQL查询中,利用ST_Contains作为条件来筛选满足特定空间关系的数据记录。例如,找出所有位于指定地理范围内的设施点。

SELECT *
FROM facilities
WHERE ST_Contains(
ST_GeomFromText(‘POLYGON((-122.69 45.51, -122.¼ 45.51, -122.¼ 45.54, -122.69 45.54, -122.69 45.51))’),
facilities.location – 假设facilities表有location列存储点数据
);

上述查询会返回所有位于指定多边形(西雅图市中心大致范围)内的设施点记录。
注意事项:
ST_Contains 对于点、线、面等几何对象的边界判定遵循“边界属于内部”的原则。也就是说,如果一个点恰好位于多边形的边上,或者一条线与多边形边线重合,都将被视为被包含。
为了确保正确比较,参与比较的几何对象应具有相同的坐标参照系统(SRID)。如果需要,可以通过 ST_SetSRID 函数为几何对象设置正确的SRID。
ST_Contains 仅适用于二维空间关系。对于三维或更高维度的空间数据,应使用类似 ST_3DContains 或其他维度专用的函数。
总之,ST_Contains 是PostGIS中用于判断一个几何对象是否完全包含另一个几何对象的关键空间关系函数,广泛应用于地理信息系统中的空间查询、过滤和分析。

  1. ST_Disjoint
    ST_Disjoint 是 PostGIS 提供的一个空间关系函数,用于判断两个几何对象是否在空间上互不相交。如果两个几何对象没有任何共同的点(包括边界和内部点),则认为它们是“不相交的”或“脱节的”,函数返回 true;反之,如果两个几何对象有任何形式的接触或重叠,函数返回 false。以下是 ST_Disjoint 函数的详细说明:

参数说明:
geometry A: 第一个几何对象,可以是任意有效的PostGIS几何类型,如点、线、面、多点、多线、多面、几何集合等。
geometry B: 第二个几何对象,与参数 A 类型兼容,用于与参数 A 进行不相交性检查。
返回值:
boolean: 如果两个几何对象在空间上不相交(即它们之间没有任何点重合),函数返回 true;如果它们存在任何形式的相交(包括点、边或面的接触、重叠),函数返回 false。
应用场景示例:
数据过滤:在SQL查询中,利用ST_Disjoint作为条件来筛选出那些空间上互不重叠的几何对象。例如,找出所有互不重叠的行政区域。
冲突检测:检查两个或多个地理要素之间是否存在空间冲突,如检测道路规划方案中是否有新建道路与现有建筑物发生交叉。
示例 SQL 查询:

SELECT *
FROM regions r1, regions r2
WHERE r1.id < r2.id AND NOT ST_Disjoint(r1.geom, r2.geom);
上述查询将返回所有互不相交的区域对(r1, r2),即它们在空间上有重叠。

注意事项:
ST_Disjoint 对于点、线、面等几何对象的边界判定遵循“边界属于内部”的原则。这意味着即使两个几何对象的边界恰好接触,也认为它们是相交的(即返回 false)。
参与比较的几何对象应具有相同的坐标参照系统(SRID)。如果需要,可以通过 ST_SetSRID 函数为几何对象设置正确的SRID。

  1. ST_Crosses
    ST_Crosses 是 PostGIS 提供的另一个空间关系函数,用于判断两个线性或面状几何对象是否以非端点接触的方式相交。换言之,当两个对象在空间上有交叉,且交叉部分不仅仅是端点接触时,ST_Crosses 返回 true。以下是 ST_Crosses 函数的详细说明:
    ST_Crosses(geometry A, geometry B) → boolean
    参数说明:
    geometry A: 第一个线性或面状几何对象,可以是线串(LINESTRING)、多线串(MULTILINESTRING)、多边形(POLYGON)、多面(MULTIPOLYGON)等。
    geometry B: 第二个与参数 A 类型兼容的线性或面状几何对象,用于与参数 A 进行交叉性检查。
    返回值:
    boolean: 如果两个几何对象在空间上以非端点接触的方式相交,函数返回 true;如果它们仅仅是端点接触、完全包含、部分包含、不相交或以其他方式接触(如接触但不交叉),函数返回 false。
    应用场景示例:
    道路网络分析:检测两条公路是否存在交叉路口(非端点交汇)。
    地理信息系统中的交互检测:判断两根电缆线是否在非端点处交叉,以评估潜在的安全风险。
    示例 SQL 查询:
    SELECT road_id, crossing_road_id
    FROM roads r1, roads r2
    WHERE r1.id < r2.id AND ST_Crosses(r1.geom, r2.geom);
    上述查询将返回所有存在交叉路口的公路对(r1, r2)。
    注意事项:
    ST_Crosses 主要适用于线性或面状几何对象。对于点和点、点和线、点和面之间的交叉检查,通常不会使用此函数,而是采用 ST_Intersects 或其他更适合的函数。
    参与比较的几何对象应具有相同的坐标参照系统(SRID)。如果需要,可以通过 ST_SetSRID 函数为几何对象设置正确的SRID。
    综上所述,ST_Disjoint 和 ST_Crosses 分别用于判断两个几何对象是否不相交(无任何共同点)和是否以非端点接触的方式相交,在地理信息系统和空间数据分析中具有重要应用。

  2. ST_Intersects
    ST_Intersects 是PostGIS提供的空间关系函数,用于判断两个几何对象是否在空间上存在任何形式的相交。如果两个对象有共同的点(包括边界和内部点),不论面积大小或形状如何,ST_Intersects 返回 true;如果它们在空间上完全分离,函数返回 false。该函数广泛应用于查询两个或多个地理要素之间是否存在任何重叠或接触的情况。
    函数签名:ST_Intersects(geometry A, geometry B) → boolean

参数说明:
geometry A: 第一个几何对象,可以是任意有效的PostGIS几何类型。
geometry B: 第二个与参数 A 类型兼容的几何对象,用于与参数 A 进行相交性检查。
返回值:
boolean: 如果两个几何对象在空间上存在任何形式的相交,函数返回 true;如果它们在空间上完全分离,函数返回 false。
应用场景示例:
数据过滤:查询某区域内的所有设施点,或查询与某条线段相交的道路段。
示例 SQL 查询:
SELECT *
FROM facilities
WHERE ST_Intersects(
ST_GeomFromText(‘POLYGON((-122.69 45.51, -122.¼ 45.51, -122.¼ 45.54, -122.69 45.54, -122.69 45.51))’),
facilities.location – 假设facilities表有location列存储点数据
);
上述查询会返回所有与指定多边形相交的设施点记录。
注意事项:
参与比较的几何对象应具有相同的坐标参照系统(SRID)。如果需要,可以通过 ST_SetSRID 函数为几何对象设置正确的SRID。

  1. ST_SetSRID
    ST_SetSRID 是用于设置几何对象坐标参照系统的函数。它允许用户指定一个几何对象所使用的坐标系标识符(SRID),这对于进行精确的空间操作和比较至关重要。
    函数签名: ST_SetSRID(geometry geom, integer srid) → geometry

参数说明:
geometry geom: 要设置SRID的几何对象。
integer srid: 目标坐标参照系统标识符(Spatial Reference System Identifier),如EPSG:4326代表WGS 84经纬度坐标系。
返回值:
geometry: 返回带有新SRID设置的几何对象。
应用场景示例:
坐标系转换:确保来自不同源或使用不同坐标系的数据在同一查询中进行比较时使用相同的坐标系。
示例 SQL 查询:
SELECT ST_AsText(ST_SetSRID(ST_MakePoint(-122.¾, 45.52), 4326));
上述查询创建了一个WGS 84坐标系下的点,并显示为Well-Known Text (WKT)格式。
注意事项:
使用正确的SRID对于确保空间操作的精度和一致性至关重要。在进行空间查询或操作前,应确保所有几何对象具有正确的SRID

  1. ST_AsGeoJSON
    ST_AsGeoJSON 是将PostGIS几何对象转换为GeoJSON格式文本的函数。GeoJSON是一种常用的地理空间数据交换格式,便于在网络应用中传输和展示地理数据。
    函数签名: ST_AsGeoJSON(geometry geom, integer maxdecimaldigits = NULL, boolean pretty = false) → text
    参数说明:
    geometry geom: 要转换为GeoJSON的几何对象。
    integer maxdecimaldigits: 可选参数,指定输出GeoJSON中坐标的小数位数。若为NULL,则使用默认值(通常为15)。
    boolean pretty: 可选参数,若为true,则返回格式化的、易读的GeoJSON字符串。默认为false。
    返回值:
    text: 返回表示输入几何对象的GeoJSON格式文本。
    应用场景示例:
    数据导出:将数据库中的几何数据以GeoJSON格式输出,供Web地图或其他支持GeoJSON的应用使用。
    示例 SQL 查询:
    SELECT ST_AsGeoJSON(geography_column) AS geojson
    FROM my_table;
    上述查询将my_table中的地理数据转换为GeoJSON文本。
    注意事项:
    GeoJSON输出默认使用小数表示坐标,适用于WGS 84等基于度的坐标系。对于基于米或其他单位的坐标系,可能需要额外处理以确保坐标表示的正确性。

  2. ST_GeomFromText
    ST_GeomFromText 是从Well-Known Text (WKT)格式的字符串中解析并创建几何对象的函数。WKT是一种人类可读的文本表示法,用于描述几何对象(如点、线、面)。
    函数签名: ST_GeomFromText(text wkt, integer srid = -1) → geometry
    参数说明:
    text wkt: Well-Known Text字符串,描述一个几何对象。
    integer srid: 可选参数,指定几何对象的坐标参照系统标识符。若为-1(默认值),则创建的对象没有明确的SRID。
    返回值:
    geometry: 返回根据WKT字符串创建的几何对象。
    应用场景示例:
    数据导入:从外部文本文件或用户输入中读取

  3. ST_Overlaps
    ST_Overlaps 是PostGIS提供的空间关系函数,用于判断两个几何对象是否在空间上存在重叠但并不完全包含对方的情况。具体而言,当两个对象有共同的点(包括边界和内部点),并且它们的交集既不是空集也不是任何一个原始对象,函数返回 true;如果它们完全分离或其中一个完全包含另一个,函数返回 false。
    函数签名:ST_Overlaps(geometry A, geometry B) → boolean
    参数说明:
    geometry A: 第一个几何对象,可以是任意有效的PostGIS几何类型。
    geometry B: 第二个与参数 A 类型兼容的几何对象,用于与参数 A 进行重叠性检查。
    返回值:
    boolean: 如果两个几何对象在空间上存在重叠但不完全包含对方,函数返回 true;如果它们完全分离或其中一个完全包含另一个,函数返回 false。
    应用场景示例:
    区域重叠分析:确定两个行政区域是否存在部分重叠。
    示例 SQL 查询:
    SELECT *
    FROM regions r1, regions r2
    WHERE r1.id < r2.id AND ST_Overlaps(r1.geom, r2.geom);

上述查询将返回所有存在部分重叠的区域对(r1, r2)。
注意事项:
ST_Overlaps 不考虑对象的完全包含关系,只关注是否存在部分重叠

  1. ST_Touches
    ST_Touches 是PostGIS提供的空间关系函数,用于判断两个几何对象是否仅在边界上接触,而没有共同的内部点。换句话说,如果两个对象在空间上相邻但没有共享任何内部空间(即它们的交集仅限于边界上的点),函数返回 true;如果它们相交、完全包含或完全分离,函数返回 false。
    函数签名:ST_Touches(geometry A, geometry B) → boolean

参数说明:
geometry A: 第一个几何对象,可以是任意有效的PostGIS几何类型。
geometry B: 第二个与参数 A 类型兼容的几何对象,用于与参数 A 进行边界接触检查。
返回值:
boolean: 如果两个几何对象仅在边界上接触,函数返回 true;如果它们相交、完全包含或完全分离,函数返回 false。
应用场景示例:
边界邻接分析:查找所有相邻的行政区域或地块。
示例 SQL 查询:
SELECT *
FROM regions r1, regions r2
WHERE r1.id < r2.id AND ST_Touches(r1.geom, r2.geom);
上述查询将返回所有边界相邻的区域对(r1, r2)。
注意事项:
ST_Touches 仅关注边界接触,不考虑对象的内部点或相交部分。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值