libosmscout 1.1.1
Loading...
Searching...
No Matches
LocationDescriptionService.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_LOCATIONDESCRIPTIONSERVICE_H
2#define OSMSCOUT_LOCATIONDESCRIPTIONSERVICE_H
3
4/*
5 This source is part of the libosmscout library
6 Copyright (C) 2017 Tim Teulings
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*/
22
23#include <list>
24#include <memory>
25
27
29
31
33
34namespace osmscout {
35
41 class OSMSCOUT_API LocationCoordDescription CLASS_FINAL
42 {
43 private:
44 GeoCoord location;
45
46 public:
47 explicit LocationCoordDescription(const GeoCoord& location);
48
50 };
51
54 using LocationCoordDescriptionRef = std::shared_ptr<LocationCoordDescription>;
55
56 class OSMSCOUT_API LocationDescriptionCandicate CLASS_FINAL
57 {
58 private:
59 ObjectFileRef ref;
60 std::string name;
61 Distance distance;
62 Bearing bearing;
63 bool atPlace;
64 double size;
65
66 public:
68 const std::string& name,
69 const Distance& distance,
70 const Bearing& bearing,
71 const bool atPlace,
72 const double size)
73 : ref(ref),
74 name(name),
75 distance(distance),
76 bearing(bearing),
77 atPlace(atPlace),
78 size(size)
79 {
80 // no code
81 }
82
84 {
85 return ref;
86 }
87
88 std::string GetName() const
89 {
90 return name;
91 }
92
93 Distance GetDistance() const
94 {
95 return distance;
96 }
97
98 Bearing GetBearing() const
99 {
100 return bearing;
101 }
102
103 bool IsAtPlace() const
104 {
105 return atPlace;
106 }
107
108 double GetSize() const
109 {
110 return size;
111 }
112 };
113
119 class OSMSCOUT_API LocationAtPlaceDescription CLASS_FINAL
120 {
121 private:
122 Place place;
123 bool atPlace;
124 Distance distance;
125 Bearing bearing;
126
127 public:
128 explicit LocationAtPlaceDescription(const Place& place);
130 const Distance &distance,
131 const Bearing &bearing);
132
137 {
138 return place;
139 }
140
144 bool IsAtPlace() const
145 {
146 return atPlace;
147 }
148
152 Distance GetDistance() const
153 {
154 return distance;
155 }
156
160 Bearing GetBearing() const
161 {
162 return bearing;
163 }
164 };
165
168 using LocationAtPlaceDescriptionRef = std::shared_ptr<LocationAtPlaceDescription>;
169
175 class OSMSCOUT_API LocationWayDescription CLASS_FINAL
176 {
177 private:
178 Place way;
179 Distance distance;
180
181 public:
182 explicit LocationWayDescription(const Place& way);
183
185 const Distance &distance);
189 Place GetWay() const
190 {
191 return way;
192 }
193
197 Distance GetDistance() const
198 {
199 return distance;
200 }
201 };
202
205 using LocationWayDescriptionRef = std::shared_ptr<LocationWayDescription>;
206
212 class OSMSCOUT_API LocationCrossingDescription CLASS_FINAL
213 {
214 private:
215 GeoCoord crossing;
216 bool atPlace;
217 std::list<Place> ways;
218 Distance distance;
219 Bearing bearing;
220
221 public:
223 const std::list<Place>& ways);
224
226 const std::list<Place>& ways,
227 const Distance &distance,
228 const Bearing &bearing);
232 std::list<Place> GetWays() const
233 {
234 return ways;
235 }
236
240 bool IsAtPlace() const
241 {
242 return atPlace;
243 }
244
248 Distance GetDistance() const
249 {
250 return distance;
251 }
252
256 Bearing GetBearing() const
257 {
258 return bearing;
259 }
260
262 {
263 return crossing;
264 }
265 };
266
269 using LocationCrossingDescriptionRef = std::shared_ptr<LocationCrossingDescription>;
270
277 class OSMSCOUT_API LocationDescription CLASS_FINAL
278 {
279 private:
280 LocationCoordDescriptionRef coordDescription;
281 LocationAtPlaceDescriptionRef atNameDescription;
282 LocationAtPlaceDescriptionRef atAddressDescription;
283 LocationAtPlaceDescriptionRef atPOIDescription;
284 LocationWayDescriptionRef wayDescription;
285 LocationCrossingDescriptionRef crossingDescription;
286
287 public:
294
300
306
312
318
324
330 };
331
353 {
354 public:
369
370 using ReverseLookupRef = std::shared_ptr<ReverseLookupResult>;
371
372 private:
373 DatabaseRef database;
374
375 private:
376 static bool DistanceComparator(const LocationDescriptionCandicate &a,
377 const LocationDescriptionCandicate &b);
378
379 const FeatureValueBufferRef GetObjectFeatureBuffer(const ObjectFileRef &object);
380
381 Place GetPlace(const std::list<ReverseLookupResult>& lookupResult);
382
383 bool VisitAdminRegions(AdminRegionVisitor& visitor) const;
384
385 void AddToCandidates(std::vector<LocationDescriptionCandicate>& candidates,
386 const GeoCoord& location,
387 const NodeRegionSearchResult& results,
388 bool requireAddress,
389 bool requireName);
390 void AddToCandidates(std::vector<LocationDescriptionCandicate>& candidates,
391 const GeoCoord& location,
392 const WayRegionSearchResult& results);
393 void AddToCandidates(std::vector<LocationDescriptionCandicate>& candidates,
394 const GeoCoord& location,
395 const AreaRegionSearchResult& results,
396 bool requireAddress,
397 bool requireName);
398
399 public:
400 explicit LocationDescriptionService(const DatabaseRef& database);
401
402 bool ReverseLookupRegion(const GeoCoord &coord,
403 std::list<ReverseLookupResult>& result) const;
404
405 bool ReverseLookupObjects(const std::list<ObjectFileRef>& objects,
406 std::list<ReverseLookupResult>& result) const;
407 bool ReverseLookupObject(const ObjectFileRef& object,
408 std::list<ReverseLookupResult>& result) const;
409
410 bool DescribeLocation(const GeoCoord& location,
411 LocationDescription& description,
412 const Distance& lookupDistance=Distance::Of<Meter>(100),
413 double sizeFilter=1.0);
414
415 bool DescribeLocationByName(const GeoCoord& location,
416 LocationDescription& description,
417 const Distance& lookupDistance=Distance::Of<Meter>(100),
418 double sizeFilter=1.0);
419
420 bool DescribeLocationByAddress(const GeoCoord& location,
421 LocationDescription& description,
422 const Distance& lookupDistance=Distance::Of<Meter>(100),
423 double sizeFilter=1.0);
424
425 bool DescribeLocationByPOI(const GeoCoord& location,
426 LocationDescription& description,
427 const Distance& lookupDistance=Distance::Of<Meter>(100),
428 double sizeFilter=1.0);
429
430 bool DescribeLocationByCrossing(const GeoCoord& location,
431 LocationDescription& description,
432 const Distance& lookupDistance=Distance::Of<Meter>(100));
433
434 bool DescribeLocationByWay(const GeoCoord& location,
435 LocationDescription& description,
436 const Distance& lookupDistance=Distance::Of<Meter>(100));
437 };
438
441 using LocationDescriptionServiceRef = std::shared_ptr<LocationDescriptionService>;
442}
443
444
445#endif
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Definition Location.h:91
Definition Database.h:272
Definition Area.h:88
std::list< Place > GetWays() const
Definition LocationDescriptionService.h:232
Distance GetDistance() const
Definition LocationDescriptionService.h:93
void SetAtPOIDescription(const LocationAtPlaceDescriptionRef &description)
LocationAtPlaceDescriptionRef GetAtNameDescription() const
LocationAtPlaceDescription(const Place &place, const Distance &distance, const Bearing &bearing)
bool IsAtPlace() const
Definition LocationDescriptionService.h:103
LocationCrossingDescriptionRef GetCrossingDescription() const
GeoCoord GetCrossing() const
Definition LocationDescriptionService.h:261
std::string GetName() const
Definition LocationDescriptionService.h:88
void SetAtNameDescription(const LocationAtPlaceDescriptionRef &description)
LocationCrossingDescription(const GeoCoord &crossing, const std::list< Place > &ways, const Distance &distance, const Bearing &bearing)
LocationWayDescriptionRef GetWayDescription() const
LocationDescriptionCandicate(const ObjectFileRef &ref, const std::string &name, const Distance &distance, const Bearing &bearing, const bool atPlace, const double size)
Definition LocationDescriptionService.h:67
LocationCoordDescription(const GeoCoord &location)
LocationAtPlaceDescription(const Place &place)
LocationAtPlaceDescriptionRef GetAtAddressDescription() const
Bearing GetBearing() const
Definition LocationDescriptionService.h:98
void SetCoordDescription(const LocationCoordDescriptionRef &description)
GeoCoord GetLocation() const
Place GetWay() const
Definition LocationDescriptionService.h:189
LocationCoordDescriptionRef GetCoordDescription() const
void SetWayDescription(const LocationWayDescriptionRef &description)
void SetAtAddressDescription(const LocationAtPlaceDescriptionRef &description)
LocationWayDescription(const Place &way, const Distance &distance)
LocationWayDescription(const Place &way)
ObjectFileRef GetRef() const
Definition LocationDescriptionService.h:83
LocationCrossingDescription(const GeoCoord &crossing, const std::list< Place > &ways)
Place GetPlace() const
Definition LocationDescriptionService.h:136
void SetCrossingDescription(const LocationCrossingDescriptionRef &description)
double GetSize() const
Definition LocationDescriptionService.h:108
LocationAtPlaceDescriptionRef GetAtPOIDescription() const
LocationDescriptionService(const DatabaseRef &database)
bool DescribeLocationByCrossing(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100))
bool DescribeLocationByName(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100), double sizeFilter=1.0)
bool ReverseLookupObjects(const std::list< ObjectFileRef > &objects, std::list< ReverseLookupResult > &result) const
bool ReverseLookupObject(const ObjectFileRef &object, std::list< ReverseLookupResult > &result) const
bool ReverseLookupRegion(const GeoCoord &coord, std::list< ReverseLookupResult > &result) const
bool DescribeLocation(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100), double sizeFilter=1.0)
bool DescribeLocationByWay(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100))
bool DescribeLocationByAddress(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100), double sizeFilter=1.0)
std::shared_ptr< ReverseLookupResult > ReverseLookupRef
Definition LocationDescriptionService.h:370
bool DescribeLocationByPOI(const GeoCoord &location, LocationDescription &description, const Distance &lookupDistance=Distance::Of< Meter >(100), double sizeFilter=1.0)
Definition Database.h:174
Definition Location.h:254
Definition Database.h:220
std::shared_ptr< LocationWayDescription > LocationWayDescriptionRef
Definition LocationDescriptionService.h:205
std::shared_ptr< LocationAtPlaceDescription > LocationAtPlaceDescriptionRef
Definition LocationDescriptionService.h:168
std::shared_ptr< LocationCrossingDescription > LocationCrossingDescriptionRef
Definition LocationDescriptionService.h:269
std::shared_ptr< LocationCoordDescription > LocationCoordDescriptionRef
Definition LocationDescriptionService.h:54
std::shared_ptr< LocationDescriptionService > LocationDescriptionServiceRef
Definition LocationDescriptionService.h:441
Definition Area.h:39
std::shared_ptr< Address > AddressRef
Definition Location.h:191
std::shared_ptr< PostalArea > PostalAreaRef
Definition Location.h:45
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition Database.h:555
std::shared_ptr< POI > POIRef
Definition Location.h:123
std::shared_ptr< Location > LocationRef
Definition Location.h:156
std::shared_ptr< FeatureValueBuffer > FeatureValueBufferRef
Definition TypeConfig.h:1039
std::shared_ptr< AdminRegion > AdminRegionRef
Definition Location.h:83
Definition LocationDescriptionService.h:361
POIRef poi
POI data, if set.
Definition LocationDescriptionService.h:365
AddressRef address
Address data if set.
Definition LocationDescriptionService.h:367
PostalAreaRef postalArea
Postal area the object is in, if set.
Definition LocationDescriptionService.h:364
AdminRegionRef adminRegion
Region the object is in, if set.
Definition LocationDescriptionService.h:363
LocationRef location
Location data, if set.
Definition LocationDescriptionService.h:366
ObjectFileRef object
object used for lookup
Definition LocationDescriptionService.h:362