【问题标题】:TSQL - Geography: Which polygon?TSQL - 地理:哪个多边形?
【发布时间】:2016-11-10 11:38:54
【问题描述】:

使用 SQL Server,当我得到表达式 @multipolygon.STIntersects(@points) 的结果为 1 时,表明该点位于包含多多边形的多边形之一内

有没有办法找出多重多边形内的多个多边形中的哪个多边形实际上包含该点?

【问题讨论】:

  • 多多边形是一个特征,就像数字3是一个特征一样。此外,唯一能从下一个多边形中识别出一个多边形的是原始规范中的索引。您将如何自己识别任何多边形?如果它们可识别的,它们可能应该存储在不同的字段或行中,就像订单的商品应该存储在单独的OrderItem 行中一样

标签: sql-server sqlgeography


【解决方案1】:

我以前用过这样的东西:

select *
from dbo.Numbers as n
where @point.STIntersects(@multipolygon.STGeometryN(n.Number)) = 1
   and n.Number <= @multipolygon.STNumGeometries();

dbo.Numbers 是一个计数表。此查询将返回匹配的多边形的从 1 开始的索引。如果您也想要多边形本身,请将STGeometry(n.Number) 添加到选择列表中。

【讨论】:

  • 谢谢。 @multipolygon.STGeometry(n.Number) 应该是 @multipolygon.STGeometryN(n.Number);它似乎工作。
【解决方案2】:

尝试在查询中将单个多多边形行拆分为多个单多边形行,然后进行相交,这将只返回匹配的行。

我自己没有做过类似的事情,但这个链接可能会帮助https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d99cef8e-d345-44ee-87e1-f9d4df851c35/multipolygon-results-split-into-polygons?forum=sqlspatial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2012-01-14
    • 2013-08-31
    • 2016-12-08
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多