我正在尝试使用MySQL的空间扩展来计算查询到的地点表坐标的坐标集,但我还想显示这组点之间的距离。然后将结果添加到动态列表中以便稍后迭代。
结果将是这样的:放置1(3英里远),放置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();
}
答案 0 :(得分:2)
从该代码中,它应该如下:
Items.Add(new {
Name = reader["Name"].ToString(),
Latitude = reader["Latitude"].ToString(),
Longitude = reader["Longitude"].ToString(),
Distance = reader["distance"]
});