Для поиска объектов в заданной области по их изображению применяется функции типа mapWhatObject.
Но у них есть ограничение по размеру области поиска в пикселах:
Код |
---|
// Поиск объектов в окрестности точки, заданной прямоугольной рамкой
// Применяется для выбора объекта при нажатии левой кнопки мыши на карте
// hMap - идентификатор открытой карты.
// info - идентификатор объекта в памяти,
// предварительно созданного функцией mapCreateObject()
// или mapCreateSiteObject(),
// в котором будет размещен результат поиска.
// frame - прямоугольная область поиска объекта в системе координат,
// заданной переменной place (PP_PLANE,PP_GEO, ...)
// Координаты области пересчитываются в пикселы в текущем масштабе
// отображения. В список выбранных могут попасть объекты, которые
// отображаются в текущем масштабе рядом с областью выбора в
// пределах нескольких пикселов.
// Площадные объекты выбираются в пределах рамки
// размером 512х512 пикселов в текущем масштабе изображения
// flag - порядок поиска объектов (WO_FIRST, WO_NEXT...)
// Выбор объекта в "точке" лучше начинать с последнего, то
// есть того, что нарисован поверх остальных (это чуть медленнее
// прямого поиска).
// При поиске с флажками WO_NEXT,WO_BACK параметр info должен
// содержать результат предыдущего поиска.
// Поиск выполнется среди тех объектов,которые видны на экране,
// если не установлен флаг WO_VISUALIGNORE
// place - система координат.
// Если объект не найден - возвращает ноль,
// иначе - возвращает значение info !
_MAPIMP HOBJ _MAPAPI mapWhatObject(HMAP hMap, HOBJ info, MAPDFRAME *frame, long int flag, long int place);
|
Можно на момент поиска менять масштаб отображения, чтобы область поиска была в пределах ограничения в 512 пикселов.
Или добирать "флажки", которые частично вошли в область по нижней полосе области поиска.
Если в функции поиска mapSelectAreaEx параметр action равен 1, то формируется список объектов (Sample);
Код |
---|
// Установить параметры поиска объектов по области.
// hMap - идентификатор открытой карты,
// object - объект-область поиска
// distance - расстояние поиска в метрах
// nmap - номер карты поиска; устанавливает границы поиска
// по картам.Если nmap=-1,поиск по всем картам
// флажки,описывающие критерии поиска :
// filter - учитывать/не учитывать(1/0) фильтр объектов
// (параметры фильтра должны быть установлены заранее
// в контексте поиска)
// inside - границы поиска объектов по области :
// 0 - по расстоянию, 1 - внутри области, 2 - целиком внутри области,
// 4 - целиком снаружи области.
// visible - с учетом/без учета(1/0) видимости объектов на карте
// action - порядок поиска объектов :
// 0 - последовательный поиск по мере запроса объектов,
// 1 - предварительный отбор всех объектов (главному
// окну приложения посылается WM_PROGRESSBAR - maptype.h),
// ускоряет многократный запрос отобранных объектов;
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSelectAreaEx(HMAP hMap, HOBJ object, double distance, long int filter, long int inside, long int visible, long int action, long int nmap); |
Если повторно пройти по нижней полосе функцией mapWhatObject, то найденные объекты можно добавить в список:
Код |
---|
// Установить доступ к заданному объекту заданного листа карты.
// select - контекст условий поиска
// list - номер листа карты,
// number - номер объекта в листе.
// В контексте условий поиска должна быть установлена карта.
// При ошибке возвращает ноль.
_MAPIMP long int _MAPAPI mapSelectSampleByNumber(HSELECT select, long int list, long int number);
|
При добавлении уже найденного объекта список не меняется. list = mapGetListNumber(hobj); number = mapGetObjectNumber(number);