我在SQL Server中有一个表,其中有“地理数据类型”列。我想查询该表以查找位于另一个给定地理点附近(在一定范围内)的行。有人对实现此目标的最佳方法有任何想法吗?我有2种选择在哪里进行这种类型的查询。我可以将其作为存储的proc在sql服务器上编写,也可以在c#代码中完成,因为我正在使用实体框架进行数据访问。
我将查询一个范围(例如100m)和传入的地理位置的查询。伪代码将是这样的…
选择行,其中rows.geo在给定地理点的范围内
我在网络上的SQL Server中查找地理位置查询示例时遇到了一些麻烦。
任何帮助,将不胜感激。
假设您在数据库中具有点的经度和纬度值。
select * from yourtable where SQRT ( POWER((yourtable.lat - reflat) * COS(reflat/180) * 40000 / 360, 2) + POWER((yourtable.long - reflong) * 40000 / 360, 2)) < radiusofinterest
reflat和reflong是您想知道附近地点的起点。感兴趣的半径是到该点的距离。40000是地球的周长。您可以使用更准确的数字。
我还没有使用SQLServer检查语法。…所以那里可能有一些错误。
cos(reflat)会根据您所在的纬度来校正周长。对于较小的距离,它应该可以正常工作。