def _get_site_elem_for_site(self, site): """ Searches the current xml document for a Site node matching the input Site object. :param site: Site object to match with Site node in the xml document :type site: :py:class:`shapes.Site` object :returns: matching Site node (of type :py:class:`lxml.etree._Element`, or None if no match is found """ site_nodes = self.loss_map_node.xpath( './nrml:LMNode/nrml:site', namespaces=NAMESPACES) for node in site_nodes: if xml.element_equal_to_site(node, site): return node return None
def _get_site_elem_for_site(self, site): """ Searches the current xml document for a Site node matching the input Site object. :param site: Site object to match with Site node in the xml document :type site: :py:class:`shapes.Site` object :returns: matching Site node (of type :py:class:`lxml.etree._Element`, or None if no match is found """ site_nodes = self.map_container.xpath('./nrml:LMNode/nrml:site', namespaces=NAMESPACES) for node in site_nodes: if xml.element_equal_to_site(node, site): return node return None
def write(self, point, values): """Writes an asset element with loss/loss ratio information. point must be of type shapes.Site or shapes.GridPoint values is a pair of (curve_object, asset_object), with curve_object of type shapes.Curve. asset_object is a dictionary that looks like: {'assetID': foo, # this is the only required item 'nrml_id': 'nrml', 'riskres_id': 'rr', 'list_id': 'list', 'endBranchLabel' : '1_1' } """ if isinstance(point, shapes.GridPoint): point = point.site (curve_object, asset_object) = values # if we are writing the first hazard curve, create wrapping elements if self.root_node is None: # nrml:nrml, needs gml:id self._create_root_element() if 'nrml_id' in asset_object: nrml.set_gml_id(self.root_node, str(asset_object['nrml_id'])) else: nrml.set_gml_id(self.root_node, nrml.NRML_DEFAULT_ID) # nrml:riskResult, needs gml:id result_el = etree.SubElement(self.root_node, xml.RISK_RESULT_TAG) if 'riskres_id' in asset_object: nrml.set_gml_id(result_el, str(asset_object['riskres_id'])) else: nrml.set_gml_id(result_el, nrml.RISKRESULT_DEFAULT_ID) # container element, needs gml:id self.curve_list_el = etree.SubElement(result_el, self.container_tag) if 'list_id' in asset_object: nrml.set_gml_id(self.curve_list_el, str( asset_object['list_id'])) else: nrml.set_gml_id(self.curve_list_el, self.CONTAINER_DEFAULT_ID) asset_id = str(asset_object['assetID']) try: asset_el = self.assets_per_id[asset_id] except KeyError: # nrml:asset, needs gml:id asset_el = etree.SubElement(self.curve_list_el, xml.RISK_ASSET_TAG) nrml.set_gml_id(asset_el, asset_id) self.assets_per_id[asset_id] = asset_el # check if nrml:site is already existing site_el = asset_el.find(xml.RISK_SITE_TAG) if site_el is None: site_el = etree.SubElement(asset_el, xml.RISK_SITE_TAG) point_el = etree.SubElement(site_el, xml.GML_POINT_TAG) point_el.set(xml.GML_SRS_ATTR_NAME, xml.GML_SRS_EPSG_4326) pos_el = etree.SubElement(point_el, xml.GML_POS_TAG) pos_el.text = "%s %s" % (point.longitude, point.latitude) elif not xml.element_equal_to_site(site_el, point): error_msg = "asset %s cannot have two differing sites: %s, %s " \ % (asset_id, xml.lon_lat_from_site(site_el), point) raise ValueError(error_msg) # loss/loss ratio curves - sub-element already created? curves_el = asset_el.find(self.curves_tag) if curves_el is None: curves_el = etree.SubElement(asset_el, self.curves_tag) curve_el = etree.SubElement(curves_el, self.curve_tag) # attribute for endBranchLabel (optional) if 'endBranchLabel' in asset_object: curve_el.set(xml.RISK_END_BRANCH_ATTR_NAME, str(asset_object[xml.RISK_END_BRANCH_ATTR_NAME])) abscissa_el = etree.SubElement(curve_el, self.abscissa_tag) abscissa_el.text = _curve_vals_as_gmldoublelist(curve_object) poe_el = etree.SubElement(curve_el, xml.RISK_POE_TAG) poe_el.text = _curve_poe_as_gmldoublelist(curve_object)
def write(self, point, values): """Writes an asset element with loss map ratio information. :param point: the point of the grid we want to compute :type point: :py:class:`openquake.shapes.Site`, :py:class:`openquake.shapes.GridPoint` :param values: is a pair of (loss map values, asset_object) :type values: with the following members :py:class:`openquake.shapes.Curve` :py:class:`dict` (asset_object) ***assetID*** - the assetID ***endBranchLabel*** - endBranchLabel ***riskres_id*** - for example, 'rr' ***list_id*** - 'list' """ super(CurveXMLWriter, self).write(point, values) if isinstance(point, shapes.GridPoint): point = point.site (curve_object, asset_object) = values # container element, needs gml:id if self.curve_list_el is None: self.curve_list_el = etree.SubElement(self.result_el, self.container_tag) if 'list_id' in asset_object: nrml.set_gml_id(self.curve_list_el, str( asset_object['list_id'])) else: nrml.set_gml_id(self.curve_list_el, self.CONTAINER_DEFAULT_ID) asset_id = str(asset_object['assetID']) try: asset_el = self.assets_per_id[asset_id] except KeyError: # nrml:asset, needs gml:id asset_el = etree.SubElement(self.curve_list_el, xml.RISK_ASSET_TAG) nrml.set_gml_id(asset_el, asset_id) self.assets_per_id[asset_id] = asset_el # check if nrml:site is already existing site_el = asset_el.find(xml.RISK_SITE_TAG) if site_el is None: site_el = etree.SubElement(asset_el, xml.RISK_SITE_TAG) point_el = etree.SubElement(site_el, xml.GML_POINT_TAG) point_el.set(xml.GML_SRS_ATTR_NAME, xml.GML_SRS_EPSG_4326) pos_el = etree.SubElement(point_el, xml.GML_POS_TAG) pos_el.text = "%s %s" % (point.longitude, point.latitude) elif not xml.element_equal_to_site(site_el, point): error_msg = "asset %s cannot have two differing sites: %s, %s " \ % (asset_id, xml.lon_lat_from_site(site_el), point) raise ValueError(error_msg) # loss/loss ratio curves - sub-element already created? curves_el = asset_el.find(self.curves_tag) if curves_el is None: curves_el = etree.SubElement(asset_el, self.curves_tag) curve_el = etree.SubElement(curves_el, self.curve_tag) # attribute for endBranchLabel (optional) if 'endBranchLabel' in asset_object: curve_el.set(xml.RISK_END_BRANCH_ATTR_NAME, str(asset_object[xml.RISK_END_BRANCH_ATTR_NAME])) abscissa_el = etree.SubElement(curve_el, self.abscissa_tag) abscissa_el.text = _curve_vals_as_gmldoublelist(curve_object) poe_el = etree.SubElement(curve_el, xml.RISK_POE_TAG) poe_el.text = _curve_poe_as_gmldoublelist(curve_object)
def write(self, point, values): """Writes an asset element with loss map ratio information. :param point: the point of the grid we want to compute :type point: :py:class:`openquake.shapes.Site`, :py:class:`openquake.shapes.GridPoint` :param values: is a pair of (loss map values, asset) :type values: with the following members :py:class:`openquake.shapes.Curve` :py:class:`openquake.db.models.ExposureData`` """ super(CurveXMLWriter, self).write(point, values) if isinstance(point, shapes.GridPoint): point = point.site (curve_object, asset) = values # container element, needs gml:id if self.curve_list_el is None: self.curve_list_el = etree.SubElement(self.result_el, self.container_tag) nrml.set_gml_id(self.curve_list_el, self.CONTAINER_DEFAULT_ID) try: asset_el = self.assets_per_id[asset.asset_ref] except KeyError: # nrml:asset, needs gml:id asset_el = etree.SubElement(self.curve_list_el, xml.RISK_ASSET_TAG) nrml.set_gml_id(asset_el, asset.asset_ref) self.assets_per_id[asset.asset_ref] = asset_el # check if nrml:site is already existing site_el = asset_el.find(xml.RISK_SITE_TAG) if site_el is None: site_el = etree.SubElement(asset_el, xml.RISK_SITE_TAG) point_el = etree.SubElement(site_el, xml.GML_POINT_TAG) point_el.set(xml.GML_SRS_ATTR_NAME, xml.GML_SRS_EPSG_4326) pos_el = etree.SubElement(point_el, xml.GML_POS_TAG) pos_el.text = "%s %s" % (point.longitude, point.latitude) elif not xml.element_equal_to_site(site_el, point): error_msg = "asset %s cannot have two differing sites: %s, %s " \ % (asset.asset_ref, xml.lon_lat_from_site(site_el), point) raise ValueError(error_msg) # loss/loss ratio curves - sub-element already created? curves_el = asset_el.find(self.curves_tag) if curves_el is None: curves_el = etree.SubElement(asset_el, self.curves_tag) curve_el = etree.SubElement(curves_el, self.curve_tag) abscissa_el = etree.SubElement(curve_el, self.abscissa_tag) abscissa_el.text = _curve_vals_as_gmldoublelist(curve_object) poe_el = etree.SubElement(curve_el, xml.RISK_POE_TAG) poe_el.text = _curve_poe_as_gmldoublelist(curve_object)
def write(self, point, values): """Writes an asset element with loss/loss ratio information. point must be of type shapes.Site or shapes.GridPoint values is a pair of (curve_object, asset_object), with curve_object of type shapes.Curve. asset_object is a dictionary that looks like: {'assetID': foo, # this is the only required item 'nrml_id': 'nrml', 'riskres_id': 'rr', 'list_id': 'list', 'endBranchLabel' : '1_1' } """ if isinstance(point, shapes.GridPoint): point = point.site (curve_object, asset_object) = values # if we are writing the first hazard curve, create wrapping elements if self.root_node is None: # nrml:nrml, needs gml:id self._create_root_element() if 'nrml_id' in asset_object: nrml.set_gml_id(self.root_node, str(asset_object['nrml_id'])) else: nrml.set_gml_id(self.root_node, nrml.NRML_DEFAULT_ID) # nrml:riskResult, needs gml:id result_el = etree.SubElement(self.root_node, xml.RISK_RESULT_TAG) if 'riskres_id' in asset_object: nrml.set_gml_id(result_el, str(asset_object['riskres_id'])) else: nrml.set_gml_id(result_el, nrml.RISKRESULT_DEFAULT_ID) # container element, needs gml:id self.curve_list_el = etree.SubElement(result_el, self.container_tag) if 'list_id' in asset_object: nrml.set_gml_id(self.curve_list_el, str(asset_object['list_id'])) else: nrml.set_gml_id(self.curve_list_el, self.CONTAINER_DEFAULT_ID) asset_id = str(asset_object['assetID']) try: asset_el = self.assets_per_id[asset_id] except KeyError: # nrml:asset, needs gml:id asset_el = etree.SubElement(self.curve_list_el, xml.RISK_ASSET_TAG) nrml.set_gml_id(asset_el, asset_id) self.assets_per_id[asset_id] = asset_el # check if nrml:site is already existing site_el = asset_el.find(xml.RISK_SITE_TAG) if site_el is None: site_el = etree.SubElement(asset_el, xml.RISK_SITE_TAG) point_el = etree.SubElement(site_el, xml.GML_POINT_TAG) point_el.set(xml.GML_SRS_ATTR_NAME, xml.GML_SRS_EPSG_4326) pos_el = etree.SubElement(point_el, xml.GML_POS_TAG) pos_el.text = "%s %s" % (point.longitude, point.latitude) elif not xml.element_equal_to_site(site_el, point): error_msg = "asset %s cannot have two differing sites: %s, %s " \ % (asset_id, xml.lon_lat_from_site(site_el), point) raise ValueError(error_msg) # loss/loss ratio curves - sub-element already created? curves_el = asset_el.find(self.curves_tag) if curves_el is None: curves_el = etree.SubElement(asset_el, self.curves_tag) curve_el = etree.SubElement(curves_el, self.curve_tag) # attribute for endBranchLabel (optional) if 'endBranchLabel' in asset_object: curve_el.set(xml.RISK_END_BRANCH_ATTR_NAME, str(asset_object[xml.RISK_END_BRANCH_ATTR_NAME])) abscissa_el = etree.SubElement(curve_el, self.abscissa_tag) abscissa_el.text = _curve_vals_as_gmldoublelist(curve_object) poe_el = etree.SubElement(curve_el, xml.RISK_POE_TAG) poe_el.text = _curve_poe_as_gmldoublelist(curve_object)
def write(self, point, values): """Writes an asset element with loss map ratio information. :param point: the point of the grid we want to compute :type point: :py:class:`openquake.shapes.Site`, :py:class:`openquake.shapes.GridPoint` :param values: is a pair of (loss map values, asset_object) :type values: with the following members :py:class:`openquake.shapes.Curve` :py:class:`dict` (asset_object) ***assetID*** - the assetID ***endBranchLabel*** - endBranchLabel ***riskres_id*** - for example, 'rr' ***list_id*** - 'list' """ super(CurveXMLWriter, self).write(point, values) if isinstance(point, shapes.GridPoint): point = point.site (curve_object, asset_object) = values # container element, needs gml:id if self.curve_list_el is None: self.curve_list_el = etree.SubElement(self.result_el, self.container_tag) if 'list_id' in asset_object: nrml.set_gml_id(self.curve_list_el, str(asset_object['list_id'])) else: nrml.set_gml_id(self.curve_list_el, self.CONTAINER_DEFAULT_ID) asset_id = str(asset_object['assetID']) try: asset_el = self.assets_per_id[asset_id] except KeyError: # nrml:asset, needs gml:id asset_el = etree.SubElement(self.curve_list_el, xml.RISK_ASSET_TAG) nrml.set_gml_id(asset_el, asset_id) self.assets_per_id[asset_id] = asset_el # check if nrml:site is already existing site_el = asset_el.find(xml.RISK_SITE_TAG) if site_el is None: site_el = etree.SubElement(asset_el, xml.RISK_SITE_TAG) point_el = etree.SubElement(site_el, xml.GML_POINT_TAG) point_el.set(xml.GML_SRS_ATTR_NAME, xml.GML_SRS_EPSG_4326) pos_el = etree.SubElement(point_el, xml.GML_POS_TAG) pos_el.text = "%s %s" % (point.longitude, point.latitude) elif not xml.element_equal_to_site(site_el, point): error_msg = "asset %s cannot have two differing sites: %s, %s " \ % (asset_id, xml.lon_lat_from_site(site_el), point) raise ValueError(error_msg) # loss/loss ratio curves - sub-element already created? curves_el = asset_el.find(self.curves_tag) if curves_el is None: curves_el = etree.SubElement(asset_el, self.curves_tag) curve_el = etree.SubElement(curves_el, self.curve_tag) # attribute for endBranchLabel (optional) if 'endBranchLabel' in asset_object: curve_el.set(xml.RISK_END_BRANCH_ATTR_NAME, str(asset_object[xml.RISK_END_BRANCH_ATTR_NAME])) abscissa_el = etree.SubElement(curve_el, self.abscissa_tag) abscissa_el.text = _curve_vals_as_gmldoublelist(curve_object) poe_el = etree.SubElement(curve_el, xml.RISK_POE_TAG) poe_el.text = _curve_poe_as_gmldoublelist(curve_object)