arcgis engine 实现点击某个国家,如何选择出这个国家所包含的城市?要求能够同时闪烁这些城市并返回城市的名字。
时间: 2024-02-18 18:58:55 浏览: 63
要实现点击某个国家时选择出该国家所包含的城市,可以通过ArcGIS Engine中的空间查询功能实现。具体步骤如下:
1. 建立国家和城市的空间数据图层,其中国家图层为多边形类型,城市图层为点类型。
2. 在地图控件上注册鼠标点击事件,并在事件处理程序中获取点击位置的地图坐标。
3. 将地图坐标转换为地理坐标,并通过空间查询找到包含该点的国家要素。
4. 获取该国家要素的属性信息,其中包含该国家所包含的所有城市的信息。
5. 将城市信息显示在地图上,并且让这些城市同时闪烁。
6. 返回城市的名字,可以通过遍历城市要素的属性信息实现。
下面是一些示例代码,用于实现上述功能:
```
// 获取地图控件和国家、城市图层
IMapControl3 mapControl = axMapControl1.Object as IMapControl3;
IFeatureLayer countryLayer = mapControl.Map.get_Layer(0) as IFeatureLayer;
IFeatureLayer cityLayer = mapControl.Map.get_Layer(1) as IFeatureLayer;
// 注册鼠标点击事件
mapControl.OnMouseDown += MapControl_OnMouseDown;
// 鼠标点击事件处理程序
private void MapControl_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
// 获取鼠标点击位置的地图坐标
IPoint point = new PointClass();
point.PutCoords(e.mapX, e.mapY);
// 将地图坐标转换为地理坐标
IGeometry geo = point as IGeometry;
geo.SpatialReference = mapControl.Map.SpatialReference;
geo.Project(countryLayer.FeatureClass.ShapeFieldName);
// 创建查询过滤器,查找包含该点的国家要素
ISpatialFilter filter = new SpatialFilterClass();
filter.Geometry = geo;
filter.SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin;
IFeatureCursor cursor = countryLayer.FeatureClass.Search(filter, false);
// 获取国家要素的属性信息
IFeature countryFeature = cursor.NextFeature();
if (countryFeature != null)
{
string countryName = countryFeature.get_Value(0).ToString();
// 查找该国家所包含的城市要素
filter = new SpatialFilterClass();
filter.Geometry = countryFeature.Shape;
filter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
cursor = cityLayer.FeatureClass.Search(filter, false);
// 显示城市要素,并让它们同时闪烁
List<string> cityNameList = new List<string>();
IFeature cityFeature = cursor.NextFeature();
while (cityFeature != null)
{
cityNameList.Add(cityFeature.get_Value(0).ToString());
// 显示城市要素
IElement element = new MarkerElementClass();
element.Geometry = cityFeature.Shape;
mapControl.ActiveView.GraphicsContainer.AddElement(element, 0);
// 让城市要素闪烁
IFeatureIdentifyObj featureIdentify = element as IFeatureIdentifyObj;
featureIdentify.Feature = cityFeature;
IIdentifyObj identify = featureIdentify as IIdentifyObj;
identify.Flash(mapControl.ActiveView.ScreenDisplay);
cityFeature = cursor.NextFeature();
}
// 返回城市名称列表
string[] cityNameArray = cityNameList.ToArray();
MessageBox.Show(string.Join(", ", cityNameArray));
}
}
```
上述代码实现了点击地图上的某个国家时,选择出该国家所包含的城市,并让这些城市同时闪烁。同时,代码还返回了城市的名称列表。
阅读全文