Ejemplo n.º 1
0
def get_fields(thefile):
    """Parse a SOS GML file and extract the field data."""
    doc = Parser(file=thefile, namespace="http://www.opengis.net/swe/1.0.1")
    om_result = doc.tag('member/Observation/result', doc.get_ns('om'))
    fields = doc.elem_tags(
        om_result,
        'DataArray/elementType/DataRecord/field')
    return extract_field_data(doc, fields)
Ejemplo n.º 2
0
def extract_time_series(thefile):
    """Parse a SOS GML file and extract time series and other meta data."""
    doc = Parser(file=thefile, namespace="http://www.opengis.net/swe/1.0.1")
    results = []
    om_members = doc.tags('member', doc.get_ns('om'))
    for om_member in om_members:
        om_obs = doc.elem_tag(om_member,
                              'Observation',
                              doc.get_ns('om'))
        # look for an observation id
        observation = {}
        id = doc.elem_attr_value(om_obs, 'href', doc.get_ns('xlink'))
        if not id:
            id = doc.elem_attr_value(om_obs, 'id', doc.get_ns('gml'))
        observation['id'] = id
        # process results...
        om_obs_result = doc.elem_tag(om_member,
                                   'Observation/result',
                                   doc.get_ns('om'))
        if om_obs_result:
            result = {}
            # 'meta' data - feature information
            feature = {}
            om_feature = doc.elem_tag(om_member,
                                    'Observation/featureOfInterest',
                                    doc.get_ns('om'))
            # look for a feature id
            id = doc.elem_attr_value(om_feature, 'href', doc.get_ns('xlink'))
            if not id:
                id = doc.elem_attr_value(om_feature, 'id', doc.get_ns('gml'))
            feature['id'] = id
            feature['name'] = None  # attempt to find a name ...???
            # get feature geomtry
            om_point= doc.elem_tag_nested(om_feature,
                                          'Point',
                                          doc.get_ns('gml'))
            if om_point:
                geom_wkt = None
                geom_value = doc.elem_tag_value(om_point[0],
                                                'pos',
                                                doc.get_ns('gml'))
                if not geom_value:
                    geom_value = doc.elem_tag_value(om_point,
                                                    'coordinates',
                                                    doc.get_ns('gml'))
                """                """
                if geom_value:
                    #print geom_value[0], geom_value
                    points = geom_value.split(' ')
                    point = ogr.Geometry(ogr.wkbPoint)
                    point.AddPoint(float(points[0]), float(points[1]))
                    #print geom_value[0], geom_value[1]
                    #point.AddPoint(10.23, 36.6)
                    geom_wkt  = point.ExportToWkt()  # WKT format

                feature['geometry'] = geom_wkt

            else:
                feature['geometry'] = None
            # look for a sample point id
            #   sa:SamplingPoint as a nested child ...
            sampling_point = {}
            om_sampling_point = doc.elem_tag_nested(om_feature,
                                                  'SamplingPoint',
                                                  doc.get_ns('sa'))
            print "125", om_sampling_point
            if om_sampling_point and len(om_sampling_point) == 1:
                id = doc.elem_attr_value(om_feature, 'xlink:href')
                if not id:
                    id = doc.elem_attr_value(om_sampling_point[0],
                                             'id',
                                             doc.get_ns('gml'))
            sampling_point['id'] = id
            # 'meta' data - field information
            fields = doc.elem_tags(
                om_obs_result,
                'DataArray/elementType/DataRecord/field')
            result['fields'] = extract_field_data(doc, fields)
            # data
            textblock = doc.elem_tag(
                om_obs_result,
                'DataArray/encoding/TextBlock')
            block = doc.elem_attr_value(textblock, 'blockSeparator')
            token = doc.elem_attr_value(textblock, 'tokenSeparator')
            value_list = []
            values = doc.elem_tag_value(om_obs_result, 'DataArray/values')
            if values:
                val_set = values.split(block)
                for val in val_set:
                    value_list.append(val.split(token))
            # store results
            result['observation'] = observation
            result['sampling_point'] = sampling_point
            result['feature'] = feature
            result['data'] = value_list
            #print "extract_time_series:133", result
            results.append(result)
    return results





    """