На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Консультация по mapCreateObjectsConsent

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active
Страницы: 1
RSS
Консультация по mapCreateObjectsConsent
 
Здравствуйте господа разработчики !

Пытаюсь написать что-то наподобие вот такой функции

Цитата
// создать смежные границы  между объектами
procedure CreateEDGE(map: HMAP; base, outObj : HOBJ);
var cross : HCross;
   Obj   : HObj;
begin
 cross := mapCreateObjectsConsent(base, outObj, OL_LINE, 0.01);
 Obj := mapCreateSiteObject(Map, Map);

 while mapGetNextConsent(cross, obj) <> 0 do
 begin
    mapRegisterObject(obj, 100000001, OL_LINE); // системный
    mapCommitObject(obj);
 end;
 mapFreeObject(Obj);
 mapFreeObjectsConsent(cross);
end;

Вызываю так


Цитата
procedure TForm1.Button2Click(Sender: TObject);
var Map : HMap;
   Obj1, Obj2 : HObj;
begin
 Map := mapOpenMap('E:\tmp\@ANI-BASE-FILL\MAP\WorldBorder.sitx', 0);
 Obj1 := mapCreateSiteObject(Map, Map);
 Obj2 := mapCreateSiteObject(Map, Map);
 if (mapSeekSiteObject(Map, Map, Obj1,  28335) <> 0) and
    (mapSeekSiteObject(Map, Map, Obj2, 28332) <> 0) then
  CreateEDGE(Map, Obj1, Obj2);
 mapFreeObject(Obj1);
 mapFreeObject(Obj2);
 mapCloseMap(map);
end;

Итог "построений"




Вопрос к разрабочикам.
Функция mapGetNextConsent точно должна формировать объект (красную линию)... не две зелёные? см.. картинку Выше??

п.с для проверки: Исходная карта находится в папке \Data.Ani\Карта регионов\ICAO-countries.sitx (изделия АНИ)
Изменено: Oleg Belenkov - 03.04.2020 11:37:03
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Пробовал копировать объект, - "воз" там же (см. оранжевые объекты)
Цитата
 while mapGetNextConsent(cross, obj) <> 0 do
 begin
   if mapReadCopyObject(ret, obj)<>0 then
   begin
     mapRegisterObject(ret, 81140100, OL_LINE);
     mapCommitObject(ret);
   end;
 end;
П.С. работаю с  ядром ГИС Панорама 13! (mapacces64.dll) .. не с GTK !



Изменено: KFF - 02.04.2020 13:21:23
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Функция выдает участки, примыкающие к общим участкам. В данном случае должно быть два контура, как на последнем рисунке.
Для надежности можно записывать mapCommitObjectAsNew (чтобы не затереть предыдущий).

Для получения пересечения линий (общих участков контуров) можно применить mapCreateObjectsCross с линейным методом пересечения.
Страницы: 1
Читают тему (гостей: 2)



© КБ Панорама, 1991-2022

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности