查找给定经度/纬度5公里范围内的元素

时间:2015-10-08 03:49:30

标签: android sqlite geolocation latitude-longitude

我正在创建一个应用程序,其功能需要找到距用户5公里范围内的超市。

我认为使用经度和纬度是一个好主意(我应该将这两个值存储在超市桌面上作为属性,我已经准备好了)。

一旦我创建了我的表并插入了它的值,我就去寻找一个解决方案,我怎样才能从我的数据库中获取这些超市。 我想到的是一个带有不那么复杂的WHERE子句的select,可以解决我所有的问题。相反,我发现了一系列不同的方法:

1)Create an square around the user location, find the supermarkets that are inside of it and then find the ones that are actually in that range

2)Create extra coluns on your table

3)Use the cosine law

4)了解如何将纬度/经度转换为千米并使用毕达哥拉斯定理(对于不那么宽的范围)

三个问题是任何解决方案都是在数据库上进行的(带有where子句),我不知道哪一个具有更高的性能,或者在任何方面都更好,而且它不像我在...了解如何使用这些例子。那么......我应该用什么来记住我和SQLite数据库和android?

谢谢:)

添加更多信息:

第一个问题是要知道我应该使用哪一个。 我对这个问题的解决方法是:

我的用户位置是:

经度= -22.82753105; 纬度= -47.03398022;

我的陈述

纬度< -47.078946300295925和
纬度> -46.989014139704054和
经度> -22.76155626735494和
经度< -22.89350583264506     

我在我的数据库上有一个市场,其位置与用户相同,一旦我选择了正方形中的那个,我就会得到一个包含这个元素的列表,但是当我迭代我的列表时,它会从列表中删除我的元素因为if返回FALSE。

if(getDistanceBetweenTwoPoints(mercado,userLocation)< = RANGE)

在getDistanceBetweenTwoPoints上,如果我调试它,我得到:

dLat = -0.4224822382331485
dLon = 0.4224822382331485
lat1 = -0.39841557692373836
lat2 = -0.8208978151568869
a = 0.07157979929009457
c = 0.5416864422451098
d = 3451084.323543594

因为if比较" d"有了范围,它是这样的:

if(3451084.323543594< = 5000){//我的范围是5km
 //保留元素
否则
 //从列表中删除

有谁能告诉我这是什么问题?

0 个答案:

没有答案