1

我想在android中制作一个应用程序。在这个应用程序中,用户必须在这个应用程序中注册。注册后,gps 位置(经纬度)将与用户信息一起存储在数据库表中。在这个应用程序中,我想添加一个“搜索根中的人”的功能。用户可以输入起点和终点(如:孟买到德里)。并且希望找到这两个点之间的每个民族。

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

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

希望我已经很好地解释了您理解我想要实现的只是我想从输入位置(纬度和经度)的数据库表中搜索附近的位置(纬度和经度)。

4

3 回答 3

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

现在比较距离说距离> 50kms。

这对我有用。

于 2012-10-30T10:39:08.703 回答
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

所以你定义了一个矩形,你想在其中寻找最近的人。

于 2012-10-30T10:51:58.700 回答
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)    
于 2012-10-30T10:36:01.663 回答