1.功能简介
矢量数据查询有属性查询和空间几何查询,下面对矢量数据的属性查询和空间查询做介绍
2.功能实现说明
2.1. 矢量数据的属性和空间查询
2.2. 实现思路及原理说明
第一步 |
得到要查询的图层 |
第二步 |
设置属性/空间查询条件 |
第三步 |
根据查询条件进行查询并在地图中高亮显示 |
2.3. 核心接口与方法
接口/类 |
方法/属性 |
说明 |
IQueryFilter |
SetAttributeQuery() |
设置属性条件 |
IQueryFilter |
SetSpatialQuery(); |
设置空间条件 |
IFeatureClass |
Search(IQueryFilter filter); |
查询 |
IFeatureCursor |
NextFeature() |
获得下一个要素 |
2.4. 示例代码
属性查询:
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/04矢量数据的查询 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape/省级行政区.shp |
视频路径 |
百度云盘地址下/PIE示例程序/04数据操作/04矢量数据的查询.avi |
示例代码 |
|
1 /// <summary> 2 /// 矢量数据集属性查询 3 /// </summary> 4 /// <param name="sender">事件触发器</param> 5 /// <param name="e">事件参数</param> 6 private void toolStripButton_QueryAttribute_Click(object sender, EventArgs e) 7 { 8 //1.首先要获取图层要素 9 IMap map = mapControlMain.FocusMap; 10 ILayer layer = map.GetLayer(0); 11 IFeatureLayer featureLayer = layer as IFeatureLayer; 12 13 //2.设置查询条件 14 IQueryFilter queryFilter = new QueryFilter(); 15 string filter = "NAME='北京'"; 16 queryFilter.SetAttributeQuery(filter); 17 18 //3.得到查询结果 19 IFeatureCursor featureCursor = featureLayer.FeatureClass.Search(queryFilter); 20 IFeature feature = null; 21 feature = featureCursor.NextFeature(); 22 23 //清除之前查询高亮显示的结果 24 map.ClearSelectionFeatures(); 25 //4.地图显示得到的结果 26 if (feature != null) 27 { 28 mapControlMain.FocusMap.SelectFeature(featureLayer as ILayer, feature); 29 } mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 30 } |
空间查询:
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/04矢量数据的查询 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape/省级行政区.shp |
视频路径 |
百度云盘地址下/PIE视频教程/04数据操作/04矢量数据的查询.avi |
示例代码 |
|
1 /// <summary> 2 /// 矢量数据集空间查询 3 /// </summary> 4 /// <param name="sender">事件触发器</param> 5 /// <param name="e">事件参数</param> 6 private void toolStripButton_QuerySpatial_Click(object sender, EventArgs e) 7 { 8 //1.首先要获取图层要素 9 IMap map = mapControlMain.FocusMap; 10 ILayer layer = map.GetLayer(0); 11 IFeatureLayer featureLayer = layer as IFeatureLayer; 12 13 //2.设置查询条件 14 IQueryFilter queryFilter = new QueryFilter(); 15 // 定义范围 16 IEnvelope envelope = new Envelope(); 17 envelope.PutCoords(110, 30, 115, 40); 18 queryFilter.SetSpatialQuery(envelope as IGeometry); 19 20 //3.得到查询结果 21 IFeatureCursor featureCursor = featureLayer.FeatureClass.Search(queryFilter); 22 IFeature feature = null; 23 feature = featureCursor.NextFeature(); 24 25 //4.地图显示得到的结果 26 map.ClearSelectionFeatures(); 27 while (feature != null) 28 { 29 mapControlMain.FocusMap.SelectFeature(featureLayer as ILayer, feature); 30 feature = featureCursor.NextFeature(); 31 } mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 32 } |
2.5. 示例截图
图1.属性查询示例图
图2.空间几何查询