此代码在 MapXtreme 2008 6.8 版本下通过
第一种:
将表创建为图层,通过图层对象 Bounds 属性获取范围,这个大家应该比较熟悉,就不多说了,示例如下:
Table miTable = MapInfo.Engine.Session.Current.Catalog.OpenTable("sample.TAB");
FeatureLayer layer = new FeatureLayer(miTable);
DRect bounds = layer.Bounds;
上面的方法虽然很简单,但是需要创建一个 FeatureLayer 对象,如果这个表并不需要在地图上显示,那么这个 FeatureLayer 对象就变的多余了,怎么办呢?想节省内存的往下看 - -!一个 FeatureLayer 对象能浪费多少内存,有点吹毛求疵啦 :)
第二种:
通过查询语句,MapInfo 除了提供很多方法简化操作以外,还支持 Sql 查询,请看:
MIConnection miConn = new MIConnection();
MICommand miCmd = miConn.CreateCommand();
miCmd.CommandText = "select MI_AggregateEnvelope(mi_geometry) from miTable";
miConn.Open();
miCmd.Prepare();
object bounds = miCmd.ExecuteScalar();
看到这大家可能觉得,为了省点内存,得写这么多代码,而且还要对 MiConnection 对象进行关闭,太不划算了,别急,接着看,有更省事儿的。
第三种:
这个只要一行代码就搞定 :)
DRect bounds = (miTable.TableInfo.Columns["MI_Geometry"] as GeometryColumn).Bounds;
注:默认 miTable 是已经打开的 MapInfo 可制图的表。