我正在创建一个应用程序,其功能需要找到距用户5公里范围内的超市。
我认为使用经度和纬度是一个好主意(我应该将这两个值存储在超市桌面上作为属性,我已经准备好了)。
一旦我创建了我的表并插入了它的值,我就去寻找一个解决方案,我怎样才能从我的数据库中获取这些超市。 我想到的是一个带有不那么复杂的WHERE子句的select,可以解决我所有的问题。相反,我发现了一系列不同的方法:
2)Create extra coluns on your table
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
//保留元素
否则
//从列表中删除
有谁能告诉我这是什么问题?