我正在尝试使用 MySQL 的空间扩展来计算一组查询到的坐标到位置表的坐标,但我也想显示这组点之间的距离。然后将结果添加到动态列表中,以便稍后进行迭代。
结果将是这样的:Place 1(3 英里外)、Place 2(5 英里外)等等......
首先,有没有办法从距离计算中创建一个变量,以便我可以像上面一样显示它?其次,我应该如何修改我的sql语句来查询地点的坐标列?
到目前为止,这是我的代码:
List<dynamic> Items = new List<dynamic>();
var longitude = 90.0000;
var latitude = 0.0000;
var radius = 50000;
using(MySqlConnection con = new MySqlConnection("server=localhost;database=database;user id=user;password=pass"))
{
string sql = "SELECT *,(((acos(sin((@latitude*pi()/180)) * sin((`Latitude`*pi()/180))+cos((@latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((@longitude- `Longitude`)* pi()/180))))*180/pi())*60*1.1515) as distance FROM items HAVING distance <= @radius";
con.Open();
MySqlCommand cmd = new MySqlCommand(sql,con);
cmd.Parameters.Add(new MySqlParameter("@latitude", latitude));
cmd.Parameters.Add(new MySqlParameter("@longitude", longitude));
cmd.Parameters.Add(new MySqlParameter("@radius", radius));
using(MySqlDataReader reader = cmd.ExecuteReader()){
while(reader.Read()){
Items.Add(new {
Name = reader["Name"].ToString(),
Latitude = reader["Latitude"].ToString(),
Longitude = reader["Longitude"].ToString()
});
}
}
con.Close();
}