获取登录用户15英里范围内经纬度的用户数
Posted
技术标签:
【中文标题】获取登录用户15英里范围内经纬度的用户数【英文标题】:Get users count whose latitude and logitude within 15 miles from logged in user 【发布时间】:2022-01-03 11:39:05 【问题描述】:让我解释一下我的情况:
首先用户将登录。 现在在数据库中,我正在为该登录用户保存纬度和经度。
现在我想统计所有其他经纬度在该登录用户 15 英里范围内的用户。
我尝试过使用 .net 的一些默认功能,但它不起作用。
【问题讨论】:
我们在 SQL Server 中进行距离计算,它内置了对地理数据类型的支持。因此,如果您正在使用它,那么这是一个选择。如果您需要客户端选项,您可能需要这样的库:github.com/sibartlett/Geo。不过我自己没试过这个。 分享您尝试过的 c# 代码,并解释什么不起作用。给minimal, complete, verifiable example 您是否将您的位置作为geography::Point
存储在sqlserver 中?如果没有,您应该考虑它,因为它使这变得容易,例如 SELECT * FROM users WHERE location.STDistance(@loggedInUserLocation) < 15 * 1609.34
也就是说,我认为没有一种使用地理索引这样的查询的好方法,因此您可能希望通过排除那些经纬度在用户位置周围正负半度的“正方形”;这应该排除大约 35 英里以外的用户,然后您可以 STDistance 其余的
SQL server 支持spatial indexes,因此如果在该列上创建了空间索引,则以STDistance
等地理方法开头的 WHERE 子句将使用它。
【参考方案1】:
我不知道您有多少用户,因为我的解决方案对于庞大的用户群可能效率低下。如果我理解你的问题是正确的,那么你要做的就是计算斜边。
int[,] user = new int[10, 2]
int count = 0;
for (int i = 0; i < 10; i++)
Random rand = new Random();
int cero = rnd.Next(1, 30);
int one = rnd.Next(1, 30);
user[i, 0] = cero;
user[i, 1] = one;
for (int i = 0; i < 10; i++)
if ((user[i, 0] ^ 2) + (user[i, 1] ^ 2) <= 225) // <- 15^2 == 225
Console.WriteLine("User " + i.ToString() + " is in Range.");
count++;
Console.WriteLine(count.ToString());
Console.ReadKey();
这是一个可以解决问题的小示例代码
【讨论】:
以上是关于获取登录用户15英里范围内经纬度的用户数的主要内容,如果未能解决你的问题,请参考以下文章