我怎样才能在mysql-table(lat和long存储的地方)查询哪个是最近的位置(lat和long)?

时间:2012-10-30 10:10:47

标签: android mysql google-maps gps

我想在android中创建一个应用程序。在这个应用程序中,用户必须在此应用程序中注册通过注册,gps位置(lat和long)将存储在具有用户信息的数据库表中。在这个应用程序中,我想添加一个功能,即“搜索Root中的人”。用户可以输入起点和终点(如:孟买到德里)。这两点之间的每个民族都希望被发现。

例如:用户A已在此应用中新注册。用户A的gps位置类似于lat = 20.234554和long = 56.21455255。现在他将输入两个像孟买的点到德里并点击搜索按钮。现在我想在数据库中查询已经存储了每个人的信息。我想在数据库中查询“选择*从位置(表)孟买到德里之间的人们”

数据库表“locations”有四个字段id,lat,long和cityname。现在我想在数据库上进行上述查询,在那里我可以找到两个输入地理点之间的人。

希望我已经很好地解释了你理解我想要实现的只是我想从搜索到的位置(lat和long)搜索数据库表中的附近位置(lat和long)。

3 个答案:

答案 0 :(得分:3)

SELECT *, ((ACOS(SIN(23.037698 * PI() / 180) * SIN(latitude * PI() / 180) + COS(23.037698 * PI() / 180) * COS(latitude * PI() / 180) * COS((72.564835 - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) as distance FROM location;

如果您输入

,上面的查询将返回您的距离
lat = 23.037698
long = 72.564835

现在比较距离说距离> 50公里。

这对我有用。

答案 1 :(得分:3)

我建议通过一些可以编入索引的条件来限制您的位置。您可以轻松地做到这一点,因为您可能不希望将来自美国的某人列为巴黎最近的位置。

只需对RustamIS查询进行一些修改,就可以消除大部分不相关的位置。

select * from gps_location_table t 
where
    t.x between 20.134554 and 20.334554 and t.y between 56.11455255 and 56.31455255
order by 
    sqrt((t.x - 20.234554)*(t.x - 20.234554) + (t.y - 56.21455255)*(t.y - 56.21455255)
desc

所以你定义了一个你想要找最近的人的矩形。

答案 2 :(得分:2)

让long => Y和lat => X 然后像这样查询

select * from gps_location_table t 
order by 
     sqrt(pow((t.x - 20.234554),2) + pow((t.y - 56.21455255),2))
desc

答案必须是这样的!提到这个公式不会返回正确的距离,但它可以工作,并且比计算实际距离更快。

主要意思是两个坐标之间的距离是:

sqrt((x1-x2)^2 + (y1-y2)^2)