我已经从条例调查网站下载了一个shapefile,并使用ShpToSql.exe(此处是设置)将其导入到SQL中
这很好。
现在,我想查询特定经度和纬度所在的区域。
使用以下
邮政编码: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文件,但是当我尝试导入它时会出现错误消息
即使我仍然尝试导入它,我也会为shp文件中的每个形状收到类似这样的消息
答案 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中可能存在一些格式错误的数据。