Вывод условного обозначения в файл

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
pahanbi4
Сообщения: 5
Зарегистрирован: 10 сен 2019, 10:50

Вывод условного обозначения в файл

Сообщение pahanbi4 » 10 сен 2019, 11:07

Помогите! Не работает код по выводу условного обозначения в файл:

Код: Выделить всё

from axioma.cs import *
from axioma.core.geometry import *
from axioma.mapinfo import *
from axioma.render import *

from PyQt5.QtCore import  QRectF, Qt
from PyQt5.QtGui import QImage, QPainter

'''
Отрисовка точки со стилем в растровый файл. При этом точка, находящаяся в середине прямоугольника ((-250, -250) (250, 250) ),
отрисовывается по центру растра размером 100*100.
'''

rect_scene = QRectF(-250,-250,500,500) # Прямоугольник сцены (карты)
rect_device = QRectF(0,0,100,100) # Прямоугольник устройства (выходного растра)
image = QImage(rect_device.size().toSize(), QImage.Format_ARGB32_Premultiplied) # Сам растр, куда будем рисовать
image.fill(Qt.white)
painter = QPainter(image)
viewport = Viewport (rect_device, rect_scene) # viewport
context = Context(painter, viewport) # контекст

point = Point(None, 0, 0) #Точка без указания координатной системы
style = MapBasicStyle().styleFromString('Symbol(33,255,14)') # Cтиль точки
point_device = point.transformed(context.sceneToDeviceTransform()) # Преобразуем в координаты выходного растра
style.draw(point_device, context) # Отрисовка
image.save('c:/Python/Projects/out.png') # Сохраним в файловой системе
painter.end()
В файл сохраняется только белая заливка, самого условного обозначения нет.. :cry:
Аватара пользователя
Дмитрий
Сообщения: 13
Зарегистрирован: 04 июн 2019, 08:33

Re: Вывод условного обозначения в файл

Сообщение Дмитрий » 10 сен 2019, 12:41

Мы попробовали воссоздать проблему. В результате был отрисован синий ромб. Прикрепите, пожалуйста, сюда свой лог файл
"C:\Documents and Settings\<userName>\AppData\Roaming\ESTI\Axioma.GIS\axioma.gis.log"
Вложения
out.png
out.png (578 байт) 154 просмотра
Аватара пользователя
pahanbi4
Сообщения: 5
Зарегистрирован: 10 сен 2019, 10:50

Re: Вывод условного обозначения в файл

Сообщение pahanbi4 » 11 сен 2019, 06:03

Забыл упомянуть, что запускаю из PyCharm-а, так что в логе скорее всего ничего полезного не будет..
Пробовал запускать axioma.utils.execfile тот же результат - условника нет.

Из консоли аксиомы отрабатывает (через файл и через редактор).

Есть некоторый классификатор и для каждого его элемента (стиль в формате мапинфо) требуется сформировать изображение.
Классификатор - стороннее приложение и в данном случае аксиома используется только для формирования изображения.

В дальнейшем планируется запускать данный код из библиотеки на шарпе через питоннет.
Вложения
axioma.gis.log
(86.81 КБ) 20 скачиваний
Аватара пользователя
Дмитрий
Сообщения: 13
Зарегистрирован: 04 июн 2019, 08:33

Re: Вывод условного обозначения в файл

Сообщение Дмитрий » 11 сен 2019, 12:00

Вот теперь причина стала понятна. Вам необходимо добавить инициализацию ядра перед выполнением операции. Если запускать из под аксиомы, то оно уже инициализировано.

Должно получиться примерно так:

Код: Выделить всё

from axioma.cs import *
from axioma.core.geometry import *
from axioma.mapinfo import *
from axioma.render import *

from PyQt5.QtCore import  QRectF, Qt
from PyQt5.QtGui import QImage, QPainter

'''
Отрисовка точки со стилем в растровый файл. При этом точка, находящаяся в середине прямоугольника ((-250, -250) (250, 250) ),
отрисовывается по центру растра размером 100*100.
'''

import axioma.render
from PyQt5.QtGui import *
import sys


a = QGuiApplication(sys.argv)
render = axioma.render.Render()
render.initialize()

rect_scene = QRectF(-250,-250,500,500) # Прямоугольник сцены (карты)
rect_device = QRectF(0,0,100,100) # Прямоугольник устройства (выходного растра)
image = QImage(rect_device.size().toSize(), QImage.Format_ARGB32_Premultiplied) # Сам растр, куда будем рисовать
image.fill(Qt.white)
painter = QPainter(image)
viewport = Viewport (rect_device, rect_scene) # viewport
context = Context(painter, viewport) # контекст
            
point = Point(None, 0, 0) #Точка без указания координатной системы
style = MapBasicStyle().styleFromString('Symbol (33,255,14)') # Cтиль точки
point_device = point.transformed(context.sceneToDeviceTransform()) # Преобразуем в координаты выходного растра
style.draw(point_device, context) # Отрисовка
image.save('/tmp/111/out.png') # Сохраним в файловой системе
painter.end()
Аватара пользователя
pahanbi4
Сообщения: 5
Зарегистрирован: 10 сен 2019, 10:50

Re: Вывод условного обозначения в файл

Сообщение pahanbi4 » 12 сен 2019, 05:06

Спасибо!
Ответить