Путь разработчика

Сборник полезных примеров и советов для .NET программистов

Секреты MapXtreme. Поиск по участку карты.

2008-09-08 от Kosten


Недавно мы рассмотрели поиск по таблице, когда выборка происходила по значению какого-либо поля объекта. Очень часто возникает задача выбора объектов, которые находятся в какой-либо заданной области. Как произвести поиск таких объектов будет рассказано далее.

Исходными данными для такого поиска являются объект FeatureGeometry и таблица, по данным которой отображались объекты на карте.
Во первых зададим параметры поиска:

SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWithinGeometry(geom, ContainsType.Geometry);
si.QueryDefinition.Columns = new string[]{"*"};

Первый параметр функции SearchWithinGeometry указывает участок внутри которого необходимо осуществить поиск на карте. Обратите внимание на второй параметр в функции SearchWithinGeometry, который может принимать два значения:

  • ContainsType.Geometry
  • ContainsType.Centroid

В первом случае будут найдены объекты, которые полностью находятся внутри участка, определенного в первом параметре данной функции. Во втором случае будут найдены объекты у которых “центроид” находится внутри заданного участка. Вторая строка позволяет определить какие поля с данными необходимо включить в результат поиска. В данном случае будут возвращены все поля таблицы.

Table tbl = ... //получаем таблицу по которой строился слой
IResultSetFeatureCollection fc = MapInfo.Engine.Session.Current.Catalog.Search(tbl, si);

Поиск выполнен. Его результат находиться в переменной fc, которая представляет собой коллекцию объектов типа Feature, доступ к элементам которой можно получить следующим образом:

foreach (Feature feat in fc)
{
    //выполняем необходимые действия над объектом feat
}

Жду Ваших отзывов и комментариев.

Постовой: новости от Google

Опубликовано Понедельник, 08-09-2008 в 10:15 дп в рубрики C#, MapXtreme. Вы можете оставить отслеживать комментарии к записи при помощи RSS 2.0 ленты. Вы можете оставить комментарий, или трекбек с Вашего сайта.

Оставить комментарий