需要打开地图的tab文件,找到了mitab项目,然而并没有适用嵌入式的版本,于是决定将其移植到android jni中。
- 下载源代码
先去官网下载源代码http://mitab.maptools.org/,已经很久未更新了,最新版本为mitab-1.7.0.zip - Android studio创建Native c++项目
- Copy mitab源代码
将mitab-1.7.0.zip解压后,拷贝cpl,mitab,ogr目录到项目里,并将cpl/cpl_config.h.in拷贝到cpl/cpl_config.h中。如图所示。
- 配置CMakelists.txt
增加头文件路径及默认宏的配置
include_directories(./)
include_directories(cpl)
include_directories(mitab)
include_directories(ogr)
add_definitions(-DCPL_LSB)
增加cpl源文件配置
set(CPL_SRCS cpl/cpl_conv.cpp cpl/cpl_error.cpp cpl/cpl_string.cpp cpl/cpl_vsisimple.cpp
cpl/cplgetsymbol.cpp cpl/cpl_dir.cpp cpl/cpl_path.cpp cpl/cpl_csv.cpp cpl/cpl_findfile.cpp
cpl/cpl_minixml.cpp cpl/cpl_vsil.cpp cpl/cpl_vsi_mem.cpp
cpl/cpl_vsil_unix_stdio_64.cpp cpl/cpl_multiproc.cpp cpl/cplstring.cpp
cpl/cpl_getexecpath.cpp)
增加mitab源文件配置
set(MITAB_SRCS mitab/mitab_rawbinblock.cpp mitab/mitab_mapheaderblock.cpp mitab/mitab_mapindexblock.cpp
mitab/mitab_mapobjectblock.cpp mitab/mitab_mapcoordblock.cpp mitab/mitab_maptoolblock.cpp
mitab/mitab_feature.cpp mitab/mitab_tooldef.cpp
mitab/mitab_mapfile.cpp mitab/mitab_idfile.cpp mitab/mitab_datfile.cpp mitab/mitab_tabfile.cpp
mitab/mitab_utils.cpp mitab/mitab_spatialref.cpp mitab/mitab_feature_mif.cpp
mitab/mitab_middatafile.cpp mitab/mitab_miffile.cpp mitab/mitab_imapinfofile.cpp
mitab/mitab_coordsys.cpp mitab/mitab_indfile.cpp mitab/mitab_tabview.cpp
mitab/mitab_geometry.cpp mitab/mitab_capi.cpp mitab/mitab_bounds.cpp mitab/mitab_tabseamless.cpp)
增加ogr源文件配置
set(OGR_SRCS ogr/ogr_srsnode.cpp ogr/ogrcurve.cpp ogr/ogrfeature.cpp ogr/ogrfeaturedefn.cpp
ogr/ogrgeometry.cpp ogr/ogrgeometrycollection.cpp ogr/ogrgeometryfactory.cpp
ogr/ogrlinearring.cpp ogr/ogrlinestring.cpp ogr/ogrmultilinestring.cpp
ogr/ogrmultipoint.cpp ogr/ogrmultipolygon.cpp ogr/ogrpoint.cpp ogr/ogrpolygon.cpp
ogr/ogrspatialreference.cpp ogr/ogrsurface.cpp ogr/ogrutils.cpp
ogr/ogrlayer.cpp ogr/ogrsfdriverregistrar.cpp ogr/ogrfielddefn.cpp
ogr/ogr_srs_proj4.cpp ogr/ogrdatasource.cpp ogr/ogrsfdriver.cpp
ogr/ogrfeaturestyle.cpp ogr/ogr_fromepsg.cpp ogr/ogrfeaturequery.cpp ogr/swq.c
ogr/ogrct.cpp ogr/ogr_gensql.cpp ogr/ogr_srs_xml.cpp ogr/ogr_srs_esri.cpp
ogr/ogr_api.cpp ogr/gml2ogrgeometry.cpp ogr/ogr2gmlgeometry.cpp
ogr/ogr_miattrind.cpp ogr/ogr_attrind.cpp ogr/ogr_srs_dict.cpp)
将源文件配置到运行库里
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
${CPL_SRCS}
${MITAB_SRCS}
${OGR_SRCS}
native-lib.cpp)
编译成功后就移植完成了,后面可以参考mitab/mitab_capi.cpp, mitab/mitab_capi.h,mitabc_test.c封装api给java使用,就不再赘述了。