框选要素查询


public class SelectFeatures extends Activity {

	private MapView map = null;
	private ArcGISFeatureLayer mFeatureLayer = null;
	private GraphicsLayer mGraphicsLayer = null;

	private SimpleFillSymbol mSimpleFillSymbol;

	int test = 0;

	private CallbackListener<FeatureSet> callback = new CallbackListener<FeatureSet>() {

		public void onCallback(FeatureSet fSet) {

		}

		public void onError(Throwable arg0) {
			mGraphicsLayer.removeAll();
		}
	};

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// http://192.168.200.183/ArcGIS/rest/services/HA_BaseLayer/MapServer
		// http://192.168.200.183/ArcGIS/rest/services/HA_BZW/MapServer
		// http://192.168.200.183/ArcGIS/rest/services/HA_BuJian/MapServer
		map = new MapView(this);
		if (test == 0) {
			// 设置加载范围
			map.setExtent(new Envelope(-10868502.895856911, 4470034.144641369,
					-10837928.084542884, 4492965.25312689), 0);
		}

		String tileLayerURL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";// 瓦片图层
		if (test == 1) {
			tileLayerURL = "http://192.168.200.183/ArcGIS/rest/services/HA_BaseLayer/MapServer";
		}
		ArcGISTiledMapServiceLayer tileLayer = new ArcGISTiledMapServiceLayer(
				tileLayerURL);
		map.addLayer(tileLayer);

		addFeatureLayer();// 添加属性图层
		addGraphicesLayer();// 添加要素图层
		// 注册图层触摸事件
		MyTouchListener touchListener = new MyTouchListener(this, map);
		map.setOnTouchListener(touchListener);

	}

	private void addGraphicesLayer() {
		mGraphicsLayer = new GraphicsLayer();
		mSimpleFillSymbol = new SimpleFillSymbol(Color.BLACK);// 填充色
		mSimpleFillSymbol.setOutline(new SimpleLineSymbol(Color.BLUE, 1));// 外框线
		mSimpleFillSymbol.setAlpha(100);

		map.addLayer(mGraphicsLayer);
		setContentView(map);

	}

	private void addFeatureLayer() {
		Options mOptions = new Options();
		mOptions.mode = MODE.ONDEMAND;
		mOptions.outFields = new String[] { "FIELD_KID", "APPROXACRE",
				"FIELD_NAME", "STATUS", "PROD_GAS", "PROD_OIL", "ACTIVEPROD",
				"CUMM_OIL", "MAXOILWELL", "LASTOILPRO", "LASTOILWEL",
				"LASTODATE", "CUMM_GAS", "MAXGASWELL", "LASTGASPRO",
				"LASTGASWEL", "LASTGDATE", "AVGDEPTH", "AVGDEPTHSL",
				"FIELD_TYPE", "FIELD_KIDN" };

		if (test == 1) {
			mOptions = new Options();
			mOptions.mode = MODE.ONDEMAND;
			mOptions.outFields = new String[] { "OBJECTID", "OBJCODE",
					"OBJNAME", "DEPTCODE1", "DEPTNAME1", "DEPTCODE2",
					"DEPTNAME2", "DEPTCODE3", "DEPTNAME3", "OBJSTATE",
					"CHDATE", "DATASOURCE", "NOTE", "OBJPHOTO", "ORDATE",
					"OBJPOS", "BGCODE", "SHAPE", };
		}

		// 属性图层
		String featureURL = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSPetro/MapServer/1";
		if (test == 1) {
			featureURL = "http://192.168.200.183/ArcGIS/rest/services/HA_BuJian/MapServer/4";// 公用设施部件
		}
		mFeatureLayer = new ArcGISFeatureLayer(featureURL, mOptions);

		// 设置选中属性的颜色
		SimpleFillSymbol selectFillSymbol = new SimpleFillSymbol(Color.MAGENTA);
		selectFillSymbol.setOutline(new SimpleLineSymbol(Color.BLACK, 1));
		mFeatureLayer.setSelectionSymbol(selectFillSymbol);

		map.addLayer(mFeatureLayer);

	}

	class MyTouchListener extends MapOnTouchListener {

		Graphic mGraphic;
		Point mFromPoint = null;// 起点
		int uid = -1;

		public MyTouchListener(Context arg0, MapView arg1) {
			super(arg0, arg1);
		}

		public boolean onDragPointerMove(MotionEvent from, MotionEvent to) {
			if (uid == -1) { // first time
				mGraphic = new Graphic(null, mSimpleFillSymbol);
				mFromPoint = map.toMapPoint(from.getX(), from.getY());
				uid = mGraphicsLayer.addGraphic(mGraphic);

			} else {
				// 终点
				Point mToPoint = map
						.toMapPoint(new Point(to.getX(), to.getY()));
				Envelope envelope = new Envelope();
				envelope.merge(mFromPoint);
				envelope.merge(mToPoint);
				mGraphicsLayer.updateGraphic(uid, envelope);

			}

			return true;

		}

		public boolean onDragPointerUp(MotionEvent from, MotionEvent to) {

			if (uid != -1) {
				mGraphic = mGraphicsLayer.getGraphic(uid);
				if (mGraphic != null && mGraphic.getGeometry() != null) {
					mFeatureLayer.clearSelection();
					Query mQuery = new Query();
					// 设置查询参数
					if (test == 1) {
						mQuery.setWhere("OBJNAME='上水井盖'");
					}
					if (test == 0) {
						mQuery.setWhere("PROD_GAS='Yes'");// 查询条件Yes or No
					}
					mQuery.setReturnGeometry(true);
					mQuery.setInSpatialReference(map.getSpatialReference());
					mQuery.setGeometry(mGraphic.getGeometry());
					mQuery.setSpatialRelationship(SpatialRelationship.INTERSECTS);
					// 查询到的信息高亮显示
					mFeatureLayer.selectFeatures(mQuery, SELECTION_METHOD.NEW,
							callback);
				}
				mGraphicsLayer.removeAll();
			}

			mFromPoint = null;
			// 重置
			uid = -1;
			return true;

		}

	}

	@Override
	protected void onPause() {
		super.onPause();
		map.pause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		map.unpause();
	}

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值