验证坐标是否在多边形内

时间:2019-10-18 00:48:40

标签: c# entity-framework-core coordinates

我在Cities表中有一个名为Coordinates的表,该表有4列(Id,Longitude,Latitude,CityId),其中Id是PK,Longitude和Latitude是坐标,最后CityId是FK,表名为Cities有3个城市,每个城市都有一个坐标列表,我的问题是我该如何验证在哪个城市是一个点(纬度,经度),这意味着使用.Net Core返回属于该点的城市的CityId,实体FrameworkCore,我需要一个函数,该函数从发送的Point返回给我cityID。 我已经搜索过,但是发现的所有内容都是为了验证一个点是否在多边形内,它返回的是对还是错,但是在我的情况下,我有3个多边形(用于3个城市),所以我不需要布尔型,因为我有3个多边形,我需要该点所属的城市ID。 感谢您的帮助,感谢您的帮助

This is my Table Coordinates:

1 个答案:

答案 0 :(得分:0)

您可能想在SQL Server中使用STIntersection类型的geography(我猜您正在使用,基于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列类型并使用Net Topology Suite中的数据类型。