本文整理汇总了Python中safe.report.template_composition.TemplateComposition类的典型用法代码示例。如果您正苦于以下问题:Python TemplateComposition类的具体用法?Python TemplateComposition怎么用?Python TemplateComposition使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TemplateComposition类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_missing_elements
def test_missing_elements(self):
"""Test if we can get missing elements correctly."""
# Copy the inasafe template to temp dir
template_path = os.path.join(
temp_dir('test'), 'inasafe-portrait-a4.qpt')
shutil.copy2(INASAFE_TEMPLATE_PATH, template_path)
template_composition = TemplateComposition(template_path=template_path)
# No missing elements here
component_ids = ['safe-logo', 'north-arrow', 'organisation-logo',
'impact-map', 'impact-legend']
template_composition.component_ids = component_ids
message = 'There should be no missing elements, but it gets: %s' % (
template_composition.missing_elements)
expected_result = []
self.assertEqual(
template_composition.missing_elements, expected_result, message)
# There are missing elements
component_ids = ['safe-logo', 'north-arrow', 'organisation-logo',
'impact-map', 'impact-legend',
'i-added-element-id-here-nooo']
template_composition.component_ids = component_ids
message = 'There should be no missing elements, but it gets: %s' % (
template_composition.missing_elements)
expected_result = ['i-added-element-id-here-nooo']
self.assertEqual(
template_composition.missing_elements, expected_result, message)
# Remove test dir
shutil.rmtree(temp_dir('test'))
示例2: test_load_template
def test_load_template(self):
"""Test we can load template correctly."""
# Copy the inasafe template to temp dir
template_path = os.path.join(
temp_dir('test'), 'a4-portrait-blue.qpt')
shutil.copy2(INASAFE_TEMPLATE_PATH, template_path)
template_composition = TemplateComposition(
template_path=template_path,
map_settings=CANVAS.mapSettings())
template_composition.load_template()
# Check the element of the composition
# In that template, there should be these components:
component_ids = [
'white-inasafe-logo',
'north-arrow',
'organisation-logo',
'impact-map',
'impact-legend']
for component_id in component_ids:
component = template_composition.composition.getComposerItemById(
component_id)
message = ('In this template: %s, there should be this component '
'%s') % (INASAFE_TEMPLATE_PATH, component_id)
self.assertIsNotNone(component, message)
示例3: __init__
def __init__(self, iface, template, layer):
"""Constructor for the Composition Report class.
:param iface: Reference to the QGIS iface object.
:type iface: QgsAppInterface
:param template: The QGIS template path.
:type template: str
"""
LOGGER.debug('InaSAFE Impact Report class initialised')
self._iface = iface
self._template = template
self._layer = layer
self._extent = self._iface.mapCanvas().extent()
self._page_dpi = 300.0
self._safe_logo = resources_path(
'img', 'logos', 'inasafe-logo-url.svg')
self._organisation_logo = default_organisation_logo_path()
self._north_arrow = default_north_arrow_path()
self._disclaimer = disclaimer()
# For QGIS < 2.4 compatibility
# QgsMapSettings is added in 2.4
if qgis_version() < 20400:
map_settings = self._iface.mapCanvas().mapRenderer()
else:
map_settings = self._iface.mapCanvas().mapSettings()
self._template_composition = TemplateComposition(
template_path=self.template,
map_settings=map_settings)
self._keyword_io = KeywordIO()
示例4: template
def template(self, template):
"""Set template that will be used for report generation.
:param template: Path to composer template
:type template: str
"""
if isinstance(template, str) and os.path.exists(template):
self._template = template
else:
self._template = resources_path("qgis-composer-templates", "inasafe-portrait-a4.qpt")
# Also recreate template composition
self._template_composition = TemplateComposition(
template_path=self.template, map_settings=self._iface.mapCanvas().mapSettings()
)
示例5: ImpactReport
class ImpactReport(object):
"""A class for creating report using QgsComposition."""
def __init__(self, iface, template, layer):
"""Constructor for the Composition Report class.
:param iface: Reference to the QGIS iface object.
:type iface: QgsAppInterface
:param template: The QGIS template path.
:type template: str
"""
LOGGER.debug('InaSAFE Impact Report class initialised')
self._iface = iface
self._template = template
self._layer = layer
self._extent = self._iface.mapCanvas().extent()
self._page_dpi = 300.0
self._safe_logo = resources_path(
'img', 'logos', 'inasafe-logo-url.svg')
self._organisation_logo = default_organisation_logo_path()
self._north_arrow = default_north_arrow_path()
self._disclaimer = disclaimer()
# For QGIS < 2.4 compatibility
# QgsMapSettings is added in 2.4
if qgis_version() < 20400:
map_settings = self._iface.mapCanvas().mapRenderer()
else:
map_settings = self._iface.mapCanvas().mapSettings()
self._template_composition = TemplateComposition(
template_path=self.template,
map_settings=map_settings)
self._keyword_io = KeywordIO()
@property
def template(self):
"""Getter to the template"""
return self._template
@template.setter
def template(self, template):
"""Set template that will be used for report generation.
:param template: Path to composer template
:type template: str
"""
if isinstance(template, str) and os.path.exists(template):
self._template = template
else:
self._template = resources_path(
'qgis-composer-templates', 'inasafe-portrait-a4.qpt')
# Also recreate template composition
self._template_composition = TemplateComposition(
template_path=self.template,
map_settings=self._iface.mapCanvas().mapSettings())
@property
def layer(self):
"""Getter to layer that will be used for stats, legend, reporting."""
return self._layer
@layer.setter
def layer(self, layer):
"""Set the layer that will be used for stats, legend and reporting.
:param layer: Layer that will be used for stats, legend and reporting.
:type layer: QgsMapLayer, QgsRasterLayer, QgsVectorLayer
"""
self._layer = layer
@property
def composition(self):
"""Getter to QgsComposition instance."""
return self._template_composition.composition
@property
def extent(self):
"""Getter to extent for map component in composition."""
return self._extent
@extent.setter
def extent(self, extent):
"""Set the extent that will be used for map component in composition.
:param extent: The extent.
:type extent: QgsRectangle
"""
if isinstance(extent, QgsRectangle):
self._extent = extent
else:
self._extent = self._iface.mapCanvas().extent()
@property
def page_dpi(self):
"""Getter to page resolution in dots per inch."""
return self._page_dpi
@page_dpi.setter
#.........这里部分代码省略.........
示例6: load_template
def load_template(self, map_settings):
"""Load composer template for merged report.
Validate it as well. The template needs to have:
1. QgsComposerMap with id 'impact-map' for merged impact map.
2. QgsComposerPicture with id 'safe-logo' for InaSAFE logo.
3. QgsComposerLabel with id 'summary-report' for a summary of two
impacts.
4. QgsComposerLabel with id 'aggregation-area' to indicate the area
of aggregation.
5. QgsComposerScaleBar with id 'map-scale' for impact map scale.
6. QgsComposerLegend with id 'map-legend' for impact map legend.
7. QgsComposerPicture with id 'organisation-logo' for organisation
logo.
8. QgsComposerLegend with id 'impact-legend' for map legend.
9. QgsComposerHTML with id 'merged-report-table' for the merged report.
:param map_settings: Map settings.
:type map_settings: QgsMapSettings, QgsMapRenderer
"""
# Create Composition
template_composition = TemplateComposition(
self.template_path, map_settings)
# Validate the component in the template
component_ids = ['impact-map', 'safe-logo', 'summary-report',
'aggregation-area', 'map-scale', 'map-legend',
'organisation-logo', 'merged-report-table']
template_composition.component_ids = component_ids
if len(template_composition.missing_elements) > 0:
raise ReportCreationError(self.tr(
'Components: %s could not be found' % ', '.join(
template_composition.missing_elements)))
# Prepare map substitution and set to composition
impact_title = '%s and %s' % (
self.first_impact['map_title'],
self.second_impact['map_title'])
substitution_map = {
'impact-title': impact_title,
'hazard-title': self.first_impact['hazard_title'],
'disclaimer': self.disclaimer
}
template_composition.substitution = substitution_map
# Load Template
try:
template_composition.load_template()
except TemplateLoadingError:
raise
# Draw Composition
# Set InaSAFE logo
composition = template_composition.composition
safe_logo = composition.getComposerItemById('safe-logo')
safe_logo.setPictureFile(self.safe_logo_path)
# set organisation logo
org_logo = composition.getComposerItemById('organisation-logo')
org_logo.setPictureFile(self.organisation_logo_path)
# Set Map Legend
legend = composition.getComposerItemById('map-legend')
if qgis_version() < 20400:
layers = map_settings.layerSet()
else:
layers = map_settings.layers()
if qgis_version() < 20600:
legend.model().setLayerSet(layers)
legend.synchronizeWithModel()
else:
root_group = legend.modelV2().rootGroup()
layer_ids = map_settings.layers()
for layer_id in layer_ids:
# noinspection PyUnresolvedReferences
layer = QgsMapLayerRegistry.instance().mapLayer(layer_id)
root_group.addLayer(layer)
legend.synchronizeWithModel()
return composition