我是一般的编码新手,正在开发ASP.NET中的社交网络项目。我必须想出一种方法来根据他们在个人资料中设置的位置显示附近的用户。它涉及从SQLServer检索该数据(它们的设置位置),因此我可以显示相关用户。
我该怎么做呢?我使用C#作为控制器,需要在html文档中引用它。我感谢任何帮助。
感谢!!!
答案 0 :(得分:0)
如果是一个广泛的话题,那么如果我可能建议您从数据库开始并稍后担心UI。
假设您有一个用户表,并且他们当前的位置已登录到数据库中。
现在,您想要找到半径5英里范围内的所有内容。考虑以下。注意@Users只是一个表变量,将替换为您的实际表。
Declare @Users table (ID int,UserName varchar(25),Lat float,Lng float)
Insert Into @Users values
(1,'James',41.721913,-71.265238),
(2,'Joseph',41.709084,-71.386673),
(3,'Mary',41.709084,-71.386673),
(4,'Sam',41.68745,-71.270122),
(5,'Sally',41.756903,-71.222215),
(6,'John',41.744068,-71.315024) -- Let's assume this is my current position
Declare @MyLat float = 41.744068
Declare @MyLng float = -71.315024
Declare @Miles float = 5
Select MilesAway = [dbo].[udf-Geo-Calc-Miles] (@MyLat,@MyLng,A.Lat,A.Lng)
,A.*
From @Users A
Where [dbo].[udf-Geo-Calc-Miles] (@MyLat,@MyLng,A.Lat,A.Lng) <= @Miles
Order by 1
返回
现在,我使用UDF计算里程(可以转换为米)
CREATE Function [dbo].[udf-geo-Calc-Miles] (@Lat1 float,@Lng1 float,@Lat2 Float,@Lng2 float)
Returns Float as
Begin
Declare @Miles Float = (Sin(Radians(@Lat1)) * Sin(Radians(@Lat2))) + (Cos(Radians(@Lat1)) * Cos(Radians(@Lat2)) * Cos(Radians(@Lng2) - Radians(@Lng1)))
Return Case When @Miles is null then 0 else abs((3958.75 * Atan(Sqrt(1 - power(@Miles, 2)) / @Miles))) end
End