我希望你们能帮助我,或者至少为我指出正确的方向。我有一个表示多边形边界的 SQL Server 表。在简化版本中大致如下所示:
=====================================================
Route id | pointId | Lat | Lon
=====================================================
1 | 1 | 19.12873 | -100.01221
1 | 2 | 19.65468 | -100.01221
1 | 3 | 19.65465 | -100.01221
1 | 1 | 19.65468 | -100.01221
1 | 2 | 19.35468 | -100.01221
1 | 3 | 19.68798 | -100.01221
1 | 4 | 19.98785 | -100.01221
2 | 1 | 19.12873 | -100.01221
2 | 2 | 19.12873 | -100.01221
2 | 3 | 19.12873 | -100.01221
如您所见,有些路线包含两个多边形,了解它的方法是查看 pointId 字段的连续数字。如果 id 重置为 1,但路径相同,则您拥有的是包含两个多边形的路径。我的 SQL 脚本的最终目标是处理每条路线和每个多边形,以确定点是否位于其中任何一个内。
我所做的如下:
- 有一个游标,该游标带来所有不同的路由 ID 处理每条
- 线以过滤并获取每条路线的坐标
现在,我需要在连续编号之后将每个查询分成单独的主干。如何避免使用另一个游标并计算每行以检测数字的变化?是否有一种查询或指令来完成此操作?
分离后,我可以将每个多边形解析为几何对象,并检查点是否在多边形的边界内。
如果我正确遵循您的问题,您可以做这样的事情。它会对连续值进行递增row_number。只要它们递增 1,并且row_number也递增,下一行将出现在该"组"中
select
Grp = PointId - row_number() over (partition by route_id order by pointid),
route_id,
pointid,
lat,
lon
from yourTable