【发布时间】:2016-07-28 20:47:47
【问题描述】:
好的,我有一个包含许多位置记录的数据库(存储纬度和经度)。
当新的潜在记录出现时,我需要检查 - 如果它与任何现有记录的距离小于 50 米 - 我不应该将其包含在数据库中。
我知道可以计算两个位置之间的距离。
但为了做到这一点,我需要从我的数据库中提取 all 记录,然后在循环中将潜在记录与每个现有记录进行比较。我想这需要一些时间。
我想要一些三角洲,我可以在其上增加/减少潜在记录的纬度和经度 - 那个三角洲会给我 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;
}
有没有可能,或者我对纬度和经度的想象有误?谢谢。
【问题讨论】:
-
您绝对可以根据您所在位置的区域/区域获得增量,这为您提供了大约 50x50 米的网格,然后您只需要检查网格内的这些点。
-
请给我更多信息 - 如何根据地区计算此类增量?谢谢。
-
您需要知道所有现有点的最小和最大
lat值,因为lat的每个度数转换为大约 111 公里,而不管lon,但每个度数的距离lon取决于lat(即在赤道更长,在北极点为零)。使用nhc.noaa.gov/gccalc.shtml 来查找lon在最小和最大纬度下的一个度数。然后您可以在最小和最大纬度处获得 50 米的londeltas。使用两个值中较大的一个。 -
我明白了。但是我仍然很难实现这一点。如果您愿意为此做一个简短的例子-我会非常感激并将其标记为正确的。当然。另外,是否有一些表格表明每个纬度的每个经度的距离是多少?
标签: android-sqlite gis latitude-longitude geo