获取登录用户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英里范围内经纬度的用户数的主要内容,如果未能解决你的问题,请参考以下文章

经纬度坐标比较

在c#中以指定的半径获取经纬度的范围

给定两个纬度/经度,我如何判断它们是不是在 1 英里范围内?

地理位置:按邻近度过滤

如何找到围绕某个位置 5 英里半径的一组纬度/经度对

使用经度和纬度查找给定距离内的所有附近客户