Аксиома падает при закрытии таблиц

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
Афанасич
Сообщения: 13
Зарегистрирован: 06 янв 2023, 12:00

Аксиома падает при закрытии таблиц

Сообщение Афанасич » 17 янв 2023, 11:58

Перебираю растры, открываю таблицу -> создаю слой-> создаю рамки -> рамки в другую таблицу -> закрываю таблицу. На второй, край на третьей - Аксиома падает
def spisokCreate(input_files,output_file):
schema = Schema(Attribute.string('path',254),coordsystem=CoordSystem.from_prj('CoordSys NonEarth Units "m" Bounds (-1000000, -1000000) (19000000, 19000000)'))
tableout = provider_manager.createfile(output_file,schema)

for tabfile in input_files:
tablein= provider_manager.openfile(tabfile)
ulayer = Layer.create(tablein)
if isinstance(ulayer, RasterLayer):
rect = Rectangle(ulayer.get_bounds(), cs=schema.coordsystem)
feat = Feature({'path':tabfile}, geometry=rect)
tableout.insert(feat)
tablein.close()
try:
if tableout.is_modified:
tableout.commit()
finally:
tableout.close()


И попутно - можно ли выполнить эту же задачу без создания слоев?
Спасибо.
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Аксиома падает при закрытии таблиц

Сообщение gisamap » 18 янв 2023, 08:33

Добрый день.
Можно получить bound растра используя axipy.da.Raster device_to_scene_transform и size ( размер растра)
Т.е открыть tab растра для него получить размер растра и QTransform (device_to_scene_transform)
далее пересчитать граничные точки растра в координаты
QTransform.map(x, y)
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Аксиома падает при закрытии таблиц

Сообщение gisamap » 18 янв 2023, 09:05

Попробуйте следующий вариант
def getBound(table):
cs=table.coordsystem
size=table.size
transform=table.device_to_scene_transform
x0,y0=transform.map(0,0)
x1,y1=transform.map(0,size.height())
x2,y2=transform.map(size.width(),size.height())
x3,y3=transform.map(size.width(),0)
bound=Polygon([(x0,y0),(x1,y1),(x2,y2),(x3,y3)],cs)
return bound
Аватара пользователя
Афанасич
Сообщения: 13
Зарегистрирован: 06 янв 2023, 12:00

Re: Аксиома падает при закрытии таблиц

Сообщение Афанасич » 18 янв 2023, 15:34

Спасибо за код - все сработало,но как определить что таблица растровая (или векторная).
Вернемся к началу вопроса - о падении Аксиомы (кстати, если слой не создаем, то все отлично срабатывает)
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Аксиома падает при закрытии таблиц

Сообщение gisamap » 18 янв 2023, 15:41

Один из простых вариантов проверки таблица растровая или нет
if isinstance(tab_raster,axipy.da.Raster):
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Аксиома падает при закрытии таблиц

Сообщение gisamap » 19 янв 2023, 08:34

Добрый день. Во вложении код выполняющий таблицу с bound растров
Вложения
CreateBoundRaster.zip
(905 байт) 91 скачивание
Аватара пользователя
Александр
Сообщения: 405
Зарегистрирован: 18 апр 2019, 08:21

Re: Аксиома падает при закрытии таблиц

Сообщение Александр » 19 янв 2023, 12:45

Афанасич писал(а): 18 янв 2023, 15:34 Вернемся к началу вопроса - о падении Аксиомы (кстати, если слой не создаем, то все отлично срабатывает)
Проблема в незакрытом слое.
ulayer = None перед tablein.close()
решает ситуацию.
Мы исправим, а пока нужно присваивать слою None
Ответить