def from_filelist(cls, filelist, basepath=None): """ Instantiate the class using a filelist as a python list. An adjacency structure is calculated using the lat/lon information in the input images. Currently only images with this information are supported. Parameters ---------- filelist : list A list containing the files (with full paths) to construct an adjacency graph from Returns ------- : object A Network graph object """ if isinstance(filelist, str): filelist = io_utils.file_to_list(filelist) # TODO: Reject unsupported file formats + work with more file formats if basepath: datasets = [ GeoDataset(os.path.join(basepath, f)) for f in filelist ] else: datasets = [GeoDataset(f) for f in filelist] # This is brute force for now, could swap to an RTree at some point. adjacency_dict = {} valid_datasets = [] for i in datasets: adjacency_dict[i.file_name] = [] fp = i.footprint if fp and fp.IsValid(): valid_datasets.append(i) else: warnings.warn( 'Missing or invalid geospatial data for {}'.format( i.base_name)) # Grab the footprints and test for intersection for i, j in itertools.permutations(valid_datasets, 2): i_fp = i.footprint j_fp = j.footprint try: if i_fp.Intersects(j_fp): adjacency_dict[i.file_name].append(j.file_name) adjacency_dict[j.file_name].append(i.file_name) except: warnings.warn( 'Failed to calculate intersection between {} and {}'. format(i, j)) return cls.from_adjacency(adjacency_dict)
def from_filelist(cls, filelist, basepath=None): """ Instantiate the class using a filelist as a python list. An adjacency structure is calculated using the lat/lon information in the input images. Currently only images with this information are supported. Parameters ---------- filelist : list A list containing the files (with full paths) to construct an adjacency graph from Returns ------- : object A Network graph object """ if isinstance(filelist, str): filelist = io_utils.file_to_list(filelist) # TODO: Reject unsupported file formats + work with more file formats if basepath: datasets = [GeoDataset(os.path.join(basepath, f)) for f in filelist] else: datasets = [GeoDataset(f) for f in filelist] # This is brute force for now, could swap to an RTree at some point. adjacency_dict = {} valid_datasets = [] for i in datasets: adjacency_dict[i.file_name] = [] fp = i.footprint if fp and fp.IsValid(): valid_datasets.append(i) else: warnings.warn('Missing or invalid geospatial data for {}'.format(i.base_name)) # Grab the footprints and test for intersection for i, j in itertools.permutations(valid_datasets, 2): i_fp = i.footprint j_fp = j.footprint try: if i_fp.Intersects(j_fp): adjacency_dict[i.file_name].append(j.file_name) adjacency_dict[j.file_name].append(i.file_name) except: warnings.warn('Failed to calculated intersection between {} and {}'.format(i, j)) return cls(adjacency_dict)
def from_filelist(cls, filelist, basepath=None): """ This methods instantiates a network candidate graph by first parsing the filelist and adding those images to the database. This method then dispatches to the from_database cls method to create the network candidate graph object. """ if isinstance(filelist, str): filelist = io_utils.file_to_list(filelist) if basepath: filelist = [(f, os.path.join(basepath, f)) for f in filelist] else: filelist = [(os.path.basename(f), f) for f in filelist] parent = Parent(config) # Get each of the images added to the DB (duplicates, by PATH, are omitted) for f in filelist: n = NetworkNode(image_name=f[0], image_path=f[1], parent=parent) pathlist = [f[1] for f in filelist] qs = 'SELECT * FROM public.Images WHERE public.Images.path IN ({})'.format(','.join("'{0}'".format(p) for p in pathlist)) return NetworkCandidateGraph.from_database(query_string=qs)