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