if (temp.Key = 0) or (objIn.Key = 0) then begin ShowMessagePos('Выберите на карте шаблон и обрабатываемый объект!', ll, tt); exit; end; // создадим временную карту для размещения результата пересечения // можно создавать и постоянную hsitenew := mapCreateAndAppendTempSite(mvMap.MapHandle, nil); if (hsitenew = 0) then begin ShowMessage('Временная карта для размещения результата не создана!'); exit; end;
Объекты пересечения записываются в карту parm1.Site2.
//------------------------------------------------------------------ // ПАРАМЕТРЫ ОБРАБОТКИ ПЕРЕСЕЧЕНИЙ МЕТРИКИ ОБЪЕКТОВ //------------------------------------------------------------------ typedef struct PROCESSPARM ... HMAP Map2; // Идентификатор открытых данных для записи результата HSITE Site2; // Новая карта для записи обработанных объектов
1.Если открыта карта и к ней добавлена карта для результатов пересечений, то для получения всех пересечений двух объектов в виде служебного объекта параметры вызова будут следующими:
2.Если открыта карта исходная в MapView1 и открыта карта для результатов пересечений в MapView2, то для получения всех пересечений двух объектов в виде служебного объекта параметры вызова будут следующими:
ShowMessage ('найден объект пересечения= '+form_main.MapFind3.MapObj.ObjName); // Здесь ищется объект ВЫДЕЛЕНИЕ ПЛОЩАДНЫХ, т.к. похоже именно этот условный знак используется ядром для указания на объект пересечения?
ShowMessage ('площадь пересечения= '+FloatToStr(form_main.MapFind3.MapObj.Square)); // Но здесь почему площадь равна нулю?
ShowMessage ('ObjSiteCount = '+IntToStr(ObjSiteCount)); // Здесь тоже не понятно почему на временной пользовательской карте 2 объекта, хотя пересечение создает только один объект?
При смешивании способа работы с картой (где компоненты, где прямые вызовы АПИ ГИС-ядра mapCreateAndAppendTempSite) могут получаться такие артефакты, при которых компоненты не могут узнать, что изменился состав карт и т.п. ПРичина может быть в этом. Например не совсем очевидно для какой карты устанавливаются условия поиска. Попробуйте для form_main.MapFind3.MapSelect.SiteNumber установить явно номер карты, для которой ищете. Также в MapSelect надо указать на каких картах ищете, так как после создания временной карты искать будет уже по двум.