1 #ifndef OSMSCOUT_IMPORT_GENRELAREADAT_H 2 #define OSMSCOUT_IMPORT_GENRELAREADAT_H 26 #include <unordered_map> 27 #include <unordered_set> 45 class RelAreaDataGenerator
CLASS_FINAL :
public ImportModule
52 typedef std::unordered_set<OSMId> IdSet;
54 typedef std::unordered_map<OSMId,RawWayRef> IdRawWayMap;
66 explicit GroupingState(
size_t rings)
71 for (
size_t i=0; i<rings; i++) {
75 includes=
new bool[rings*rings];
76 for (
size_t i=0; i<rings*rings; i++) {
80 hasIncludes=
new bool[rings];
81 for (
size_t i=0; i<rings; i++) {
88 delete [] hasIncludes;
93 inline size_t GetRingCount()
const 98 inline void SetUsed(
size_t used)
100 this->used[used]=
true;
103 inline bool IsUsed(
size_t used)
const 105 return this->used[used];
108 inline void SetIncluded(
size_t includer,
size_t included)
110 hasIncludes[includer]=
true;
111 includes[included*rings+includer]=
true;
114 inline bool HasIncludes(
size_t includer)
const 116 return hasIncludes[includer];
119 inline bool Includes(
size_t included,
size_t includer)
const 121 return includes[included*rings+includer];
125 struct MultipolygonPart
128 std::list<RawWayRef> ways;
135 } relationRole{none};
139 inline bool IsArea()
const 141 if (ways.size()==1) {
142 return ways.front()->IsArea() ||
143 ways.front()->GetNodes().front()==ways.front()->GetNodes().back();
150 inline void SetRelationRole(
const std::string &role)
154 }
else if (role==
"inner") {
161 inline std::string GetRelationRoleStr()
const 163 switch (relationRole){
173 inline void SetId(
OSMId id)
180 std::list<MultipolygonPart>::const_iterator FindTopLevel(
const std::list<MultipolygonPart>& rings,
181 const GroupingState& state,
184 std::list<MultipolygonPart>::const_iterator FindSub(
const std::list<MultipolygonPart>& rings,
186 const GroupingState& state,
189 void ConsumeSubs(Progress& progress,
190 const std::list<MultipolygonPart>& rings,
191 std::list<MultipolygonPart>& groups,
192 GroupingState& state,
196 bool BuildRings(
const TypeConfig& typeConfig,
197 const ImportParameter& parameter,
200 const std::string& name,
202 std::list<MultipolygonPart>& parts);
204 bool ResolveMultipolygon(
const TypeConfig& typeConfig,
205 const ImportParameter& parameter,
208 const std::string& name,
210 std::list<MultipolygonPart>& parts);
212 bool ComposeAreaMembers(
const TypeConfig& typeConfig,
215 const IdRawWayMap& wayMap,
216 const std::string& name,
217 const RawRelation& rawRelation,
218 std::list<MultipolygonPart>& parts);
220 bool ComposeBoundaryMembers(
const TypeConfig& typeConfig,
223 const IdRawWayMap& wayMap,
224 const std::map<OSMId,RawRelationRef>& relationMap,
225 const Area& relation,
226 const std::string& name,
227 const RawRelation& rawRelation,
228 IdSet& resolvedRelations,
229 std::list<MultipolygonPart>& parts);
231 bool ResolveMultipolygonMembers(Progress& progress,
232 const ImportParameter& parameter,
233 const TypeConfig& typeConfig,
234 CoordDataFile& coordDataFile,
235 RawWayIndexedDataFile& wayDataFile,
236 RawRelationIndexedDataFile& relDataFile,
237 IdSet& resolvedRelations,
238 const Area& relation,
239 const std::string& name,
240 const RawRelation& rawRelation,
241 std::list<MultipolygonPart>& parts);
243 bool HandleMultipolygonRelation(
const ImportParameter& parameter,
245 const TypeConfig& typeConfig,
246 IdSet& wayAreaIndexBlacklist,
247 CoordDataFile& coordDataFile,
248 RawWayIndexedDataFile& wayDataFile,
249 RawRelationIndexedDataFile& relDataFile,
250 RawRelation& rawRelation,
251 const std::string& name,
254 std::string ResolveRelationName(
const FeatureRef& featureName,
255 const RawRelation& rawRelation)
const;
257 TypeInfoRef AutodetectRelationType(
const ImportParameter& parameter,
258 const TypeConfig& typeConfig,
259 const RawRelation& rawRelation,
260 std::list<MultipolygonPart>& parts,
261 std::list<MultipolygonPart>::iterator& copyPart)
const;
264 void GetDescription(
const ImportParameter& parameter,
265 ImportModuleDescription& description)
const override;
268 const ImportParameter& parameter,
269 Progress& progress)
override;
int64_t OSMId
Definition: OSMScoutTypes.h:34
#define CLASS_FINAL
Definition: Compiler.h:26
std::shared_ptr< Feature > FeatureRef
Definition: TypeFeature.h:219
static const char *const RELAREA_TMP
Definition: GenRelAreaDat.h:48
std::shared_ptr< TypeInfo > TypeInfoRef
Definition: TypeConfig.h:58
static const char *const WAYAREABLACK_DAT
Definition: GenRelAreaDat.h:49
std::shared_ptr< TypeConfig > TypeConfigRef
Definition: TypeConfig.h:1227
std::unordered_map< OSMId, Point > ResultMap
Definition: CoordDataFile.h:42