好的,我有一个有很多位置记录的数据库(存储纬度和经度)
当新的潜在记录到来时,我需要检查 - 如果它比任何现有记录更接近 50米 - 我不应该将其包含在数据库中。
我知道有可能计算两个地点之间的距离 但为了做到这一点,我需要从我的数据库中提取所有记录,然后在循环中将潜在记录与每个现有记录进行比较。我想这需要一些时间。
我想要一些delta ,我可以增加/减少纬度&潜在记录的经度 - 而且这个三角洲会给我50米的距离半径。
例如,我想有类似的东西:
public boolean needsToBeIncluded(double newLat, double newLng) {
int delta = 0;
Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM myLocations WHERE latitude between " + (newLat - delta) + " and " + (newLat + delta) +
" AND longitude between " + (newLng - delta) + " and " + (newLng + delta), null);
return c.getCount() > 0;
}
是否有可能或者我对纬度和误差有错误的想象力?经度? THX。
答案 0 :(得分:1)
您可以计算每个位置记录的geohash值。比较位置记录的geohash值的前缀部分可以确定它们的接近程度。此GIS Stack Exchange entry有助于解释地理位置,而此Stack Exchange条目解释了相邻geohash单元格的准确性 - 两个地理位置序列开始不同的点决定了它们的差异。