#region 查找图元方法 [例如查找城市] //快速///此方法要根据图层字段的NAME的位置改变索引
/// <summary>
/// 查找图元方法 [例如查找城市]
///快速
///此方法要根据图层字段的NAME的位置改变索引
/// </summary>
/// <param name="lyr_name">图层名</param>
/// <param name="name">图元名</param>
public void Method_Find_Feature_Ex(string lyr_name, string name)
{
MapXLib.Layer lyr = map.Layers.Item(lyr_name);
lyr.BeginAccess(MapXLib.LayerBeginAccessConstants.miAccessRead);//大大减少CPU的开销
MapXLib.FindFeature FoundFeature = null;
MapXLib.Find FindObj = lyr.Find;
FindObj.FindDataset = map.Datasets.Item(lyr_name + "DataSet");
FindObj.FindField = map.Datasets.Item(lyr_name + "DataSet").Fields.Item(1);//名字字段的索引为1,在数据集为lyr_name + "DataSet"中检索字段名(其名字的索引为1)
FoundFeature = FindObj.Search(name,Type.Missing);
lyr.EndAccess(MapXLib.LayerEndAccessConstants.miAccessEnd);
MessageBox.Show((FoundFeature.FindRC % 10).ToString() + "\n" + (FoundFeature.FindRC).ToString());
if (FoundFeature.FindRC % 10 == 1)
{
map.CenterX = FoundFeature.CenterX;
map.CenterY = FoundFeature.CenterY;
}
else
{
MessageBox.Show("该图层没有该图元");
}
}
/// <summary>
/// 查找图元方法 [例如查找城市]
///快速
///此方法要根据图层字段的NAME的位置改变索引
/// </summary>
/// <param name="lyr_name">图层名</param>
/// <param name="name">图元名</param>
public void Method_Find_Feature_Ex(string lyr_name, string name)
{
MapXLib.Layer lyr = map.Layers.Item(lyr_name);
lyr.BeginAccess(MapXLib.LayerBeginAccessConstants.miAccessRead);//大大减少CPU的开销
MapXLib.FindFeature FoundFeature = null;
MapXLib.Find FindObj = lyr.Find;
FindObj.FindDataset = map.Datasets.Item(lyr_name + "DataSet");
FindObj.FindField = map.Datasets.Item(lyr_name + "DataSet").Fields.Item(1);//名字字段的索引为1,在数据集为lyr_name + "DataSet"中检索字段名(其名字的索引为1)
FoundFeature = FindObj.Search(name,Type.Missing);
lyr.EndAccess(MapXLib.LayerEndAccessConstants.miAccessEnd);
MessageBox.Show((FoundFeature.FindRC % 10).ToString() + "\n" + (FoundFeature.FindRC).ToString());
if (FoundFeature.FindRC % 10 == 1)
{
map.CenterX = FoundFeature.CenterX;
map.CenterY = FoundFeature.CenterY;
}
else
{
MessageBox.Show("该图层没有该图元");
}
}
#endregion
这种的思路是:
1.使用了BeginAccess方法,该方法最大的好处就是减少了CPU的开销,也更能快速的查找到图元,(该方法注意的一点是每个BeginAccess方法配对一个EndAccess,
而且只能运行一组BeginAccess,EndAccess方法),
2.在DataSets集合中找到要相应的DataSet对象(其为要查找的图元所在的图层的数据表),接着在该数据表中找到地域名所在表的字段
3.然后查找地域
4.通过Find对象返回FindRC属性,其包含着数值结果码,当在个位为1时,其为已精确定位,故此设置地域的中心点