【发布时间】:2015-06-16 02:37:47
【问题描述】:
我在 SQLServer 2014 中有两张表,一张有大约 100M 点,一张有大约 2000 个多边形。 每个点仅与一个多边形相交。任务是将相交多边形的 ID 分配给该点。
最好的做法是什么?
我在 C# 中尝试过,加载两个数据表,逐行遍历点,逐行遍历多边形以查找匹配项。
Boolean inside = (Boolean)polygon.STIntersects(point);
这非常慢,因为我必须分别访问每个点并多次访问每个多边形以检查交叉点。非常欢迎任何想法!
为点创建表语句
CREATE TABLE [dbo].[ManyPoints](
[idNearByTimeLine] [int] IDENTITY(1,1) NOT NULL,
[msgID] [bigint] NOT NULL,
[userID] [bigint] NULL,
[createdAT] [datetime2](0) NULL,
[WGSLatitudeX] [numeric](9, 6) NULL,
[WGSLongitudeY] [numeric](9, 6) NULL,
[location] [geography] NULL
)
和多边形
CREATE TABLE [dbo].[ManyPolygons](
[OBJECTID] [int] IDENTITY(1,1) NOT NULL,
[Shape] [geography] NULL,
[ID_0] [int] NULL,
[ISO] [nvarchar](3) NULL,
[NAME_0] [nvarchar](75) NULL,
[ID_1] [int] NULL,
[NAME_1] [nvarchar](75) NULL,
[ID_2] [int] NULL,
[NAME_2] [nvarchar](75) NULL,
[ID_3] [int] NULL,
[NAME_3] [nvarchar](75) NULL,
[NL_NAME_3] [nvarchar](75) NULL,
[VARNAME_3] [nvarchar](100) NULL,
[TYPE_3] [nvarchar](50) NULL,
[ENGTYPE_3] [nvarchar](50) NULL,
[ORIG_FID] [int] NULL,
)
两个表都有关于“位置”和“形状”的空间索引
【问题讨论】:
-
您的点/多边形的数据类型是什么?
-
两者的数据类型都是 SQLGeography
标签: c# sql-server bigdata intersection sqlgeography