c# MySql 按距离选择用户

标签 c# mysql .net iis

我使用此代码从 MySql 中的表中选择用户,选择后我计算用户之间的距离并仅添加距 GPS 位置 10KM 内的用户。

        string commandLine = "SELECT * FROM Users;";

        using (MySqlConnection connect = new MySqlConnection(connectionStringMySql))
        using (MySqlCommand cmd = new MySqlCommand(commandLine, connect))
        {
            connect.Open();
            using (MySqlDataReader msdr = cmd.ExecuteReader())
            {
                ArrayList array = new ArrayList();

                while (msdr.Read())
                {
                    double lon2 = msdr.GetDouble(19);
                    double lat2 = msdr.GetDouble(20);

                    double k = this.GetDistance(lat, lon, lat2, lon2);
                    //k is the distance
                    if (k <= 10)
                    {
                        //Add item to array
                    }
                }
            }
        }

我想知道是否可以使用 Sql 命令而不是在代码中进行计算,因为每次我从表中获取所有用户。

编辑

这是 GetDistance 方法:

private double GetDistance(double lat,double lon,double lat2,double lon2)
    {
        double ee = (3.1415926538 * lat / 180);
        double f = (3.1415926538 * lon / 180);
        double g = (3.1415926538 * lat2 / 180);
        double h = (3.1415926538 * lon2 / 180);
        double r = (Math.Cos(ee) * Math.Cos(g) * Math.Cos(f) * Math.Cos(h) + Math.Cos(ee) * Math.Sin(f) * Math.Cos(g) * Math.Sin(h) + Math.Sin(ee) * Math.Sin(g));
        double j = (Math.Acos(r));
        double k = (6371 * j);

        return k;
    }

最佳答案

我基本上将公式直接注入(inject)到 SQL 语句中。尝试这样的事情:

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - [startlat]), 2) +
POW(69.1 * ([startlng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM Users HAVING distance <= 10 ORDER BY distance;

关于c# MySql 按距离选择用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457463/

相关文章:

C# 使用 SqlCommand.Parameters 更新表

mysql - 如何在 Entity Framework 中使用 unsigned int/long 类型?

c# - 如何以编程方式区分 XP 64 位和 Server 2003 64 位之间的区别

c# - 编辑 M4V 视频元数据

c# - 格雷厄姆扫描问题在高点

python - 生成 SQL "IN"子句 : how to safely handle input + empty value lists?

.net - 缺少 Azure .NET SDK 文档

c# - 前缀 'xg0' 未定义

c# - 在aspnetcore web api中使用图像的EXIF数据旋转/翻转图像

php - MYSQL - 如何按时间查询数据库