在操作面图元时,我们可能希望这些图元按一定的顺序显示,例如面积大的显示在面积小的下面,以致于不会遮蔽小面积的图元。我通过下面的方法进行操作,但结果并不是我想要的。
MIConnection miConn = new MIConnection();
MICommand miCmd = miConn.CreateCommand();
MICmd.CommandText = "insert into directTable select * from sourceTable where 条件 order by 面积 DESC";
MIConn.Open();
int result = MICmd.ExecuteNonQuery();
上面代码的执行结果,sourceTable 中的 Feature 不是按指定的顺序插入 directTable 的。
即便我们改用下面的方式,也不能达到预期的效果。
MapInfo.Data.SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchAll();
si.QueryDefinition.Columns = new string[]{"*"};
// 指定排序列
si.QueryDefinition.OrderBy = new string[]{"面积 DESC"};
IResultSetFeatureCollection rsfc = Catalog.Search(sourceTable, si);
if(rsfc.Count > 0)
{
foreach(Feature f in rsfc)
{
directTable.InsertFeature(f);
}
}
这个问题在 MapXtreme 2004 6.2 下被发现,在 MapXtreme 2008 中测试也得到同样的结果,请教 MapInfo 相关人员后得到一个解决方案:
在执行插入操作后,如果想将图元 A 的顺序调到最上层显示,需要先删除 A,然后再添加 A,当然,在删除之前要做备份,否则添加的时候就找不到了。
这个方法我没试过,因为我采用创建独立图层的方法完成了工作,调整图层的顺序要比调整图元的顺序方便的多,缺点是不能包治天下,所以有兴趣的朋友不妨试试 MapInfo 人员的方法,如果可行的话,别忘通知兄弟一声,先谢谢啦 :-)