sql - 使用经度和纬度查询 SQL 几何数据
问题描述
我从条例调查网站下载了一个 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
但没有返回任何结果。
有人可以帮我解决这个问题吗?只想知道经度和纬度是否在特定的多边形内。
更新:
我尝试使用地理数据类型导入 .shp 文件,但是当我尝试导入它时会出现错误消息
即使我仍然尝试导入它,我也会为 shp 文件中的每个形状收到这样的消息
解决方案
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 中可能存在一些格式错误的数据。
推荐阅读
- django - 无法创建 Django 超级用户
- ffmpeg - 将 sox 与 ffmpeg 一起使用时如何设置示例格式?
- php - 在 PHP 字符串中使用 PHP 变量
- c++ - 将向量元素上的指针传递到地图中
- android - 为什么单击菜单项时没有打开活动?
- sql - 对联接表进行 GROUP BY 和相等查询的最佳索引
- laravel - del -rf ../public/{js,css,img} && vue-cli-service build --no-clean | 参数格式不正确 - “public”
- angularjs - 从父组件到子组件的AngularJS attr绑定不起作用
- javascript - 有没有办法使用 .NET MVC 提供 vue.js statc 文件?
- android - OkHttp静默重试上可修改请求的问题