计算MySQL中的距离并在.NET中显示它们之间的距离

时间:2013-09-23 11:13:54

标签: c# mysql asp.net sql

我正在尝试使用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();
}

1 个答案:

答案 0 :(得分:2)

从该代码中,它应该如下:

Items.Add(new {
    Name = reader["Name"].ToString(),
    Latitude = reader["Latitude"].ToString(),
    Longitude = reader["Longitude"].ToString(),
    Distance = reader["distance"]
});