使用经度和纬度查询SQL几何数据

时间:2018-09-20 11:02:10

标签: sql sql-server tsql sql-server-2008 mapping

我已经从条例调查网站下载了一个shapefile,并使用ShpToSql.exe(此处是设置)将其导入到SQL中

ShapeFile being loaded using ShpToSql

这很好。

现在,我想查询特定经度和纬度所在的区域。

使用以下

邮政编码:WD25 7LR(哈利·波特工作室:D)
纬度:51.6910751568794
经度:-0.418128358906299

我以为我可以写

DECLARE @g  geography
set @g = geography::Point(51.6910751568794, -0.418128358906299, 4326)

select [name] from region where @g.STWithin(geom) is not null

但这会返回错误消息Operand type clash: geometry is incompatible with geography

所以我试图将数据类型更改为geometry,所以代码看起来像这样

declare @g  geometry
set @g = geometry::Point(51.6910751568794, -0.418128358906299, 4326)

select [name] from region where @g.STWithin(geom) = 1

但是没有返回结果。

有人可以帮我吗?只想知道经纬度是否在特定的POLYGON中。

更新:
我已经尝试使用Geography数据类型导入.shp文件,但是当我尝试导入它时会出现错误消息

enter image description here

即使我仍然尝试导入它,我也会为shp文件中的每个形状收到类似这样的消息

enter image description here

1 个答案:

答案 0 :(得分:0)

SQL Server不允许在geometry and geography data types之间进行比较。

如果您不担心精确性,则可以将点作为几何类型执行原始查询。在大多数不比较奇异形状和跨半球的小情况下,这将相当有效。

DECLARE @g  geometry
set @g = geometry::Point(51.6910751568794, -0.418128358906299, 4326)

select [name] from region where @g.STWithin(geom) is not null

否则,您将需要将数据作为一种地理类型导入,并根据您的注释在shapefile中可能存在一些格式错误的数据。