1.摘要
在上一篇文章我们说了Arcgis生成离线地图的方法,但是一个地图类应用,只有底图是不够的。我们的应用大多数情况下都需要地点查询的功能,在离线的情况下,我们有两种方式,一种是通过Android原生的SQLite数据库,另一种就是通过Arcgis提供的geodatabase地理数据库。在这里我们说一下基础的geodatabase数据库的生成以及生成geodatabase常见的信息丢失问题。本文Arcmap软件用的版本是10.2.2,也是可以生成.geodatabase的最低版本。
2.离线数据库的生成
1.和生成.tpk离线地图的方式差不多,我们需要先打开制作runtime content的界面【图1】。在这里有个需要注意的地方,就是这个方式导出的是当前可视区域内要素,所以我们如果需要生成整个地图范围内的geodatabase,那么请把地图缩放到最小,让整个地图都显示出来然后再进行File->Share As->Runtime content。(还有种方式是使用工具箱中的System Toolboxes -> Data Management Tools ->Package -> Create Runtime Content,更加灵活,默认导出的是所有的要素数据,但是比较麻烦,这里不推荐)打开之后如【图2】
2.在Runtime Content标签页面下的Save runtime content to 选择.geodatabase要存储的位置。【图2】
2.Feature and Tabular Data标签页下的东西是问是否包含表格数据和一些其他信息,Basemap标签至今没有用到过,这个我们一般保持原样就行了,不动它。
3.如果我们的应用需要做离线的路径规划,那么我们需要把路网数据集集成到.geodatabase中,选择Network Data标签,Include network data from the current map。(arcmap会自动检测你的图层是否包含路网数据集,如果不包括,则这块是不可选的。)如果不需要,请跳过这一步。【图3】
4.如果你的应用需要点击地图某个位置,自动识别点击位置的地理信息功能,我们就需要把地址定位器集成到.geodatabase里面去,选择Locator标签下面的Use a locator from the current map,这里选择你要集成进去的地址定位器。如果本次打开的.mxd没有生成过地址定位器,那么这里检测不到,不可选用。正确的步骤是先生成地址定位器,再生成.geodatabase。如果不需要,请直接跳过这一步。【图4】
5.Analyze,如果没有错误即可直接Share生成.geodatabase。
3.常见问题
1.生成的.geodatabase数据不全,发生了数据丢失的情况。
发生这种情况一般的有以下两种原因:1、没有调整到全部地图的可见范围生成地图,本文的方法是导出的是当前可视区域内要素,我们通常把地图全部可见之后再次缩放一点,然后再进行 runtime content 即可解决。2、通常是由于数据格式异常,录入数据不规范导致,arcmap生成geodatabase的时候比较挑食,有些字段里的数据不合胃口就直接不管了。解决办法是移动端不需要展示的字段数据可以直接通过arcmap删掉(别忘了备份),一方面可以减小数据包体积,一方面可以解决丢失数据的问题;如果字段必须存在,那么只能从数据本身着手,我处理的数据一般是由于中文标点有问题,全文替换成英文的就可以了。比较常见的有中文的顿号,句号,逗号,分号,引号还有数据前面有空格,甚至是数据直接为空。也不排除别的字符问题,毕竟是国外的软件,对中文支持不太好。这种情况就只能一个一个进行尝试了。
2.Analyze的时候报错Multiple workspaces for feature and tabular data are not supported for runtime content 。
通常来说,生成geodatabase的图层shp必须存在于同一个文件夹下面,发生这种情况我们可以手动把shp都放到一个文件夹下面;如果是在gdb数据库当中的,那么需要用ArcCatalog工具都导入到一个数据库当中,然后在进行Share.如果存在路网数据集,那么只能把shp都导入到gdb数据库当中进行图层加载才可以,如果把gdb数据导出为shp生成会出问题。