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

Денис Вицко (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Денис Вицко
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 142 След.
Работа с слоями карты
 
Добрый день!

Функция [URL=http://help.gisinfo.ru/showresult.php?file=sitapi.htm&search=mapSetSiteTransparent#1]mapSetSiteTransparent[/URL] управляет прозрачностью отдельной карты.
У Вас может быть совместно открыто несколько карт и каждой можно задать своё значение прозрачности. Установить прозрачность отдельного слоя объектов внутри карты нельзя.

Включить/выключить карту, слой, объекты определенного кода или типа геометрии, либо конкретно указанные объекты можно с помощью класса QDMapSelect.
Установить в компонент QDMapView условия отображения, заданные в экземпляре класса QDMapSelect, можно с помощью методов QDMapView:
[CODE]void SetViewSelect(QDMapSelect value);
Функция устанавливает условия отображения карты согласно параметру value.

void SetSelecting(bool value);
Разрешить/запретить отображение карты в соответствии с контекстом условий отображения.
При значении свойства, установленном в false, карта выводится в полном объёме и составе
объектов.
При установке значения свойства true, производится перерисовка в составе объектов,
заданным свойством ViewSelect.
При изменении значения свойства производится перерисовка изображения карты.[/CODE]
Применение Python API для создания и редактирования SIT, Карты обстановки (operator.rsc)
 
Добрый день!

Функцию [URL=http://help.gisinfo.ru/showresult.php?file=sitapi.htm&search=mapPutMapPassportRecord#1]mapPutMapPassportRecord[/URL] можно использовать, когда у Вас есть в двоичном виде параметры паспорта карты.
Пустой буфер передать нельзя.

Для создания карты лучше использовать
Скрытый текст


Если возникают трудности с заполнением структур справочных данных, можно их заполнить по коду EPSG (например, 4326):
Скрытый текст


или по типу карты:
Скрытый текст


[QUOTE]Алексей Аминодов-Борисов написал:
Насколько я понимаю, если основной карты нет (потому что не нужно), то hMap в аргументах можно указать 0.[/QUOTE]

Нет. Основная карта есть всегда. Эта та, что открыта первой (или единственной).
Для единственной открытой карты первые два параметра могут совпадать, либо можно не задать HSITE, но основная карта указывается всегда обязательно!

1. Создать экземпляр класса работы с объектом (по окончании использования не забыть mapFreeObject):
Скрытый текст


2. Зарегистрировать объект нужным кодом, например 112010010 с локализацией LOCAL_VECTOR (даже если потом условный знак переназначается через семантику КЭУЗ, этот шаг все равно лучше не игнорировать):
Скрытый текст


3. Добавить и заполнить семантику:
Скрытый текст


4. Заполнить метрику одной из функций:
Скрытый текст


5. Сохранить объект:
Скрытый текст


6. Освободить экземпляр класса работы с объектом карты:
Скрытый текст


[QUOTE]Алексей Аминодов-Борисов написал:
А часть ключа в этом классификаторе, как известно, влияет на семантику и на внешний вид знака. Будет ли это работать?
P.P.S. Насколько я понимаю, в классификаторе operator.rsc за код КЭУЗ отвечает семантика 11525. Будет ли справедливым такой вывод, что для формирования знака достаточно передать в точечный объект эту семантику?[/QUOTE]
При установке корректного значения кода КЭУЗ в указанную семантику объект при сохранении будет автоматически перекодирован. Но, как говорилось выше, зарегистрировать объект всё же необходимо после создания (или очистки) объекта.

[QUOTE]Алексей Аминодов-Борисов написал:
Кстати, какие должны быть kind и pointcount для векторного знака? Насколько я понимаю, pointcount = 2, a kind = IDDOUBLE2.[/QUOTE]
Размерность метрики можно не указывать при создании объекта. По умолчанию она будет установлена как IDDOUBLE2.
Векторный объект может иметь две или одну точку метрики. Если объект в классификаторе описан как не имеющий направления и не масштабируемый по метрике, то вторая точка, которая за это отвечает, не нужна.
Не получается построить маршрут между двумя точками
 
[QUOTE]_Alex_ написал:
Не совсем все понял, я то хочу построить маршрут используя GisDesigner14 и программмно.[/QUOTE]

Вы просили примеры. Для GisDesigner14 готовых примеров нет.
Есть фрагменты кода в документации и пример для GIS ToolKit.

[QUOTE]_Alex_ написал:
Вот например как заставить работать вот такой пример из документации?[/QUOTE]

[QUOTE]
[B]TASKPARMEX taskParm;
memset(&taskParm, 0, sizeof(taskParm));
TASKPARMEX *parm = &taskParm;[/B]

HOBJ info1 = mapCreateSiteObject(hmap,site,IDDOUBLE2,0);
HOBJ info2 = mapCreateSiteObject(hmap,site,IDDOUBLE2,0);

DOUBLEPOINT point1, point2;
point1.X = 7345215.57;
point1.Y = 5448790.17;
point2.X = 7305483.92;
point2.Y = 5452435.00;
onGetNodeByPoint(hmap,site, info1, point1);
onGetNodeByPoint(hmap,site, info2, point2);
onSeekPathDlg(hmap,site,parm,info1,info2);[/QUOTE]

1. проверяйте коды возврата
2. после использования info1 и info2 необходимо освободить
3. для работы нужна карта с построенным графом дорог, открытая совместно с основной картой
4. координаты point1 и point2 должны +/- попадать в габариты карты (это метры в СК карты)

Карта с построенным графом дорог для карты Ногинска из примеров данных есть в инсталляции:
c:\Program Files\Panorama\GisDesigner14\Examples\data\Graph\
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Свойство [URL=https://help.gisserver.ru/_extra/axGisTool/axGisTool/aimapselect_excode.html]aiMapSelect.Excode[/URL] включает и выключает доступ к объектам карты заданного кода и локализации.
Здесь также как и с другими условиями ограничения выборки объектов действует правило:
[B]Пока не заданы ограничения, все объекты отвечают условиям и попадают в выходную выборку[/B].

Если требуется включить объекты только определенного кода и определенной локализации, то нет необходимости использовать cMapSelect.Local_set.
Надо запретить все объекты всех локализаций:
[CODE]cMapSelect.Excode_set(-1, Local_ОбъектаКарты, Ложь); // в данном случае Local_ОбъектаКарты не важен, исключаются все объекты всех кодов и локализаций
[/CODE]
затем включить нужные:
[CODE]cMapSelect.Excode_set(Excode_ОбъектаКарты, Local_ОбъектаКарты, Истина); // повторить для всех код+локализация, которые надо включить
[/CODE]
Не получается построить маршрут между двумя точками
 
В GIS TolKit (для Embarcadero) есть компонент работы с графом дорог - TMapNet.
Внутри своих методов он вызывает соответствующие MAPAPI-функции ГИС-ядра, которые Вы пытаетесь использовать.
По использованию данного компонента есть пример NetObj.
После [URL=https://gisinfo.ru/download/?id=311]установки GIS TolKit[/URL] пример будет по умолчанию тут - c:\Program Files (x86)\Panorama\GisTool15\Example\delphi\netobj\

Реализация TMapNet выполнена на Delphi (Pascal), по исходным кодам можно легко разобраться.

[QUOTE]_Alex_ написал:
не понятно как заполнять TASKPARMEX parm, так как я его передаю пустым.[/QUOTE]

Пустым передавать можно, но функции работы с графом не принимают пустой указатель.
То есть надо объявить структуру типа TASKPARMEX, обнулить ее или заполнить корректными значениями и передать ее указатель в функцию.

В TASKPARMEX можно заполнить параметр
[CODE] HMESSAGE Handle; // Идентификатор главного окна приложения (обработчик команд в Linux - функция обратного вызова)
[/CODE]
для получения сообщений о ходе обработки.

Параметр необязательный. Если TASKPARMEX будет пустой, просто не будут посылаться сообщения.

В Windows это должен быть HWND окна, которому будут отсылаться сообщения SendMessage.

В Linux - это указатель на функцию обратного вызова:
[CODE]// Функция обратного вызова обработки сообщений
// hwnd - идентификатор окна-получателя (для Linux - указатель на дочерний класс QWidget)
// code - код сообщения
// p1, p2 - параметры сообщения
// msgtype - тип сообщения (0 - SendMessage, 1 - PostMessage)
#ifdef WIN32API
typedef long int (*MSGHANDLER)(HWND hwnd, long int code, WPARAM p1, LPARAM p2, long int msgtype);
#else
typedef long int (*MSGHANDLER)(long int hwnd, long int code, WPARAM p1, LPARAM p2, long int msgtype);
#endif[/CODE]
Функции работы с сетью (графом дорог)
 
[QUOTE]_Alex_ написал:
А можно по поводу работы с графами, будут еще какие ресурсы где можно почитать и посмотреть небольшие примеры по взаимодействию через код?[/QUOTE]

[URL=https://gisinfo.ru/support/tehno.htm#graf]Технология создания, редактирования и поиска кратчайших маршрутов по графу сети[/URL]

[URL=https://gistoolkit.com/download/doc/graphofroad.pdf]Прикладные задачи. Граф дорог (документация ГИС Панорама)[/URL]

[URL=https://gistoolkit.com/download/doc/gisdesignerw_prog.pdf#page=132]Руководство программиста ГИС Конструктор для Qt Designer - пункт 3.8.31[/URL]

[URL=https://gistoolkit.com/download/doc/gisdesignerw_prog.pdf#page=132]Руководство программиста ГИС Конструктор для Qt Designer - пункт 3.9.6 - граф дорог на Python[/URL]
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
Подскажите, как в ActiveX  отыскать GUD,  открытой с ГИС сервера, карты ?  [/QUOTE]

Если я Вас правильно понял, Вам требуется этот параметр?
[IMG]https://i.postimg.cc/hGvjf58T/2024-01-24-094410131.png[/IMG]

В составе методов GIS ToolKit Active возможности обращения к этим свойствам не предусмотрено.

Если среда выполнения позволяет вызывать API-функции из динамических библиотек, то можно воспользоваться функцией

[CODE] // Запросить паспортные данные векторной карты
 // Структуры MAPREGISTER и LISTREGISTER описаны в mapcreat.h
 // hmap - идентификатор открытых данных
 // sheetnumber - номер листа карты для
 // которого запрашиваются паспортные данные
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetMapInfoPro(HMAP hmap, long int sheetnumber, MAPREGISTEREX *map, LISTREGISTER *sheet, SHEETNAMES * sheetnames);[/CODE]

Необходимо выделить память под все структуры.
В структуре SHEETNAMES есть поле Ident:
[CODE]typedef struct SHEETNAMES
{
 WCHAR2       Nomenclature[232]; // Номенклатура листа в UTF-16 с замыкающим нулем
 WCHAR2       Reserve1[24]; // Резерв, равен нулю
 WCHAR2       ListName[232]; // Имя листа карты в UTF-16 с замыкающим нулем
 WCHAR2       Reserve2[24]; // Резерв, равен нулю
 WCHAR2       FileName[232]; // Имя файлов листа карты в UTF-16 с замыкающим нулем
 char         Ident[34]; // Идентификатор листа карты GUID (32 шестнадцатеричных символа)
 char         Reserve3[14]; // Резерв, равен нулю
}
 SHEETNAMES;[/CODE]
Ошибка при запуске примера скрипта на Python, \GisTool15\Example\python\findobj\findobj.py
 
Добрый день!

[QUOTE]Андрей Кравцов написал:
Внёс изменения в скрипт...
...
Появляется окно программы и сразу закрывается с выводом ошибки[/QUOTE]

Такое поведение свидетельствует о том, что:
- либо интерпретатор Python не видит прописанных путей в переменной PATH (например, из-за того что после внесенных изменений не было logout/login в ОС);
- либо ОС находит где-то еще (в системных директориях) указанные библиотеки, но не в полном составе или старые версии;
- либо политика безопасности ОС не дает интерпретатору Python полноценного доступа к поддиректориям Panorama/GisTool15/ внутри C:/Program Files (x86).

[QUOTE]Денис Вицко написал:
Стандартный порядок поиска динамических библиотек в Windows выглядит так  (если по-простому):
- Папка, из которой загружено приложение.
- Системная папка.
- Папка Windows.
- Каталоги, перечисленные в переменной PATH среды.[/QUOTE]

Проверьте директории, которые Windows при поиске DLL проверяет до чтения переменной PATH. Удалите из них все файлы gis64*.dll и gis32*.dll. Возможно, до этого выполнялись установки GIS ToolKit, при котороых библиотеки размещались там.




[B]Файл imgwork/preview.png для запуска приложения не требуется.[/B]
Он будет сгенерирован при открытии карты по фактическому изображению карты.

Если у Вас этого не произошло, это означает, что:
[B]- либо карта не открылась;
- либо скрипт не смог создать на диске файл /imgwork/preview.png.[/B]

И то, и другое может быть следствием того, что  политика безопасности ОС не дает интерпретатору Python полноценного доступа к поддиректориям Panorama/GisTool15/ внутри C:/Program Files (x86).
Карта не доступна по пути "C:/Program Files (x86)/Panorama/GisTool15/Example/data/noginsk/map/noginsk.sitx" или нет возможности сохранить файл "C:/Program Files (x86)/Panorama/GisTool15/Example/python/findobj/imgwork/preview.png".



Политика безопасности ОС в крайних версиях Windows очень рьяно защищает директории на системном диске (и C:/Program Files (x86) в частности). Причем делает это зачастую очень своеобразно (например, создает копию файла, к которому идет попытка обращения, в папке пользователя и пытается открывать копию).
Чтобы исключить влияние политики безопасности ОС можно попробовать перенести либо папку с примерами, либо папку GisTool15 целиком на другой диск (D:), перенастроив все пути соответствующим образом.
Ошибка при запуске примера скрипта на Python, \GisTool15\Example\python\findobj\findobj.py
 
1. Проверьте еще раз версию Python, которая у Вас запускается по умолчанию. При наличии нескольких версий обработка файлов *.py возможна те той версией и не той разрядности, что ожидается.

2. Попробуйте в скрипт c:\Program Files (x86)\Panorama\GisTool15\Example\python\findobj\findobj.py после импорта модуля mapsyst добавить строчку:
[QUOTE]import mapsyst
[B]mapsyst.setupgislib('c:\\Program Files (x86)\\Panorama\\GisTool15\\Dll\\X64\\')[/B][/QUOTE]
Это заставит осуществлять загрузку DLL ГИС-ядра из конкретно указанной директории.

Если и так не будут загружаться библиотеки, значит проблема где-то в ОС - например, антивирус или что-то еще блокирует загрузку.
Ошибка при запуске примера скрипта на Python, \GisTool15\Example\python\findobj\findobj.py
 
На первый взгляд все правильно...

Поскольку Вы все установили с путями по умолчанию, файл с описанием констант должен выглядеть так:
[CODE]#!/usr/bin/env python3

def Slash(_path: str):
   if _path.endswith('/') or _path.endswith('\\'):
       return _path
   return _path + '/'

# Объявление рабочих переменных и констант

# путь к установленному инструментарию GIS ToolKit
abs_path_gtk = Slash('c:/Program Files (x86)/Panorama/GisTool15/')

#============================================================­==========================
# Настройки примера
#============================================================­==========================

# путь к директории, содержащей директорию с пакетом Python для доступа к ГИС-ядру
abs_path_gismapapi = abs_path_gtk + Slash('Dll/x64/py_mapapi14/')

# относительный путь от abs_path_gtk к тестовым данным
gis_path_data = Slash('Example/Data/')

# путь к директории нашего приложения
abs_path_exampwork = abs_path_gtk + Slash('Example/python/findobj/')

# путь к рабочему файлу изображения карты для нашего приложения
abs_imgwork = abs_path_exampwork + 'imgwork/preview.png'

# путь к тестовой карте
abs_sitxtest = abs_path_gtk + gis_path_data + 'noginsk/map/noginsk.sitx'

[/CODE]

После изменения переменной PATH требуется выполнить logout/login в систему (или перезагрузку), иначе обновления могут быть не видны запускаемым приложениям.


Проверил сейчас пример из инсталляции (установка со всеми путями по умолчанию) - пример запускается:
[IMG]https://i.postimg.cc/4NtrQDjq/2024-01-22-094134905.png[/IMG]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 142 След.



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

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