Geodatabase生成和同步

前提条件

前提条件必须满足10.2.1以上的arcgis服务才可以,但是如果低于10.2.7arcgis那么编辑和同步必须是同一个线程,所以我们前提必须要在10.2.7以上的arcgis服务下进行。服务端需要是桌面生成并且需要勾选同步功能,或者使用catlog生成也可以。地图文档和移动端的坐标系一样即可。还有需要注意的地方是勾选默认地图隐藏或显示问题,这个由自己的需求而定。一般情况下我建议如果是多个Table的话默认隐藏,因为切换的时候直接可以在移动端去控制。



一、Geodatabase生成

判断是否开启同步功能


当我们拿到地图服务连接时,我们便可以尝试去做生成,我一般使用FeatureService服务,mapService没有试过。代码如下,我们来详细讲解一下。

task是非常重要的一个东西,他为我们做了一个开端,事实上它是用来判断这个链接或者是这个服务是否支持同步功能,不支持同步功能的服务是无法进行生成Geodatabase的,所以在回调里面我们可以看到onError方法和onCallback方法,在onCallback方法里面我们去判断我们拿到的FeatureServiceInfo是否具有同步功能,如果有的话,我们方可执行下一步,否则所有的东西都免谈。那我们继续看下一步创建的操作。

task = new GeodatabaseSyncTask(url, null);
		task.fetchFeatureServiceInfo(new CallbackListener<FeatureServiceInfo>() {

			public void onError(Throwable e) {
				Log.e("------------", "下载失败");
			}

			public void onCallback(FeatureServiceInfo objs) {
				if (objs.isSyncEnabled()) {
					createGeodatabase(objs);
				}
			}
		});


生成Geodatabase

    下面代码是生成的代码,params类似请求条件一样,这里尤其要注意mapView.getExtent()这个决定你生成Geodatabase的范围,因为你生成Geodatabase能不能查看到要素不仅仅是因为服务端生成地图文档导致的,而且也会因为你的mapView.getExtent()不对导致你看不到你的要素。gbResponseCallback 这个回调对象只会告诉你生成的成功与否,他本身并不会去生成Geodatabase,真正生成的是submitTask方法,里面有条件paramsfile文件路径、是否启用缓存(一般我们都是用false)statusCallback状态回调(事实上只有成功了才会使用submitTask方法)gdbResponseCallback(成功与否的回调),这里我们一个条件两个回调都有了,我们主要还是缺一个文件,file指这个Geodatabase全路径,包括后缀名。切记不是file对象,而是String

private void createGeodatabase(FeatureServiceInfo objs) {
		params = new GenerateGeodatabaseParameters(objs, mapView.getExtent(),
				mapView.getSpatialReference());

		gbResponseCallback = new CallbackListener<String>() {

			public void onError(Throwable e) {
				Log.e("------", "生成失败");
			}

			public void onCallback(String objs) {
				Log.e("------", "生成成功");
				updateFeatureLayer(objs);
			}
		};
		callback = new GeodatabaseStatusCallback() {

			public void statusUpdated(GeodatabaseStatusInfo status) {
				
			}
		};
		submitTask(params, localGdbFilePath, callback, gbResponseCallback);
	}

	private void submitTask(GenerateGeodatabaseParameters params, String file,
			GeodatabaseStatusCallback statusCallback,
			CallbackListener<String> gdbResponseCallback) {
		task.generateGeodatabase(params, file, false, statusCallback,
				gdbResponseCallback);
	}


二、Geodatabase同步


同步方法

    同步代码如下,SyncGeodatabaseParameters主要用来针对Geodatabase的,就是你需要同步的Geodatabase文件。statusCallback是指你同步成功与否的回调方法,里面有状态的返回码,至于Listener并没有太多可以使用的地方,至少我这么认为,最后我们还需要使用GeodatabaseSyncTask去进行同步操作。但是这个方法我写到工具类里面没有成功过,我放在了activity下面便可以使用,虽然我的是10.2.7

public void syncGeodatabase(Geodatabase geodatabase,
			GeodatabaseSyncTask task, String url) {
		// 同步的params,一般来说请求对象
		SyncGeodatabaseParameters syncparams = null;
		try {
			// 第一个参数就是你的geodatabase文件
			syncparams = geodatabase.getSyncParameters();

		} catch (Exception e) {
			e.printStackTrace();
		}
		GeodatabaseStatusCallback statusCallback = new GeodatabaseStatusCallback() {

			public void statusUpdated(GeodatabaseStatusInfo status) {
				String a = status.getStatus().toString();
				// 这里有很多状态,会在文档上显示
				if (a.equals("Completed"))
					Log.e("-----------", status.getStatus() + "");
			}
		};
		CallbackListener<Map<Integer, GeodatabaseFeatureTableEditErrors>> syncResponseCallback = new CallbackListener<Map<Integer, GeodatabaseFeatureTableEditErrors>>() {

			public void onCallback(
					Map<Integer, GeodatabaseFeatureTableEditErrors> objs) {
				// TODO Auto-generated method stub

			}

			public void onError(Throwable e) {
				// TODO Auto-generated method stub

			}
		};
		// 最后我们还是需要GeodatabaseSyncTask进行同步
		if (task == null) {
			Log.e("syncError", "同步出错");
			task = new GeodatabaseSyncTask(url, null);
		}
		task.syncGeodatabase(syncparams, geodatabase, statusCallback,
				syncResponseCallback);
		Log.e("syncError", "同步成功");
	}



GeodatabaseStatusInfo状态码


这些状态可以供大家挑选,我一般只看completed和failed,in_progress是进行中pending是准备中





后面我们会继续介绍编辑和查询,本人刚做gis几个月,轻喷!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值