SuperMap-将记录集添加到地图的选择集中

SuperMap在地图选中的处理上有点不一样,首先要指定选择集指向的数据集:

                    /// 得到地图选择集对象,并与查询图层绑定
                    soSelection pSelection = axSuperMapCtrl.selection;
                    pSelection.RemoveAll();
                    pSelection.Dataset = pDataset as soDatasetVector;
 

记录集中的数据都是从pDataset 中查询出来的。

通过添加记录集中记录的ID值实现地图选中:

pSelection.Add(pRecordset.GetID());

完整示例:

                // 获取跟踪图形
                soGeometry pGeometry = axSuperMapCtrl.TrackedGeometry;
                if (pGeometry == null)
                {
                    MessageBox.Show("获取跟踪对象失败!");
                    return;
                }

                /// 将圆形与举行转换为面对象再进行查询
                if (pGeometry.Type == seGeometryType.scgCircle)
                {
                    soGeoCircle pCircle = pGeometry as soGeoCircle;
                    pGeometry = pCircle.ConvertToRegion(1000) as soGeometry;

                    Marshal.ReleaseComObject(pCircle); pCircle = null;
                }
                else if (pGeometry.Type == seGeometryType.scgRect)
                {
                    soGeoRect pRect = pGeometry as soGeoRect;
                    pGeometry = pRect.ConvertToRegion() as soGeometry;

                    Marshal.ReleaseComObject(pRect); pRect = null;
                }

                // 得到跟踪图层的数据集
                soDataset pDataset = m_Layer.Dataset;
                if (pDataset == null)
                {
                    MessageBox.Show("选择的图层数据集为空!");

                    Marshal.ReleaseComObject(pGeometry); pGeometry = null;
                    return;
                }

                seSpatialQueryMode pQueryMode = seSpatialQueryMode.scsAreaIntersect;
                seAction pAction = axSuperMapCtrl.Action;
                switch (pAction)
                {
                    case seAction.scaTrackPoint:
                        pQueryMode = seSpatialQueryMode.scsExtentOverlap;
                        break;

                    case seAction.scaTrackCircle:
                        pQueryMode = seSpatialQueryMode.scsContaining;
                        break;

                    case seAction.scaTrackPolygon:
                        pQueryMode = seSpatialQueryMode.scsAreaIntersect;
                        break;

                    case seAction.scaTrackRectangle:
                        pQueryMode = seSpatialQueryMode.scsContaining;
                        break;
                }
                pAction = seAction.scaNull;

                // 转化为矢量数据集并根据图形进行查询
                soDatasetVector pDataetVector = pDataset as soDatasetVector;
                soRecordset pRecordset = pDataetVector.QueryEx(pGeometry, pQueryMode, "");
                statusLabel.Text = string.Format("共选中{0}条记录", pRecordset.RecordCount);
                // 释放对象
                Marshal.ReleaseComObject(pDataetVector); pDataetVector = null;
                Marshal.ReleaseComObject(pGeometry); pGeometry = null;

                // 跟踪图层对象
                soTrackingLayer pTrackingLayer = axSuperMapCtrl.TrackingLayer;
                pTrackingLayer.ClearEvents();
                if (pRecordset != null)
                {
                    // 定义显示样式
                    soStyle pSoStyle = new soStyleClass();
                    pSoStyle.PenColor = 2030;
                    pSoStyle.PenWidth = 5;
                    pSoStyle.BrushColor = 244222;
                    pSoStyle.BrushStyle = 2;
                    pSoStyle.SymbolSize = 80;

                    /// 得到地图选择集对象,并与查询图层绑定
                    soSelection pSelection = axSuperMapCtrl.selection;
                    pSelection.RemoveAll();
                    pSelection.Dataset = pDataset as soDatasetVector;

                    // 对所有对象进行应用
                    pRecordset.MoveFirst();
                    for (int i = 1; i <= pRecordset.RecordCount; i++)
                    {
                        // 在图层中进行显示
                        soGeometry pSoSelectGeometry = pRecordset.GetGeometry();
                        pTrackingLayer.AddEvent(pSoSelectGeometry, pSoStyle, "");

                        // 添加至
                        pSelection.Add(pRecordset.GetID());

                        pRecordset.MoveNext();
                        Marshal.ReleaseComObject(pSoSelectGeometry); pSoSelectGeometry = null;
                    }

                    //pSelection.Style = pSoStyle;
                    /// 释放资源
                    Marshal.ReleaseComObject(pSelection); pSelection = null;
                    Marshal.ReleaseComObject(pDataset); pDataset = null;
                    Marshal.ReleaseComObject(pSoStyle); pSoStyle = null;
                    Marshal.ReleaseComObject(pTrackingLayer); pTrackingLayer = null;
                    Marshal.ReleaseComObject(pRecordset); pRecordset = null;
                }

                axSuperMapCtrl.Refresh();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值