То что без ключа не работает - это правильно. С ключом должна. Просьба сообщить номер лицензии на почту технической поддержки.
08.11.2023 14:59:02
[QUOTE]Анатолий Рогатнев написал:
Просмотреть (в 1С8.3) список этих объектов (не понял где они могут быть сохранены в ГИС Панорама ?).[/QUOTE] Найденные объекты на карте в предыдущем пункте необходимо сохранить в справочнике 1С. Для хранения можно выбрать или уникальный атрибут из семантики или номер объекта на карте (MapObj.Key)/ Логика хранения и использования зависит от требований информационной системы. Вопросы дальнейшего поиска по сохраненным ранее параметрам также рассматривались, а именно: Поиск по номеру Процедура Выделить3ОбъектаНажатие(Элемент) // Пример группового выделения нескольких объектов // Выделить три объекта, зная название карты и номера объектов карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; карта1.ViewSelect.ClearSampleAll(); // очистим параметры поиска название_карты = "Ногинский район"; icount = 0; ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 104007); // автодорога Если ret = 0 Тогда Сообщить("Объект с номером 104007 не найден"); Возврат; КонецЕсли; icount = icount + 1; ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 35695); // квартал Если ret = 0 Тогда Сообщить("Объект с номером 68512 не найден"); Возврат; КонецЕсли; icount = icount + 1; ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 18299); // озеро Если ret = 0 Тогда Сообщить("Объект с номером 187140 не найден"); Возврат; КонецЕсли; icount = icount + 1; clAqua = 16776960; clRed = 255; карта1.SetViewSelectedEx(Истина, clRed); карта1.ViewScale = 25000; // спозиционируем первый объект в центр окна карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; Если карта_объект.SeekObject(название_карты, 104007) <> 0 Тогда карта_объект.Center(); КонецЕсли; Сообщить("Выделено " + icount + " объекта(ов)"); КонецПроцедуры Поиск по семантике (для уникального значения семантики будет найден только один объект) // Поиск первых 10-ти объектов карты по значению семантики Процедура ПоискСемантика10(Элемент) Карта = ЭтаФорма.ЭлементыФормы.axMapView1; Если Карта.Active = Ложь Тогда Сообщить("Карта не открыта"); Возврат; КонецЕсли; ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1; ОбъектКартыДляПоиска = ЭтаФорма.ЭлементыФормы.axMapFind1.MapObj; // перебрать первые 10 объектов карты в слое Промышленные и социальные объекты ПоискПоКарте.cMapSelect.ClearAll(); ПоискПоКарте.Active = Истина; счетчик_объектов = 0; поиск = ПоискПоКарте.First(); Пока поиск = Истина Цикл // Проверим, что объект устаривает по характеристикам, например, номеру слоя карты // Слой промышленные и социальные объекты имеет номер в классификаторе объектов карты = 7 Если ОбъектКартыДляПоиска.LayerNumber <> 7 Тогда поиск = ПоискПоКарте.Next(); Продолжить; КонецЕсли; счетчик_объектов = счетчик_объектов + 1; поиск = ПоискПоКарте.Next(); Если счетчик_объектов > 9 Тогда Прервать; КонецЕсли; КонецЦикла; Сообщить(счетчик_объектов); КонецПроцедуры |
|
|
08.11.2023 14:54:25
[QUOTE]Andrey Gheleznyakov написал:
[QUOTE][URL=/forum/user/18451/]Анатолий Рогатнев[/URL] написал: Внутри отрисованного объекта выделить (показать на карте), находящиеся там, объекты карты.[/QUOTE] Процедура ВыделитьПоОбластиНажатие(Элемент) //Пример группового выделения нескольких объектов по области, заданной другим объектом. карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; карта1.Rendering = Ложь; // запретим переисовку, чтобы не моргало изображение карты на экране карта1.ViewScale = 25000; название_карты = "Ногинский район"; // найдем объект внутри которого ищем карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; Если карта_объект.SeekObject(название_карты, 38010) = 0 Тогда // кавртал редко застроенный Сообщить("Объект с номером 38010 не найден"); Возврат; КонецЕсли; карта_объект.Center(); // код ниже для поиска, а мы будем выделять //ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1; //ПоискПоКарте.Active = Ложь; //ПоискПоКарте.MapSelect.SiteNumber = 0; // ищем в первой - основной карте //ПоискПоКарте.MapSelect.UnselectSeekArea(-1); // сбросим область если была //ПоискПоКарте.FindPoint = Ложь; //ПоискПоКарте.Active = Истина; //ПоискПоКарте.First() = Истина; // установим область по найденному ранее объекту карта1.ViewSelect.ClearAll(); // установим фильтр для всех доступных карт, // по контуру объекта карта_объект // по расстоянию от границы = 0 // с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1 // внутри области = 0 // без учета видимости = 0 // операция для выделения = 1 iret = карта1.ViewSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1); Если iret = 0 Тогда Сообщить("Область поиска не установлена"); карта1.Rendering = Истина; Возврат; КонецЕсли; clRed = 255; карта1.SetViewSelectedEx(Истина, clRed); // разрешим перерисовку карта1.Rendering = Истина; КонецПроцедуры[/QUOTE] |
|
|
08.11.2023 14:53:41
[QUOTE]Анатолий Рогатнев написал:
Внутри отрисованного объекта выделить (показать на карте), находящиеся там, объекты карты.[/QUOTE] Процедура ВыделитьПоОбластиНажатие(Элемент) //Пример группового выделения нескольких объектов по области, заданной другим объектом. карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; карта1.Rendering = Ложь; // запретим переисовку, чтобы не моргало изображение карты на экране карта1.ViewScale = 25000; название_карты = "Ногинский район"; // найдем объект внутри которого ищем карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; Если карта_объект.SeekObject(название_карты, 38010) = 0 Тогда // кавртал редко застроенный Сообщить("Объект с номером 38010 не найден"); Возврат; КонецЕсли; карта_объект.Center(); // код ниже для поиска, а мы будем выделять //ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1; //ПоискПоКарте.Active = Ложь; //ПоискПоКарте.MapSelect.SiteNumber = 0; // ищем в первой - основной карте //ПоискПоКарте.MapSelect.UnselectSeekArea(-1); // сбросим область если была //ПоискПоКарте.FindPoint = Ложь; //ПоискПоКарте.Active = Истина; //ПоискПоКарте.First() = Истина; // установим область по найденному ранее объекту карта1.ViewSelect.ClearAll(); // установим фильтр для всех доступных карт, // по контуру объекта карта_объект // по расстоянию от границы = 0 // с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1 // внутри области = 0 // без учета видимости = 0 // операция для выделения = 1 iret = карта1.ViewSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1); Если iret = 0 Тогда Сообщить("Область поиска не установлена"); карта1.Rendering = Истина; Возврат; КонецЕсли; clRed = 255; карта1.SetViewSelectedEx(Истина, clRed); // разрешим перерисовку карта1.Rendering = Истина; КонецПроцедуры |
|
|
08.11.2023 14:52:42
По всем вопросам были примеры на форуме, в инсталляции.
[QUOTE]Анатолий Рогатнев написал: Мышью отрисовать область (площадной объект - виртуальный).[/QUOTE] // Создание объекта карты с выбором его типа (класса) из классификатора // можно выбрать любой тип - точечный, линейный, площадной Процедура СоздатьОбъектНажатие(Элемент) карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; Если карта1.Active = Ложь Тогда Сообщить("Карта не открыта"); Возврат; КонецЕсли; // получим объект управления картой из списка карт mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0); Если mapsite.GetSiteEditFlag() = 0 Тогда Сообщить("Редактирование на карте запрещено"); Возврат; КонецЕсли; Если ЭтаФорма.ЭлементыФормы.УправлениеКартой.Заголовок = "Управление Активно" Тогда // Остановить стандартное управление местоположением карты УправлениеКартойНажатие(Элемент); КонецЕсли; карта_ред = ЭтаФорма.ЭлементыФормы.axMapEditMetric; карта_ред.StopAction(); // если было активно, то остановить карта_ред.cMapView = карта1.C_CONTAINER; выбортип1 = ЭтаФорма.ЭлементыФормы.axMapSelectObjectRsc; выбортип1.cMapView = карта1.C_CONTAINER; карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; карта_объект.cMapView = карта1.C_CONTAINER; карта_ред.cMapObj = карта_объект.C_CONTAINER; координата = ЭтаФорма.ЭлементыФормы.axMapPoint1; координата.cMapView = карта1.C_CONTAINER; карта_ред.cMapPoint = координата.C_CONTAINER;; Если выбортип1.ExecuteForMapObj(карта_объект.C_CONTAINER, Истина) = Ложь Тогда Возврат; КонецЕсли; карта_ред.MetEditMode = 1; карта1.ViewScale = 25000; карта_ред.StartAction(); КонецПроцедуры // Создание точечного объекта карты, когда уже известен его классификационный код в классификаторе *.rsc Процедура СоздатьОбъектТочечныйНажатие(Элемент) карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; Если карта1.Active = Ложь Тогда Сообщить("Карта не открыта"); Возврат; КонецЕсли; // получим объект управления картой из списка карт mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0); Если mapsite.GetSiteEditFlag() = 0 Тогда Сообщить("Редактирование на карте запрещено"); Возврат; КонецЕсли; Если ЭтаФорма.ЭлементыФормы.УправлениеКартой.Заголовок = "Управление Активно" Тогда // Остановить стандартное управление местоположением карты УправлениеКартойНажатие(Элемент); КонецЕсли; карта_ред = ЭтаФорма.ЭлементыФормы.axMapEditMetric; карта_ред.StopAction(); // если было активно, то остановить карта_ред.cMapView = карта1.C_CONTAINER; выбортип1 = ЭтаФорма.ЭлементыФормы.axMapSelectObjectRsc; выбортип1.cMapView = карта1.C_CONTAINER; карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; карта_объект.cMapView = карта1.C_CONTAINER; карта_ред.cMapObj = карта_объект.C_CONTAINER; координата = ЭтаФорма.ЭлементыФормы.axMapPoint1; координата.cMapView = карта1.C_CONTAINER; карта_ред.cMapPoint = координата.C_CONTAINER;; //создадим пустую метрику IDDOUBLE2 = 2147254268; // = $7FFC7FFCс плавающей запятой двойной точностью OL_MARK = 2; // точечный объект Тип_объекта = 31632000; // классификационный код объекта карта_объект.CreateObject(0, IDDOUBLE2, Ложь, 1, Тип_объекта, OL_MARK); emCreate = 1; // создание метрики карта_ред.MetEditMode = emCreate; карта1.ViewScale = 25000; карта_ред.StartAction(); КонецПроцедуры При успешном завершении редактирования // обработка положительного окончания редактирования Процедура axMapEditMetricOnExecute(Элемент) // запишем объект в карту Если ЭтаФорма.ЭлементыФормы.axMapObj1.Commit() = 0 Тогда Сообщить("Запись объекта не выполнена"); // получим объект управления картой из списка карт mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0); Если mapsite.GetSiteEditFlag() = 0 Тогда Сообщить("Редактирование на карте запрещено"); КонецЕсли; Возврат; КонецЕсли; КонецПроцедуры Создание объекта когда его тип уже известен, например точечный // Создание точечного объекта карты, когда уже известен его классификационный код в классификаторе *.rsc Процедура СоздатьОбъектТочечныйНажатие(Элемент) карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; Если карта1.Active = Ложь Тогда Сообщить("Карта не открыта"); Возврат; КонецЕсли; // получим объект управления картой из списка карт mapsite = ЭтаФорма.ЭлементыФормы.axMapView1.MapSites.Item_get(0); Если mapsite.GetSiteEditFlag() = 0 Тогда Сообщить("Редактирование на карте запрещено"); Возврат; КонецЕсли; Если ЭтаФорма.ЭлементыФормы.УправлениеКартой.Заголовок = "Управление Активно" Тогда // Остановить стандартное управление местоположением карты УправлениеКартойНажатие(Элемент); КонецЕсли; карта_ред = ЭтаФорма.ЭлементыФормы.axMapEditMetric; карта_ред.StopAction(); // если было активно, то остановить карта_ред.cMapView = карта1.C_CONTAINER; выбортип1 = ЭтаФорма.ЭлементыФормы.axMapSelectObjectRsc; выбортип1.cMapView = карта1.C_CONTAINER; карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; карта_объект.cMapView = карта1.C_CONTAINER; карта_ред.cMapObj = карта_объект.C_CONTAINER; координата = ЭтаФорма.ЭлементыФормы.axMapPoint1; координата.cMapView = карта1.C_CONTAINER; карта_ред.cMapPoint = координата.C_CONTAINER;; //создадим пустую метрику IDDOUBLE2 = 2147254268; // = $7FFC7FFCс плавающей запятой двойной точностью OL_MARK = 2; // точечный объект Тип_объекта = 31632000; // классификационный код объекта карта_объект.CreateObject(0, IDDOUBLE2, Ложь, 1, Тип_объекта, OL_MARK); emCreate = 1; // создание метрики карта_ред.MetEditMode = emCreate; карта1.ViewScale = 25000; карта_ред.StartAction(); КонецПроцедуры Редактирование существующего объекта карты // редактирование контура объекта карты Процедура РедактироватьКонтурНажатие(Элемент) карта1 = ЭтаФорма.ЭлементыФормы.axMapView1; Если карта1.Active = Ложь Тогда Сообщить("Карта не открыта"); Возврат; КонецЕсли; Если ЭтаФорма.ЭлементыФормы.УправлениеКартой.Заголовок = "Управление Активно" Тогда // Остановить стандартное управление местоположением карты УправлениеКартойНажатие(Элемент); КонецЕсли; карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1; карта_объект.cMapView = карта1.C_CONTAINER; карта_ред = ЭтаФорма.ЭлементыФормы.axMapEditMetric; карта_ред.StopAction(); карта_ред.cMapView = карта1.C_CONTAINER; карта_ред.cMapObj = карта_объект.C_CONTAINER; координата = ЭтаФорма.ЭлементыФормы.axMapPoint1; координата.cMapView = карта1.C_CONTAINER; карта_ред.cMapPoint = координата.C_CONTAINER;; //type Описан в исходных текстах source.zip файл // TxEditMode = TOleEnum; //const // emEdit = $00000000; // emCreate = $00000001; // emCreateSubj = $00000002; // emMove = $00000003; // emAddPoint = $00000004; // emRemPoint = $00000005; // emGetPoint = $00000006; // emGetRealPoint = $00000007; // emMoveGroup = $00000008; emEdit = 0; карта_ред.MetEditMode = emEdit; //0 vsDefault настройки отображения по умолчанию (инверсное рисование) //1 vsRealView отображение реальным видом из классифкатора //2 vsRealWithNodes отображение реальным видом из классифкатора с выделением узлов //3 vsContourWithNodes отображение контуром с выделением узлов карта_ред.EditViewStyle = 3; // найдем редактируемый объект карта_объект.SeekObject("Ногинский район", 104007); // автодорога Если карта_объект.SeekObject("Ногинский район", 104007) = 0 Тогда Сообщить("Объект с номером 104007 не найден"); Возврат; КонецЕсли; // способы выделения объектов карты OS_NOVIEW = 0; // не отображать OS_NORMAL = 1; // отображать обычным знаком из классификатора OS_SELECT = 2; // выделить согласно настройкам MapObj карта1.ViewScale = 25000; карта_объект.Center(); // сдвинем объект в центр карта_ред.StartAction(); КонецПроцедуры
Изменено: |
|
|
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |