1

我希望你们能帮助我,或者至少为我指明正确的方向。我有一个代表多边形边界的 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 脚本的最终目标是处理每条路线和每个多边形,以确定一个点是否在其中任何一个内部。

我所做的如下:

  1. 有一个游标,它带来了所有不同的路线 ID
  2. 处理每一行以过滤并获得每条路线的坐标

现在我需要在连续编号之后将每个查询分成单独的主干。我怎样才能避免使用另一个光标并评估每一行来检测计数的变化?是否有一种查询或指令来完成此操作?

分离后,我可以将每个多边形解析为一个几何对象,并检查一个点是否在多边形的边界内。

4

1 回答 1

0

如果我正确地回答了你的问题,你可以做这样的事情。它会在您的连续值上增加 row_number。只要它们加一,并且 row_number 也加一,下一行就会出现在该“组”中

select 
    Grp = PointId - row_number() over (partition by route_id order by pointid),
    route_id,
    pointid,
    lat,
    lon
from yourTable
于 2018-03-20T22:41:39.897 回答