Проверьте координату, если находится внутри многоугольника - PullRequest
1 голос
/ 18 октября 2019

У меня есть таблица с названием Координаты с 4 столбцами (Id, Longitude, Latitude, CityId), где Id - это PK, Longitude и Latitude - это координата, и, наконец, CityId - это FK с таблицей под названием Cities, в моей таблице Cities iесть 3 города, у каждого города есть список координат, мой вопрос: как я могу проверить, в каком городе находится точка (широта, долгота), это означает, что нужно вернуть CityId города, которому принадлежит точка, я использую .Net Core,Entity FrameworkCore, мне нужна функция, которая возвращает мне cityId из отправленной точки. Я искал, но все, что я нашел, это проверить, находится ли точка в многоугольнике, она возвращает истину или ложь, но в моем случае у меня есть 3 многоугольника (для 3 городов), поэтому мне не нужен боллеан, потому что у меня есть3 полигона, мне нужен идентификатор города, которому принадлежит точка. Буду признателен за помощь, спасибо продвинутый

Это мои координаты таблицы:

1 Ответ

0 голосов
/ 18 октября 2019

Возможно, вы захотите использовать STIntersection типа geography в SQL Server (я предполагаю, что вы используете, основываясь на скриншоте SSMS). Это будет хорошо в SQL Server 2016 +.

declare @g geography = 'POLYGON((-1 -1, 1 -1, 1 1, -1 1, -1 -1))'
declare @intersects geography = 'POINT(0 0)'
declare @notIntersects geography = 'POINT(-2 -2)'

select @g.STIntersection(@intersects).ToString(), 
       @g.STIntersection(@notIntersects).ToString()

(No column name)    (No column name)
POINT (0 0)         GEOMETRYCOLLECTION EMPTY

Вы можете запросить все точки, связанные с CityId (они в порядке, да?), И построить из них geography, а затем запросить пересечения. Кроме того, вы можете изменить схему, чтобы использовать geography с многоугольником для точек города.

Чтобы использовать эту функцию из EF Core, вам потребуется geography типы столбцов и использовать типы данных из Набор сетевых топологий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...