SQL几何在外形中找到点

时间:2018-03-24 12:44:33

标签: sql sql-server geospatial

在Microsoft SQL Server中,我有一个表MyData,它有一列几何类型的latlng。我试图弄清楚如何编写一个获取所有不在美国的点的查询,我甚至可以使用从阿拉斯加到佛罗里达并包括加拿大的矩形框外的所有内容。一旦我知道如何做到这一点,我知道我总是可以绘制一个更复杂的多边形,这是我需要的国家。谢谢!

1 个答案:

答案 0 :(得分:1)

这对我有用:

declare @us geography = geography::STGeomFromText(«WKT for US», 4326)
set @us = @us.MakeValid()

declare @cities table (name varchar(100), geo geography)
insert into @cities (name, geo) values 
    ('London', geography::Point(51.5074, -0.1278,  4326)),
    ('Boston', geography::Point(42.3601, -71.0589, 4326));

select name, geo.STIntersects(@us)
from @cities as c

我通过略微复杂的手段获得了美国边界的WKT。也就是说,我转到Census Bureau并下载了shapefile,然后使用n online tool将其转换为WKT。如果您有更好的WKT来源,请使用它。

解决方案的内容虽然在STIntersects()电话中。该方法返回一个布尔值,表示两个地理空间实例是否相交。在这种情况下,因为一个是一个点而另一个是多边形,它将告诉您该点是否在边界内。您也可以使用STDisjoint()来说明相反的情况(即如果点在边界内,则该方法返回true)。好狩猎。