Ejemplo n.º 1
0
    def add_aois_to_shapefile(self, ds, job_object):
        aois = job_object.aois.all()
        if len(aois) == 0:
            return

        geo_field = aois[0].polygon

        # Get the right geometry type number for ogr
        ogr_type = OGRGeomType(geo_field.geom_type).num

        # Set up the native spatial reference of the geometry field using the srid
        native_srs = SpatialReference(geo_field.srid)

        # create the AOI layer
        layer = lgdal.OGR_DS_CreateLayer(ds, 'lyr', native_srs._ptr, ogr_type,
                                         None)

        # Create the fields that each feature will have
        fields = AOI._meta.fields
        attributes = []
        for field in fields:
            if field.name in 'id, active, name, created_at, updated_at, analyst, priority, status, properties':
                attributes.append(field)

        for field in attributes:
            data_type = 4
            if field.name == 'id':
                data_type = 0
            fld = lgdal.OGR_Fld_Create(str(field.name), data_type)
            added = lgdal.OGR_L_CreateField(layer, fld, 0)
            check_err(added)

        # Getting the Layer feature definition.
        feature_def = lgdal.OGR_L_GetLayerDefn(layer)

        # Loop through queryset creating features
        for item in aois:
            feat = lgdal.OGR_F_Create(feature_def)

            for idx, field in enumerate(attributes):
                if field.name == 'properties':
                    value = json.dumps(item.properties)
                else:
                    value = getattr(item, field.name)
                string_value = str(value)[:80]
                lgdal.OGR_F_SetFieldString(feat, idx, string_value)

            # Transforming & setting the geometry
            geom = item.polygon
            ogr_geom = OGRGeometry(geom.wkt, native_srs)
            check_err(lgdal.OGR_F_SetGeometry(feat, ogr_geom._ptr))

            # create the feature in the layer.
            check_err(lgdal.OGR_L_CreateFeature(layer, feat))

        check_err(lgdal.OGR_L_SyncToDisk(layer))
Ejemplo n.º 2
0
    def add_features_subset_to_shapefile(self, ds, features, layer_name):
        if len(features) == 0:
            return

        geo_field = features[0].the_geom

        # Get the right geometry type number for ogr
        ogr_type = OGRGeomType(geo_field.geom_type).num

        # Set up the native spatial reference of the geometry field using the srid
        native_srs = SpatialReference(geo_field.srid)

        # create the Feature layer
        layer = lgdal.OGR_DS_CreateLayer(ds, layer_name, native_srs._ptr,
                                         ogr_type, None)

        # Create the fields that each feature will have
        fields = Feature._meta.fields
        attributes = []
        for field in fields:
            if field.name in 'id, analyst, template, created_at, updated_at, job, project':
                attributes.append(field)

        for field in attributes:
            data_type = 4
            if field.name == 'id':
                data_type = 0
            fld = lgdal.OGR_Fld_Create(str(field.name), data_type)
            added = lgdal.OGR_L_CreateField(layer, fld, 0)
            check_err(added)

        # Getting the Layer feature definition.
        feature_def = lgdal.OGR_L_GetLayerDefn(layer)

        # Loop through queryset creating features
        for item in features:
            feat = lgdal.OGR_F_Create(feature_def)

            for idx, field in enumerate(attributes):
                value = getattr(item, field.name)
                # if field.name == 'template':
                #     value = value.name
                string_value = str(value)
                lgdal.OGR_F_SetFieldString(feat, idx, string_value)

            # Transforming & setting the geometry
            geom = item.the_geom
            ogr_geom = OGRGeometry(geom.wkt, native_srs)
            check_err(lgdal.OGR_F_SetGeometry(feat, ogr_geom._ptr))

            # create the feature in the layer.
            check_err(lgdal.OGR_L_CreateFeature(layer, feat))

        check_err(lgdal.OGR_L_SyncToDisk(layer))