1#ifndef OSMSCOUT_IMPORT_GENRELAREADAT_H
2#define OSMSCOUT_IMPORT_GENRELAREADAT_H
26#include <unordered_map>
27#include <unordered_set>
51 typedef std::unordered_set<OSMId> IdSet;
53 typedef std::unordered_map<OSMId,RawWayRef> IdRawWayMap;
65 explicit GroupingState(
size_t rings)
70 for (
size_t i=0; i<
rings; i++) {
79 hasIncludes=
new bool[
rings];
80 for (
size_t i=0; i<
rings; i++) {
87 delete [] hasIncludes;
92 inline size_t GetRingCount()
const
97 inline void SetUsed(
size_t used)
99 this->used[used]=
true;
102 inline bool IsUsed(
size_t used)
const
104 return this->used[used];
107 inline void SetIncluded(
size_t includer,
size_t included)
109 hasIncludes[includer]=
true;
110 includes[included*
rings+includer]=
true;
113 inline bool HasIncludes(
size_t includer)
const
115 return hasIncludes[includer];
118 inline bool Includes(
size_t included,
size_t includer)
const
120 return includes[included*
rings+includer];
124 struct MultipolygonPart
127 std::list<RawWayRef> ways;
134 } relationRole{none};
138 inline bool IsArea()
const
140 if (ways.size()==1) {
141 return ways.front()->IsArea() ||
142 ways.front()->GetNodes().front()==ways.front()->GetNodes().back();
149 inline void SetRelationRole(
const std::string &role)
153 }
else if (role==
"inner") {
160 static inline std::string GetRelationRoleStr(RelationRole relationRole)
162 switch (relationRole){
172 inline std::string GetRelationRoleStr()
const
174 return GetRelationRoleStr(relationRole);
177 inline void SetId(OSMId
id)
184 std::list<MultipolygonPart>::const_iterator FindTopLevel(
const std::list<MultipolygonPart>& rings,
185 const GroupingState& state,
188 std::list<MultipolygonPart>::const_iterator FindSub(
const std::list<MultipolygonPart>& rings,
190 const GroupingState& state,
193 void ConsumeSubs(Progress& progress,
194 const std::list<MultipolygonPart>& rings,
195 std::vector<MultipolygonPart>& groups,
196 GroupingState& state,
200 bool BuildRings(
const TypeConfig& typeConfig,
201 const ImportParameter& parameter,
204 const std::string& name,
205 const TypeInfoRef& type,
206 std::list<MultipolygonPart>& parts);
208 bool ResolveMultipolygon(
const TypeConfig& typeConfig,
209 const ImportParameter& parameter,
212 const std::string& name,
213 const TypeInfoRef& type,
214 std::list<MultipolygonPart>& parts);
216 bool ComposeAreaMembers(
const TypeConfig& typeConfig,
218 const CoordDataFile::ResultMap& coordMap,
219 const IdRawWayMap& wayMap,
220 const std::string& name,
221 const RawRelation& rawRelation,
222 std::list<MultipolygonPart>& parts);
224 bool ComposeBoundaryMembers(
const TypeConfig& typeConfig,
226 const CoordDataFile::ResultMap& coordMap,
227 const IdRawWayMap& wayMap,
228 const std::map<OSMId,RawRelationRef>& relationMap,
229 const Area& relation,
230 const std::string& name,
231 const RawRelation& rawRelation,
232 IdSet& resolvedRelations,
233 std::list<MultipolygonPart>& parts);
235 bool ResolveMultipolygonMembers(Progress& progress,
236 const ImportParameter& parameter,
237 const TypeConfig& typeConfig,
238 CoordDataFile& coordDataFile,
239 RawWayIndexedDataFile& wayDataFile,
240 RawRelationIndexedDataFile& relDataFile,
241 IdSet& resolvedRelations,
242 const Area& relation,
243 const std::string& name,
244 const RawRelation& rawRelation,
245 std::list<MultipolygonPart>& parts);
247 bool HandleMultipolygonRelation(
const ImportParameter& parameter,
249 const TypeConfig& typeConfig,
250 IdSet& wayAreaIndexBlacklist,
251 CoordDataFile& coordDataFile,
252 RawWayIndexedDataFile& wayDataFile,
253 RawRelationIndexedDataFile& relDataFile,
254 RawRelation& rawRelation,
255 const std::string& name,
258 std::string ResolveRelationName(
const FeatureRef& featureName,
259 const RawRelation& rawRelation)
const;
261 TypeInfoRef AutodetectRelationType(
const ImportParameter& parameter,
262 const TypeConfig& typeConfig,
263 const RawRelation& rawRelation,
264 std::list<MultipolygonPart>& parts,
265 std::list<MultipolygonPart>::iterator& copyPart)
const;
269 ImportModuleDescription& description)
const override;
void GetDescription(const ImportParameter ¶meter, ImportModuleDescription &description) const override
std::vector< Ring > rings
Definition Area.h:242
static const char *const WAYAREABLACK_DAT
Definition GenRelAreaDat.h:48
bool Includes(const P &coord, bool openInterval=true) const
Definition GeoBox.h:113
static const char *const RELAREA_TMP
Definition GenRelAreaDat.h:47
bool Import(const TypeConfigRef &typeConfig, const ImportParameter ¶meter, Progress &progress) override
Definition ImportModule.h:101
int64_t OSMId
Definition OSMScoutTypes.h:33
std::shared_ptr< TypeConfig > TypeConfigRef
Definition TypeConfig.h:1396
std::shared_ptr< TypeInfo > TypeInfoRef
Definition TypeConfig.h:61