Для поиска объектов с учетом видимости Вам необходимо использовать метод [CODE] // Поиск объектов по заданным условиям среди отображаемых объектов
// (пересечение заданных условий с условиями отображения)
// hMap - идентификатор открытой карты;
// info - идентификатор существующего объекта;
// в котором будет размещен результат поиска.
// select - условия поиска объекта
// flag - порядок поиска объектов (WO_FIRST; WO_NEXT...)
// Если объект не найден - возвращает ноль
function mapSeekViewObject(Map:HMap;Obj:HObj;Select:HSelect;flag:integer= cWO_FIRST):HObj;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF};
external sGisAcces;
[/CODE]
[CODE] // Флажки; определяющие ПОРЯДОК ПОИСКА ОБЪЕКТОВ
// Первый в цепочке;последний;следующий за найденным ранее;
// предыдущий; вместе c удаленными; только в заданной карте.
// Если указано WO_INMAP - номер карты определяется
// из HSELECT !
// Поиск начинается с флажков WO_FIRST или WO_LAST (если нет
// объекта с которого начинается поиск); затем применяются
// флажки WO_NEXT или WO_BACK (например; в цикле).
// enum SEEKTYPE // ПОРЯДОК ПОИСКА ОБ'ЕКТОВ
// {
// WO_FIRST = 0, // Первый в цепочке
// WO_LAST = 2, // Последний в цепочке
// WO_NEXT = 4, // Следующий за найденным ранее
// WO_BACK = 8, // Предыдущий от ранее найденного
// WO_CANCEL = 16, // Включая удаленные объекты
// WO_INMAP = 32, // Только по одной карте (соответствующей HSELECT)
// WO_VISUAL = 64, // Поиск только среди видимых объектов
// WO_VISUALIGNORE = 128, // Поиск среди всех объектов без учета видимости
// };
[/CODE]
Вам необходимо перебирать объекты с флагом WO_VISUAL.
Также можете воспользоваться методом, который используется в компоненте поиска[CODE] // Поиск объектов в окрестности точки, заданной прямоугольной рамкой,
// удовлетворяющих условиям поиска
// hMap - идентификатор открытой карты.
// Obj - идентификатор объекта в памяти;
// предварительно созданного функцией mapCreateObject()
// или mapCreateSiteObject();
// в котором будет размещен результат поиска.
// Поиск выполнется среди тех объектов;которые
// соответствуют условиям HSELECT !
// select- контекст условий выбора объектов;
// place - система координат;
// frame - прямоугольная область поиска объекта в системе координат;
// заданной переменной place (PP_PLANE;PP_GEO; ...)
// flag - порядок поиска объектов (WO_FIRST; WO_NEXT...)
// Выбор объекта в "точке" лучше начинать с последнего; то
// есть того; что нарисован поверх остальных (это чуть медленнее
// прямого поиска).
// При поиске с флажками WO_NEXT;WO_BACK параметр info должен
// содержать результат предыдущего поиска.
// Если объект не найден - возвращает ноль;
// иначе - возвращает значение info !
function mapWhatObjectBySelect(Map:HMap;Obj:HObj;
var frame:TMAPDFRAME;
select :HSELECT; flag:integer;
place:integer):HObj;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF};
external sGisAcces;
[/CODE]