`

框选要素查询

阅读更多

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();
	}

}
 
分享到:
评论

相关推荐

    ArcEngine选择要素 包括点选、框选、圆圈选以及多边形选择

    本篇文章将详细探讨ArcEngine中的选择要素技术,包括点选、框选、圆圈选以及多边形选择。 首先,我们来看点选。在ArcEngine中,用户可以通过点击地图上的一个特定点来选择相应的要素。这种选择方式适用于定位精确的...

    Openlayres要素框选.zip

    7. **统计框选要素数量**:统计选定区域内要素的数量,可以监听`select`交互对象的`getFeatures()`方法,返回选中的所有要素集合,进一步计算其长度即可得到数量。这对于数据分析或报表生成非常有用。 8. **代码...

    框选要素显示(高亮,闪烁)(C#2005+AE9.2)

    在IT行业中,尤其是在GIS(地理信息系统)开发领域,"框选要素显示(高亮,闪烁)"是一个常见的需求。本文将详细解析如何利用C# 2005与ArcGIS Engine (AE) 9.2来实现这个功能。AE是Esri公司提供的一个强大的开发工具,...

    超图三维 场景框选的实现[代码]

    5. **执行框选查询**:当鼠标释放时,使用`Map`对象的查询接口,如`QueryByBox3D`方法,传入刚才创建的矩形框选区域。这个方法会返回满足条件的空间对象集合。 6. **处理查询结果**:对返回的查询结果进行处理,...

    arcengine实现点选,圆选,框选,多边形选择要素

    - **反向选择**:有时候可能需要取消已选要素或选择所有未选要素,这可以通过`IFeatureSelection.Clear`和`IFeatureSelection.SelectAll`方法实现。 - **事件处理**:在处理地图事件时,要确保正确处理选择事件,...

    openlayers3点选、框选、多边形选择demo

    本示例"openlayers3点选、框选、多边形选择demo"主要探讨了如何在OpenLayers 3中实现三种不同的选择地图要素的方法:单击点选、矩形框选以及多边形选择。 1. **点选(Point Selection)**: 在OpenLayers 3中,你...

    点选、框选要素,点线面要素的移动、打断,延长,画线分割等操作

    ArcGIS AE 二次开发,实现点要素、线要素和面要素的绘制,以及移动、打断,延长,画线分割、删除等操作

    AE二次开发代码-加载地图、点选、框选、圆选、多边形选择、名称选择

    AE二次开发C#代码: 加载地图、点选、框选、圆选、多边形选择、名称选择

    扩展实现vector框选交互

    在iClient for javascript中selectFeature控件可以实现Feature要素的鼠标事件交互,但都是点选交互;本范例通过实现扩展SuperMap.Control实现拉框选取Feature要素

    arcengine鼠标点击地图弹窗显示属性,以及要素类型

    - **要素查询与选择**: - 使用`ITopologicalOperator`接口的`Buffer`方法创建一个圆形缓冲区,以此作为查询范围。 - 调用`Map`对象的`SelectByShape`方法,根据缓冲区选择要素。 - **属性展示**: - 创建`...

    ArcGIS教程:选择要素制图表达

    此时,如果将指针悬停在可选要素制图表达的符号系统或几何上时,指针旁边会显示一个小正方形。 - 单击以选中单个要素制图表达,或者单击并拖动以选中部分及完全位于框内的所有要素制图表达。 ##### 2. 选择要素...

    html+js+openlayers的框选事件

    通常,这会涉及到查询地图上的图层,找出所有位于这个范围内的要素。对于矢量图层,可以使用`getFeaturesInExtent`方法: ```javascript var selectedFeatures = vectorLayer.getFeaturesInExtent(extent); // 对...

    用代码实现ArcGIS中使用绘制的圆形选择要素

    在ArcGIS中,要素选择可以通过多种方式进行,包括但不限于点击选择、框选、绘制形状选择等。 #### 2. VBA/VB.NET编程环境下的代码实现 在上述部分代码示例中,我们可以看到如何在ArcGIS的VBA或VB.NET编程环境中,...

    ArcGIS教程:修整要素制图表达

    当选中的要素周围出现矩形边界框时,我们可以使用选择工具拖动边界框上的控制点对矩形进行拉伸。这种通过边界框进行修整的方法,特别适合于对特定区域的要素进行比例调整。 接下来,我们可以通过直接选择工具来移动...

    ArcEngine实现矢量要素编辑功能

    1. **选择要素**:ArcEngine提供多种选择工具,如矩形选择、圈选、多边形选择等,用户可以根据需求选取特定的要素。这通常通过ISelectionSet接口实现,将选择的要素添加到选择集中,以便进行后续操作。 2. **删除...

    ArcServer C# 点选弹出属性

    总之,ArcServer C#点选弹出属性的实现涉及地图控件、图层管理、鼠标事件监听、特征查询以及UI交互等多个环节。掌握这些知识点,对于开发交互性强、用户体验良好的GIS应用程序至关重要。通过不断学习和实践,开发者...

    Leaflet.SelectAreaFeature:通过在地图上绘制区域来选择要素的插件

    通过在地图上绘制区域来选择要素的插件。 支持使用1.2.0测试的Leaflet 1.0.0+分支。 启用此插件后,用户只需按住鼠标左键并移动它,即可在地图上绘制区域。 作为开发人员,您可以获取该区域边界框中的图层。 一旦...

    单选钮复选框改变传统样式

    在网页设计和开发中,单选钮(Radio Button)和复选框(Checkbox)是常见的交互元素,用于用户选择一种或多种选项。然而,这些元素的默认样式通常比较简单,可能不符合设计师对界面美观和用户体验的追求。本主题将...

    使用ArcGIS Engine来实现地图的点击查询并闪烁

    否则,我们可以弹出一个消息框,提示用户没有查询到任何要素。 在这里,我们使用了 ArcGIS Engine 的 IMap、IPoint、IEnvelope、IIdentify 等接口来实现点击查询的功能。这些接口提供了强大的 GIS 功能,允许开发者...

    ArcGis Engine 点选

    点选查询通常用于在地图上选择特定的地理要素,如点、线、面或者特定属性值的图层。在C#中,我们可以通过以下几个步骤来实现: 1. **初始化ArcGIS Engine**:在C#程序中,首先需要引用ArcGIS的库,并创建一个`...

Global site tag (gtag.js) - Google Analytics