gpt4 book ai didi

sql-server - 从查询中的多边形获取空间点列表

转载 作者:行者123 更新时间:2023-12-03 20:19:08 25 4
gpt4 key购买 nike

我有一个包含各种定义多边形的数据库,这些多边形表示商业园区 map 上建筑物的外边界。

如果我在 Management Studio 中执行 Select,我会得到类似于以下的结果:

LocationCode    LocationPolygon
1 POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))
2 POLYGON((10 10, 20 10, 20 20, 10 20, 10 10))

我想得到的是以下内容:
LocationCode    PointX    PointY
1 1 1
1 2 1
1 2 2
1 1 2
2 10 10
etc etc etc

在 SQL 查询中使用 SQL Server 从多边形中提取点时,我看不到任何地方?我显然可以取整个多边形,然后在客户端上完成其余的工作,但如果可能的话,我宁愿使用 SQL。

任何帮助我指出正确的方向表示赞赏。

最佳答案

我已经 answered之前和那个时候的一个类似问题我使用用户定义的函数来提取点并返回一个表。假设一个表 Locations定义为:(LocationCode int, LocationPolygon geometry)然后是以下函数:

CREATE FUNCTION dbo.GetPoints()
RETURNS @ret TABLE (LocationCode INT, PointX INT, PointY INT)
AS
BEGIN
DECLARE @max INT
SET @max = (SELECT MAX(LocationPolygon.STNumPoints()) FROM Locations)

;WITH Sequence(Number) AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number + 1
FROM Sequence
WHERE Number < @max
)
INSERT INTO @ret
SELECT
l.LocationCode
,l.LocationPolygon.STPointN(nums.number).STX AS PointX
,l.LocationPolygon.STPointN(nums.number).STY AS PointY
FROM Locations l, Sequence nums
WHERE nums.number <= l.LocationPolygon.STNumPoints()
RETURN
END;

当作为 SELECT DISTINCT * FROM dbo.GetPoints() ORDER BY LocationCode; 执行时将给出以下结果(使用您的样本数据):
| LOCATIONCODE | POINTX | POINTY |
|--------------|--------|--------|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 2 | 10 | 10 |
| 2 | 10 | 20 |
| 2 | 20 | 10 |
| 2 | 20 | 20 |

我相信这个功能可以改进,但它应该给你一些关于如何解决这个问题的想法。

Sample SQL Fiddle

关于sql-server - 从查询中的多边形获取空间点列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28237265/

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