【发布时间】:2015-11-03 06:12:32
【问题描述】:
我的SQLite 数据库表中存储了一些位置坐标。我想检索距用户当前位置 1 公里范围内的位置。现在我正在从数据库中获取所有值,并编写了一个方法来检索我范围内的值。这给我留下了很大的开销,因为我的表可能包含 1000 多个坐标。
所以我正在寻找一种更好的方法来做到这一点。是否可以直接使用 SELECT 查询直接检索我范围内的位置? 我找到了question 1 和question 2,但找不到可能的解决方法。任何帮助将不胜感激。
这是我现在的 SELECT 查询:
String selectQuery = "SELECT "+COLUMN_OBJECTID+","+COLUMN_OBJECTNAME_ENGLISH+","
+COLUMN_OBJECTNAME_ARABIC+","+COLUMN_OBJECTLATITUDE+","+COLUMN_OBJECTLONGITUDE+","
+COLUMN_OBJECTCATEGORYID+","+COLUMN_OBJECTADDRESS_ENGLISH+","+COLUMN_OBJECTADDRESS_ARABIC
+" FROM " + TABLE_OBJECTLIST+" WHERE "+COLUMN_OBJECTCATEGORYID+"='"+categoryId+"' AND "+
((userLat-Double.parseDouble(COLUMN_OBJECTLATITUDE))*(userLat-Double.parseDouble(COLUMN_OBJECTLATITUDE))
+(userLong-Double.parseDouble(COLUMN_OBJECTLONGITUDE))*(userLong-Double.parseDouble(COLUMN_OBJECTLONGITUDE))<=range);
【问题讨论】:
-
您的问题是您混淆了 SQL 和 Java。您的
COLUMN_*符号仅适用于 SQL,parseDouble()仅适用于 Java。你应该首先构造正确的 SQL 查询(在 SQLite Manager 之类的工具中),然后弄清楚如何从 Java 中执行它。 -
好的。那么你能帮我用我需要的条件构造这个查询吗?
-
您链接到的问题的答案已经显示了正确的 SQL。
-
我将我的 lat long 值保存为字符串。所以如果我把它改成双倍,我可以在我的查询中使用它吗?
-
@Jas 你混合了 Java 函数和 SQL 代码!只需编写简单的 SQL 代码.. 看我的例子
标签: android sqlite geolocation