我正在使用 NDK 在 Android 上制作 Android Shapefile 阅读器应用程序。我想使用 C++ 来解析形状文件。我找到了库“Shapefile C 库”。Github:https ://github.com/sw897/shapelib 。
我正在使用 Android Studio,不知道如何将其导入我的 Android 项目,因此我可以使用以下描述的函数:http ://shapelib.maptools.org/shp_api.html
有小费吗?
我正在使用 NDK 在 Android 上制作 Android Shapefile 阅读器应用程序。我想使用 C++ 来解析形状文件。我找到了库“Shapefile C 库”。Github:https ://github.com/sw897/shapelib 。
我正在使用 Android Studio,不知道如何将其导入我的 Android 项目,因此我可以使用以下描述的函数:http ://shapelib.maptools.org/shp_api.html
有小费吗?
首先,开始研究 Google 的 Hello-JNI 示例: https ://github.com/googlesamples/android-ndk/tree/master/hello-jni
将其用作测试平台。
public native
然后,使用允许您与库交互的方法创建一个 Java 类。某种高级 API,可能将文件名或缓冲区传递给 SHPOpenLL 并返回指向 ShapeFile 上下文 ( ShapeHandle
) 的指针。看起来您的库是用 C 编写的,因此您应该能够编写一个类似的接口来查询 shapefile,传递ShapeHandle
指针的(jint)c 样式转换。
接下来,您需要尝试javah
为您的 shapefile 界面生成标题。生成标头后,您可以使用它在 .cc 文件中实现您的接口。从那里你基本上会对你的 C 接口进行 Java 调用,它会返回作业对象。(jint、jbool、jstring 等...)
我正在查看您要使用的 ShapeLib,虽然它很简单,但会有一些问题。
C
。但是,您可能想一次从SHPObject
一个查询这些参数。会很慢,但不容易出错。例如
// Java
MyJavaShapeObject obj = new MyJavaShapeObject();
_c_retrieveShapeObj((jint)pShapeFile, obj);
// C
java_blah_blah_c_retrieveShapeObj(JNIEnv* env, jclass activity, jint theShapeFile, jobject theObj){
ShapeHandle pShapeFileHandle = (ShapeHandle)theShapeFile; // c style conversion
// http://stackoverflow.com/questions/11647646/how-to-use-the-jni-to-change-the-fields-of-a-java-class
// http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#wp16613
// http://stackoverflow.com/a/36759159/7949696
}