查找距离给定纬度为2英里半径的纬度和经度

时间:2014-07-15 10:51:59

标签: sql-server sql-server-2008

我有一张纬度和经度的桌子。

我需要找到距离给定纬度为2英里半径的所有纬度和经度。

我使用来自sqlserver数据库的C#使用jquery ajax获取数据。

我在sqlserver查询中需要这个。

例如:

如果我给出37.774546和-122.433523,那么我需要从列表中获取所有lat-long 在2英里半径范围内。

3 个答案:

答案 0 :(得分:1)

您可以尝试此数据库查询:

Declare @Miles int=10;

Declare @Latitude varchar(15);  
Declare @Longitude varchar(15);  
Set @Latitude = 'set input lat here'
Set @Longitude = 'set input long here'

Select Round(((DEGREES(ACOS(SIN(RADIANS(Latitude)) * SIN(RADIANS(@Latitude)) + COS(RADIANS(Latitude)) * COS(RADIANS(@Latitude)) * COS(RADIANS(Longitude - @Longitude))))) * 69.09),0) As Distance,
Latitude as lat, 
Longitude as longi     
From tablename                    
       Where @Miles > ((DEGREES(ACOS(SIN(RADIANS(Latitude)) * SIN(RADIANS(@Latitude)) + COS(RADIANS(Latitude)) * COS(RADIANS(@Latitude)) * COS(RADIANS(Longitude - @Longitude))))) * 69.09)

希望这会对你有所帮助。

答案 1 :(得分:1)

由于您使用的是SQL 2008,因此可以利用本机地理空间查询功能。例如:

declare @distance_in_meters int = 2000;
declare @point geography = geography::Point( 37.774546, -122.433523, 4326 );
declare @buffer geography = @point.STBuffer( @distance_in_meters );

select * 
from dbo.yourtable
where @buffer.STContains( t.Point );

请注意,dbo.yourtable.Point必须具有地理数据类型,并且实际数据必须与参考点具有相同的SRID。但它非常简单。

答案 2 :(得分:0)

这样做。

var bounds = map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var nw = new google.maps.LatLng(ne.lat(), sw.lng())
var x = google.maps.geometry.spherical.computeDistanceBetween(ne, nw);
var y = google.maps.geometry.spherical.computeDistanceBetween(sw, nw);