http://www.sqlite.org/rtree.html说r*树“包含在合并中,但默认情况下是禁用的”,要启用r*树,“只需使用定义的SQLITE_ENABLE_RTREE C预处理器宏进行编译”。
嗯,我想在我的安卓应用程序中使用R-trees,但显然SQLite都是预装的,等等。有没有办法在用户的手机/设备上启用它?
或者,可以使用NDK和SQLite的免费源代码吗?
发布于 2011-06-01 23:29:08
你完全可以编译你自己的SQLite版本。我们这样做是为了从wxSQLite启用加密/编解码器模块。看看Android Git存储库中的SQLite源代码。基本上,使用您希望启用的选项(如SQLITE_ENABLE_RTREE)创建一个Android.mk非常简单。当然,这将为您提供一个本地库。为了使用它,你需要从NDK访问它或者创建一个包装器(同样,你可以查看SQLite的Android仓库和Java/JNI包装器)
发布于 2017-06-20 21:01:11
2017年6月
System.loadLibrary("sqliteX");//获取SQLite版本String query = "select sqlite_version() AS sqlite_version";SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(":memory:",null);System.loadLibrary= db.rawQuery(query,null);String sqliteVersion = "";if (cursor.moveToNext()) { sqliteVersion = cursor.getString(0);} //做一些R*树的事情(对于标准的SQLite会失败) db.execSQL("CREATE VIRTUAL TABLE demo_index USING rtree(id,minX,maxX,minY,maxY));");db.execSQL("INSERT INTO demo_index VALUES(1,-80.7749,-80.7747,35.3776,35.3778);");db.execSQL("INSERT INTO demo_index VALUES(2,-81.0,-79.6,35.0,36.2);");cursor = db.rawQuery("SELECT id FROM demo_index WHERE minX>=-81.08 AND maxX<=-80.58 AND minY>=35.00和maxY<=35.44;",null);int id = -1;if (cursor.moveToFirst()) { do { id = cursor.getInt(0);} while (cursor.moveToNext());} db.close();
链接(以上所有链接):
发布于 2011-08-02 19:29:47
这对我来说很有效,从Android.mk文件中提取。它是用于spatialite、sqlite的空间扩展。
include $(CLEAR_VARS)
# -DOMIT_GEOS=0
# ./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi
LOCAL_MODULE := spatialite
LOCAL_CFLAGS := -D__ANDROID__ -Dfdatasync=fsync -DOMIT_GEOCALLBACKS -DSQLITE_ENABLE_RTREE
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := \
libiconv-1.13.1/include \
libiconv-1.13.1/libcharset/include \
geos-3.2.2/source/headers \
geos-3.2.2/capi \
proj-4.6.1/src
LOCAL_SRC_FILES := \
./libspatialite-amalgamation-2.4.0/spatialite.c \
./libspatialite-amalgamation-2.4.0/empty.cpp \
./libspatialite-amalgamation-2.4.0/sqlite3.c
LOCAL_STATIC_LIBRARIES := iconv proj geos
include $(BUILD_STATIC_LIBRARY)https://stackoverflow.com/questions/6132442
复制相似问题