我正在使用此代码从MySql中的表中选择用户,之后我选择i计算用户之间的距离,并仅从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;
}
答案 0 :(得分:1)
我基本上将公式注入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;
答案 1 :(得分:0)
是的,几乎总有办法在T-SQL中做类似的事情。 T-SQL支持各种数学运算,因此您可以在选择用户时创建变量,分配变量并在T-SQL逻辑中使用它们。
请参阅http://msdn.microsoft.com/en-us/library/ms177516.aspx以获取更多信息。