首页 > 解决方案 > 使用经度和纬度查询 SQL 几何数据

问题描述

我从条例调查网站下载了一个 shapefile,并使用 ShpToSql.exe 将其导入 SQL,这里是设置

使用 ShpToSql 加载 ShapeFile

这很好进口。

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

使用以下

邮编: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

但没有返回任何结果。

有人可以帮我解决这个问题吗?只想知道经度和纬度是否在特定的多边形内。

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

在此处输入图像描述

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

在此处输入图像描述

标签: sqlsql-servertsqlsql-server-2008mapping

解决方案


SQL Server 不允许在几何和地理数据类型之间进行比较。

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

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

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

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


推荐阅读