def make_tracks(layer: ogr.Layer, coordinate_transformer) -> OrderedDict: tracks = OrderedDict() # this (ugly) style of feature iteration is a workaround for: # https://github.com/nextgis/pygdal/issues/31 feature = layer.GetNextFeature() while feature is not None: track_id = feature.GetField("track_id") track = tracks.setdefault(track_id, Track(track_id, coordinate_transformer)) segment_data = SegmentsData( segment_id=feature.GetField('segment_id'), vehicle_type=feature.GetField('vehicle_type'), timestamp=dt.datetime.strptime( feature.GetField("timestamp"), "%Y-%m-%d %H:%M:%S").replace(tzinfo=dt.timezone.utc)) geom = feature.GetGeometryRef() for lon, lat in geom.GetPoints(): geom = ogr.Geometry(ogr.wkbPoint) geom.AddPoint(lon, lat) segment_data.add_point(geom) track.add_segment(segment_data) feature = layer.GetNextFeature() for item in tracks.values(): item.prepare() return tracks
def get_geometry_type(self, layer: ogr.Layer) -> str: """Get geometry type human readable.""" try: logger.debug(ogr.GeometryTypeToName(layer.GetGeomType())) # if layer.GetGeomType(): # geom_type = layer.GetGeomType() # layer.ResetReading() # logger.error(geom_type) # return geom_type feat = layer.GetNextFeature() if not hasattr(feat, "GetGeometryRef"): logger.error("Unable to determine GeoMetryRef") return None layer_geom = feat.GetGeometryRef() if hasattr(layer_geom, "GetGeometryName"): return layer_geom.GetGeometryName() except Exception as err: logger.error( "Unable to retrieve geometry type for layer: {}. Trace: {}".format( layer.GetName(), err ) ) return None