Commit 62094918 authored by Bernhard Beschow's avatar Bernhard Beschow
Browse files

move GeoDataVisualCategory enum from GeoDataFeature to GeoDataPlacemark

This is an intended follow-up on the previous commit.
parent 40503810
......@@ -69,7 +69,7 @@ void BookmarkManagerPrivate::setVisualCategory( GeoDataContainer *container ) {
setVisualCategory( folder );
}
foreach( GeoDataPlacemark* placemark, container->placemarkList() ) {
placemark->setVisualCategory( GeoDataFeature::Bookmark );
placemark->setVisualCategory(GeoDataPlacemark::Bookmark);
placemark->setZoomLevel( 1 );
}
......@@ -135,7 +135,7 @@ bool BookmarkManager::loadFile( const QString &relativeFilePath )
void BookmarkManager::addBookmark( GeoDataContainer *container, const GeoDataPlacemark &placemark )
{
GeoDataPlacemark *bookmark = new GeoDataPlacemark( placemark );
bookmark->setVisualCategory( GeoDataDocument::Bookmark );
bookmark->setVisualCategory(GeoDataPlacemark::Bookmark);
bookmark->setZoomLevel( 1 );
if (bookmark->name().isEmpty()) {
bookmark->setName(bookmark->coordinate().toString(GeoDataCoordinates::Decimal).trimmed());
......
......@@ -52,7 +52,7 @@ public:
QString m_initialName;
GeoDataCoordinates m_initialCoords;
GeoDataStyle m_initialStyle;
GeoDataFeature::GeoDataVisualCategory m_initialVisualCategory;
GeoDataPlacemark::GeoDataVisualCategory m_initialVisualCategory;
OsmPlacemarkData m_initialOsmData;
QString m_styleColorTabName;
bool m_initialIsPlacemarkVisible;
......@@ -343,8 +343,8 @@ void EditPlacemarkDialog::updateTextAnnotation()
}
else {
const OsmPlacemarkData osmData = d->m_osmTagEditorWidget->placemarkData();
const GeoDataFeature::GeoDataVisualCategory category = StyleBuilder::determineVisualCategory(osmData);
if (category != GeoDataFeature::None) {
const GeoDataPlacemark::GeoDataVisualCategory category = StyleBuilder::determineVisualCategory(osmData);
if (category != GeoDataPlacemark::None) {
d->m_placemark->setStyle(GeoDataStyle::Ptr());
d->m_placemark->setVisualCategory( category );
}
......@@ -367,7 +367,7 @@ void EditPlacemarkDialog::checkFields()
QMessageBox::warning( this,
tr( "ID is invalid" ),
tr( "Please specify a valid ID for this placemark." ) );
} else if ( d->m_header->iconLink().isEmpty() && d->m_placemark->visualCategory() == GeoDataFeature::None ) {
} else if (d->m_header->iconLink().isEmpty() && d->m_placemark->visualCategory() == GeoDataPlacemark::None) {
QMessageBox::warning( this,
tr( "No image specified" ),
tr( "Please specify an icon for this placemark or add a valid tag." ) );
......
......@@ -678,10 +678,10 @@ void MarbleWidgetPopupMenu::slotInfoDialog()
}
if ( placemark ) {
isSatellite = (placemark->visualCategory() == GeoDataFeature::Satellite);
isCity = (placemark->visualCategory() >= GeoDataFeature::SmallCity &&
placemark->visualCategory() <= GeoDataFeature::LargeNationCapital);
isNation = (placemark->visualCategory() == GeoDataFeature::Nation);
isSatellite = (placemark->visualCategory() == GeoDataPlacemark::Satellite);
isCity = (placemark->visualCategory() >= GeoDataPlacemark::SmallCity &&
placemark->visualCategory() <= GeoDataPlacemark::LargeNationCapital);
isNation = (placemark->visualCategory() == GeoDataPlacemark::Nation);
}
bool isSky = false;
......
......@@ -62,99 +62,99 @@ namespace
namespace Marble
{
QSet<GeoDataFeature::GeoDataVisualCategory> acceptedVisualCategories()
QSet<GeoDataPlacemark::GeoDataVisualCategory> acceptedVisualCategories()
{
QSet<GeoDataFeature::GeoDataVisualCategory> visualCategories;
QSet<GeoDataPlacemark::GeoDataVisualCategory> visualCategories;
visualCategories
<< GeoDataFeature::SmallCity
<< GeoDataFeature::SmallCountyCapital
<< GeoDataFeature::SmallStateCapital
<< GeoDataFeature::SmallNationCapital
<< GeoDataFeature::MediumCity
<< GeoDataFeature::MediumCountyCapital
<< GeoDataFeature::MediumStateCapital
<< GeoDataFeature::MediumNationCapital
<< GeoDataFeature::BigCity
<< GeoDataFeature::BigCountyCapital
<< GeoDataFeature::BigStateCapital
<< GeoDataFeature::BigNationCapital
<< GeoDataFeature::LargeCity
<< GeoDataFeature::LargeCountyCapital
<< GeoDataFeature::LargeStateCapital
<< GeoDataFeature::LargeNationCapital
<< GeoDataFeature::Nation
<< GeoDataFeature::Mountain
<< GeoDataFeature::Volcano
<< GeoDataFeature::Mons
<< GeoDataFeature::Valley
<< GeoDataFeature::Continent
<< GeoDataFeature::Ocean
<< GeoDataFeature::OtherTerrain
<< GeoDataFeature::Crater
<< GeoDataFeature::Mare
<< GeoDataFeature::GeographicPole
<< GeoDataFeature::MagneticPole
<< GeoDataFeature::ShipWreck
<< GeoDataFeature::LeisureMarina
<< GeoDataFeature::AirPort
<< GeoDataFeature::Observatory
<< GeoDataFeature::AccomodationCamping
<< GeoDataFeature::AccomodationHostel
<< GeoDataFeature::AccomodationHotel
<< GeoDataFeature::AccomodationMotel
<< GeoDataFeature::AccomodationYouthHostel
<< GeoDataFeature::AmenityLibrary
<< GeoDataFeature::AmenityKindergarten
<< GeoDataFeature::EducationCollege
<< GeoDataFeature::EducationSchool
<< GeoDataFeature::EducationUniversity
<< GeoDataFeature::FoodBar
<< GeoDataFeature::FoodBiergarten
<< GeoDataFeature::FoodCafe
<< GeoDataFeature::FoodFastFood
<< GeoDataFeature::FoodPub
<< GeoDataFeature::FoodRestaurant
<< GeoDataFeature::HealthDoctors
<< GeoDataFeature::HealthHospital
<< GeoDataFeature::HealthPharmacy
<< GeoDataFeature::MoneyBank
<< GeoDataFeature::NaturalPeak
<< GeoDataFeature::ShopBeverages
<< GeoDataFeature::ShopHifi
<< GeoDataFeature::ShopSupermarket
<< GeoDataFeature::TouristAlpineHut
<< GeoDataFeature::TouristAttraction
<< GeoDataFeature::TouristCastle
<< GeoDataFeature::TouristCinema
<< GeoDataFeature::TouristMonument
<< GeoDataFeature::TouristMuseum
<< GeoDataFeature::TouristRuin
<< GeoDataFeature::TouristTheatre
<< GeoDataFeature::TouristThemePark
<< GeoDataFeature::TouristViewPoint
<< GeoDataFeature::TouristZoo
<< GeoDataFeature::TransportAerodrome
<< GeoDataFeature::TransportAirportTerminal
<< GeoDataFeature::TransportAirportGate
<< GeoDataFeature::TransportAirportRunway
<< GeoDataFeature::TransportAirportTaxiway
<< GeoDataFeature::TransportAirportApron
<< GeoDataFeature::TransportBusStation
<< GeoDataFeature::TransportBusStop
<< GeoDataFeature::TransportCarShare
<< GeoDataFeature::TransportFuel
<< GeoDataFeature::TransportParking
<< GeoDataFeature::TransportTrainStation
<< GeoDataFeature::ReligionPlaceOfWorship
<< GeoDataFeature::ReligionBahai
<< GeoDataFeature::ReligionBuddhist
<< GeoDataFeature::ReligionChristian
<< GeoDataFeature::ReligionHindu
<< GeoDataFeature::ReligionJain
<< GeoDataFeature::ReligionJewish
<< GeoDataFeature::ReligionShinto
<< GeoDataFeature::ReligionSikh;
<< GeoDataPlacemark::SmallCity
<< GeoDataPlacemark::SmallCountyCapital
<< GeoDataPlacemark::SmallStateCapital
<< GeoDataPlacemark::SmallNationCapital
<< GeoDataPlacemark::MediumCity
<< GeoDataPlacemark::MediumCountyCapital
<< GeoDataPlacemark::MediumStateCapital
<< GeoDataPlacemark::MediumNationCapital
<< GeoDataPlacemark::BigCity
<< GeoDataPlacemark::BigCountyCapital
<< GeoDataPlacemark::BigStateCapital
<< GeoDataPlacemark::BigNationCapital
<< GeoDataPlacemark::LargeCity
<< GeoDataPlacemark::LargeCountyCapital
<< GeoDataPlacemark::LargeStateCapital
<< GeoDataPlacemark::LargeNationCapital
<< GeoDataPlacemark::Nation
<< GeoDataPlacemark::Mountain
<< GeoDataPlacemark::Volcano
<< GeoDataPlacemark::Mons
<< GeoDataPlacemark::Valley
<< GeoDataPlacemark::Continent
<< GeoDataPlacemark::Ocean
<< GeoDataPlacemark::OtherTerrain
<< GeoDataPlacemark::Crater
<< GeoDataPlacemark::Mare
<< GeoDataPlacemark::GeographicPole
<< GeoDataPlacemark::MagneticPole
<< GeoDataPlacemark::ShipWreck
<< GeoDataPlacemark::LeisureMarina
<< GeoDataPlacemark::AirPort
<< GeoDataPlacemark::Observatory
<< GeoDataPlacemark::AccomodationCamping
<< GeoDataPlacemark::AccomodationHostel
<< GeoDataPlacemark::AccomodationHotel
<< GeoDataPlacemark::AccomodationMotel
<< GeoDataPlacemark::AccomodationYouthHostel
<< GeoDataPlacemark::AmenityLibrary
<< GeoDataPlacemark::AmenityKindergarten
<< GeoDataPlacemark::EducationCollege
<< GeoDataPlacemark::EducationSchool
<< GeoDataPlacemark::EducationUniversity
<< GeoDataPlacemark::FoodBar
<< GeoDataPlacemark::FoodBiergarten
<< GeoDataPlacemark::FoodCafe
<< GeoDataPlacemark::FoodFastFood
<< GeoDataPlacemark::FoodPub
<< GeoDataPlacemark::FoodRestaurant
<< GeoDataPlacemark::HealthDoctors
<< GeoDataPlacemark::HealthHospital
<< GeoDataPlacemark::HealthPharmacy
<< GeoDataPlacemark::MoneyBank
<< GeoDataPlacemark::NaturalPeak
<< GeoDataPlacemark::ShopBeverages
<< GeoDataPlacemark::ShopHifi
<< GeoDataPlacemark::ShopSupermarket
<< GeoDataPlacemark::TouristAlpineHut
<< GeoDataPlacemark::TouristAttraction
<< GeoDataPlacemark::TouristCastle
<< GeoDataPlacemark::TouristCinema
<< GeoDataPlacemark::TouristMonument
<< GeoDataPlacemark::TouristMuseum
<< GeoDataPlacemark::TouristRuin
<< GeoDataPlacemark::TouristTheatre
<< GeoDataPlacemark::TouristThemePark
<< GeoDataPlacemark::TouristViewPoint
<< GeoDataPlacemark::TouristZoo
<< GeoDataPlacemark::TransportAerodrome
<< GeoDataPlacemark::TransportAirportTerminal
<< GeoDataPlacemark::TransportAirportGate
<< GeoDataPlacemark::TransportAirportRunway
<< GeoDataPlacemark::TransportAirportTaxiway
<< GeoDataPlacemark::TransportAirportApron
<< GeoDataPlacemark::TransportBusStation
<< GeoDataPlacemark::TransportBusStop
<< GeoDataPlacemark::TransportCarShare
<< GeoDataPlacemark::TransportFuel
<< GeoDataPlacemark::TransportParking
<< GeoDataPlacemark::TransportTrainStation
<< GeoDataPlacemark::ReligionPlaceOfWorship
<< GeoDataPlacemark::ReligionBahai
<< GeoDataPlacemark::ReligionBuddhist
<< GeoDataPlacemark::ReligionChristian
<< GeoDataPlacemark::ReligionHindu
<< GeoDataPlacemark::ReligionJain
<< GeoDataPlacemark::ReligionJewish
<< GeoDataPlacemark::ReligionShinto
<< GeoDataPlacemark::ReligionSikh;
return visualCategories;
}
......@@ -486,45 +486,45 @@ QVector<VisiblePlacemark *> PlacemarkLayout::generateLayout( const ViewportParam
continue;
}
const GeoDataFeature::GeoDataVisualCategory visualCategory = placemark->visualCategory();
const GeoDataPlacemark::GeoDataVisualCategory visualCategory = placemark->visualCategory();
// Skip city marks if we're not showing cities.
if ( !m_showCities
&& visualCategory >= GeoDataFeature::SmallCity
&& visualCategory <= GeoDataFeature::Nation )
&& visualCategory >= GeoDataPlacemark::SmallCity
&& visualCategory <= GeoDataPlacemark::Nation )
continue;
// Skip terrain marks if we're not showing terrain.
if ( !m_showTerrain
&& visualCategory >= GeoDataFeature::Mountain
&& visualCategory <= GeoDataFeature::OtherTerrain )
&& visualCategory >= GeoDataPlacemark::Mountain
&& visualCategory <= GeoDataPlacemark::OtherTerrain )
continue;
// Skip other places if we're not showing other places.
if ( !m_showOtherPlaces
&& visualCategory >= GeoDataFeature::GeographicPole
&& visualCategory <= GeoDataFeature::Observatory )
&& visualCategory >= GeoDataPlacemark::GeographicPole
&& visualCategory <= GeoDataPlacemark::Observatory )
continue;
// Skip landing sites if we're not showing landing sites.
if ( !m_showLandingSites
&& visualCategory >= GeoDataFeature::MannedLandingSite
&& visualCategory <= GeoDataFeature::UnmannedHardLandingSite )
&& visualCategory >= GeoDataPlacemark::MannedLandingSite
&& visualCategory <= GeoDataPlacemark::UnmannedHardLandingSite )
continue;
// Skip craters if we're not showing craters.
if ( !m_showCraters
&& visualCategory == GeoDataFeature::Crater )
&& visualCategory == GeoDataPlacemark::Crater )
continue;
// Skip maria if we're not showing maria.
if ( !m_showMaria
&& visualCategory == GeoDataFeature::Mare )
&& visualCategory == GeoDataPlacemark::Mare )
continue;
if ( !m_showPlaces
&& visualCategory >= GeoDataFeature::GeographicPole
&& visualCategory <= GeoDataFeature::Observatory )
&& visualCategory >= GeoDataPlacemark::GeographicPole
&& visualCategory <= GeoDataPlacemark::Observatory )
continue;
// We handled selected placemarks already, so we skip them here...
......
......@@ -23,7 +23,7 @@
#include <QMap>
#include <QVector>
#include "GeoDataFeature.h"
#include "GeoDataPlacemark.h"
#include <GeoDataStyle.h>
class QAbstractItemModel;
......@@ -36,7 +36,6 @@ namespace Marble
{
class GeoDataCoordinates;
class GeoDataPlacemark;
class GeoPainter;
class MarbleClock;
class PlacemarkPainter;
......@@ -146,7 +145,7 @@ class PlacemarkLayout : public QObject
QMap<TileId, QList<const GeoDataPlacemark*> > m_placemarkCache;
QSet<qint64> m_osmIds;
const QSet< GeoDataFeature::GeoDataVisualCategory > m_acceptedVisualCategories;
const QSet<GeoDataPlacemark::GeoDataVisualCategory> m_acceptedVisualCategories;
// earth
bool m_showPlaces;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -13,7 +13,7 @@
#include "marble_export.h"
#include <GeoDataFeature.h>
#include <GeoDataPlacemark.h>
#include <GeoDataStyle.h>
#include <QHash>
......@@ -23,7 +23,6 @@ class QFont;
class QColor;
namespace Marble {
class GeoDataPlacemark;
class OsmPlacemarkData;
class MARBLE_EXPORT StyleParameters
......@@ -53,7 +52,7 @@ public:
void setDefaultLabelColor( const QColor& color );
GeoDataStyle::ConstPtr createStyle(const StyleParameters &parameters) const;
GeoDataStyle::ConstPtr presetStyle(GeoDataFeature::GeoDataVisualCategory visualCategory) const;
GeoDataStyle::ConstPtr presetStyle(GeoDataPlacemark::GeoDataVisualCategory visualCategory) const;
/**
* @brief Returns the order in which the visual categories used in the theme shall be painted on the map.
......@@ -76,23 +75,23 @@ public:
*/
int maximumZoomLevel() const;
static QString visualCategoryName(GeoDataFeature::GeoDataVisualCategory category);
static QString visualCategoryName(GeoDataPlacemark::GeoDataVisualCategory category);
/**
* @brief Convenience categorization of placemarks for Osm key=value pairs
*/
static GeoDataFeature::GeoDataVisualCategory osmVisualCategory(const OsmTag &tag);
static GeoDataPlacemark::GeoDataVisualCategory osmVisualCategory(const OsmTag &tag);
/**
* @brief begin and end provide an stl style iterator for the preset map
*/
static QHash<OsmTag, GeoDataFeature::GeoDataVisualCategory>::const_iterator begin();
static QHash<OsmTag, GeoDataFeature::GeoDataVisualCategory>::const_iterator end();
static QHash<OsmTag, GeoDataPlacemark::GeoDataVisualCategory>::const_iterator begin();
static QHash<OsmTag, GeoDataPlacemark::GeoDataVisualCategory>::const_iterator end();
static QStringList shopValues();
static QSet<OsmTag> buildingTags();
static GeoDataFeature::GeoDataVisualCategory determineVisualCategory(const OsmPlacemarkData &osmData);
static GeoDataPlacemark::GeoDataVisualCategory determineVisualCategory(const OsmPlacemarkData &osmData);
private:
Q_DISABLE_COPY(StyleBuilder)
......
......@@ -589,8 +589,8 @@ namespace Marble
// Select bookmarks only if nothing else is found
qSort(placemarks.begin(), placemarks.end(), [] (GeoDataPlacemark const *a, GeoDataPlacemark const *b) {
int const left = a->visualCategory() == GeoDataFeature::Bookmark ? -1 : a->visualCategory();
int const right = b->visualCategory() == GeoDataFeature::Bookmark ? -1 : b->visualCategory();
int const left = a->visualCategory() == GeoDataPlacemark::Bookmark ? -1 : a->visualCategory();
int const right = b->visualCategory() == GeoDataPlacemark::Bookmark ? -1 : b->visualCategory();
return left > right;
});
......
......@@ -49,7 +49,7 @@ void Placemark::setGeoDataPlacemark( const Marble::GeoDataPlacemark &placemark )
emit elevationChanged();
emit amenityChanged();
emit shopChanged();
if (m_placemark.visualCategory() == GeoDataFeature::TransportFuel) {
if (m_placemark.visualCategory() == GeoDataPlacemark::TransportFuel) {
emit fuelDetailsChanged();
}
}
......@@ -74,7 +74,7 @@ QString Placemark::description() const
if (m_description.isEmpty()) {
auto const category = m_placemark.visualCategory();
m_description = m_placemark.categoryName();
if (category >= GeoDataFeature::FoodBar && category <= GeoDataFeature::FoodRestaurant) {
if (category >= GeoDataPlacemark::FoodBar && category <= GeoDataPlacemark::FoodRestaurant) {
addTagValue(m_description, "brand");
addTagValue(m_description, "cuisine");
addTagDescription(m_description, "self_service", "yes", "Self Service");
......@@ -90,19 +90,19 @@ QString Placemark::description() const
addTagDescription(m_description, "smoking:outside", "yes", "Smoking (outside)");
addTagDescription(m_description, "smoking:outside", "separated", "Smoking (outside separated)");
addTagDescription(m_description, "smoking:outside", "no", "No smoking outside");
} else if (category >= GeoDataFeature::ShopBeverages && category <= GeoDataFeature::Shop) {
} else if (category >= GeoDataPlacemark::ShopBeverages && category <= GeoDataPlacemark::Shop) {
addTagValue(m_description, "operator");
} else if (category == GeoDataFeature::TransportBusStop) {
} else if (category == GeoDataPlacemark::TransportBusStop) {
addTagValue(m_description, "network");
addTagValue(m_description, "operator");
addTagValue(m_description, "ref");
} else if (category == GeoDataFeature::TransportCarShare) {
} else if (category == GeoDataPlacemark::TransportCarShare) {
addTagValue(m_description, "network");
addTagValue(m_description, "operator");
} else if (category == GeoDataFeature::TransportFuel) {
} else if (category == GeoDataPlacemark::TransportFuel) {
addTagValue(m_description, "brand");
addTagValue(m_description, "operator");
} else if (category == GeoDataFeature::NaturalTree) {
} else if (category == GeoDataPlacemark::NaturalTree) {
addTagValue(m_description, "species:en");
addTagValue(m_description, "genus:en");
addTagValue(m_description, "leaf_type");
......@@ -122,7 +122,7 @@ QString Placemark::address() const
QString Placemark::fuelDetails() const
{
if (m_fuelDetails.isEmpty() && m_placemark.visualCategory() == GeoDataFeature::TransportFuel) {
if (m_fuelDetails.isEmpty() && m_placemark.visualCategory() == GeoDataPlacemark::TransportFuel) {
addTagDescription(m_fuelDetails, "fuel:diesel", "yes", tr("Diesel"));
addTagDescription(m_fuelDetails, "fuel:octane_91", "yes", tr("Octane 91"));
addTagDescription(m_fuelDetails, "fuel:octane_95", "yes", tr("Octane 95"));
......
......@@ -66,374 +66,6 @@ class GEODATA_EXPORT GeoDataFeature : public GeoDataObject
virtual const char* nodeType() const;
EnumFeatureId featureId() const;
/**
* @brief A categorization of a placemark as defined by ...FIXME.
* There is an additional osm tag mapping to GeoDataVisualCategory
* in OsmPlacemarkData
*/
enum GeoDataVisualCategory {
None,
Default,
Unknown,
// The order of the cities needs to stay fixed as the
// algorithms rely on that.
SmallCity,
SmallCountyCapital,
SmallStateCapital,
SmallNationCapital,
MediumCity,
MediumCountyCapital,
MediumStateCapital,
MediumNationCapital,
BigCity,
BigCountyCapital,
BigStateCapital,
BigNationCapital,
LargeCity,
LargeCountyCapital,
LargeStateCapital,
LargeNationCapital,
Nation,
// Terrain
Mountain,
Volcano,
Mons, // m
Valley, // v
Continent,
Ocean,
OtherTerrain, // o
// Space Terrain
Crater, // c
Mare, // a
// Places of Interest
GeographicPole,
MagneticPole,
ShipWreck,
AirPort,
Observatory,
// Military
MilitaryDangerArea,
// Runners
OsmSite,
Coordinate,
// Planets
MannedLandingSite, // h
RoboticRover, // r
UnmannedSoftLandingSite, // u
UnmannedHardLandingSite, // i
Bookmark,
Satellite,
/*
* Start of OpenStreetMap categories
*/
PlaceCity,
PlaceCityCapital,
PlaceSuburb,
PlaceHamlet,
PlaceLocality,
PlaceTown,
PlaceTownCapital,
PlaceVillage,
PlaceVillageCapital,
NaturalWater,
NaturalReef,
NaturalWood,
NaturalBeach,
NaturalWetland,
NaturalGlacier,
NaturalIceShelf,
NaturalScrub,
NaturalCliff,
NaturalHeath,
HighwayTrafficSignals,
// OpenStreetMap highways
HighwaySteps,
HighwayUnknown,
HighwayPath,
HighwayFootway,
HighwayTrack,
HighwayPedestrian,
HighwayCycleway,
HighwayService,
HighwayRoad,
HighwayResidential,
HighwayLivingStreet,
HighwayUnclassified,
HighwayTertiaryLink,
HighwayTertiary,
HighwaySecondaryLink,
HighwaySecondary,
HighwayPrimaryLink,
HighwayPrimary,
HighwayTrunkLink,
HighwayTrunk,
HighwayMotorwayLink,
HighwayMotorway,
//OSM building
Building,
// OpenStreetMap category Accomodation
AccomodationCamping,
AccomodationHostel,
AccomodationHotel,
AccomodationMotel,
AccomodationYouthHostel,
AccomodationGuestHouse,
// OpenStreetMap category Amenity
AmenityLibrary,
AmenityKindergarten, ///< @since 0.26.0
// OpenStreetMap category Education