Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
JSONFilterFactory.hpp
Go to the documentation of this file.
1#pragma once
2#include <nlohmann/json.hpp>
3#include <magic_enum.hpp>
5#include <fishnet/Option.hpp>
7#include "FilterType.hpp"
10
11template<fishnet::geometry::Geometry G>
14public:
15 static fishnet::Option<fishnet::util::Predicate_t<G>> getFilter(const nlohmann::json & filterDesc) {
16 return magic_enum::enum_cast<FilterType>(filterDesc.at("type").get<std::string>()).and_then([&filterDesc](FilterType type)->std::optional<fishnet::util::Predicate_t<G>>{
17 switch(type){
19 break;
21 return ApproxAreaFilter(filterDesc.at("required-area").get<double>());
22 }
23 return std::nullopt;
24 });
25 }
26
27 static fishnet::Option<fishnet::util::BiPredicate_t<G,G>> getBinaryFilter(const nlohmann::json & filterDesc){
28 return magic_enum::enum_cast<BinaryFilterType>(filterDesc.at("type").get<std::string>()).and_then([](BinaryFilterType type)->std::optional<fishnet::util::BiPredicate_t<G,G>>{
29 switch(type){
31 return InsidePolygonFilter();
32 }
33 return std::nullopt;
34 });
35 }
36
37 static std::vector<fishnet::util::Predicate_t<G>> getFilters(const nlohmann::json & filtersDesc){
38 std::vector<fishnet::util::Predicate_t<G>> filters;
39 for(const auto & filterDesc: filtersDesc){
40 auto filter = getFilter(filterDesc);
41 if(filter.has_value()){
42 filters.push_back(std::move(filter.value()));
43 }
44 }
45 return filters;
46 }
47
48 static std::vector<fishnet::util::BiPredicate_t<G,G>> getBinaryFilters(const nlohmann::json & filtersDesc){
49 std::vector<fishnet::util::BiPredicate_t<G,G>> filters;
50 for(const auto & filterDesc: filtersDesc){
51 auto filter = getBinaryFilter(filterDesc);
52 if(filter.has_value()){
53 filters.push_back(std::move(filter.value()));
54 }
55 }
56 return filters;
57 }
58};
59
FilterType
Definition FilterType.hpp:3
@ ProjectedAreaFilter
BinaryFilterType
Definition FilterType.hpp:7
Filter that approximates the area in m² and checks if it is equal or greater than the required area.
Definition ApproxAreaFilter.hpp:10
Binary Filter, testing if the other polygons contain another or are inside a hole.
Definition InsidePolygonFilter.hpp:9
Definition JSONFilterFactory.hpp:12
static std::vector< fishnet::util::BiPredicate_t< G, G > > getBinaryFilters(const nlohmann::json &filtersDesc)
Definition JSONFilterFactory.hpp:48
static std::vector< fishnet::util::Predicate_t< G > > getFilters(const nlohmann::json &filtersDesc)
Definition JSONFilterFactory.hpp:37
static fishnet::Option< fishnet::util::Predicate_t< G > > getFilter(const nlohmann::json &filterDesc)
Definition JSONFilterFactory.hpp:15
static fishnet::Option< fishnet::util::BiPredicate_t< G, G > > getBinaryFilter(const nlohmann::json &filterDesc)
Definition JSONFilterFactory.hpp:27
Definition Option.hpp:13
Definition FunctionalConcepts.hpp:36
std::function< bool(const T &)> Predicate_t
Definition FunctionalConcepts.hpp:39
std::function< bool(const T &, const R &)> BiPredicate_t
Definition FunctionalConcepts.hpp:45