首页 / 浏览问题 / 组件GIS / 问题详情
wpf中怎么在实现地图鼠标点击事件
8EXP 2025年07月08日
问题描述:wpf中加入底图,之后底图上添加shp文件,该shp文件都是线,该怎么点击某条线显示对应的属性值,对应的地图鼠标点击事件用的哪个方法

1个回答

您好,

        SuperMap iObjects .NET 组件的 MapControl 控件提供了 GeometrySelected 事件,当鼠标在地图窗口点击选中矢量数据时,会触发该事件,可以在该事件中获取选中数据对应的属性值。

希望可以帮到您。

2,318EXP 2025年07月09日
那怎么获取点击单条线上的属性值,比如这条线的始发站或者过路站
可以在选中事件中,通过 MapControl 控件对象获取当前选中的记录集(参考 MapControl.Map.FindSelection(true)[0].ToRecordset()),获取到记录集 Recordset 后,就可以通过 Recordset 的 FieldInfos 和 GetValue 来获取对应的字段值。

我用上面的方法查询后只能获取到一列name的值,其他字段对应值获取不到,是哪块写的不对吗?

Selection selections = mapControl.Map.FindSelection(true)[0];
if (selections == null && selections.Count == 0)
{
    return;
}
// 获取当前线图层的选择记录集
Recordset recordset = selections.ToRecordset();
if (recordset == null || recordset.RecordCount == 0)
{
    return;
}
using (recordset)
{
    //移动到第一条记录上
    recordset.MoveFirst();
    //2. 创建 DataTable
    DataTable dataTable = new DataTable("test");

    //3.添加列到 DataTable
    SuperMap.Data.FieldInfos info=recordset.GetFieldInfos();
    foreach (SuperMap.Data.FieldInfo field in info)
    {
        dataTable.Columns.Add(field.Name);
    }

    // 4.获取要素集

    for (int i = 0; i < recordset.RecordCount; i++)
    {
        // 5.创建新行
        DataRow row = dataTable.NewRow();

        //6.填充行数据
        foreach (SuperMap.Data.FieldInfo field in info)
        {
            row[field.Name] = recordset.GetObject(field.Name);
        }
        //7.添加行到 DataTable
        dataTable.Rows.Add(row);
    }
}

...