def getOfferingDetailsList(pgdb,service): """ Return the list of offerings details for a given istsos service connection @param pgdb: service connection @type pgdb: L{wa.databaseManager.PgDB} object @param service: service name @type service: L{string} @return: C{list} of C{dict} with offering C{id} and C{name} keys >>> Return example: [ {"name": "temperature","description": "descrizione 3","procedures": 12,"expiration": "22.12.2012","active": true}, {"name": "water","description": "descrizione 3","procedures": 22,"expiration": "22.12.2012","active": true}, {"name": "air","description": "descrizione 3","procedures": 3,"expiration": "22.12.2012","active": true} ] """ sql = """ SELECT DISTINCT id_off as id, name_off as name, desc_off as description, expiration_off as expiration, active_off as active, count(id_off_prc) as procedures FROM %s.offerings LEFT JOIN %s.off_proc ON id_off = id_off_fk GROUP BY id_off, name_off, desc_off, expiration_off, active_off ORDER BY name_off; """ %((service,)*2) rows = pgdb.select(sql,None) if rows: from lib import isodate return [ { "id":row["id"], "name":row["name"], "description":row["description"], "procedures":row["procedures"], "expiration": isodate.datetime_isoformat(row["expiration"]) if row["expiration"] else "", "active":row["active"] } for row in rows ] else: return []
def render(GF,sosConfig): r = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" if GF.type.lower()=="station" or GF.type.lower()=="point": r += "<sa:SamplingPoint \n" elif GF.type=="surface": r += "<sa:SamplingSurface \n" r += "gml:id=\"" + GF.name + "\" \n" r += "xmlns:sa=\"http://www.opengis.net/sampling/1.0\" \n" r += "xmlns:swe=\"http://www.opengis.net/swe/1.0.1\" \n" r += "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" r += "xmlns:xlink=\"http://www.w3.org/1999/xlink\" \n" r += "xmlns:gml=\"http://www.opengis.net/gml\" \n" r += "xmlns:om=\"http://www.opengis.net/om/1.0\" \n" r += "xsi:schemaLocation=\"http://www.opengis.net/sampling/1.0 http://schemas.opengis.net/sampling/1.0.0/sampling.xsd\">\n" r += " <gml:description>" + GF.desc + "</gml:description>\n" r += " <gml:name>" + GF.name + "</gml:name> \n" r += " <sa:sampledFeature/>\n" for i in range(len(GF.procedures)): r += " <sa:relatedObservation>\n" r += " <om:Observation>\n" # Sampling time for a in range(len(GF.samplingTime[i])): if len(GF.samplingTime[i][a])==2: r += " <om:samplingTime>\n" r += " <gml:TimePeriod>\n" r += " <gml:beginPosition>" + iso.datetime_isoformat(GF.samplingTime[i][a][0]) + "</gml:beginPosition>\n" r += " <gml:endPosition>" + iso.datetime_isoformat(GF.samplingTime[i][a][1]) + "</gml:endPosition>\n" r += " <gml:duration>" + iso.duration_isoformat(GF.samplingTime[i][a][1]-GF.samplingTime[i][a][0]) + "</gml:duration>\n" ''' r += " <gml:TimeLength>\n" r += " <gml:duration>" + iso.duration_isoformat(a[1]-a[0]) + "</gml:duration>\n" r += " <gml:timeInterval unit=\"" + str(ob.timeResUnit) + "\">" + str(ob.timeResVal) + "</gml:timeInterval>\n" r += " </gml:TimeLength>\n" ''' r += " </gml:TimePeriod>\n" r += " </om:samplingTime>\n" # Procedure r += " <om:procedure xlink:href=\"" + GF.procedures[i] + "\"/>\n" # ObservationProperty r += " <om:observedProperty>\n" if GF.obsType[i] == "insitu-fixed-point": ii=1 elif GF.obsType[i] == "insitu-mobile-point": ii=4 r += " <swe:CompositePhenomenon gml:id=\"comp_" + str(GF.idPrc[i]) + "\" dimension=\"" + str(len(GF.properties[i])+ii) + "\">\n" r += " <gml:name/>\n" r += " <swe:component xlink:href=\"" + sosConfig.urn["parameter"] + "time:iso8601" + " \" />\n" #if ob.procedureType == "insitu-fixed-point": if GF.obsType[i]=="insitu-mobile-point": r += " <swe:component xlink:href=\"" + sosConfig.urn["refsystem"] + ":x-position\" />\n" r += " <swe:component xlink:href=\"" + sosConfig.urn["refsystem"] + ":y-position\" />\n" r += " <swe:component xlink:href=\"" + sosConfig.urn["refsystem"] + ":z-position\" />\n" for c in range(len(GF.properties[i])): r += " <swe:component xlink:href=\"" + sosConfig.urn["parameter"] + GF.properties[i][c] + "\"/>\n" r += " </swe:CompositePhenomenon>\n" r += " </om:observedProperty>\n" #FEATURE OF INTEREST r += " <om:featureOfInterest xlink:href=\"" + sosConfig.urn["feature"] + GF.type + ":" + GF.name + "\"/>\n" #RESULT EMPTY (?) r += " <om:result/>\n" r += " </om:Observation>\n" r += " </sa:relatedObservation>\n" r += " <sa:position> \n" r += " " + GF.geom + "\n" r += " </sa:position>\n" if GF.type.lower()=="station" or GF.type.lower()=="point": r += "</sa:SamplingPoint> \n" elif GF.type=="surface": r += "</sa:SamplingSurface> \n" return r
def render(GC,sosConfig): r = '''<?xml version="1.0" encoding="UTF-8"?> <Capabilities xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:om="http://www.opengis.net/om/1.0" xmlns="http://www.opengis.net/sos/1.0" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ogc="http://www.opengis.net/ogc" xmlns:tml="http://www.opengis.net/tml" xmlns:sml="http://www.opengis.net/sensorML/1.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetCapabilities.xsd" version="1.0.0">\n''' if not GC.ServiceIdentifier==[]: '''r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Service Identification -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~-->\n"''' r += " <ows:ServiceIdentification>\n" r += " <ows:Title>" + GC.ServiceIdentifier.title + "</ows:Title>\n" r += " <ows:Abstract>" + GC.ServiceIdentifier.abstract +"</ows:Abstract>\n" r += " <ows:Keywords>\n" for k in GC.ServiceIdentifier.keywords: r += " <ows:Keyword>"+ k +"</ows:Keyword>\n" r += " </ows:Keywords>\n" r += " <ows:ServiceType codeSpace=\"" + GC.ServiceIdentifier.serviceTypeCode + "\">" r += GC.ServiceIdentifier.serviceTypeValue + "</ows:ServiceType>\n" r += " <ows:ServiceTypeVersion>" + GC.ServiceIdentifier.serviceTypeVersion + "</ows:ServiceTypeVersion>\n" r += " <ows:Fees>" + GC.ServiceIdentifier.fees + "</ows:Fees>\n" r += " <ows:AccessConstraints>" + GC.ServiceIdentifier.accessconstrains + "</ows:AccessConstraints>\n" r += " </ows:ServiceIdentification>\n" if not GC.ServiceProvider==[]: '''r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Provider Description -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n"''' r += " <ows:ServiceProvider>\n" r += " <ows:ProviderName>" + GC.ServiceProvider.providerName + "</ows:ProviderName>\n" r += " <ows:ProviderSite xlink:href=\"" + GC.ServiceProvider.providerSite + "\"/>\n" r += " <ows:ServiceContact>\n" r += " <ows:IndividualName>" + GC.ServiceProvider.individualName + "</ows:IndividualName>\n" r += " <ows:PositionName>" + GC.ServiceProvider.positionName + "</ows:PositionName>\n" r += " <ows:ContactInfo>\n" r += " <ows:Phone>\n" r += " <ows:Voice>" + GC.ServiceProvider.contactVoice + "</ows:Voice>\n" r += " <ows:Facsimile>" + GC.ServiceProvider.contactFax + "</ows:Facsimile>\n" r += " </ows:Phone>\n" r += " <ows:Address>\n" r += " <ows:DeliveryPoint>" + GC.ServiceProvider.contactDelivery + "</ows:DeliveryPoint>\n" r += " <ows:City>" + GC.ServiceProvider.contactCity + "</ows:City>\n" r += " <ows:AdministrativeArea>" + GC.ServiceProvider.contactArea + "</ows:AdministrativeArea>\n" r += " <ows:PostalCode>" + GC.ServiceProvider.contactPostCode + "</ows:PostalCode>\n" r += " <ows:Country>" + GC.ServiceProvider.contactCountry + "</ows:Country>\n" r += " <ows:ElectronicMailAddress>" + GC.ServiceProvider.contactMail + "</ows:ElectronicMailAddress>\n" r += " </ows:Address>\n" r += " </ows:ContactInfo>\n" r += " </ows:ServiceContact>\n" r += " </ows:ServiceProvider>\n" if GC.OperationsMetadata: r += " <ows:OperationsMetadata>\n" for o in GC.OperationsMetadata.OP: r += " <ows:Operation name=\"" + o.name + "\">\n" r += " <ows:DCP>\n" r += " <ows:HTTP>\n" if o.get: r += " <ows:Get xlink:href=\"" + o.get + "\"/>\n" if o.post: r += " <ows:Post xlink:href=\"" + o.post + "\"/>\n" r += " </ows:HTTP>\n" r += " </ows:DCP>\n" for p in o.parameters: # r += " <ows:Parameter name=\"" + p.name + "\" use=\"" + p.use + "\">\n" r += " <ows:Parameter name=\"" + p.name + "\">\n" r += " <ows:AllowedValues>\n" if len(p.allowedValues)>0: for a in p.allowedValues: r += " <ows:Value>" + str(a) + "</ows:Value>\n" if len(p.range)>0: r += " <ows:Range>\n" r += " <ows:MinimumValue>" if str(type(p.range[0]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[0]) else: r += str(p.range[0]) r += "</ows:MinimumValue>\n" r += " <ows:MaximumValue>" if str(type(p.range[1]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[1]) else: r += str(p.range[1]) r += "</ows:MaximumValue>\n" r += " </ows:Range>\n" r += " </ows:AllowedValues>\n" r += " </ows:Parameter>\n" r += " </ows:Operation>\n" r += " </ows:OperationsMetadata>\n" if not GC.ObservationOfferingList==[]: r += " <Contents>\n" r += " <ObservationOfferingList>\n" for ofl in GC.ObservationOfferingList.offerings: r += " <ObservationOffering gml:id=\"" + str(ofl.id) + "\">\n" r += " <gml:description>" + ofl.desc + "</gml:description>\n" r += " <gml:name>" + ofl.name + "</gml:name>\n" if ofl.boundedBy: r += " <gml:boundedBy>\n" r += " <gml:Envelope>\n" r += " " + str(ofl.boundedBy) + "\n" r += " </gml:Envelope>\n" r += " </gml:boundedBy>\n" if ofl.beginPosition and ofl.endPosition : r += " <time>\n" r += " <gml:TimePeriod>\n" r += " <gml:beginPosition>" + iso.datetime_isoformat(ofl.beginPosition) + "</gml:beginPosition>\n" r += " <gml:endPosition>" + iso.datetime_isoformat(ofl.endPosition) + "</gml:endPosition>\n" r += " </gml:TimePeriod>\n" r += " </time>\n" else: r += " <sos:time />\n" for pr in ofl.procedures: r += " <sos:procedure xlink:href=\"" + sosConfig.urn["procedure"] + pr + "\" />\n" for op in ofl.obsProp: r += " <sos:observedProperty xlink:href=\"" + op + "\" />\n" for fo in ofl.fois: r += " <sos:featureOfInterest xlink:href=\"" + fo + "\" />\n" for ef in GC.ObservationOfferingList.responseFormat: r += " <sos:responseFormat>" + ef + "</sos:responseFormat>\n" for rmd in GC.ObservationOfferingList.resultModel: r += " <sos:resultModel>" + rmd + "</sos:resultModel>\n" for rm in GC.ObservationOfferingList.responseMode: r += " <sos:responseMode>" + rm + "</sos:responseMode>\n" r += " </ObservationOffering>\n" r += " </ObservationOfferingList>\n" r += " </Contents>\n" r += " </Capabilities>" return r
def render(GF, sosConfig): r = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" if GF.type.lower() == "station" or GF.type.lower() == "point": r += "<sa:SamplingPoint \n" elif GF.type == "surface": r += "<sa:SamplingSurface \n" r += "gml:id=\"" + GF.name + "\" \n" r += "xmlns:sa=\"http://www.opengis.net/sampling/1.0\" \n" r += "xmlns:swe=\"http://www.opengis.net/swe/1.0.1\" \n" r += "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" r += "xmlns:xlink=\"http://www.w3.org/1999/xlink\" \n" r += "xmlns:gml=\"http://www.opengis.net/gml\" \n" r += "xmlns:om=\"http://www.opengis.net/om/1.0\" \n" r += "xsi:schemaLocation=\"http://www.opengis.net/sampling/1.0 http://schemas.opengis.net/sampling/1.0.0/sampling.xsd\">\n" r += " <gml:description>" + GF.desc + "</gml:description>\n" r += " <gml:name>" + GF.name + "</gml:name> \n" r += " <sa:sampledFeature/>\n" for i in range(len(GF.procedures)): r += " <sa:relatedObservation>\n" r += " <om:Observation>\n" # Sampling time for a in range(len(GF.samplingTime[i])): if len(GF.samplingTime[i][a]) == 2: r += " <om:samplingTime>\n" r += " <gml:TimePeriod>\n" r += " <gml:beginPosition>" + iso.datetime_isoformat( GF.samplingTime[i][a][0]) + "</gml:beginPosition>\n" r += " <gml:endPosition>" + iso.datetime_isoformat( GF.samplingTime[i][a][1]) + "</gml:endPosition>\n" r += " <gml:duration>" + iso.duration_isoformat( GF.samplingTime[i][a][1] - GF.samplingTime[i][a][0]) + "</gml:duration>\n" ''' r += " <gml:TimeLength>\n" r += " <gml:duration>" + iso.duration_isoformat(a[1]-a[0]) + "</gml:duration>\n" r += " <gml:timeInterval unit=\"" + str(ob.timeResUnit) + "\">" + str(ob.timeResVal) + "</gml:timeInterval>\n" r += " </gml:TimeLength>\n" ''' r += " </gml:TimePeriod>\n" r += " </om:samplingTime>\n" # Procedure r += " <om:procedure xlink:href=\"" + GF.procedures[i] + "\"/>\n" # ObservationProperty r += " <om:observedProperty>\n" if GF.obsType[i] == "insitu-fixed-point": ii = 1 elif GF.obsType[i] == "insitu-mobile-point": ii = 4 r += " <swe:CompositePhenomenon gml:id=\"comp_" + str( GF.idPrc[i]) + "\" dimension=\"" + str(len(GF.properties[i]) + ii) + "\">\n" r += " <gml:name/>\n" r += " <swe:component xlink:href=\"" + sosConfig.urn[ "parameter"] + "time:iso8601" + " \" />\n" #if ob.procedureType == "insitu-fixed-point": if GF.obsType[i] == "insitu-mobile-point": r += " <swe:component xlink:href=\"" + sosConfig.urn[ "refsystem"] + ":x-position\" />\n" r += " <swe:component xlink:href=\"" + sosConfig.urn[ "refsystem"] + ":y-position\" />\n" r += " <swe:component xlink:href=\"" + sosConfig.urn[ "refsystem"] + ":z-position\" />\n" for c in range(len(GF.properties[i])): r += " <swe:component xlink:href=\"" + sosConfig.urn[ "parameter"] + GF.properties[i][c] + "\"/>\n" r += " </swe:CompositePhenomenon>\n" r += " </om:observedProperty>\n" #FEATURE OF INTEREST r += " <om:featureOfInterest xlink:href=\"" + sosConfig.urn[ "feature"] + GF.type + ":" + GF.name + "\"/>\n" #RESULT EMPTY (?) r += " <om:result/>\n" r += " </om:Observation>\n" r += " </sa:relatedObservation>\n" r += " <sa:position> \n" r += " " + GF.geom + "\n" r += " </sa:position>\n" if GF.type.lower() == "station" or GF.type.lower() == "point": r += "</sa:SamplingPoint> \n" elif GF.type == "surface": r += "</sa:SamplingSurface> \n" return r
def render_2_0_0(GC,sosConfig): r = '''<?xml version="1.0" encoding="UTF-8"?> <sos:Capabilities xsi:schemaLocation="http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sos.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:swe="http://www.opengis.net/swe/2.0" xmlns:swes="http://www.opengis.net/swes/2.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:sos="http://www.opengis.net/sos/2.0" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" version="2.0.0">\n''' if not GC.ServiceIdentifier==[]: r += " <ows:ServiceIdentification>\n" r += " <ows:Title>" + GC.ServiceIdentifier.title + "</ows:Title>\n" r += " <ows:Abstract>" + GC.ServiceIdentifier.abstract +"</ows:Abstract>\n" r += " <ows:Keywords>\n" for k in GC.ServiceIdentifier.keywords: r += " <ows:Keyword>"+ k +"</ows:Keyword>\n" r += " </ows:Keywords>\n" r += " <ows:ServiceType codeSpace=\"http://opengeospatial.net\">OGC:SOS</ows:ServiceType>\n" r += " <ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion>\n" r += " <ows:Profile>http://www.opengis.net/spec/OMXML/2.0/conf/observation</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/OMXML/2.0/conf/geometryObservation</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/OMXML/2.0/conf/samplingPoint</ows:Profile>\n" #r += " <ows:Profile>http://www.opengis.net/spec/OMXML/2.0/conf/specimen</ows:Profile>\n" #r += " <ows:Profile>http://www.opengis.net/spec/OMXML/2.0/req/SWEArrayObservation</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/SOS/1.0/conf/core</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/SOS/1.0/conf/enhanced</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/SOS/2.0/conf/core</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/SOS/2.0/conf/kvp-core</ows:Profile>\n" r += " <ows:Profile>http://www.opengis.net/spec/SOS/2.0/conf/spatialFilteringProfile</ows:Profile>\n" r += " <ows:Fees>" + GC.ServiceIdentifier.fees + "</ows:Fees>\n" r += " <ows:AccessConstraints>" + GC.ServiceIdentifier.accessconstrains + "</ows:AccessConstraints>\n" r += " </ows:ServiceIdentification>\n" if not GC.ServiceProvider==[]: '''r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Provider Description -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n"''' r += " <ows:ServiceProvider>\n" r += " <ows:ProviderName>" + GC.ServiceProvider.providerName + "</ows:ProviderName>\n" r += " <ows:ProviderSite xlink:href=\"" + GC.ServiceProvider.providerSite + "\"/>\n" r += " <ows:ServiceContact>\n" r += " <ows:IndividualName>" + GC.ServiceProvider.individualName + "</ows:IndividualName>\n" r += " <ows:PositionName>" + GC.ServiceProvider.positionName + "</ows:PositionName>\n" r += " <ows:ContactInfo>\n" r += " <ows:Phone>\n" r += " <ows:Voice>" + GC.ServiceProvider.contactVoice + "</ows:Voice>\n" r += " <ows:Facsimile>" + GC.ServiceProvider.contactFax + "</ows:Facsimile>\n" r += " </ows:Phone>\n" r += " <ows:Address>\n" r += " <ows:DeliveryPoint>" + GC.ServiceProvider.contactDelivery + "</ows:DeliveryPoint>\n" r += " <ows:City>" + GC.ServiceProvider.contactCity + "</ows:City>\n" r += " <ows:AdministrativeArea>" + GC.ServiceProvider.contactArea + "</ows:AdministrativeArea>\n" r += " <ows:PostalCode>" + GC.ServiceProvider.contactPostCode + "</ows:PostalCode>\n" r += " <ows:Country>" + GC.ServiceProvider.contactCountry + "</ows:Country>\n" r += " <ows:ElectronicMailAddress>" + GC.ServiceProvider.contactMail + "</ows:ElectronicMailAddress>\n" r += " </ows:Address>\n" r += " </ows:ContactInfo>\n" r += " <ows:Role/>\n" r += " </ows:ServiceContact>\n" r += " </ows:ServiceProvider>\n" if GC.OperationsMetadata: r += " <ows:OperationsMetadata>\n" for o in GC.OperationsMetadata.OP: if o.name != 'GlobalOperations': r += " <ows:Operation name=\"" + o.name + "\">\n" r += " <ows:DCP>\n" r += " <ows:HTTP>\n" if o.get: r += " <ows:Get xlink:href=\"" + o.get + "\">\n" r += " <ows:Constraint name=\"Content-Type\">\n" r += " <ows:AllowedValues>\n" r += " <ows:Value>application/x-kvp</ows:Value>\n" r += " </ows:AllowedValues>\n" r += " </ows:Constraint>\n" r += " </ows:Get>\n" r += " </ows:HTTP>\n" r += " </ows:DCP>\n" for p in o.parameters: r += " <ows:Parameter name=\"" + p.name + "\">\n" r += " <ows:AllowedValues>\n" if len(p.allowedValues)>0: for a in p.allowedValues: r += " <ows:Value>" + str(a) + "</ows:Value>\n" if len(p.range)>0: r += " <ows:Range>\n" r += " <ows:MinimumValue>" if str(type(p.range[0]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[0]) else: r += str(p.range[0]) r += "</ows:MinimumValue>\n" r += " <ows:MaximumValue>" if str(type(p.range[1]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[1]) else: r += str(p.range[1]) r += "</ows:MaximumValue>\n" r += " </ows:Range>\n" r += " </ows:AllowedValues>\n" r += " </ows:Parameter>\n" if o.name != 'GlobalOperations': r += " </ows:Operation>\n" #r += " <ows:Parameter name=\"validTime\">\n" #r += " <ows:AnyValue/>\n" #r += " </ows:Parameter>\n" # GLOBAL PARAMETERS VAALID FOR ALL REQUESTS r += " </ows:OperationsMetadata>\n" if GC.FilterCapabilities: r += " <sos:extension/>" r += " <sos:filterCapabilities>" r += " <fes:Filter_Capabilities>" r += " <fes:Conformance>" r += " <fes:Constraint name=\"ImplementsQuery\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsAdHocQuery\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsFunctions\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsMinStandardFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsStandardFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsMinSpatialFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>true</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsSpatialFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>true</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsMinTemporalFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>true</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsTemporalFilter\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>true</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsVersionNav\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsSorting\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " <fes:Constraint name=\"ImplementsExtendedOperators\">" r += " <ows:NoValues/>" r += " <ows:DefaultValue>false</ows:DefaultValue>" r += " </fes:Constraint>" r += " </fes:Conformance>" r += " <fes:Spatial_Capabilities>" r += " <fes:GeometryOperands>" r += " <fes:GeometryOperand name=\"gml:Point\"/>" r += " <fes:GeometryOperand name=\"gml:Polygon\"/>" r += " </fes:GeometryOperands>" r += " <fes:SpatialOperators>" r += " <fes:SpatialOperator name=\"BBOX\"/>" #r += " <fes:SpatialOperator name=\"Intersects\"/>" #r += " <fes:SpatialOperator name=\"Within\"/>" r += " </fes:SpatialOperators>" r += " </fes:Spatial_Capabilities>" r += " <fes:Temporal_Capabilities>" r += " <fes:TemporalOperands>" r += " <fes:TemporalOperand name=\"gml:TimePeriod\"/>" r += " <fes:TemporalOperand name=\"gml:TimeInstant\"/>" r += " </fes:TemporalOperands>" r += " <fes:TemporalOperators>" r += " <fes:TemporalOperator name=\"During\"/>" #r += " <fes:TemporalOperator name=\"After\"/>" r += " <fes:TemporalOperator name=\"TEquals\"/>" r += " </fes:TemporalOperators>" r += " </fes:Temporal_Capabilities>" r += " </fes:Filter_Capabilities>" r += " </sos:filterCapabilities>" if not GC.ObservationOfferingList==[]: r += " <sos:contents>\n" r += " <sos:Contents>\n" for offering in GC.ObservationOfferingList.offerings: r += " <swes:offering>\n" r += " <sos:ObservationOffering xmlns:ns=\"http://www.opengis.net/sos/2.0\">\n" r += " <swes:description>%s</swes:description>\n" % (offering.description) r += " <swes:identifier>%s</swes:identifier>\n" % (offering.identifier) r += " <swes:procedure>%s</swes:procedure>\n" % (offering.procedure) r += " <swes:procedureDescriptionFormat>http://www.opengis.net/sensorML/1.0.1</swes:procedureDescriptionFormat>\n" #r += " <swes:procedureDescriptionFormat>http://www.opengis.net/waterml/2.0/observationProcess</swes:procedureDescriptionFormat>\n" for observableProperty in offering.observableProperties: r += " <swes:observableProperty>%s</swes:observableProperty>\n" % (observableProperty['definition']) r += " <sos:observedArea>\n" r += " <gml:Envelope srsName=\"http://www.opengis.net/def/crs/EPSG/0/%s\">\n" % sosConfig.istsosepsg r += " <gml:lowerCorner>%s %s</gml:lowerCorner>\n" % (offering.lowerX ,offering.lowerY ) r += " <gml:upperCorner>%s %s</gml:upperCorner>\n" % (offering.upperX ,offering.upperY ) r += " </gml:Envelope>\n" r += " </sos:observedArea>\n" r += " <sos:phenomenonTime>\n" r += " <gml:TimePeriod gml:id=\"phenomenonTime_%s\">\n" % offering.id r += " <gml:beginPosition>%s</gml:beginPosition>\n" % (iso.datetime_isoformat(offering.beginPosition) if offering.beginPosition!=None else '') r += " <gml:endPosition>%s</gml:endPosition>\n" % (iso.datetime_isoformat(offering.endPosition) if offering.endPosition!=None else '') r += " </gml:TimePeriod>\n" r += " </sos:phenomenonTime>\n" # This shall be modified to handle specimen for rf in sosConfig.parameters['GO_responseFormat_2_0_0']: r += " <sos:responseFormat>" + rf + "</sos:responseFormat>\n" r += " <sos:observationType>http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement</sos:observationType> \n" r += " <sos:featureOfInterestType>http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/SF_SamplingPoint</sos:featureOfInterestType>\n" r += " </sos:ObservationOffering>\n" r += " </swes:offering>\n" r += " </sos:Contents>\n" r += " </sos:contents>\n" r += " </sos:Capabilities>" return r
def execute(args, logger=None): print "istsos2csv start.." try: url = args['url'] procedure = args['procedure'] if 'filename' in args and args['filename'] is not None: filename = args['filename'] else: filename = procedure observedProperty = args['op'] begin = iso.parse_datetime(args['begin']) end = iso.parse_datetime(args['end']) d = args['d'] auth = None if 'user' in args: user = args['user'] password = None if 'password' in args: password = args['password'] if user and password: auth = HTTPBasicAuth(user, password) qi = 'True' if 'noqi' in args: if args['noqi'] is True: qi = 'False' params = { "request": "GetObservation", "offering": "temporary", "procedure": procedure, "eventTime": None, "observedProperty": observedProperty, "responseFormat": "text/plain", "service": "SOS", "version": "1.0.0", "qualityIndex": qi } tmpBegin = begin tmpEnd = end if (end - begin) > step: tmpEnd = tmpBegin + step while tmpEnd <= end: print("%s - %s") % (tmpBegin, tmpEnd) if tmpBegin == tmpEnd: params["eventTime"] = iso.datetime_isoformat(tmpBegin) else: params["eventTime"] = "%s/%s" % (iso.datetime_isoformat( tmpBegin), iso.datetime_isoformat(tmpEnd)) res = req.get("%s?%s" % (url, urllib.urlencode(params)), auth=auth) makeFile(res, procedure, observedProperty, d, qi, filename) tmpBegin = tmpEnd tmpEnd = tmpBegin + step print " %s ************************** " % iso.datetime_isoformat( tmpEnd) if tmpBegin < end: tmpEnd = end if tmpBegin == tmpEnd: params["eventTime"] = iso.datetime_isoformat(tmpBegin) else: params["eventTime"] = "%s/%s" % (iso.datetime_isoformat( tmpBegin), iso.datetime_isoformat(tmpEnd)) res = req.get("%s?%s" % (url, urllib.urlencode(params)), auth=auth) makeFile(res, procedure, observedProperty, d, qi, filename) print " %s ************************** " % iso.datetime_isoformat( end) print "Finish." except Exception as e: print "ERROR: %s\n\n" % e traceback.print_exc()
def execute (args, logger=None): print "istsos2csv start.." try: url = args['url'] procedure = args['procedure'] observedProperty = args['op'] begin = iso.parse_datetime(args['begin']) end = iso.parse_datetime(args['end']) d = args['d'] auth = None if 'user' in args: user = args['user'] password = None if 'password' in args: password = args['password'] if auth and password: auth = HTTPBasicAuth(user, password) qi = 'True' if 'noqi' in args: if args['noqi'] == True: qi = 'False' params = { "request": "GetObservation", "offering": "temporary", "procedure": procedure, "eventTime": None, "observedProperty": observedProperty, "responseFormat": "text/plain", "service": "SOS", "version":"1.0.0", "qualityIndex": qi } tmpBegin = begin tmpEnd = end if (end-begin)>step: tmpEnd = tmpBegin + step print params while tmpEnd <= end: print ("%s - %s") % (tmpBegin,tmpEnd) if tmpBegin == tmpEnd: params["eventTime"] = iso.datetime_isoformat(tmpBegin) else: params["eventTime"] = "%s/%s" % (iso.datetime_isoformat(tmpBegin), iso.datetime_isoformat(tmpEnd)) res = req.get("%s?%s" % (url, urllib.urlencode(params)), auth=auth) makeFile(res, procedure, observedProperty, d) tmpBegin = tmpEnd tmpEnd = tmpBegin + step print " %s ************************** " % iso.datetime_isoformat(tmpEnd) if tmpBegin < end: tmpEnd = end if tmpBegin == tmpEnd: params["eventTime"] = iso.datetime_isoformat(tmpBegin) else: params["eventTime"] = "%s/%s" % (iso.datetime_isoformat(tmpBegin), iso.datetime_isoformat(tmpEnd)) res = req.get("%s?%s" % (url, urllib.urlencode(params)), auth=auth) makeFile(res, procedure, observedProperty, d) print " %s ************************** " % iso.datetime_isoformat(end) print "Finish." except Exception as e: print "ERROR: %s\n\n" % e traceback.print_exc()
def getOfferingDetailsList(pgdb, service): """ Return the list of offerings details for a given istsos service connection @param pgdb: service connection @type pgdb: L{wa.databaseManager.PgDB} object @param service: service name @type service: L{string} @return: C{list} of C{dict} with offering C{id} and C{name} keys >>> Return example: [ { "name": "temperature", "description": "descrizione 3", "procedures": 12, "expiration": "22.12.2012", "active": true }, { "name": "water", "description": "descrizione 3", "procedures": 22, "expiration": "22.12.2012", "active": true }, { "name": "air", "description": "descrizione 3", "procedures": 3, "expiration": "22.12.2012", "active": true } ] """ sql = """ SELECT DISTINCT id_off as id, name_off as name, desc_off as description, expiration_off as expiration, active_off as active, count(id_off_prc) as procedures FROM %s.offerings LEFT JOIN %s.off_proc ON id_off = id_off_fk GROUP BY id_off, name_off, desc_off, expiration_off, active_off ORDER BY name_off; """ % ((service, ) * 2) rows = pgdb.select(sql, None) if rows: from lib import isodate return [{ "id": row["id"], "name": row["name"], "description": row["description"], "procedures": row["procedures"], "expiration": (isodate.datetime_isoformat(row["expiration"]) if row["expiration"] else ""), "active": row["active"] } for row in rows] else: return []
def render(GC,sosConfig): r = '''<?xml version="1.0" encoding="UTF-8"?> <Capabilities xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:om="http://www.opengis.net/om/1.0" xmlns="http://www.opengis.net/sos/1.0" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ogc="http://www.opengis.net/ogc" xmlns:tml="http://www.opengis.net/tml" xmlns:sml="http://www.opengis.net/sensorML/1.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetCapabilities.xsd" version="1.0.0">''' if not GC.ServiceIdentifier==[]: r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Service Identification -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <ows:ServiceIdentification>\n" r += " <ows:Title>" + GC.ServiceIdentifier.title + "</ows:Title>\n" r += " <ows:Abstract>" + GC.ServiceIdentifier.abstract +"</ows:Abstract>\n" r += " <ows:Keywords>\n" for k in GC.ServiceIdentifier.keywords: r += " <ows:Keyword>"+ k +"</ows:Keyword>\n" r += " </ows:Keywords>\n" r += " <ows:ServiceType codeSpace=\"" + GC.ServiceIdentifier.serviceTypeCode + "\">" r += GC.ServiceIdentifier.serviceTypeValue + "</ows:ServiceType>\n" r += " <ows:ServiceTypeVersion>" + GC.ServiceIdentifier.serviceTypeVersion + "</ows:ServiceTypeVersion>\n" r += " <ows:Fees>" + GC.ServiceIdentifier.fees + "</ows:Fees>\n" r += " <ows:AccessConstraints>" + GC.ServiceIdentifier.accessconstrains + "</ows:AccessConstraints>\n" r += " </ows:ServiceIdentification>\n" if not GC.ServiceProvider==[]: r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Provider Description -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <ows:ServiceProvider>\n" r += " <ows:ProviderName>" + GC.ServiceProvider.providerName + "</ows:ProviderName>\n" r += " <ows:ProviderSite xlink:href=\"" + GC.ServiceProvider.providerSite + "\"/>\n" r += " <ows:ServiceContact>\n" r += " <ows:IndividualName>" + GC.ServiceProvider.individualName + "</ows:IndividualName>\n" r += " <ows:PositionName>" + GC.ServiceProvider.positionName + "</ows:PositionName>\n" r += " <ows:ContactInfo>\n" r += " <ows:Phone>\n" r += " <ows:Voice>" + GC.ServiceProvider.contactVoice + "</ows:Voice>\n" r += " <ows:Facsimile>" + GC.ServiceProvider.contactFax + "</ows:Facsimile>\n" r += " </ows:Phone>\n" r += " <ows:Address>\n" r += " <ows:DeliveryPoint>" + GC.ServiceProvider.contactDelivery + "</ows:DeliveryPoint>\n" r += " <ows:City>" + GC.ServiceProvider.contactCity + "</ows:City>\n" r += " <ows:AdministrativeArea>" + GC.ServiceProvider.contactArea + "</ows:AdministrativeArea>\n" r += " <ows:PostalCode>" + GC.ServiceProvider.contactPostCode + "</ows:PostalCode>\n" r += " <ows:Country>" + GC.ServiceProvider.contactCountry + "</ows:Country>\n" r += " <ows:ElectronicMailAddress>" + GC.ServiceProvider.contactMail + "</ows:ElectronicMailAddress>\n" r += " </ows:Address>\n" r += " </ows:ContactInfo>\n" r += " </ows:ServiceContact>\n" r += " </ows:ServiceProvider>\n" if GC.OperationsMetadata: r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- operations Metadata Section -->\n" r += " <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->\n" r += " <ows:OperationsMetadata>\n" for o in GC.OperationsMetadata.OP: r += " <ows:Operation name=\"" + o.name + "\">\n" r += " <ows:DCP>\n" r += " <ows:HTTP>\n" if o.get: r += " <ows:Get xlink:href=\"" + o.get + "\"/>\n" if o.post: r += " <ows:Post xlink:href=\"" + o.post + "\"/>\n" r += " </ows:HTTP>\n" r += " </ows:DCP>\n" for p in o.parameters: # r += " <ows:Parameter name=\"" + p.name + "\" use=\"" + p.use + "\">\n" r += " <ows:Parameter name=\"" + p.name + "\">\n" r += " <ows:AllowedValues>\n" if len(p.allowedValues)>0: for a in p.allowedValues: r += " <ows:Value>" + str(a) + "</ows:Value>\n" if len(p.range)>0: r += " <ows:Range>\n" r += " <ows:MinimumValue>" if str(type(p.range[0]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[0]) else: r += str(p.range[0]) r += "</ows:MinimumValue>\n" r += " <ows:MaximumValue>" if str(type(p.range[1]))== "<type 'datetime.datetime'>": r += iso.datetime_isoformat(p.range[1]) else: r += str(p.range[1]) r += "</ows:MaximumValue>\n" r += " </ows:Range>\n" r += " </ows:AllowedValues>\n" r += " </ows:Parameter>\n" r += " </ows:Operation>\n" r += " </ows:OperationsMetadata>\n" if not GC.ObservationOfferingList==[]: r += " <!--~~~~~~~~~~~~~~~~~~-->\n" r += " <!-- Contents Section -->\n" r += " <!--~~~~~~~~~~~~~~~~~~-->\n" r += " <Contents>\n" r += " <ObservationOfferingList>\n" for ofl in GC.ObservationOfferingList.offerings: r += " <ObservationOffering gml:id=\"" + str(ofl.id) + "\">\n" r += " <gml:description>" + ofl.desc + "</gml:description>\n" r += " <gml:name>" + ofl.name + "</gml:name>\n" if ofl.boundedBy: r += " <gml:boundedBy>\n" r += " <gml:Envelope>\n" r += " " + str(ofl.boundedBy) + "\n" r += " </gml:Envelope>\n" r += " </gml:boundedBy>\n" if ofl.beginPosition and ofl.endPosition : r += " <time>\n" r += " <gml:TimePeriod>\n" r += " <gml:beginPosition>" + iso.datetime_isoformat(ofl.beginPosition) + "</gml:beginPosition>\n" r += " <gml:endPosition>" + iso.datetime_isoformat(ofl.endPosition) + "</gml:endPosition>\n" r += " </gml:TimePeriod>\n" r += " </time>\n" else: r += " <sos:time />\n" for pr in ofl.procedures: r += " <sos:procedure xlink:href=\"" + sosConfig.urn["procedure"] + pr + "\" />\n" for op in ofl.obsProp: r += " <sos:observedProperty xlink:href=\"" + op + "\" />\n" for fo in ofl.fois: r += " <sos:featureOfInterest xlink:href=\"" + fo + "\" />\n" for ef in GC.ObservationOfferingList.responseFormat: r += " <sos:responseFormat>" + ef + "</sos:responseFormat>\n" for rmd in GC.ObservationOfferingList.resultModel: r += " <sos:resultModel>" + rmd + "</sos:resultModel>\n" for rm in GC.ObservationOfferingList.responseMode: r += " <sos:responseMode>" + rm + "</sos:responseMode>\n" r += " </ObservationOffering>\n" r += " </ObservationOfferingList>\n" r += " </Contents>\n" r += " </Capabilities>" return r