Одновременно может быть открыто несколько карт в одном документе. Карта может состоять из нескольких листов (для топографических карт - номенклатурный лист). Вы запрашиваете сколько листов в конкретной карте, а не сколько карт в документе с идентификатором HMAP.
// Запросить общее число листов на карте // hMap - идентификатор открытой основной карты (данных) // hSite - идентификатор открытой пользовательской карты (может быть равен hMap // для доступа к основной карте) // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetSiteListCount(HMAP hmap, HSITE hSite);
// Запросить количество открытых пользовательских карт // hMap - идентификатор открытой карты // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetSiteCount(HMAP hMap);
Потому что для поиска доступна и основная карта, не только та, которую создали и добавили последней. Необходимо отключить карты, по которым поиск не должен выполняться. MapFind3.MapSites[0] := false
Andrey Gheleznyakov написал: Потому что для поиска доступна и основная карта, не только та, которую создали и добавили последней. Необходимо отключить карта, по которым поиск не должен выполняться.MapFind3.MapSites[0] := false
Сделали теперь так:
form_main.MapFind3.Active := false; form_main.MapFind3.FindPoint := false; form_main.MapFind3.MapSelect.Clear; form_main.MapFind3.MapObj.Style := OS_SELECT; form_main.MapFind3.MapSelect.MapSites[0] := false; form_main.MapFind3.MapSelect.SiteNumber := 1; // form_main.MapFind3.MapSelect.MapSites[1] := true; Если так, то результат тот же, находит объект ЛИНИЯ form_main.MapFind3.MapSelect.Excode[-1,OL_SQUARE] := false; form_main.MapFind3.MapSelect.Excode[1000000002,OL_SQUARE] := true; form_main.MapFind3.Active := true; form_main.MapFind3.First; form_main.MapFind3.Center; ShowMessage ('найден объект пересечения= '+form_main.MapFind3.MapObj.ObjName); // Теперь пишет: найден объект пересечения ЛИНИЯ, ожидается площадной объект
Количество объектов на пользовательской карте после выполнения оверлейной функции не добавилось, не пойму почему? MapFind3 упорно находит только ЛИНИЮ, ожидается площадной объект.
ShowMessage ('Количество объектов на пользовательской карте до выполнения оверлейной функции ObjSiteCount = '+IntToStr(ObjSiteCount)); // Здесь все хорошо 0
// RetFunc := form_main.ovlObj.OverlapTest(4, form_main.mvMap.MapHandle, 0, 0, hsitenew, 0, 0, 0, 0, 0, 0); // Это не работает
RetFunc := form_main.ovlObj.cntOverlapTest(4, @parm1, 0); // Это работает
ShowMessage ('RetFunc = '+IntToStr(RetFunc)); // Здесь все хорошо 1
ShowMessage ('Количество объектов на пользовательской карте после выполнения оверлейной функции ObjSiteCount = '+IntToStr(ObjSiteCount)); // Здесь показывает что количество объектов пересечения 2, и это не понятно? Ожидается 1 объект пересечения.
If resbool = true then begin form_main.MapFind3.Center; ShowMessage ('найден объект пересечения = '+form_main.MapFind3.MapObj.ObjName) // Найден объект пересечения ВЫДЕЛЕНИЕ ПЛОЩАДНЫХ, наверное это хорошо end else begin ShowMessage ('не найден объект пересечения'); end;
ShowMessage ('площадь пересечения= '+FloatToStr(form_main.MapFind3.MapObj.Square)); // Но здесь пишет, что площадь его равна 0, не пойму почему?
При вычислении площади объекта из площади внешнего контура вычитается площадь внутренних контуров. Если они, например, совпадают, то площадь будет равна нулю.