本文整理汇总了Python中safe_qgis.keyword_io.KeywordIO.readKeywords方法的典型用法代码示例。如果您正苦于以下问题:Python KeywordIO.readKeywords方法的具体用法?Python KeywordIO.readKeywords怎么用?Python KeywordIO.readKeywords使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类safe_qgis.keyword_io.KeywordIO
的用法示例。
在下文中一共展示了KeywordIO.readKeywords方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_printImpactTable
# 需要导入模块: from safe_qgis.keyword_io import KeywordIO [as 别名]
# 或者: from safe_qgis.keyword_io.KeywordIO import readKeywords [as 别名]
def test_printImpactTable(self):
"""Test that we can render html from impact table keywords."""
LOGGER.debug('InaSAFE HtmlRenderer testing printImpactTable')
myFilename = 'test_floodimpact.tif'
myLayer, _ = loadLayer(myFilename)
myMessage = 'Layer is not valid: %s' % myFilename
assert myLayer.isValid(), myMessage
myPageDpi = 300
myHtmlRenderer = HtmlRenderer(myPageDpi)
myPath = unique_filename(prefix='impactTable',
suffix='.pdf',
dir=temp_dir('test'))
myKeywordIO = KeywordIO()
myKeywords = myKeywordIO.readKeywords(myLayer)
myPath = myHtmlRenderer.printImpactTable(myKeywords,
theFilename=myPath)
myMessage = 'Rendered output does not exist: %s' % myPath
assert os.path.exists(myPath), myMessage
# pdf rendering is non deterministic so we can't do a hash check
# test_renderComposition renders just the image instead of pdf
# so we hash check there and here we just do a basic minimum file
# size check.
mySize = os.stat(myPath).st_size
myExpectedSize = 20936 # as rendered on linux ub 12.04 64
myMessage = ('Expected rendered table pdf to be at least %s, got %s'
% (myExpectedSize, mySize))
assert mySize >= myExpectedSize, myMessage
示例2: KeywordsDialog
# 需要导入模块: from safe_qgis.keyword_io import KeywordIO [as 别名]
# 或者: from safe_qgis.keyword_io.KeywordIO import readKeywords [as 别名]
#.........这里部分代码省略.........
Args:
theKey- String representing the key to search for
Returns:
Value of key if matched otherwise none
Raises:
no exceptions explicitly raised."""
for myCounter in range(self.lstKeywords.count()):
myExistingItem = self.lstKeywords.item(myCounter)
myText = myExistingItem.text()
myTokens = myText.split(':')
myKey = str(myTokens[0]).strip()
myValue = str(myTokens[1]).strip()
if myKey == theKey:
return myValue
return None
def loadStateFromKeywords(self):
"""Set the ui state to match the keywords of the
currently active layer.
Args:
None
Returns:
None.
Raises:
no exceptions explicitly raised."""
# In case the layer has no keywords or any problem occurs reading them,
# start with a blank slate so that subcategory gets populated nicely &
# we will assume exposure to start with.
myKeywords = {'category': 'exposure'}
try:
# Now read the layer with sub layer if needed
myKeywords = self.keywordIO.readKeywords(self.layer)
except (InvalidParameterException, HashNotFoundException):
pass
myLayerName = self.layer.name()
if 'title' not in myKeywords:
self.leTitle.setText(myLayerName)
self.lblLayerName.setText(myLayerName)
#if we have a category key, unpack it first so radio button etc get set
if 'category' in myKeywords:
self.setCategory(myKeywords['category'])
myKeywords.pop('category')
for myKey in myKeywords.iterkeys():
self.addListEntry(myKey, myKeywords[myKey])
# now make the rest of the safe_qgis reflect the list entries
self.updateControlsFromList()
def updateControlsFromList(self):
"""Set the ui state to match the keywords of the
currently active layer.
Args:
None
Returns:
None.
Raises:
no exceptions explicitly raised."""
mySubcategory = self.getValueForKey('subcategory')
myUnits = self.getValueForKey('unit')
myType = self.getValueForKey('datatype')
myTitle = self.getValueForKey('title')
if myTitle is not None:
示例3: MapLegend
# 需要导入模块: from safe_qgis.keyword_io import KeywordIO [as 别名]
# 或者: from safe_qgis.keyword_io.KeywordIO import readKeywords [as 别名]
class MapLegend():
"""A class for creating a map legend."""
def __init__(self, theLayer, theDpi=300):
"""Constructor for the Map Legend class.
Args:
* theLayer: QgsMapLayer object that the legend should be generated
for.
* theDpi: Optional DPI for generated legend image. Defaults to
300 if not specified.
Returns:
None
Raises:
Any exceptions raised will be propagated.
"""
LOGGER.debug('InaSAFE Map class initialised')
self.legendImage = None
self.layer = theLayer
# how high each row of the legend should be
self.legendIncrement = 42
self.keywordIO = KeywordIO()
self.legendFontSize = 8
self.legendWidth = 900
self.dpi = theDpi
def tr(self, theString):
"""We implement this ourself since we do not inherit QObject.
Args:
theString - string for translation.
Returns:
Translated version of theString.
Raises:
no exceptions explicitly raised.
"""
return QtCore.QCoreApplication.translate('MapLegend', theString)
def getLegend(self):
"""Examine the classes of the impact layer associated with this print
job.
.. note: This is a wrapper for the rasterLegend and vectorLegend
methods.
Args:
None
Returns:
None
Raises:
An InvalidLegendLayer will be raised if a legend cannot be
created from the layer.
"""
LOGGER.debug('InaSAFE Map Legend getLegend called')
if self.layer is None:
myMessage = self.tr('Unable to make a legend when map generator '
'has no layer set.')
raise LegendLayerError(myMessage)
try:
self.keywordIO.readKeywords(self.layer, 'impact_summary')
except KeywordNotFoundError, e:
myMessage = self.tr('This layer does not appear to be an impact '
'layer. Try selecting an impact layer in the '
'QGIS layers list or creating a new impact '
'scenario before using the print tool.'
'\nMessage: %s' % str(e))
raise Exception(myMessage)
if self.layer.type() == QgsMapLayer.VectorLayer:
return self.getVectorLegend()
else:
return self.getRasterLegend()
示例4: KeywordIOTest
# 需要导入模块: from safe_qgis.keyword_io import KeywordIO [as 别名]
# 或者: from safe_qgis.keyword_io.KeywordIO import readKeywords [as 别名]
class KeywordIOTest(unittest.TestCase):
"""Tests for reading and writing of raster and vector data
"""
def setUp(self):
self.keywordIO = KeywordIO()
myUri = QgsDataSourceURI()
myUri.setDatabase(os.path.join(TESTDATA, 'jk.sqlite'))
myUri.setDataSource('', 'osm_buildings', 'Geometry')
self.sqliteLayer = QgsVectorLayer(myUri.uri(), 'OSM Buildings',
'spatialite')
myHazardPath = os.path.join(HAZDATA, 'Shakemap_Padang_2009.asc')
self.fileRasterLayer, myType = loadLayer(myHazardPath,
theDirectory=None)
del myType
self.fileVectorLayer, myType = loadLayer('Padang_WGS84.shp')
del myType
self.expectedSqliteKeywords = {'category': 'exposure',
'datatype': 'OSM',
'subcategory': 'building'}
self.expectedVectorKeywords = {'category': 'exposure',
'datatype': 'itb',
'subcategory': 'structure'}
self.expectedRasterKeywords = {'category': 'hazard',
'source': 'USGS',
'subcategory': 'earthquake',
'unit': 'MMI',
'title': ('An earthquake in Padang '
'like in 2009')}
def tearDown(self):
pass
def test_getHashForDatasource(self):
"""Test we can reliably get a hash for a uri"""
myHash = self.keywordIO.getHashForDatasource(PG_URI)
myExpectedHash = '7cc153e1b119ca54a91ddb98a56ea95e'
myMessage = "Got: %s\nExpected: %s" % (myHash, myExpectedHash)
assert myHash == myExpectedHash, myMessage
def test_writeReadKeywordFromUri(self):
"""Test we can set and get keywords for a non local datasource"""
myHandle, myFilename = tempfile.mkstemp('.db', 'keywords_',
temp_dir())
# Ensure the file is deleted before we try to write to it
# fixes windows specific issue where you get a message like this
# ERROR 1: c:\temp\inasafe\clip_jpxjnt.shp is not a directory.
# This is because mkstemp creates the file handle and leaves
# the file open.
os.close(myHandle)
os.remove(myFilename)
myExpectedKeywords = {'category': 'exposure',
'datatype': 'itb',
'subcategory': 'building'}
# SQL insert test
# On first write schema is empty and there is no matching hash
self.keywordIO.setKeywordDbPath(myFilename)
self.keywordIO.writeKeywordsForUri(PG_URI, myExpectedKeywords)
# SQL Update test
# On second write schema is populated and we update matching hash
myExpectedKeywords = {'category': 'exposure',
'datatype': 'OSM', # <--note the change here!
'subcategory': 'building'}
self.keywordIO.writeKeywordsForUri(PG_URI, myExpectedKeywords)
# Test getting all keywords
myKeywords = self.keywordIO.readKeywordFromUri(PG_URI)
myMessage = 'Got: %s\n\nExpected %s\n\nDB: %s' % (
myKeywords, myExpectedKeywords, myFilename)
assert myKeywords == myExpectedKeywords, myMessage
# Test getting just a single keyword
myKeyword = self.keywordIO.readKeywordFromUri(PG_URI, 'datatype')
myExpectedKeyword = 'OSM'
myMessage = 'Got: %s\n\nExpected %s\n\nDB: %s' % (
myKeyword, myExpectedKeyword, myFilename)
assert myKeyword == myExpectedKeyword, myMessage
# Test deleting keywords actually does delete
self.keywordIO.deleteKeywordsForUri(PG_URI)
try:
myKeyword = self.keywordIO.readKeywordFromUri(PG_URI, 'datatype')
#if the above didnt cause an exception then bad
myMessage = 'Expected a HashNotFoundException to be raised'
assert myMessage
except HashNotFoundException:
#we expect this outcome so good!
pass
def test_areKeywordsFileBased(self):
"""Can we correctly determine if keywords should be written to file or
to database?"""
assert not self.keywordIO.areKeywordsFileBased(self.sqliteLayer)
assert self.keywordIO.areKeywordsFileBased(self.fileRasterLayer)
assert self.keywordIO.areKeywordsFileBased(self.fileVectorLayer)
def test_readRasterFileKeywords(self):
"""Can we read raster file keywords using generic readKeywords method
"""
myKeywords = self.keywordIO.readKeywords(self.fileRasterLayer)
myExpectedKeywords = self.expectedRasterKeywords
mySource = self.fileRasterLayer.source()
#.........这里部分代码省略.........
示例5: __init__
# 需要导入模块: from safe_qgis.keyword_io import KeywordIO [as 别名]
# 或者: from safe_qgis.keyword_io.KeywordIO import readKeywords [as 别名]
#.........这里部分代码省略.........
"""
LOGGER.debug("InaSAFE Map drawImage called")
myDesiredWidthMM = theWidthMM # mm
myDesiredWidthPX = mmToPoints(myDesiredWidthMM, self.pageDpi)
myActualWidthPX = theImage.width()
myScaleFactor = myDesiredWidthPX / myActualWidthPX
LOGGER.debug("%s %s %s" % (myScaleFactor, myActualWidthPX, myDesiredWidthPX))
myTransform = QtGui.QTransform()
myTransform.scale(myScaleFactor, myScaleFactor)
myTransform.rotate(0.5)
myItem = self.composition.addPixmap(QtGui.QPixmap.fromImage(theImage))
myItem.setTransform(myTransform)
myItem.setOffset(theLeftOffset / myScaleFactor, theTopOffset / myScaleFactor)
return myItem
def drawHostAndTime(self, theTopOffset):
"""Add a disclaimer to the composition.
Args:
theTopOffset - vertical offset at which to begin drawing
Returns:
None
Raises:
None
"""
LOGGER.debug("InaSAFE Map drawDisclaimer called")
# elapsed_time: 11.612545
# user: timlinux
# host_name: ultrabook
# time_stamp: 2012-10-13_23:10:31
# myUser = self.keywordIO.readKeywords(self.layer, 'user')
# myHost = self.keywordIO.readKeywords(self.layer, 'host_name')
myDateTime = self.keywordIO.readKeywords(self.layer, "time_stamp")
myTokens = myDateTime.split("_")
myDate = myTokens[0]
myTime = myTokens[1]
# myElapsedTime = self.keywordIO.readKeywords(self.layer,
# 'elapsed_time')
# myElapsedTime = humaniseSeconds(myElapsedTime)
myLongVersion = get_version()
myTokens = myLongVersion.split(".")
myVersion = "%s.%s.%s" % (myTokens[0], myTokens[1], myTokens[2])
myLabelText = (
self.tr(
"Date and time of assessment: %1 %2\n"
"Special note: This assessment is a guide - we strongly recommend "
"that you ground truth the results shown here before deploying "
"resources and / or personnel.\n"
"Assessment carried out using InaSAFE release %3 (QGIS "
"plugin version)."
)
.arg(myDate)
.arg(myTime)
.arg(myVersion)
)
myFontSize = 6
myFontWeight = QtGui.QFont.Normal
myItalicsFlag = True
myFont = QtGui.QFont("verdana", myFontSize, myFontWeight, myItalicsFlag)
myLabel = QgsComposerLabel(self.composition)
myLabel.setFont(myFont)
myLabel.setText(myLabelText)
myLabel.adjustSizeToText()
myLabelHeight = 50.0 # mm determined using qgis map composer
myLabelWidth = (self.pageWidth / 2) - self.pageMargin