我有一张纬度和经度的桌子。
我需要找到距离给定纬度为2英里半径的所有纬度和经度。
我使用来自sqlserver数据库的C#使用jquery ajax获取数据。
我在sqlserver查询中需要这个。
例如:
如果我给出37.774546和-122.433523,那么我需要从列表中获取所有lat-long 在2英里半径范围内。
答案 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);