gpt4 book ai didi

sql - 显示包含建筑物质心的地 block 的空间 SQL 查询

转载 作者:行者123 更新时间:2023-12-01 07:18:40 24 4
gpt4 key购买 nike

我正在尝试编写一个查询,以选择包含特定建筑代码 (bldg_code = 3) 的质心 的地 block 。

地 block 列在“city.zoning”表中,并包含每个地 block 的 PIN、几何图形和面积列。 “buildings”表包含一个 bldg_type 和 bldg_code 列,指示建筑物类型及其对应代码。此查询感兴趣的建筑类型的 bldg_code 为 3。

到目前为止,我已经开发了一个查询,该查询显示了与感兴趣的建筑类型交互的地 block :

select a.*
from city.zoning a, username.buildings b
where b.bldg_code = 3 and sdo_anyinteract(a.geom,b.geom) = 'TRUE';

有什么想法吗?

最佳答案

您可以使用 SDO_GEOM.SDO_CENTROID ( documentation ) 找到几何的质心。

请注意,此函数提供的质心只是数学质心,可能并不总是位于几何体内部,例如,如果您的多边形为 L 形。 SpatialDB Adviser 有 a good article on this ,但这里有一个简单的例子:

Centroid laying outside its parent geometry

如果这对您来说不是问题并且您不需要那种级别的准确性,只需使用内置的,但如果您确实认为这是一个问题(就像我过去所做的那样),那么SpatialDB Adviser 有 a standalone PL/SQL package that corrrectly calculates centroids .

根据您的性能需求,您可以即时计算质心并直接在查询中使用它们,或者,将质心列添加到表中并使用应用程序代码计算和缓存值(最佳情况) 或触发器(最坏的情况)。

您的查询看起来像这样:

SELECT a.*
FROM city.zoning a
JOIN username.buildings b ON sdo_contains(a.geom, b.centroid) = 'TRUE'
WHERE b.bldg_code = 3

请注意,这是在空间索引的 a.geom 列和一个新列 b.centroid 的基础上使用 SDO_CONTAINS已添加并填充(注意 - 查询未测试)。如果分区几何未按空间索引,则您需要使用 SDO_GEOM.RELATE,或对质心列进行索引并反转逻辑以使用 SDO_INSIDE

关于sql - 显示包含建筑物质心的地 block 的空间 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com