У меня есть две таблицы в SQLServer 2014, одна с ~ 100 М точками и одна с ~ многоугольниками ~ 2000. Каждая точка пересекается только с одним из полигонов. Задача состоит в том, чтобы назначить идентификатор пересекающегося многоугольника точке.Пересечение многих точек со многими полигонами
Какова наилучшая практика?
Я пробовал его на 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,
)
Обе таблицы имеют пространственный индекс на «место» и «Shape»
Какие типы данных ваших точек/полигонов? – BICube
Тип данных для обоих - SQLGeography – Michael