Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
GISFactory.hpp
Go to the documentation of this file.
1#pragma once
2#include <expected>
3#include <fishnet/Either.hpp>
4
5#include "Shapefile.hpp"
6#include "GISFile.hpp"
7#include "GeoTiff.hpp"
8#include "GISConverter.hpp"
9
10namespace fishnet {
11
13public:
20 static fishnet::Either<Shapefile,std::string> asShapefile(const std::filesystem::path& path){
21 auto fileType = getGISFileType(path);
22 if (not fileType)
23 return std::unexpected("Unsupported File Type");
24 switch (fileType.value()) {
26 return Shapefile(path);
28 if(std::filesystem::exists(path))
29 return GISConverter::convert(GeoTiff(path));
30 else return Shapefile(path.parent_path() /path.stem().replace_extension(".shp"));
31 default:
32 break;
33 }
34 return std::unexpected("Unknown Error");
35 }
36
43 static std::vector<std::filesystem::path> getGISFiles(const std::filesystem::path & path){
44 std::vector<std::filesystem::path> gisFiles;
45 auto dir = path;
46 if(std::filesystem::is_symlink(path))
47 dir = std::filesystem::read_symlink(path);
48 if(not std::filesystem::is_directory(dir) && std::filesystem::is_regular_file(path) && getGISFileType(path).has_value()){
49 gisFiles.emplace_back(path);
50 return gisFiles;
51 }
52 for(auto && file: std::filesystem::directory_iterator(dir)){
53 if(file.is_regular_file() && getGISFileType(file).has_value()){
54 gisFiles.push_back(std::move(file));
55 }
56 }
57 return gisFiles;
58 }
59};
60}
Definition Either.hpp:11
static std::expected< Shapefile, std::string > convert(const GeoTiff &geoTiff, bool maskZero=true, bool showProgress=false) noexcept
Tries to convert a GeoTiff to Shp file.
Definition GISConverter.hpp:24
Definition GISFactory.hpp:12
static fishnet::Either< Shapefile, std::string > asShapefile(const std::filesystem::path &path)
Tries to construct ShapeFile handle from path. If path does not point to .shp file,...
Definition GISFactory.hpp:20
static std::vector< std::filesystem::path > getGISFiles(const std::filesystem::path &path)
Get all GIS files in a directory/ or a single file from a path.
Definition GISFactory.hpp:43
GeoTiff handle implementation.
Definition GeoTiff.hpp:8
Shapefile handle implementation.
Definition Shapefile.hpp:14
Definition BFSClustering.hpp:5
static fishnet::Option< GISFileType > getGISFileType(const std::filesystem::path &path)
Definition GISFile.hpp:18