0

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

1 回答 1

2

从该代码中,它应该很简单:

Items.Add(new {
    Name = reader["Name"].ToString(),
    Latitude = reader["Latitude"].ToString(),
    Longitude = reader["Longitude"].ToString(),
    Distance = reader["distance"]
});
于 2013-09-23T11:17:22.743 回答