ArcGIS for Android中现已经提供了离线缓存图片的加载功能,极大的提高了我们访问地图的效率,对于离线的数据编辑暂时还不支持,而现在对于离线数据编辑操作的需求越来越多,那我们如何才能实现离线数据编辑功能呢?下面我们介绍一下,通过sqlite来实现离线数据编辑的解决方案。
一、离线数据编辑解决方案
离线编辑无非就是将所需的数据下载到我们的手持端进行存储,当无法连接网络时,数据的读取、显示、编辑、保存都是通过本地数据库完成的;而后,当可以连接网络时,再将编辑的数据从手持端的数据库中提取出来进行在线数据提交。
二、离线数据编辑实现步骤
根据上面的流程图我们来分析一下,实现离线数据编辑的步骤:
1、 通过ArcGIS Server来发布一个FeatureService服务用于数据下载或上传;
2、 手持端编写通过服务请求业务数据的代码;
在手持端编写下载数据的代码,通过FeatureService服务进行数据的下载,代码如下:
Query query = new Query();
query.setOutFields(new String[] { "*" }); query.setInSpatialReference(featureLayer.getSpatialReference());
query.setWhere("objectid in ("+where+")");
flayer.selectFeatures(query, ArcGISFeatureLayer.SELECTION_METHOD.NEW,new CallbackListener<FeatureSet>() {
publicvoid onError(Throwable e) {
}
publicvoid onCallback(FeatureSet queryResults) {
}
});
3、 在手持端创建数据库和业务数据表;
在手持端中,我们需要数据库来存储业务数据,因此我们需要创建Sqlite数据库和相应的业务表。
在创建数据库时,我们可以通过扩展Android的帮助类SQLiteOpenHelper来维护和操作数据库和表,创建的表要与我们下载的业务数据的表结构一致。
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String SYSTEM_TABLE = "sqlite_master";
private static final int VERSION=1;
public static final String TABLEORFIELDS = "tableOrfields";
public static final String TABLENAME = "Environment";
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public DatabaseHelper(Context context, String name){
this( context, name,VERSION);
}
public DatabaseHelper(Context context, String name,int version){
this(context,name,null,version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建的表结构
String sql = "CREATE TABLE IF NOT EXISTS "+TABLENAME+"(OBJECTID INTEGER,CODE INTEGER,省名 TEXT,县区