def parse(self, xml): xml = XMLParser.parse(self, xml) _, self.offering.identifier = self.searchFirst(xml, "identifier") _, self.offering.procedure = self.searchFirst(xml, "procedure") for _, value in self.search(xml, "procedureDescriptionFormat"): self.offering.procedureDescriptionFormats.append(value) for _, value in self.search(xml, "observableProperty"): _, self.offering.observableProperties.append(value) observedAreaNode, observedAreaType = self.searchFirst( xml, "observedArea/*") if observedAreaNode: _, self.offering.srsName = self.searchFirst( observedAreaNode, "@srsName") if observedAreaType == "Envelope": self.offering.observedArea = GMLParser.rectangleFromGMLEnvelope( observedAreaNode) elif observedAreaType == "Box": self.offering.observedArea = GMLParser.rectangleFromGMLBox( observedAreaNode) else: geo = GMLParser.geometryFromGML(observedAreaNode) if geo: self.offering.observedArea = geo.boundingBox() else: self.offering.observedArea = QgsRectangle() timeNode, timePrimitive = self.searchFirst(xml, "phenomenonTime/*") if timePrimitive: try: gmlTimeParser = XMLParserFactory.getInstance("GML" + timePrimitive) self.offering.phenomenonTime = gmlTimeParser().parse(timeNode) except NotImplementedError: self.offering.phenomenonTime = QgsTime() resultTimeNode, resultTimePrimitive = self.searchFirst( xml, "resultTime/*") if resultTimePrimitive: try: gmlTimeParser = XMLParserFactory.getInstance( "GML" + resultTimePrimitive) self.offering.resultTime = gmlTimeParser().parse( resultTimeNode) except NotImplementedError: self.offering.resultTime = QgsTime() _, self.offering.featureOfInterestType = self.searchFirst( xml, "featureOfInterestType") for _, value in self.search(xml, "responseFormat"): self.offering.responseFormats.append(value) for _, value in self.search(xml, "observationType"): _, self.offering.observationTypes.append(value) return self.offering
def parse (self, xml): xml = XMLParser.parse(self, xml) _, self.offering.id = self.searchFirst (xml, "@id") _, self.offering.name = self.searchFirst (xml, "name") _, self.offering.description = self.searchFirst (xml, "description") boundedByNode, boundedByType = self.searchFirst (xml, "boundedBy/*") _, self.offering.srsName = self.searchFirst (boundedByNode, "@srsName") if boundedByType == "Envelope": self.offering.boundedBy = GMLParser.rectangleFromGMLEnvelope(boundedByNode) elif boundedByType == "Box": self.offering.boundedBy = GMLParser.rectangleFromGMLBox(boundedByNode) else: geo = GMLParser.geometryFromGML(boundedByNode) if geo: self.offering.boundedBy = geo.boundingBox() else: self.offering.boundedBy = QgsRectangle() timeNode, timePrimitive = self.searchFirst (xml, "time/*") if timePrimitive: try: gmlTimeParser = XMLParserFactory.getInstance ("GML" + timePrimitive) self.offering.time = gmlTimeParser().parse(timeNode) except NotImplementedError: self.offering.time = QgsTime() self.offering.proceduresList = [] for _, value in self.search (xml, "procedure@href"): self.offering.proceduresList.append(value) self.offering.observedPropertiesList = [] for _, value in self.search (xml, "observedProperty@href"): self.offering.observedPropertiesList.append(value) self.offering.featureOfInterestList = [] for _, value in self.search (xml, "featureOfInterest@href"): self.offering.featureOfInterestList.append(value) for _, value in self.search (xml, "responseFormat"): if value in ['text/xml;subtype="om/1.0.0"']: self.offering.responseFormat = value break for _, value in self.search (xml, "resultModel"): self.offering.resultModel.append(value) for _, value in self.search (xml, "responseMode"): if value in ['inline']: self.offering.responseMode = value break return self.offering
def parse(self, xml): xml = XMLParser.parse(self, xml) node, _ = self.searchFirst(xml, "") if not node or not node.localName() == "ObservationCollection": if node.localName() == "ExceptionReport": node, exceptionCode = self.searchFirst( node, "Exception@exceptionCode") _, exceptionText = self.searchFirst(node, "ExceptionText") raise sos.ExceptionReport(exceptionCode, exceptionText) raise ValueError(node.localName()) boundedByNode, boundedByType = self.searchFirst(xml, "boundedBy/*") _, self.provider.srsName = self.searchFirst(boundedByNode, "@srsName") crs = QgsCoordinateReferenceSystem() if crs.createFromUserInput(self.provider.srsName): yx = crs.axisInverted() else: yx = (self.provider.srsName == 'urn:ogc:def:crs:EPSG:0' ) #Hack para meteogalicia if boundedByType == "Envelope": self.provider.extent = GMLParser.rectangleFromGMLEnvelope( boundedByNode) elif boundedByType == "Box": self.provider.extent = GMLParser.rectangleFromGMLBox(boundedByNode) else: geo = GMLParser.geometryFromGML(boundedByNode) if geo: self.provider.extent = geo.boundingBox() _, tag = self.searchFirst(xml, 'member/*') omParser = XMLParserFactory.getInstance(tag)(self.provider, yx) components = omParser.parse(xml) components = filter(lambda f: f != None, components.values()) hasTime = False for i, f in enumerate(components): if f.name() == "Time" or f.name() == "SamplingTime": components.pop(i) f.setName("Time") self.provider.fields.append(f) hasTime = True break if not hasTime: self.provider.fields.append(QgsField("Time", QVariant.String, '')) self.provider.fields.extend(components) return self.provider
def parse (self, xml): xml = XMLParser.parse(self, xml) _, self.offering.identifier = self.searchFirst (xml, "identifier") _, self.offering.procedure = self.searchFirst (xml, "procedure") for _, value in self.search (xml, "procedureDescriptionFormat"): self.offering.procedureDescriptionFormats.append(value) for _, value in self.search (xml, "observableProperty"): _, self.offering.observableProperties.append(value) observedAreaNode, observedAreaType = self.searchFirst (xml, "observedArea/*") if observedAreaNode: _, self.offering.srsName = self.searchFirst (observedAreaNode, "@srsName") if observedAreaType == "Envelope": self.offering.observedArea = GMLParser.rectangleFromGMLEnvelope(observedAreaNode) elif observedAreaType == "Box": self.offering.observedArea = GMLParser.rectangleFromGMLBox(observedAreaNode) else: geo = GMLParser.geometryFromGML(observedAreaNode) if geo: self.offering.observedArea = geo.boundingBox() else: self.offering.observedArea = QgsRectangle() timeNode, timePrimitive = self.searchFirst (xml, "phenomenonTime/*") if timePrimitive: try: gmlTimeParser = XMLParserFactory.getInstance ("GML" + timePrimitive) self.offering.phenomenonTime = gmlTimeParser().parse(timeNode) except NotImplementedError: self.offering.phenomenonTime = QgsTime() resultTimeNode, resultTimePrimitive = self.searchFirst (xml, "resultTime/*") if resultTimePrimitive: try: gmlTimeParser = XMLParserFactory.getInstance ("GML" + resultTimePrimitive) self.offering.resultTime = gmlTimeParser().parse(resultTimeNode) except NotImplementedError: self.offering.resultTime = QgsTime() _, self.offering.featureOfInterestType = self.searchFirst (xml, "featureOfInterestType") for _, value in self.search (xml, "responseFormat"): self.offering.responseFormats.append(value) for _, value in self.search (xml, "observationType"): _, self.offering.observationTypes.append(value) return self.offering
def parse (self, xml): xml = XMLParser.parse(self, xml) node,_ = self.searchFirst (xml, "") if not node or not node.localName() == "ObservationCollection": if node.localName() == "ExceptionReport": node, exceptionCode = self.searchFirst(node, "Exception@exceptionCode") _, exceptionText = self.searchFirst(node, "ExceptionText") raise sos.ExceptionReport (exceptionCode, exceptionText) raise ValueError (node.localName()) boundedByNode, boundedByType = self.searchFirst (xml, "boundedBy/*") _, self.provider.srsName = self.searchFirst (boundedByNode, "@srsName") crs = QgsCoordinateReferenceSystem() if crs.createFromUserInput(self.provider.srsName): yx = crs.axisInverted() else: yx = (self.provider.srsName == 'urn:ogc:def:crs:EPSG:0') #Hack para meteogalicia if boundedByType == "Envelope": self.provider.extent = GMLParser.rectangleFromGMLEnvelope(boundedByNode) elif boundedByType == "Box": self.provider.extent = GMLParser.rectangleFromGMLBox(boundedByNode) else: geo = GMLParser.geometryFromGML(boundedByNode) if geo: self.provider.extent = geo.boundingBox() _, tag = self.searchFirst(xml, 'member/*') omParser = XMLParserFactory.getInstance(tag)(self.provider, yx) components = omParser.parse(xml) components = filter(lambda f: f != None, components.values()) hasTime = False for i, f in enumerate(components): if f.name() == "Time" or f.name() == "SamplingTime": components.pop (i) f.setName("Time") self.provider.fields.append(f) hasTime = True break if not hasTime: self.provider.fields.append(QgsField ("Time", QVariant.String, '')) self.provider.fields.extend(components) return self.provider