День добрый, уважаемые разработчики!
При формировании тематического слоя столкнулся с ошибкой формирования условного знака.
Использую следующий код для формирования
individual = IndividualThematicLayer(theme_field)
individual.style_geometry_type = axipy.da.StyleGeometryType.Point
layer_for_theme.thematic.add(individual)
for i in range(individual.count):
value = individual.get_value(i)
try:
val_style = ... ' Функция определения стиля
if val_style is not None and val_style.strip() != '':
axi_style = Style.from_mapinfo(val_style)
print(value, val_style, axi_style)
individual.set_style(i, axi_style)
except Exception as ex:
logging.error(f'Ошибка добавления стиля для слоя {layer_name} {value}: {ex} ')
При выполнении кода получаю следующие
...
60204021322 Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
60204021332 Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
...
При выполнении Style.from_mapinfo(val_style) происходит изменение стиля отображения Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) => Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
Прошу проверить код функции Style.from_mapinfo на наличие ошибок.
Ошибки преобразования стиля МапИнфо
Re: Ошибки преобразования стиля МапИнфо
Добрый день.
В Axioma Style.from_mapinfo требуется определение стиля в терминах MapInfo
Вот требования описанию стиля в MapInfo
Symbol( shape, color, size )
Shape – специальный символ, например, кружок или звёздочка, который можно взять в стандартном наборе символе MapInfo Pro, смотрите Символы MapInfo 3.0.
где shape – форма символа, целое число от 32 и более (32 для невидимого знака); стандартный набор символов использует коды от 31 до 67 (список смотрите в разделе:
color – целочисленный код цвета в системе RGB, смотрите раздел: Функция RGB( ).
size – целое число, размер символа в точках от 1 до 48;
Таким образом
стиль Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) не верен .
Для удобства и понимания как стиль Axioma (MapInfo) можно представить в виде строки , можно использовать плагин композитные стили ( видео https://disk.yandex.ru/i/9yRtzJWlqDRCxA)
В Axioma Style.from_mapinfo требуется определение стиля в терминах MapInfo
Вот требования описанию стиля в MapInfo
Symbol( shape, color, size )
Shape – специальный символ, например, кружок или звёздочка, который можно взять в стандартном наборе символе MapInfo Pro, смотрите Символы MapInfo 3.0.
где shape – форма символа, целое число от 32 и более (32 для невидимого знака); стандартный набор символов использует коды от 31 до 67 (список смотрите в разделе:
color – целочисленный код цвета в системе RGB, смотрите раздел: Функция RGB( ).
size – целое число, размер символа в точках от 1 до 48;
Таким образом
стиль Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) не верен .
Для удобства и понимания как стиль Axioma (MapInfo) можно представить в виде строки , можно использовать плагин композитные стили ( видео https://disk.yandex.ru/i/9yRtzJWlqDRCxA)
Mitrich писал(а): ↑Сегодня, 11:12 День добрый, уважаемые разработчики!
При формировании тематического слоя столкнулся с ошибкой формирования условного знака.
Использую следующий код для формирования
individual = IndividualThematicLayer(theme_field)
individual.style_geometry_type = axipy.da.StyleGeometryType.Point
layer_for_theme.thematic.add(individual)
for i in range(individual.count):
value = individual.get_value(i)
try:
val_style = ... ' Функция определения стиля
if val_style is not None and val_style.strip() != '':
axi_style = Style.from_mapinfo(val_style)
print(value, val_style, axi_style)
individual.set_style(i, axi_style)
except Exception as ex:
logging.error(f'Ошибка добавления стиля для слоя {layer_name} {value}: {ex} ')
При выполнении кода получаю следующие
...
60204021322 Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
60204021332 Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
...
При выполнении Style.from_mapinfo(val_style) происходит изменение стиля отображения Symbol (31, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0) => Symbol (36, 0, 23, "NIPC_Genplan_2018_f_03", 0, 0)
Прошу проверить код функции Style.from_mapinfo на наличие ошибок.
Re: Ошибки преобразования стиля МапИнфо
Из документации по MapBasic
(да простят правообладатели)
Symbol clause
Purpose
Specifies a symbol style for point objects. You can use this clause in the MapBasic window in MapInfo
Professional.
MapInfo 3.0 Symbols
Syntax
Symbol( shape, color, size )
...
True Type Font
Syntax
Symbol( shape, color, size, fontname, fontstyle, rotation )
shape is an integer, 32 or larger, specifying which character to use from a TrueType font. To create an
invisible symbol, use 32.
В файле Style.py приведено описание
@staticmethod
def create_mi_font(
symbol: int = 36,
color: Union[QColor, Qt.GlobalColor] = Qt.red,
size: int = 8,
fontname: str = "Axioma MI MapSymbols",
fontstyle: int = 0,
rotation: float = 0.0,
) -> "PointFontStyle":
"""
Создание стиля на базе шрифта True Type :class:`PointFontStyle`.
Args:
symbol: Целое, имеющее значение 31 или больше, определяющее, какой используется символ из шрифтов TrueType.
Для создания невидимого символа используйте значение 31.
color: Цвет символа
size: Целое число, размер символа в пунктах от 1 до 48;
fontname: Строка с именем шрифта TrueType (например, значение по умолчание 'Axioma MI MapSymbols')
fontstyle: Стиль дополнительного оформления, например, курсивный текст.
Возможные параметры см. в таблице ниже. Для указания нескольких параметров их суммируют между собой.
rotation: Угол поворота символа в градусах.
Я согласен с тем, что у меня задается не совсем корректный символ, судя по документации MapBasic.
Но по описанию, приведенному в файле style.py: 31 - допустимое значение и подставлять значение 36 вместо допустимого 31 не совсем корректно.
(да простят правообладатели)
Symbol clause
Purpose
Specifies a symbol style for point objects. You can use this clause in the MapBasic window in MapInfo
Professional.
MapInfo 3.0 Symbols
Syntax
Symbol( shape, color, size )
...
True Type Font
Syntax
Symbol( shape, color, size, fontname, fontstyle, rotation )
shape is an integer, 32 or larger, specifying which character to use from a TrueType font. To create an
invisible symbol, use 32.
В файле Style.py приведено описание
@staticmethod
def create_mi_font(
symbol: int = 36,
color: Union[QColor, Qt.GlobalColor] = Qt.red,
size: int = 8,
fontname: str = "Axioma MI MapSymbols",
fontstyle: int = 0,
rotation: float = 0.0,
) -> "PointFontStyle":
"""
Создание стиля на базе шрифта True Type :class:`PointFontStyle`.
Args:
symbol: Целое, имеющее значение 31 или больше, определяющее, какой используется символ из шрифтов TrueType.
Для создания невидимого символа используйте значение 31.
color: Цвет символа
size: Целое число, размер символа в пунктах от 1 до 48;
fontname: Строка с именем шрифта TrueType (например, значение по умолчание 'Axioma MI MapSymbols')
fontstyle: Стиль дополнительного оформления, например, курсивный текст.
Возможные параметры см. в таблице ниже. Для указания нескольких параметров их суммируют между собой.
rotation: Угол поворота символа в градусах.
Я согласен с тем, что у меня задается не совсем корректный символ, судя по документации MapBasic.
Но по описанию, приведенному в файле style.py: 31 - допустимое значение и подставлять значение 36 вместо допустимого 31 не совсем корректно.
Re: Ошибки преобразования стиля МапИнфо
От себя могу добавить :
- использовать внутренний код style.py не совсем корректно , все таки первична документация
- думаю разработчики исправят , так как писали что следят за форумом.
Но не совсем понятно , что делать в axipy.Style.from_mapinfo если на вход поступает не корректное описание ? Выдавать ошибку или приводить к допустимому значению и выдавать предупреждение ?
- использовать внутренний код style.py не совсем корректно , все таки первична документация
- думаю разработчики исправят , так как писали что следят за форумом.
Но не совсем понятно , что делать в axipy.Style.from_mapinfo если на вход поступает не корректное описание ? Выдавать ошибку или приводить к допустимому значению и выдавать предупреждение ?
Mitrich писал(а): ↑47 минут назад Из документации по MapBasic
(да простят правообладатели)
Symbol clause
Purpose
Specifies a symbol style for point objects. You can use this clause in the MapBasic window in MapInfo
Professional.
MapInfo 3.0 Symbols
Syntax
Symbol( shape, color, size )
...
True Type Font
Syntax
Symbol( shape, color, size, fontname, fontstyle, rotation )
shape is an integer, 32 or larger, specifying which character to use from a TrueType font. To create an
invisible symbol, use 32.
В файле Style.py приведено описание
@staticmethod
def create_mi_font(
symbol: int = 36,
color: Union[QColor, Qt.GlobalColor] = Qt.red,
size: int = 8,
fontname: str = "Axioma MI MapSymbols",
fontstyle: int = 0,
rotation: float = 0.0,
) -> "PointFontStyle":
"""
Создание стиля на базе шрифта True Type :class:`PointFontStyle`.
Args:
symbol: Целое, имеющее значение 31 или больше, определяющее, какой используется символ из шрифтов TrueType.
Для создания невидимого символа используйте значение 31.
color: Цвет символа
size: Целое число, размер символа в пунктах от 1 до 48;
fontname: Строка с именем шрифта TrueType (например, значение по умолчание 'Axioma MI MapSymbols')
fontstyle: Стиль дополнительного оформления, например, курсивный текст.
Возможные параметры см. в таблице ниже. Для указания нескольких параметров их суммируют между собой.
rotation: Угол поворота символа в градусах.
Я согласен с тем, что у меня задается не совсем корректный символ, судя по документации MapBasic.
Но по описанию, приведенному в файле style.py: 31 - допустимое значение и подставлять значение 36 вместо допустимого 31 не совсем корректно.
Re: Ошибки преобразования стиля МапИнфо
Если следовать описанию в Style.py и "Руководству разработчика" - приведенный в качестве примера условный знак допустимый. В этом случае ничего делать не надо.
Если следовать логике, что вы предлагаете аналог MapInfo c аналогичными требованиями - тогда просто поменяйте значение 36, которое у вас стоит в качестве значения по умолчанию на минимально допустимое значение 32.
Что касается документации - я конечно прекрасно понимаю, что у разработчиков руки до нее не доходят, но у них они и не должны доходить в части написания документации для пользователя.
В "Руководстве разработчика" приведено:
static create_mi_font(symbol: int = 36, color: Union[QColor, GlobalColor] = Qt.red, size: int = 8, fontname: str = 'Axioma MI MapSymbols', fontstyle: int = 0, rotation: float = 0.0) → PointFontStyle
Создание стиля на базе шрифта True Type PointFontStyle.
Параметры:
symbol – Целое, имеющее значение 31 или больше, определяющее, какой используется символ из шрифтов TrueType. Для создания невидимого символа используйте значение 31.
color – Цвет символа
size – Целое число, размер символа в пунктах от 1 до 48;
fontname – Строка с именем шрифта TrueType (например, значение по умолчание „Axioma MI MapSymbols“)
fontstyle – Стиль дополнительного оформления, например, курсивный текст. Возможные параметры см. в таблице ниже. Для указания нескольких параметров их суммируют между собой.
rotation – Угол поворота символа в градусах.
Прошу обратить на это внимание
Если следовать логике, что вы предлагаете аналог MapInfo c аналогичными требованиями - тогда просто поменяйте значение 36, которое у вас стоит в качестве значения по умолчанию на минимально допустимое значение 32.
Что касается документации - я конечно прекрасно понимаю, что у разработчиков руки до нее не доходят, но у них они и не должны доходить в части написания документации для пользователя.
В "Руководстве разработчика" приведено:
static create_mi_font(symbol: int = 36, color: Union[QColor, GlobalColor] = Qt.red, size: int = 8, fontname: str = 'Axioma MI MapSymbols', fontstyle: int = 0, rotation: float = 0.0) → PointFontStyle
Создание стиля на базе шрифта True Type PointFontStyle.
Параметры:
symbol – Целое, имеющее значение 31 или больше, определяющее, какой используется символ из шрифтов TrueType. Для создания невидимого символа используйте значение 31.
color – Цвет символа
size – Целое число, размер символа в пунктах от 1 до 48;
fontname – Строка с именем шрифта TrueType (например, значение по умолчание „Axioma MI MapSymbols“)
fontstyle – Стиль дополнительного оформления, например, курсивный текст. Возможные параметры см. в таблице ниже. Для указания нескольких параметров их суммируют между собой.
rotation – Угол поворота символа в градусах.
Прошу обратить на это внимание
