以下示例说明如何使用 SearchForFeature 和 SearchWithinGeometry。 它查找 uscty_1k 表中位于佛罗里达州的所有城市。 假定 "usa" 和 "uscty_1k" 表均打开,此外还有一张地图。
public static void MapInfo_Data_SearchInfo(Catalog catalog)
{
Feature fFlorida = catalog.SearchForFeature("usa",MapInfo.Data.SearchInfoFactory.SearchWhere("State='FL'"));
SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWithinGeometry(fFlorida.Geometry, ContainsType.Centroid);
//ContainsType枚举类型:Centroid:Geometry包含另一个几何体的中心,Geometry:Geometry完全包含另一个几何体
IResultSetFeatureCollection fc = MapInfo.Engine.Session.Current.Catalog.Search("uscty_1k", si);
// Set the map view to show search results
MapInfo.Engine.Session.Current.MapFactory[0].SetView(fc.Envelope);// Set the view of the first map.
// 查找结果,显示选中状态
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(fc);
}
catalog有两个用于搜索的方法:
- search方法:用于搜索一个或多个表,并且返回或修改IResultSetFeatureCollection或MultiResultSetFeatureCollection(表示搜索的结果。)
- searchForFeature方法:用于搜索使用指定SearchInfo的单一表,并返回单一的Feature(Feature 通常表示带有几何体、样式和属性的表中的行。)
SearchInfo类----定义搜索中使用的 Query 和需要搜索结果的后续处理。 所有 Catalog 搜索方法都需要。由SearchInfoFactory 创建 SearchInfo 对象。SearchInfoFactory有几种方法指定搜索条件:
- SearchAll--返回所有行
- SearchIntersectsFeature--在表几何体与搜索图元几何体相交的位置,创建返回行
- SearchIntersectsGeometry--在表几何体与搜索几何体相交的位置返回行
- SearchNearest 重载
- SearchWhere--创建SearchInfo,返回由给出的where子句指定的行
- SearchWithinFeature--在表几何体包含在图元几何体的位置创建返回行
- SearchWithinGeometry--在表几何体包含在几何体内的位置,创建返回行的SeachInfo
- SearchWithinRect--在表几何体与给出的矩形相交的位置,创建返回行的SearchInfo
思考:该方法可借鉴到鸡种分布查询中,查询某个省的所有鸡种。需要考虑是,是否可以计算该返回结果的数目,就可以知道每个省的鸡种数目,从而为主题图的制作做准备。