地理编码知道位置是否靠近数据库中的其他位置

时间:2016-04-07 19:14:07

标签: android-sqlite gis latitude-longitude geo

好的,我有一个有很多位置记录的数据库(存储纬度和经度) 当新的潜在记录到来时,我需要检查 - 如果它比任何现有记录更接近 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。

1 个答案:

答案 0 :(得分:1)

您可以计算每个位置记录的geohash值。比较位置记录的geohash值的前缀部分可以确定它们的接近程度。此GIS Stack Exchange entry有助于解释地理位置,而此Stack Exchange条目解释了相邻geohash单元格的准确性 - 两个地理位置序列开始不同的点决定了它们的差异。