diff --git a/data/svg/osmc-symbols/3rdparty/COPYRIGHT b/data/svg/osmc-symbols/3rdparty/COPYRIGHT new file mode 100644 index 000000000..36403a367 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/COPYRIGHT @@ -0,0 +1,11 @@ +This file explains who has the credit for all the images in this directory. + +horse.svg: Horse by Eren ÜLÜŞ from the Noun Project +heart.svg: Heart by dilayorganci from the Noun Project +tower.svg: Castle by Les Lunettes Bleues from the Noun Project +mine.svg: Mining Tools by Rob Armes from the Noun Project +hiker.svg: Hiker by National Park Service Collection from the Noun Project +bridleway.svg: By user:Andreas 06 [Public domain], via Wikimedia Commons +ammonit.svg: Shell by Caitlin McCormick from the Noun Project +shell.svg: Shell by Ricardo Luciano from the Noun Project +shell_modern.svg: Shell by B Barrett from the Noun Project diff --git a/data/svg/osmc-symbols/3rdparty/ammonit.svg b/data/svg/osmc-symbols/3rdparty/ammonit.svg new file mode 100644 index 000000000..b4315553b --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/ammonit.svg @@ -0,0 +1,48 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/bridleway.svg b/data/svg/osmc-symbols/3rdparty/bridleway.svg new file mode 100644 index 000000000..97372e4a1 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/bridleway.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/heart.svg b/data/svg/osmc-symbols/3rdparty/heart.svg new file mode 100644 index 000000000..ad22e7852 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/heart.svg @@ -0,0 +1,34 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/hiker.svg b/data/svg/osmc-symbols/3rdparty/hiker.svg new file mode 100644 index 000000000..7840ab5df --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/hiker.svg @@ -0,0 +1,46 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/horse.svg b/data/svg/osmc-symbols/3rdparty/horse.svg new file mode 100644 index 000000000..5ed5b91cc --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/horse.svg @@ -0,0 +1,33 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/mine.svg b/data/svg/osmc-symbols/3rdparty/mine.svg new file mode 100644 index 000000000..8aa4e4c64 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/mine.svg @@ -0,0 +1,33 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/shell.svg b/data/svg/osmc-symbols/3rdparty/shell.svg new file mode 100644 index 000000000..9a334ca81 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/shell.svg @@ -0,0 +1,51 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/shell_modern.svg b/data/svg/osmc-symbols/3rdparty/shell_modern.svg new file mode 100644 index 000000000..7f69332bd --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/shell_modern.svg @@ -0,0 +1,107 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/svg/osmc-symbols/3rdparty/tower.svg b/data/svg/osmc-symbols/3rdparty/tower.svg new file mode 100644 index 000000000..af6303746 --- /dev/null +++ b/data/svg/osmc-symbols/3rdparty/tower.svg @@ -0,0 +1,33 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/L.svg b/data/svg/osmc-symbols/L.svg new file mode 100644 index 000000000..a238f9b3a --- /dev/null +++ b/data/svg/osmc-symbols/L.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/arch.svg b/data/svg/osmc-symbols/arch.svg new file mode 100644 index 000000000..17d0cb0e3 --- /dev/null +++ b/data/svg/osmc-symbols/arch.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/backslash.svg b/data/svg/osmc-symbols/backslash.svg new file mode 100644 index 000000000..8073c3d56 --- /dev/null +++ b/data/svg/osmc-symbols/backslash.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/bar.svg b/data/svg/osmc-symbols/bar.svg new file mode 100644 index 000000000..316c17272 --- /dev/null +++ b/data/svg/osmc-symbols/bar.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/bowl.svg b/data/svg/osmc-symbols/bowl.svg new file mode 100644 index 000000000..a43b069d4 --- /dev/null +++ b/data/svg/osmc-symbols/bowl.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/circle.svg b/data/svg/osmc-symbols/circle.svg new file mode 100644 index 000000000..c8ecc4152 --- /dev/null +++ b/data/svg/osmc-symbols/circle.svg @@ -0,0 +1,14 @@ + + + + + + + image/svg+xml + + + + + + + diff --git a/data/svg/osmc-symbols/corner.svg b/data/svg/osmc-symbols/corner.svg new file mode 100644 index 000000000..f33e459db --- /dev/null +++ b/data/svg/osmc-symbols/corner.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/cross.svg b/data/svg/osmc-symbols/cross.svg new file mode 100644 index 000000000..7518fef0b --- /dev/null +++ b/data/svg/osmc-symbols/cross.svg @@ -0,0 +1,14 @@ + + + + + + + image/svg+xml + + + + + + + diff --git a/data/svg/osmc-symbols/diamond.svg b/data/svg/osmc-symbols/diamond.svg new file mode 100644 index 000000000..5a5bf7928 --- /dev/null +++ b/data/svg/osmc-symbols/diamond.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/dot.svg b/data/svg/osmc-symbols/dot.svg new file mode 100644 index 000000000..3ee7fae46 --- /dev/null +++ b/data/svg/osmc-symbols/dot.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/drop_line.svg b/data/svg/osmc-symbols/drop_line.svg new file mode 100644 index 000000000..bf60856f5 --- /dev/null +++ b/data/svg/osmc-symbols/drop_line.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/fork.svg b/data/svg/osmc-symbols/fork.svg new file mode 100644 index 000000000..03fb6fa02 --- /dev/null +++ b/data/svg/osmc-symbols/fork.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/lower.svg b/data/svg/osmc-symbols/lower.svg new file mode 100644 index 000000000..474d5e62f --- /dev/null +++ b/data/svg/osmc-symbols/lower.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/pointer.svg b/data/svg/osmc-symbols/pointer.svg new file mode 100644 index 000000000..75c33aea8 --- /dev/null +++ b/data/svg/osmc-symbols/pointer.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/rectangle.svg b/data/svg/osmc-symbols/rectangle.svg new file mode 100644 index 000000000..b9ba7ed7e --- /dev/null +++ b/data/svg/osmc-symbols/rectangle.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/rectangle_line.svg b/data/svg/osmc-symbols/rectangle_line.svg new file mode 100644 index 000000000..4e199a33b --- /dev/null +++ b/data/svg/osmc-symbols/rectangle_line.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/slash.svg b/data/svg/osmc-symbols/slash.svg new file mode 100644 index 000000000..390a94af5 --- /dev/null +++ b/data/svg/osmc-symbols/slash.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/stripe.svg b/data/svg/osmc-symbols/stripe.svg new file mode 100644 index 000000000..0bc638417 --- /dev/null +++ b/data/svg/osmc-symbols/stripe.svg @@ -0,0 +1,35 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/triangle.svg b/data/svg/osmc-symbols/triangle.svg new file mode 100644 index 000000000..ea6ee2ff4 --- /dev/null +++ b/data/svg/osmc-symbols/triangle.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/triangle_line.svg b/data/svg/osmc-symbols/triangle_line.svg new file mode 100644 index 000000000..0fd181f3d --- /dev/null +++ b/data/svg/osmc-symbols/triangle_line.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/triangle_turned.svg b/data/svg/osmc-symbols/triangle_turned.svg new file mode 100644 index 000000000..7a5022c43 --- /dev/null +++ b/data/svg/osmc-symbols/triangle_turned.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/turned_T.svg b/data/svg/osmc-symbols/turned_T.svg new file mode 100644 index 000000000..2bb9a3f9e --- /dev/null +++ b/data/svg/osmc-symbols/turned_T.svg @@ -0,0 +1,16 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/wolfshook.svg b/data/svg/osmc-symbols/wolfshook.svg new file mode 100644 index 000000000..386c30cb0 --- /dev/null +++ b/data/svg/osmc-symbols/wolfshook.svg @@ -0,0 +1,15 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/data/svg/osmc-symbols/x.svg b/data/svg/osmc-symbols/x.svg new file mode 100644 index 000000000..c3589ecc1 --- /dev/null +++ b/data/svg/osmc-symbols/x.svg @@ -0,0 +1,19 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/lib/marble/CMakeLists.txt b/src/lib/marble/CMakeLists.txt index d56ca5a5d..a2eb5869b 100644 --- a/src/lib/marble/CMakeLists.txt +++ b/src/lib/marble/CMakeLists.txt @@ -1,742 +1,746 @@ PROJECT(marblewidget) macro_optional_find_package(Phonon4Qt5 QUIET) marble_set_package_properties( Phonon4Qt5 PROPERTIES DESCRIPTION "Qt-based audio library" URL "https://phonon.kde.org/" PURPOSE "Support for playback of soundcue elements" TYPE OPTIONAL ) if(Phonon4Qt5_FOUND) set(HAVE_PHONON TRUE) endif() CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config-phonon.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-phonon.h) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/projections ${CMAKE_CURRENT_SOURCE_DIR}/routing ${CMAKE_CURRENT_SOURCE_DIR}/geodata ${CMAKE_CURRENT_SOURCE_DIR}/geodata/data ${CMAKE_CURRENT_SOURCE_DIR}/geodata/graphicsitem ${CMAKE_CURRENT_SOURCE_DIR}/geodata/scene ${CMAKE_CURRENT_SOURCE_DIR}/geodata/handlers ${CMAKE_CURRENT_SOURCE_DIR}/geodata/handlers/kml ${CMAKE_CURRENT_SOURCE_DIR}/geodata/handlers/dgml ${CMAKE_CURRENT_SOURCE_DIR}/geodata/parser ${CMAKE_CURRENT_SOURCE_DIR}/graphicsview ${CMAKE_CURRENT_SOURCE_DIR}/layers ${CMAKE_CURRENT_SOURCE_DIR}/osm ${CMAKE_CURRENT_SOURCE_DIR}/cloudsync ${CMAKE_SOURCE_DIR}/src/lib/astro ${ZLIB_INCLUDE_DIRS} ) INCLUDE(geodata/CMakeLists.txt) INCLUDE(graphicsview/CMakeLists.txt) INCLUDE(layers/CMakeLists.txt) INCLUDE(osm/CMakeLists.txt) set(MARBLE_LIB_VERSION_MAJOR "0") set(MARBLE_LIB_VERSION_MINOR "26") set(MARBLE_LIB_VERSION_PATCH "20") set(MARBLE_LIB_VERSION "${MARBLE_LIB_VERSION_MAJOR}.${MARBLE_LIB_VERSION_MINOR}.${MARBLE_LIB_VERSION_PATCH}") set(MARBLE_ABI_VERSION "27") ########### next target ############### if(MARBLE_NO_WEBKITWIDGETS) add_definitions(-DMARBLE_NO_WEBKITWIDGETS) endif() set(marblewidget_SRCS ${geodata_SRCS} ${graphicsview_SRCS} ${layers_SRCS} ${osm_SRCS} blendings/Blending.cpp blendings/BlendingAlgorithms.cpp blendings/BlendingFactory.cpp blendings/SunLightBlending.cpp DownloadRegion.cpp DownloadRegionDialog.cpp LatLonBoxWidget.cpp MarbleWidget.cpp MarbleAbstractPresenter.cpp MarbleModel.cpp MarbleMap.cpp MarbleColors.cpp MapViewWidget.cpp CelestialSortFilterProxyModel.cpp FileViewWidget.cpp TourWidget.cpp FlyToEditWidget.cpp TourControlEditWidget.cpp WaitEditWidget.cpp SoundCueEditWidget.cpp RemoveItemEditWidget.cpp TourItemDelegate.cpp MapViewItemDelegate.cpp TourPlayback.cpp LegendWidget.cpp PlaybackItem.cpp PlaybackAnimatedUpdateItem.cpp PlaybackFlyToItem.cpp PlaybackSoundCueItem.cpp PlaybackTourControlItem.cpp PlaybackWaitItem.cpp SerialTrack.cpp SoundTrack.cpp AnimatedUpdateTrack.cpp CurrentLocationWidget.cpp MarbleNavigator.cpp MarbleLegendBrowser.cpp MarbleAboutDialog.cpp MarbleInputHandler.cpp MarbleWidgetInputHandler.cpp MarbleWidgetPopupMenu.cpp MarblePlacemarkModel.cpp GeoDataTreeModel.cpp GeoUriParser.cpp kdescendantsproxymodel.cpp BranchFilterProxyModel.cpp TreeViewDecoratorModel.cpp MarbleDebug.cpp Tile.cpp TextureTile.cpp TileCoordsPyramid.cpp TileLevelRangeWidget.cpp TileLoader.cpp QtMarbleConfigDialog.cpp ClipPainter.cpp DownloadPolicy.cpp DownloadQueueSet.cpp GeoPainter.cpp HttpDownloadManager.cpp HttpJob.cpp RemoteIconLoader.cpp LayerManager.cpp PluginManager.cpp TimeControlWidget.cpp AbstractFloatItem.cpp PopupItem.cpp MarbleGlobal.cpp MarbleDirs.cpp MarbleLocale.cpp MarblePhysics.cpp TileCreatorDialog.cpp MapThemeManager.cpp ViewportParams.cpp ViewParams.cpp projections/AbstractProjection.cpp projections/CylindricalProjection.cpp projections/AzimuthalProjection.cpp projections/SphericalProjection.cpp projections/EquirectProjection.cpp projections/MercatorProjection.cpp projections/GnomonicProjection.cpp projections/StereographicProjection.cpp projections/LambertAzimuthalProjection.cpp projections/AzimuthalEquidistantProjection.cpp projections/VerticalPerspectiveProjection.cpp VisiblePlacemark.cpp PlacemarkLayout.cpp Planet.cpp PlanetFactory.cpp Quaternion.cpp TextureColorizer.cpp TextureMapperInterface.cpp ScanlineTextureMapperContext.cpp SphericalScanlineTextureMapper.cpp EquirectScanlineTextureMapper.cpp MercatorScanlineTextureMapper.cpp TileScalingTextureMapper.cpp GenericScanlineTextureMapper.cpp VectorTileModel.cpp DiscCache.cpp ServerLayout.cpp StoragePolicy.cpp CacheStoragePolicy.cpp FileStoragePolicy.cpp FileStorageWatcher.cpp StackedTile.cpp TileId.cpp StackedTileLoader.cpp TileLoaderHelper.cpp TileCreator.cpp #jsonparser.cpp FileLoader.cpp FileManager.cpp PositionTracking.cpp DataMigration.cpp ImageF.cpp MovieCapture.cpp MovieCaptureDialog.cpp TourCaptureDialog.cpp EditPlacemarkDialog.cpp AddLinkDialog.cpp FormattedTextWidget.cpp AbstractDataPlugin.cpp AbstractDataPluginModel.cpp AbstractDataPluginItem.cpp AbstractWorkerThread.cpp PluginInterface.cpp DialogConfigurationInterface.cpp LayerInterface.cpp RenderState.cpp RenderPlugin.cpp RenderPluginInterface.cpp PositionProviderPlugin.cpp PositionProviderPluginInterface.cpp PlacemarkPositionProviderPlugin.cpp RouteSimulationPositionProviderPlugin.cpp MarblePluginSettingsWidget.cpp RenderPluginModel.cpp PluginAboutDialog.cpp PluginItemDelegate.cpp SunLocator.cpp MarbleClock.cpp SunControlWidget.cpp MergedLayerDecorator.cpp MathHelper.cpp LatLonEdit.cpp PlacemarkEditHeader.cpp MapThemeSortFilterProxyModel.cpp TemplateDocument.cpp routing/AlternativeRoutesModel.cpp routing/Maneuver.cpp routing/Route.cpp routing/RouteRequest.cpp routing/RouteSegment.cpp routing/RoutingModel.cpp routing/RoutingProfile.cpp routing/RoutingManager.cpp routing/RoutingLayer.cpp routing/RoutingInputWidget.cpp routing/RoutingWidget.cpp routing/RoutingProfilesWidget.cpp routing/RoutingProfilesModel.cpp routing/RoutingProfileSettingsDialog.cpp routing/SpeakersModel.cpp routing/VoiceNavigationModel.cpp routing/instructions/InstructionTransformation.cpp routing/instructions/RoutingInstruction.cpp routing/instructions/RoutingPoint.cpp routing/instructions/RoutingWaypoint.cpp routing/instructions/WaypointParser.cpp ParsingRunnerManager.cpp ReverseGeocodingRunnerManager.cpp RoutingRunnerManager.cpp SearchRunnerManager.cpp AutoNavigation.cpp SearchRunnerPlugin.cpp ReverseGeocodingRunnerPlugin.cpp RoutingRunnerPlugin.cpp ParseRunnerPlugin.cpp SearchRunner.cpp ReverseGeocodingRunner.cpp RoutingRunner.cpp ParsingRunner.cpp RunnerTask.cpp BookmarkManager.cpp EditBookmarkDialog.cpp BookmarkManagerDialog.cpp NewBookmarkFolderDialog.cpp PrintOptionsWidget.cpp ExternalEditorDialog.cpp GoToDialog.cpp MapWizard.cpp MapThemeDownloadDialog.cpp GeoGraphicsScene.cpp ElevationModel.cpp MarbleLineEdit.cpp SearchInputWidget.cpp SearchWidget.cpp kineticmodel.cpp NewstuffModel.cpp MarbleZip.cpp + OsmcSymbol.cpp + StyleBuilder.cpp BatchedPlacemarkRenderer.cpp cloudsync/CloudSyncManager.cpp cloudsync/RouteSyncManager.cpp cloudsync/OwncloudSyncBackend.cpp cloudsync/CloudRouteModel.cpp cloudsync/CloudRoutesDialog.cpp cloudsync/RouteItem.cpp cloudsync/RouteItemDelegate.cpp cloudsync/BookmarkSyncManager.cpp cloudsync/MergeItem.cpp cloudsync/ConflictDialog.cpp ) if (MARBLE_NO_WEBKITWIDGETS) LIST(APPEND marblewidget_SRCS NullMarbleWebView.cpp NullTinyWebBrowser.cpp ) else() LIST(APPEND marblewidget_SRCS MarbleWebView.cpp TinyWebBrowser.cpp ) endif() if (NOT MARBLE_NO_DBUS) LIST(APPEND marblewidget_SRCS MarbleDBusInterface.cpp ) endif() set (marblewidget_UI ${osm_UIS} LatLonBoxWidget.ui MapViewWidget.ui CurrentLocationWidget.ui FileViewWidget.ui TourWidget.ui MarbleNavigator.ui MarbleCacheSettingsWidget.ui MarbleViewSettingsWidget.ui MarbleNavigationSettingsWidget.ui TimeControlWidget.ui MarbleTimeSettingsWidget.ui MarblePluginSettingsWidget.ui TileCreatorDialog.ui TileLevelRangeWidget.ui MarbleAboutDialog.ui SunControlWidget.ui LatLonEdit.ui PlacemarkEditHeader.ui routing/RoutingWidget.ui DataMigrationWidget.ui EditBookmarkDialog.ui BookmarkManagerDialog.ui NewBookmarkFolderDialog.ui PrintOptions.ui ExternalEditor.ui GoToDialog.ui routing/RoutingSettingsWidget.ui routing/RoutingProfileSettingsDialog.ui MapWizard.ui MapThemeDownloadDialog.ui cloudsync/CloudRoutesDialog.ui MarbleCloudSyncSettingsWidget.ui MovieCaptureDialog.ui TourCaptureDialog.ui EditPlacemarkDialog.ui AddLinkDialog.ui FormattedTextWidget.ui ElevationWidget.ui ) if (MARBLE_NO_WEBKITWIDGETS) LIST(APPEND marblewidget_UI NullLegendWidget.ui NullWebPopupWidget.ui ) else() LIST(APPEND marblewidget_UI LegendWidget.ui WebPopupWidget.ui ) endif() # FIXME: cleaner approach of src/lib/marblwidget/MarbleControlBox.* vs. marble.qrc qt_add_resources(marblewidget_SRCS libmarble.qrc ../../apps/marble-ui/marble.qrc) qt_wrap_ui(marblewidget_SRCS ${marblewidget_UI}) add_library(marblewidget SHARED ${marblewidget_SRCS} ${SOURCES_UI_HDRS}) generate_export_header(marblewidget BASE_NAME marble) # TODO: use PUBLIC/PRIVATE everywhere instead of LINK_PUBLIC/LINK_PRIVATE # once SailfishOS has cmake >= 2.8.12 # link with libastro target_link_libraries(marblewidget LINK_PRIVATE astro) # link against zlib target_link_libraries(marblewidget LINK_PRIVATE ${ZLIB_LIBRARIES}) # link with release version of Qt libs target_link_libraries(marblewidget LINK_PUBLIC Qt5::Xml Qt5::Gui Qt5::Widgets Qt5::Network LINK_PRIVATE Qt5::Svg Qt5::PrintSupport Qt5::Concurrent ) if (NOT MARBLE_NO_WEBKITWIDGETS) target_link_libraries(marblewidget LINK_PUBLIC Qt5::WebKitWidgets ) endif () if (NOT MARBLE_NO_DBUS) target_link_libraries(marblewidget LINK_PRIVATE Qt5::DBus ) endif () if (Phonon4Qt5_FOUND) target_link_libraries(marblewidget LINK_PRIVATE Phonon::phonon4qt5 ) endif() if (APPLE) # TODO: PUBLIC or can be PRIVATE? #defined in top level makefile target_link_libraries(marblewidget LINK_PUBLIC ${MAC_EXTRA_LIBS} ) endif (APPLE) # TODO: still supported? if (CMAKE_SYSTEM_NAME MATCHES "SunOS") target_link_libraries(marblewidget LINK_PUBLIC m) endif (CMAKE_SYSTEM_NAME MATCHES "SunOS") if(WIN32) # TODO: PUBLIC or can be PRIVATE? target_link_libraries(marblewidget LINK_PUBLIC ws2_32 imm32 winmm) endif(WIN32) set_target_properties(marblewidget PROPERTIES EXPORT_NAME "Marble" OUTPUT_NAME marblewidget-qt5 VERSION ${MARBLE_LIB_VERSION} SOVERSION ${MARBLE_ABI_VERSION} COMPILE_FLAGS "-DKML_LAZY_IMP" ) target_include_directories(marblewidget INTERFACE "$" ) # choose the correct target install library path if(WIN32) install(TARGETS marblewidget RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} ARCHIVE DESTINATION lib) elseif(APPLE) install(TARGETS marblewidget LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/lib) else() install(TARGETS marblewidget EXPORT MarbleTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() ########### install headers & cmake config files ############### if (WIN32 OR APPLE) # TODO: find how to install & deploy library, headers and config files as bundle for development return() endif() if (MARBLE_NO_WEBKITWIDGETS) set(marble_WebKit NullMarbleWebView.h NullTinyWebBrowser.h ) else() set(marble_WebKit MarbleWebView.h TinyWebBrowser.h ) endif() install( FILES ${CMAKE_CURRENT_BINARY_DIR}/marble_export.h ${graphicsview_HDRS} ${marble_WebKit} AutoNavigation.h BookmarkManager.h DownloadRegion.h DownloadRegionDialog.h LatLonBoxWidget.h MarbleWidget.h MarbleMap.h MarbleModel.h MapViewWidget.h CelestialSortFilterProxyModel.h LegendWidget.h FileViewWidget.h TourWidget.h FlyToEditWidget.h TourControlEditWidget.h WaitEditWidget.h SoundCueEditWidget.h RemoveItemEditWidget.h TourItemDelegate.h MapViewItemDelegate.h TourPlayback.h CurrentLocationWidget.h MarbleNavigator.h AbstractFloatItem.h MapThemeManager.h MarbleAboutDialog.h MarbleInputHandler.h MarbleWidgetInputHandler.h MarbleWidgetPopupMenu.h TileId.h TileCoordsPyramid.h TileLevelRangeWidget.h QtMarbleConfigDialog.h MarbleMath.h MarbleColors.h MarbleGlobal.h MarbleLocale.h MarbleDebug.h MarbleDirs.h GeoPainter.h HttpDownloadManager.h TileCreatorDialog.h ViewportParams.h projections/AbstractProjection.h PositionTracking.h Quaternion.h SunLocator.h ClipPainter.h GeoGraphicsScene.h GeoDataTreeModel.h geodata/data/GeoDataAbstractView.h geodata/data/GeoDataAccuracy.h geodata/data/GeoDataBalloonStyle.h geodata/data/GeoDataColorStyle.h geodata/data/GeoDataContainer.h geodata/data/GeoDataCoordinates.h geodata/data/GeoDataDocument.h geodata/data/GeoDataFeature.h geodata/data/GeoDataFolder.h geodata/data/GeoDataGeometry.h geodata/data/GeoDataGroundOverlay.h geodata/data/GeoDataHotSpot.h geodata/data/GeoDataIconStyle.h geodata/data/GeoDataItemIcon.h geodata/data/GeoDataLabelStyle.h geodata/data/GeoDataLatLonAltBox.h geodata/data/GeoDataLatLonBox.h geodata/data/GeoDataLatLonQuad.h geodata/data/GeoDataLinearRing.h geodata/data/GeoDataLineString.h geodata/data/GeoDataLineStyle.h geodata/data/GeoDataListStyle.h geodata/data/GeoDataLod.h geodata/data/GeoDataLookAt.h geodata/data/GeoDataOverlay.h geodata/data/GeoDataMultiGeometry.h geodata/data/GeoDataObject.h geodata/data/GeoDataPlacemark.h geodata/data/GeoDataPoint.h geodata/data/GeoDataPolygon.h geodata/data/GeoDataPolyStyle.h geodata/data/GeoDataRegion.h geodata/data/GeoDataSnippet.h geodata/data/GeoDataStyle.h geodata/data/GeoDataStyleMap.h geodata/data/GeoDataStyleSelector.h geodata/data/GeoDataTrack.h geodata/data/GeoDataTimeSpan.h geodata/data/GeoDataTimeStamp.h geodata/data/GeoDataTimePrimitive.h geodata/data/Serializable.h geodata/geodata_export.h geodata/parser/GeoDocument.h geodata/parser/GeoDataTypes.h geodata/writer/GeoWriter.h routing/RoutingWidget.h routing/RoutingManager.h TileCreator.h PluginManager.h PluginInterface.h DialogConfigurationInterface.h PositionProviderPlugin.h PositionProviderPluginInterface.h RenderPlugin.h RenderPluginInterface.h ParsingRunnerManager.h ReverseGeocodingRunnerManager.h RoutingRunnerManager.h SearchRunnerManager.h ParsingRunner.h SearchRunner.h ReverseGeocodingRunner.h RoutingRunner.h SearchRunnerPlugin.h ReverseGeocodingRunnerPlugin.h RoutingRunnerPlugin.h ParseRunnerPlugin.h LayerInterface.h RenderState.h PluginAboutDialog.h Planet.h PlanetFactory.h EditPlacemarkDialog.h AddLinkDialog.h FormattedTextWidget.h AbstractDataPlugin.h AbstractDataPluginModel.h AbstractDataPluginItem.h AbstractWorkerThread.h LatLonEdit.h PlacemarkEditHeader.h MapWizard.h MapThemeDownloadDialog.h ElevationModel.h routing/AlternativeRoutesModel.h routing/Route.h routing/Maneuver.h routing/RouteRequest.h routing/RouteSegment.h routing/RoutingManager.h routing/RoutingModel.h routing/RoutingProfile.h + OsmcSymbol.h + BatchedPlacemarkRenderer.h DESTINATION ${INCLUDE_INSTALL_DIR}/marble ) ########### CMake Config files ############### include(CMakePackageConfigHelpers) set(MARBLE_CMAKECONFIGNAME Marble) set(MARBLE_INSTALL_CMAKECONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${MARBLE_CMAKECONFIGNAME}) configure_package_config_file(MarbleConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${MARBLE_CMAKECONFIGNAME}Config.cmake INSTALL_DESTINATION ${MARBLE_INSTALL_CMAKECONFIGDIR} ) write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${MARBLE_CMAKECONFIGNAME}ConfigVersion.cmake VERSION ${MARBLE_LIB_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${MARBLE_CMAKECONFIGNAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${MARBLE_CMAKECONFIGNAME}ConfigVersion.cmake DESTINATION ${MARBLE_INSTALL_CMAKECONFIGDIR} ) install( EXPORT MarbleTargets FILE ${MARBLE_CMAKECONFIGNAME}Targets.cmake DESTINATION ${MARBLE_INSTALL_CMAKECONFIGDIR} ) ########### Qt Pri file ############### # Where the pri file is installed is defined by the following rules, with decreasing priority: # * MARBLE_PRI_INSTALL_USE_QT_SYS_PATHS=TRUE: # pri file will be installed with the dirs of the Qt installation used # * MARBLE_PRI_INSTALL_DIR=some-relative-or-absolute-path # if set will be used as given # * installation prefix = Qt installation prefix: # pri file will be installed with the dirs of the Qt installation used # * otherwise: # pri file will be installed in mkspecs/modules in the installation prefix get_target_property(PRI_LIB_NAME marblewidget OUTPUT_NAME) set(PRI_ABS_INCLUDE_INSTALL_DIR "${INCLUDE_INSTALL_DIR}") if(NOT IS_ABSOLUTE "${PRI_ABS_INCLUDE_INSTALL_DIR}") set(PRI_ABS_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${PRI_ABS_INCLUDE_INSTALL_DIR}") endif() set(PRI_ABS_LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") if(NOT IS_ABSOLUTE "${PRI_ABS_LIB_INSTALL_DIR}") set(PRI_ABS_LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${PRI_ABS_LIB_INSTALL_DIR}") endif() set(PRI_DEPS "xml gui widgets network") if (NOT MARBLE_NO_WEBKITWIDGETS) set(PRI_DEPS "${PRI_DEPS} webkitwidgets") endif() file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qt_Marble.pri CONTENT "QT.Marble.VERSION = ${MARBLE_LIB_VERSION} QT.Marble.MAJOR_VERSION = ${MARBLE_LIB_VERSION_MAJOR} QT.Marble.MINOR_VERSION = ${MARBLE_LIB_VERSION_MINOR} QT.Marble.PATCH_VERSION = ${MARBLE_LIB_VERSION_PATCH} QT.Marble.name = ${PRI_LIB_NAME} QT.Marble.defines = QT.Marble.includes = ${PRI_ABS_INCLUDE_INSTALL_DIR} QT.Marble.private_includes = QT.Marble.libs = ${PRI_ABS_LIB_INSTALL_DIR} QT.Marble.depends = ${PRI_DEPS} " ) # detect which folder the pri file should be installed into get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION) function(query_qmake result_variable qt_variable) execute_process( COMMAND ${QMAKE_EXECUTABLE} -query "${qt_variable}" RESULT_VARIABLE return_code OUTPUT_VARIABLE output ) if(return_code EQUAL 0) string(STRIP "${output}" output) file(TO_CMAKE_PATH "${output}" output_path) set(${result_variable} "${output_path}" PARENT_SCOPE) else() message(WARNING "Failed call: ${QMAKE_EXECUTABLE} -query \"${qt_variable}\"") message(FATAL_ERROR "QMake call failed: ${return_code}") endif() endfunction() # if going to be installed into same prefix as Qt, then also use same folder set(IS_SHARED_INSTALL_PREFIX FALSE) if(NOT DEFINED MARBLE_PRI_INSTALL_USE_QT_SYS_PATHS) query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX) if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") set(IS_SHARED_INSTALL_PREFIX TRUE) endif() endif() if(MARBLE_PRI_INSTALL_USE_QT_SYS_PATHS OR IS_SHARED_INSTALL_PREFIX) query_qmake(qt_host_data_dir QT_HOST_DATA) set(PRI_INSTALL_DIR ${qt_host_data_dir}/mkspecs/modules) else() set(PRI_INSTALL_DIR mkspecs/modules) endif() set(MARBLE_PRI_INSTALL_DIR "${PRI_INSTALL_DIR}" CACHE PATH "The directory where the Marble pri file will be installed to.") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_Marble.pri DESTINATION ${MARBLE_PRI_INSTALL_DIR} ) diff --git a/src/lib/marble/OsmcSymbol.cpp b/src/lib/marble/OsmcSymbol.cpp new file mode 100644 index 000000000..cb9d01925 --- /dev/null +++ b/src/lib/marble/OsmcSymbol.cpp @@ -0,0 +1,243 @@ +// +// This file is part of the Marble Virtual Globe. +// +// This program is free software licensed under the GNU LGPL. You can +// find a copy of this license in LICENSE.txt in the top directory of +// the source code. +// +// Copyright 2017 Sergey Popov +// + +#include +#include +#include +#include + +#include "OsmcSymbol.h" + +OsmcSymbol::OsmcSymbol(const QString &tag, const int side) + : m_wayColor(Qt::white) + , m_backgroundColor(Qt::black) + , m_foreground(nullptr) + , m_foreground2(nullptr) + , m_textColor(Qt::black) + , m_side(side) +{ + m_backgroundTypes + << "round" << "circle" << "frame"; + + m_foregroundTypes + << "dot" << "bowl" << "circle" << "bar" + << "stripe" << "cross" << "x" << "slash" + << "backslash" << "rectangle" << "rectangle_line" + << "triangle" << "triangle_turned" << "triangle_line" + << "diamond" << "pointer" << "fork" << "arch" + << "turned_T" << "L" << "lower" << "corner" + << "drop_line" << "horse" << "hiker"; + + m_precoloredForegroundTypes + << "wolfshook" << "shell" << "shell_modern" << "ammonit" + << "mine" << "hiker" << "heart" << "tower" << "bridleway"; + + if (parseTag(tag)) + render(); +} + +OsmcSymbol::~OsmcSymbol() +{ + if (m_foreground) + delete m_foreground; + if (m_foreground2) + delete m_foreground2; +} + +bool OsmcSymbol::parseTag(const QString &tag) +{ + QStringList parts = tag.split(":"); + + if (parts.size() < 2) { + return false; + } + + if (m_foreground) { delete m_foreground; m_foreground = nullptr; } + if (m_foreground2) { delete m_foreground2; m_foreground2 = nullptr; } + + // Determine way color + if (QColor::isValidColor(parts.at(0))) + m_wayColor.setNamedColor(parts.at(0)); + else + return false; + + if (!parseBackground(parts.at(1))) + return false; + + qDebug() << tag; + + if (parts.size() == 3) { + m_foreground = parseForeground(parts.at(2)); + } else if (parts.size() == 4) { + if (QColor::isValidColor(parts.at(3))) { + m_text = parts.at(2); + m_textColor = parts.at(3); + } else { + m_foreground = parseForeground(parts.at(2)); + m_foreground2 = parseForeground(parts.at(3)); + } + } else if (parts.size() == 5) { + m_foreground = parseForeground(parts.at(2)); + if (QColor::isValidColor(parts.at(4))) { + m_text = parts.at(3); + m_textColor = parts.at(4); + } else + return false; + } else if (parts.size() == 6) { + m_foreground = parseForeground(parts.at(2)); + m_foreground2 = parseForeground(parts.at(3)); + if (QColor::isValidColor(parts.at(5))) { + m_text = parts.at(4); + m_textColor.setNamedColor(parts.at(5)); + } else + return false; + } else + return false; + + return true; +} + +bool OsmcSymbol::parseBackground(const QString &bg) +{ + QString color = bg.section("_", 0, 0); + QString type = bg.section("_", 1, -1); + + if (!QColor::isValidColor(color)) + return false; + + // Plain color was provided + if (type.isEmpty()) { + m_backgroundColor.setNamedColor(color); + m_backgroundType = type; + } else if (m_backgroundTypes.contains(type)) { + m_backgroundColor.setNamedColor(color); + m_backgroundType = type; + } else + return false; + + return true; +} + +void setXMLAttribute(QDomElement &elem, QString tag, QString attr, QString attrValue); + +QSvgRenderer* OsmcSymbol::parseForeground(const QString &fg) +{ + if (m_precoloredForegroundTypes.contains(fg)) { + return new QSvgRenderer(QString(":/osmc-symbols/%1.svg").arg(fg)); + } + + QString color = fg.section("_", 0, 0); + QString type = fg.section("_", 1, -1); + if (QColor::isValidColor(color) && m_foregroundTypes.contains(type)) { + // Open svg resource and load contents to QByteArray + QFile file(QString(":/osmc-symbols/%1.svg").arg(type)); + file.open(QIODevice::ReadOnly); + QByteArray baData = file.readAll(); + + // Load svg contents to xml document + QDomDocument doc; + doc.setContent(baData); + + // Recurively change color + QDomElement rootElement = doc.documentElement(); + setXMLAttribute(rootElement, "path", "fill", color); + + // Create and return svg renderer with edited contents + return new QSvgRenderer(doc.toByteArray()); + } + + return nullptr; +} + +void OsmcSymbol::render() +{ + m_image = QImage(m_side, m_side, QImage::Format_ARGB32); + m_image.fill(Qt::transparent); + + QPainter painter(&m_image); + painter.setRenderHint(QPainter::Antialiasing); + + // Default size of background + int w = m_side, h = m_side; + + // If there is some text, our background size must be recalculated + if (m_text != QString()) { + QFont font = painter.font(); + font.setPixelSize(m_side * 0.8); + font.setBold(true); + painter.setFont(font); + QFontMetrics fm = QFontMetrics(font); + + w = fm.width(m_text); + h = fm.height(); + w = w > h ? w : h; + } + + const QRect bgRect = QRect((m_side - w)/2, (m_side - h)/2, w, h); + + // Draw symbol's background + if (m_backgroundType.isEmpty()) { + painter.fillRect(bgRect, m_backgroundColor); + } else if (m_backgroundType == "round") { + painter.setBrush(m_backgroundColor); + painter.setPen(m_backgroundColor); + painter.drawEllipse(bgRect); + } else if (m_backgroundType == "circle") { + painter.setBrush(Qt::white); + painter.setPen(QPen(m_backgroundColor, m_side/10)); + painter.drawEllipse(bgRect); + } else if (m_backgroundType == "frame") { + painter.setPen(QPen(m_backgroundColor, m_side/10)); + painter.fillRect(bgRect, Qt::white); + painter.drawRect(bgRect); + } + + QPixmap foregrounds(bgRect.size()); + foregrounds.fill(Qt::transparent); + QPainter fgPainter(&foregrounds); + m_foreground ? m_foreground->render(&fgPainter) : void(); + m_foreground2 ? m_foreground2->render(&fgPainter) : void(); + painter.drawPixmap(bgRect, foregrounds); + + if (m_text != QString()) { + // Draw text with provided color + painter.setPen(m_textColor); + painter.drawText(bgRect, Qt::AlignCenter, m_text); + } + + painter.end(); +} + +QImage OsmcSymbol::icon() +{ + return m_image; +} + +QColor OsmcSymbol::wayColor() +{ + return m_wayColor; +} + +void setXMLAttribute(QDomElement &elem, QString tag, QString attr, QString attrValue) +{ + // If elem's tag is equal to the provided one then overwrite desired attribute + if (elem.tagName() == tag) + elem.setAttribute(attr, attrValue); + + // Do the same for all the child nodes + for (int i = 0; i < elem.childNodes().count(); i++) + { + if (!elem.childNodes().at(i).isElement()) + continue; + + QDomElement child = elem.childNodes().at(i).toElement(); + setXMLAttribute(child, tag, attr, attrValue); + } +} diff --git a/src/lib/marble/OsmcSymbol.h b/src/lib/marble/OsmcSymbol.h new file mode 100644 index 000000000..a3203be33 --- /dev/null +++ b/src/lib/marble/OsmcSymbol.h @@ -0,0 +1,53 @@ +// +// This file is part of the Marble Virtual Globe. +// +// This program is free software licensed under the GNU LGPL. You can +// find a copy of this license in LICENSE.txt in the top directory of +// the source code. +// +// Copyright 2017 Sergey Popov +// + +#ifndef OSMCSYMBOL_H +#define OSMCSYMBOL_H + +#include +#include +#include +#include + +class OsmcSymbol +{ +public: + OsmcSymbol(const QString &tag, const int side = 20); + ~OsmcSymbol(); + + QImage icon(); + QColor wayColor(); + +private: + bool parseTag(const QString &tag); + bool parseBackground(const QString &bg); + QSvgRenderer* parseForeground(const QString &fg); + + void render(); + + QColor m_wayColor; + QColor m_backgroundColor; + QString m_backgroundType; + QSvgRenderer *m_foreground; + QSvgRenderer *m_foreground2; + QString m_text; + QColor m_textColor; + + QImage m_image; + + QStringList m_backgroundTypes; + QStringList m_foregroundTypes; + QStringList m_precoloredForegroundTypes; + + int m_side; + int m_wayWidth; +}; + +#endif // OSMCSYMBOL_H diff --git a/src/lib/marble/StyleBuilder.cpp b/src/lib/marble/StyleBuilder.cpp index eb5a4b2de..fd2b99c8d 100644 --- a/src/lib/marble/StyleBuilder.cpp +++ b/src/lib/marble/StyleBuilder.cpp @@ -1,2699 +1,2710 @@ // // This file is part of the Marble Virtual Globe. // // This program is free software licensed under the GNU LGPL. You can // find a copy of this license in LICENSE.txt in the top directory of // the source code. // // Copyright 2007 Murad Tagirov // Copyright 2009 Patrick Spendrin // Copyright 2015 Marius-Valeriu Stanciu // Copyright 2016 Dennis Nienhüser // #include "StyleBuilder.h" #include "MarbleDirs.h" #include "OsmPlacemarkData.h" +#include "OsmcSymbol.h" #include "GeoDataTypes.h" #include "GeoDataGeometry.h" #include "GeoDataPlacemark.h" #include "GeoDataIconStyle.h" #include "GeoDataLabelStyle.h" #include "GeoDataLineStyle.h" #include "GeoDataPolyStyle.h" #include #include #include #include #include #include #include #include namespace Marble { class StyleBuilder::Private { public: Private(); GeoDataStyle::ConstPtr presetStyle(GeoDataPlacemark::GeoDataVisualCategory visualCategory) const; GeoDataStyle::Ptr createStyle(qreal width, qreal realWidth, const QColor& color, const QColor& outlineColor, bool fill, bool outline, Qt::BrushStyle brushStyle, Qt::PenStyle penStyle, Qt::PenCapStyle capStyle, bool lineBackground, const QVector< qreal >& dashPattern, const QFont& font, const QColor& fontColor = Qt::black, const QString& texturePath = QString()) const; GeoDataStyle::Ptr createPOIStyle(const QFont &font, const QString &bitmap, const QColor &textColor = Qt::black, const QColor &color = QColor( 0xBE, 0xAD, 0xAD ), const QColor &outline = QColor( 0xBE, 0xAD, 0xAD ).darker(), bool fill=true, bool renderOutline=true) const; GeoDataStyle::Ptr createOsmPOIStyle(const QFont &font, const QString &bitmap, const QColor &textColor = Qt::black, const QColor &color = QColor( 0xBE, 0xAD, 0xAD ), const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker()) const; GeoDataStyle::Ptr createOsmPOIRingStyle(const QFont &font, const QString &bitmap, const QColor &textColor = Qt::black, const QColor &color = QColor( 0xBE, 0xAD, 0xAD ), const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker()) const; GeoDataStyle::Ptr createOsmPOIAreaStyle(const QFont &font, const QString &bitmap, const QColor &textColor = Qt::black, const QColor &color = QColor( 0xBE, 0xAD, 0xAD ), const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker()) const; GeoDataStyle::Ptr createHighwayStyle(const QColor& color, const QColor& outlineColor, const QFont& font, const QColor& fontColor = Qt::black, qreal width = 1, qreal realWidth = 0.0, Qt::PenStyle penStyle = Qt::SolidLine, Qt::PenCapStyle capStyle = Qt::RoundCap, bool lineBackground = false) const; GeoDataStyle::Ptr createWayStyle(const QColor& color, const QColor& outlineColor, bool fill = true, bool outline = true, Qt::BrushStyle brushStyle = Qt::SolidPattern, const QString& texturePath = QString()) const; // Having an outline with the same color as the fill results in degraded // performance and degraded display quality for no good reason // Q_ASSERT( !(outline && color == outlineColor && brushStyle == Qt::SolidPattern) ); void initializeDefaultStyles(); static QString createPaintLayerItem(const QString &itemType, GeoDataPlacemark::GeoDataVisualCategory visualCategory, const QString &subType = QString()); static void initializeOsmVisualCategories(); static void initializeMinimumZoomLevels(); int m_maximumZoomLevel; QColor m_defaultLabelColor; QFont m_defaultFont; GeoDataStyle::Ptr m_defaultStyle[GeoDataPlacemark::LastIndex]; GeoDataStyle::Ptr m_styleTreeAutumn; GeoDataStyle::Ptr m_styleTreeWinter; bool m_defaultStyleInitialized; QHash m_specialStyleCache; QHash m_buildingStyles; int m_specialStyleCacheTileLevel; /** * @brief s_visualCategories contains osm tag mappings to GeoDataVisualCategories */ static QHash s_visualCategories; static int s_defaultMinZoomLevels[GeoDataPlacemark::LastIndex]; static bool s_defaultMinZoomLevelsInitialized; static QHash s_popularities; }; QHash StyleBuilder::Private::s_visualCategories; int StyleBuilder::Private::s_defaultMinZoomLevels[GeoDataPlacemark::LastIndex]; bool StyleBuilder::Private::s_defaultMinZoomLevelsInitialized = false; QHash StyleBuilder::Private::s_popularities; StyleBuilder::Private::Private() : m_maximumZoomLevel(15), m_defaultLabelColor(Qt::black), m_defaultFont(QStringLiteral("Sans Serif")), m_defaultStyle(), m_defaultStyleInitialized(false), m_specialStyleCacheTileLevel(-1) { initializeMinimumZoomLevels(); for (int i = 0; i < GeoDataPlacemark::LastIndex; ++i) { m_maximumZoomLevel = qMax(m_maximumZoomLevel, s_defaultMinZoomLevels[i]); } } GeoDataStyle::Ptr StyleBuilder::Private::createPOIStyle(const QFont &font, const QString &path, const QColor &textColor, const QColor &color, const QColor &outlineColor, bool fill, bool renderOutline) const { GeoDataStyle::Ptr style = createStyle(1, 0, color, outlineColor, fill, renderOutline, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector(), font); style->setIconStyle( GeoDataIconStyle( path) ); auto const screen = QApplication::screens().first(); double const physicalSize = 6.0; // mm int const pixelSize = qRound(physicalSize * screen->physicalDotsPerInch() / (IN2M * M2MM)); style->iconStyle().setSize(QSize(pixelSize, pixelSize)); style->setLabelStyle( GeoDataLabelStyle( font, textColor ) ); style->labelStyle().setAlignment(GeoDataLabelStyle::Center); return style; } GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIStyle( const QFont &font, const QString &imagePath, const QColor &textColor, const QColor &color, const QColor &outlineColor) const { QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg")); return createPOIStyle(font, path, textColor, color, outlineColor, false, false); } GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIRingStyle( const QFont &font, const QString &imagePath, const QColor &textColor, const QColor &color, const QColor &outlineColor) const { QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg")); return createPOIStyle(font, path, textColor, color, outlineColor, false, true); } GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIAreaStyle( const QFont &font, const QString &imagePath, const QColor &textColor, const QColor &color, const QColor &outlineColor) const { QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg")); return createPOIStyle(font, path, textColor, color, outlineColor, true, false); } GeoDataStyle::Ptr StyleBuilder::Private::createHighwayStyle( const QColor& color, const QColor& outlineColor, const QFont& font, const QColor& fontColor, qreal width, qreal realWidth, Qt::PenStyle penStyle, Qt::PenCapStyle capStyle, bool lineBackground) const { return createStyle( width, realWidth, color, outlineColor, true, true, Qt::SolidPattern, penStyle, capStyle, lineBackground, QVector< qreal >(), font, fontColor ); } GeoDataStyle::Ptr StyleBuilder::Private::createWayStyle( const QColor& color, const QColor& outlineColor, bool fill, bool outline, Qt::BrushStyle brushStyle, const QString& texturePath) const { return createStyle(1, 0, color, outlineColor, fill, outline, brushStyle, Qt::SolidLine, Qt::RoundCap, false, QVector(), m_defaultFont, Qt::black, texturePath); } GeoDataStyle::Ptr StyleBuilder::Private::createStyle( qreal width, qreal realWidth, const QColor& color, const QColor& outlineColor, bool fill, bool outline, Qt::BrushStyle brushStyle, Qt::PenStyle penStyle, Qt::PenCapStyle capStyle, bool lineBackground, const QVector< qreal >& dashPattern, const QFont& font, const QColor& fontColor, const QString& texturePath) const { GeoDataStyle *style = new GeoDataStyle; GeoDataLineStyle lineStyle( outlineColor ); lineStyle.setCapStyle( capStyle ); lineStyle.setPenStyle( penStyle ); lineStyle.setWidth( width ); lineStyle.setPhysicalWidth( realWidth ); lineStyle.setBackground( lineBackground ); lineStyle.setDashPattern( dashPattern ); GeoDataPolyStyle polyStyle( color ); polyStyle.setOutline( outline ); polyStyle.setFill( fill ); polyStyle.setBrushStyle( brushStyle ); polyStyle.setTexturePath( texturePath ); GeoDataLabelStyle labelStyle(font, fontColor); style->setLineStyle( lineStyle ); style->setPolyStyle( polyStyle ); style->setLabelStyle( labelStyle ); return GeoDataStyle::Ptr(style); } void StyleBuilder::Private::initializeDefaultStyles() { // We need to do this similar to the way KCmdLineOptions works in // the future: Having a PlacemarkStyleProperty properties[] would // help here greatly. if (m_defaultStyleInitialized) { return; } m_defaultStyleInitialized = true; QString defaultFamily = m_defaultFont.family(); #ifdef Q_OS_MACX int defaultSize = 10; #else int defaultSize = 8; #endif QColor const defaultLabelColor = m_defaultLabelColor; m_defaultStyle[GeoDataPlacemark::None] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Default] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/default_location.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Unknown] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::SmallCity] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_4_white.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::SmallCountyCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_4_yellow.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::SmallStateCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_4_orange.png" ), QFont( defaultFamily, defaultSize, 50, true ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::SmallNationCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_4_red.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MediumCity] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_3_white.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MediumCountyCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_3_yellow.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MediumStateCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_3_orange.png" ), QFont( defaultFamily, defaultSize, 50, true ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MediumNationCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_3_red.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::BigCity] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_2_white.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::BigCountyCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_2_yellow.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::BigStateCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_2_orange.png" ), QFont( defaultFamily, defaultSize, 50, true ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::BigNationCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_2_red.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::LargeCity] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_1_white.png" ), QFont( defaultFamily, defaultSize, 75, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::LargeCountyCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_1_yellow.png" ), QFont( defaultFamily, defaultSize, 75, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::LargeStateCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_1_orange.png" ), QFont( defaultFamily, defaultSize, 75, true ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::LargeNationCapital] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/city_1_red.png" ), QFont( defaultFamily, defaultSize, 75, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Nation] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, (int)(defaultSize * 1.5 ), 75, false ), QColor( "#404040" ) )); // Align area labels centered m_defaultStyle[GeoDataPlacemark::Nation]->labelStyle().setAlignment( GeoDataLabelStyle::Center ); QFont osmCityFont = QFont(defaultFamily, (int)(defaultSize * 1.5 ), 75, false); m_defaultStyle[GeoDataPlacemark::PlaceCity] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor( "#202020" )); m_defaultStyle[GeoDataPlacemark::PlaceCityCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor( "#202020" )); m_defaultStyle[GeoDataPlacemark::PlaceCityNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor( "#202020" )); m_defaultStyle[GeoDataPlacemark::PlaceSuburb] = createOsmPOIStyle(osmCityFont, QString(), QColor( "#707070" )); m_defaultStyle[GeoDataPlacemark::PlaceHamlet] = createOsmPOIStyle(osmCityFont, QString(), QColor( "#707070" )); QFont localityFont = osmCityFont; localityFont.setPointSize(defaultSize); m_defaultStyle[GeoDataPlacemark::PlaceLocality] = createOsmPOIStyle(localityFont, QString(), QColor( "#707070" )); m_defaultStyle[GeoDataPlacemark::PlaceTown] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor( "#404040" )); m_defaultStyle[GeoDataPlacemark::PlaceTownCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor( "#404040" )); m_defaultStyle[GeoDataPlacemark::PlaceTownNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor( "#404040" )); m_defaultStyle[GeoDataPlacemark::PlaceVillage] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor( "#505050" )); m_defaultStyle[GeoDataPlacemark::PlaceVillageCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor( "#505050" )); m_defaultStyle[GeoDataPlacemark::PlaceVillageNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor( "#505050" )); for (int i=GeoDataPlacemark::PlaceCity; i<=GeoDataPlacemark::PlaceVillageCapital; ++i) { m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->polyStyle().setFill(false); m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->polyStyle().setOutline(false); m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->labelStyle().setAlignment( GeoDataLabelStyle::Center ); if (i == GeoDataPlacemark::PlaceCityNationalCapital || i == GeoDataPlacemark::PlaceTownNationalCapital || i == GeoDataPlacemark::PlaceVillageNationalCapital) m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->iconStyle().setScale(0.55); else m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->iconStyle().setScale(0.25); } m_defaultStyle[GeoDataPlacemark::Mountain] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/mountain_1.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Volcano] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/volcano_1.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Mons] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/mountain_1.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Valley] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/valley.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Continent] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, (int)(defaultSize * 1.7 ), 50, false ), QColor( "#bf0303" ) )); // Align area labels centered m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().setAlignment( GeoDataLabelStyle::Center ); m_defaultStyle[GeoDataPlacemark::Ocean] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, (int)(defaultSize * 1.7 ), 50, true ), QColor( "#2c72c7" ) )); // Align area labels centered m_defaultStyle[GeoDataPlacemark::Ocean]->labelStyle().setAlignment( GeoDataLabelStyle::Center ); m_defaultStyle[GeoDataPlacemark::OtherTerrain] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/other.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Crater] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/crater.png" ), QFont( defaultFamily, (int)(defaultSize * 0.9 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Mare] = GeoDataStyle::Ptr(new GeoDataStyle( QString(), QFont( defaultFamily, (int)(defaultSize * 1.7 ), 50, false ), QColor( "#bf0303" ) )); // Align area labels centered m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().setAlignment( GeoDataLabelStyle::Center ); m_defaultStyle[GeoDataPlacemark::GeographicPole] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/pole_1.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MagneticPole] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/pole_2.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::ShipWreck] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/shipwreck.png" ), QFont( defaultFamily, (int)(defaultSize * 0.8 ), 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::AirPort] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/airport.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Observatory] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/observatory.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::OsmSite] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/osm.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Coordinate] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/coordinate.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::MannedLandingSite] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/manned_landing.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::RoboticRover] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/robotic_rover.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::UnmannedSoftLandingSite] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/unmanned_soft_landing.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::UnmannedHardLandingSite] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/unmanned_hard_landing.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); m_defaultStyle[GeoDataPlacemark::Bookmark] = createPOIStyle(QFont( defaultFamily, defaultSize, 50, false ), MarbleDirs::path("svg/bookmark.svg"), defaultLabelColor ); m_defaultStyle[GeoDataPlacemark::Bookmark]->iconStyle().setScale(0.75); QColor const shopColor("#ac39ac"); QColor const transportationColor("#0066ff"); QColor const amenityColor("#734a08"); QColor const healthColor("#da0092"); QColor const airTransportColor("#8461C4"); QColor const educationalAreasAndHospital("#f0f0d8"); QColor const buildingColor("#beadad"); QColor const waterColor("#b5d0d0"); // Allows to visualize multiple repaints of buildings // QColor const buildingColor(0, 255, 0, 64); QFont const osmFont( defaultFamily, 10, 50, false ); m_defaultStyle[GeoDataPlacemark::AccomodationCamping] = createOsmPOIRingStyle(osmFont, "transportation/camping.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AccomodationHostel] = createOsmPOIStyle(osmFont, "transportation/hostel.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AccomodationHotel] = createOsmPOIStyle(osmFont, "transportation/hotel.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AccomodationMotel] = createOsmPOIStyle(osmFont, "transportation/motel.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AccomodationYouthHostel] = createOsmPOIStyle(osmFont, "transportation/hostel.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AccomodationGuestHouse] = createOsmPOIStyle(osmFont, "transportation/guest_house.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AmenityLibrary] = createOsmPOIStyle(osmFont, "amenity/library.20", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityKindergarten] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor); m_defaultStyle[GeoDataPlacemark::EducationCollege] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor); m_defaultStyle[GeoDataPlacemark::EducationSchool] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor); m_defaultStyle[GeoDataPlacemark::EducationUniversity] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor); m_defaultStyle[GeoDataPlacemark::FoodBar] = createOsmPOIStyle(osmFont, "amenity/bar.16", amenityColor); m_defaultStyle[GeoDataPlacemark::FoodBiergarten] = createOsmPOIStyle(osmFont, "amenity/biergarten.16", amenityColor); m_defaultStyle[GeoDataPlacemark::FoodCafe] = createOsmPOIStyle(osmFont, "amenity/cafe.16", amenityColor); m_defaultStyle[GeoDataPlacemark::FoodFastFood] = createOsmPOIStyle(osmFont, "amenity/fast_food.16", amenityColor); m_defaultStyle[GeoDataPlacemark::FoodPub] = createOsmPOIStyle(osmFont, "amenity/pub.16", amenityColor); m_defaultStyle[GeoDataPlacemark::FoodRestaurant] = createOsmPOIStyle(osmFont, "amenity/restaurant.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HealthDentist] = createOsmPOIStyle(osmFont, "health/dentist.16", healthColor); m_defaultStyle[GeoDataPlacemark::HealthDoctors] = createOsmPOIStyle(osmFont, "health/doctors.16", healthColor); m_defaultStyle[GeoDataPlacemark::HealthHospital] = createOsmPOIStyle(osmFont, "health/hospital.16", healthColor, educationalAreasAndHospital, amenityColor); m_defaultStyle[GeoDataPlacemark::HealthPharmacy] = createOsmPOIStyle(osmFont, "health/pharmacy.16", healthColor); m_defaultStyle[GeoDataPlacemark::HealthVeterinary] = createOsmPOIStyle(osmFont, "health/veterinary-14", healthColor); m_defaultStyle[GeoDataPlacemark::MoneyAtm] = createOsmPOIStyle(osmFont, "amenity/atm.16", amenityColor); m_defaultStyle[GeoDataPlacemark::MoneyBank] = createOsmPOIStyle(osmFont, "amenity/bank.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HistoricArchaeologicalSite] = createOsmPOIAreaStyle(osmFont, "amenity/archaeological_site.16", amenityColor, Qt::transparent); m_defaultStyle[GeoDataPlacemark::AmenityEmbassy] = createOsmPOIStyle(osmFont, "transportation/embassy.16", transportationColor); m_defaultStyle[GeoDataPlacemark::AmenityEmergencyPhone] = createOsmPOIStyle(osmFont, "amenity/emergency_phone.16", amenityColor); m_defaultStyle[GeoDataPlacemark::LeisureWaterPark] = createOsmPOIStyle(osmFont, "amenity/water_park.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityCommunityCentre] = createOsmPOIStyle(osmFont, "amenity/community_centre-14", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityFountain] = createOsmPOIStyle(osmFont, "amenity/fountain-14", QColor("#7989de"), waterColor, waterColor.darker(150)); m_defaultStyle[GeoDataPlacemark::AmenityNightClub] = createOsmPOIStyle(osmFont, "amenity/nightclub.18", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityBench] = createOsmPOIStyle(osmFont, "individual/bench.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityCourtHouse] = createOsmPOIStyle(osmFont, "amenity/courthouse-16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityFireStation] = createOsmPOIStyle(osmFont, "amenity/firestation.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityHuntingStand] = createOsmPOIStyle(osmFont, "manmade/hunting-stand.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityPolice] = createOsmPOIStyle(osmFont, "amenity/police.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityPostBox] = createOsmPOIStyle(osmFont, "amenity/post_box-12", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityPostOffice] = createOsmPOIStyle(osmFont, "amenity/post_office-14", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityPrison] = createOsmPOIStyle(osmFont, "amenity/prison.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityRecycling] = createOsmPOIStyle(osmFont, "amenity/recycling.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityShelter] = createOsmPOIStyle(osmFont, "transportation/shelter", transportationColor); m_defaultStyle[GeoDataPlacemark::AmenityTelephone] = createOsmPOIStyle(osmFont, "amenity/telephone.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityToilets] = createOsmPOIStyle(osmFont, "amenity/toilets.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityTownHall] = createOsmPOIStyle(osmFont, "amenity/town_hall.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityWasteBasket] = createOsmPOIStyle(osmFont, "individual/waste_basket.10", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityWasteBasket]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::AmenityChargingStation] = createOsmPOIStyle(osmFont, "transportation/charging_station"); m_defaultStyle[GeoDataPlacemark::AmenityCarWash] = createOsmPOIStyle(osmFont, "amenity/car_wash", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenitySocialFacility] = createOsmPOIStyle(osmFont, "amenity/social_facility", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityDrinkingWater] = createOsmPOIStyle(osmFont, "amenity/drinking_water.16", amenityColor); m_defaultStyle[GeoDataPlacemark::NaturalPeak] = createOsmPOIStyle(osmFont, "individual/peak", amenityColor); m_defaultStyle[GeoDataPlacemark::NaturalPeak]->iconStyle().setScale(0.33); m_defaultStyle[GeoDataPlacemark::NaturalVolcano] = createOsmPOIStyle(osmFont, "individual/volcano", amenityColor); m_defaultStyle[GeoDataPlacemark::NaturalVolcano]->iconStyle().setScale(0.33); m_defaultStyle[GeoDataPlacemark::NaturalTree] = createOsmPOIStyle(osmFont, "individual/tree-29", amenityColor); // tree-16 provides the official icon m_styleTreeAutumn = createOsmPOIStyle(osmFont, "individual/tree-29-autumn", amenityColor); m_styleTreeWinter = createOsmPOIStyle(osmFont, "individual/tree-29-winter", amenityColor); qreal const treeIconScale = 0.75; m_defaultStyle[GeoDataPlacemark::NaturalTree]->iconStyle().setScale(treeIconScale); m_styleTreeAutumn->iconStyle().setScale(treeIconScale); m_styleTreeWinter->iconStyle().setScale(treeIconScale); m_defaultStyle[GeoDataPlacemark::ShopBeverages] = createOsmPOIStyle(osmFont, "shop/beverages-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopHifi] = createOsmPOIStyle(osmFont, "shop/hifi-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopSupermarket] = createOsmPOIStyle(osmFont, "shop/shop_supermarket", shopColor); m_defaultStyle[GeoDataPlacemark::ShopAlcohol] = createOsmPOIStyle(osmFont, "shop/shop_alcohol.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopBakery] = createOsmPOIStyle(osmFont, "shop/shop_bakery.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopButcher] = createOsmPOIStyle(osmFont, "shop/butcher-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopConfectionery] = createOsmPOIStyle(osmFont, "shop/confectionery.14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopConvenience] = createOsmPOIStyle(osmFont, "shop/shop_convenience", shopColor); m_defaultStyle[GeoDataPlacemark::ShopGreengrocer] = createOsmPOIStyle(osmFont, "shop/greengrocer-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopSeafood] = createOsmPOIStyle(osmFont, "shop/seafood-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopDepartmentStore] = createOsmPOIStyle(osmFont, "shop/department_store-16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopKiosk] = createOsmPOIStyle(osmFont, "shop/kiosk-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopBag] = createOsmPOIStyle(osmFont, "shop/bag-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopClothes] = createOsmPOIStyle(osmFont, "shop/shop_clothes.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopFashion] = createOsmPOIStyle(osmFont, "shop/shop_clothes.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopJewelry] = createOsmPOIStyle(osmFont, "shop/shop_jewelry.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopShoes] = createOsmPOIStyle(osmFont, "shop/shop_shoes.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopVarietyStore] = createOsmPOIStyle(osmFont, "shop/variety_store-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopBeauty] = createOsmPOIStyle(osmFont, "shop/beauty-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopChemist] = createOsmPOIStyle(osmFont, "shop/chemist-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopCosmetics] = createOsmPOIStyle(osmFont, "shop/perfumery-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopHairdresser] = createOsmPOIStyle(osmFont, "shop/shop_hairdresser.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopOptician] = createOsmPOIStyle(osmFont, "shop/shop_optician.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopPerfumery] = createOsmPOIStyle(osmFont, "shop/perfumery-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopDoitYourself] = createOsmPOIStyle(osmFont, "shop/shop_diy.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopFlorist] = createOsmPOIStyle(osmFont, "shop/florist.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopHardware] = createOsmPOIStyle(osmFont, "shop/shop_diy.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopFurniture] = createOsmPOIStyle(osmFont, "shop/shop_furniture.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopElectronics] = createOsmPOIStyle(osmFont, "shop/shop_electronics.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopMobilePhone] = createOsmPOIStyle(osmFont, "shop/shop_mobile_phone.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopBicycle] = createOsmPOIStyle(osmFont, "shop/shop_bicycle.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopCar] = createOsmPOIStyle(osmFont, "shop/shop_car", shopColor); m_defaultStyle[GeoDataPlacemark::ShopCarRepair] = createOsmPOIStyle(osmFont, "shop/shopping_car_repair.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopCarParts] = createOsmPOIStyle(osmFont, "shop/car_parts-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopMotorcycle] = createOsmPOIStyle(osmFont, "shop/motorcycle-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopOutdoor] = createOsmPOIStyle(osmFont, "shop/outdoor-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopSports] = createOsmPOIStyle(osmFont, "shop/sports", shopColor); m_defaultStyle[GeoDataPlacemark::ShopCopy] = createOsmPOIStyle(osmFont, "shop/copyshop", shopColor); m_defaultStyle[GeoDataPlacemark::ShopArt] = createOsmPOIStyle(osmFont, "shop/art", shopColor); m_defaultStyle[GeoDataPlacemark::ShopMusicalInstrument] = createOsmPOIStyle(osmFont, "shop/musical_instrument-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopPhoto] = createOsmPOIStyle(osmFont, "shop/photo-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopBook] = createOsmPOIStyle(osmFont, "shop/shop_books.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopGift] = createOsmPOIStyle(osmFont, "shop/shop_gift.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopStationery] = createOsmPOIStyle(osmFont, "shop/stationery-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopLaundry] = createOsmPOIStyle(osmFont, "shop/laundry-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopPet] = createOsmPOIStyle(osmFont, "shop/shop_pet.16", shopColor); m_defaultStyle[GeoDataPlacemark::ShopToys] = createOsmPOIStyle(osmFont, "shop/toys-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopTravelAgency] = createOsmPOIStyle(osmFont, "shop/travel_agency-14", shopColor); m_defaultStyle[GeoDataPlacemark::ShopDeli] = createOsmPOIStyle(osmFont, "shop/deli", shopColor); m_defaultStyle[GeoDataPlacemark::ShopTobacco] = createOsmPOIStyle(osmFont, "shop/tobacco", shopColor); m_defaultStyle[GeoDataPlacemark::ShopTea] = createOsmPOIStyle(osmFont, "shop/tea", shopColor); m_defaultStyle[GeoDataPlacemark::Shop] = createOsmPOIStyle(osmFont, "shop/shop-14", shopColor); m_defaultStyle[GeoDataPlacemark::ManmadeBridge] = createWayStyle(QColor("#b8b8b8"), Qt::transparent, true, true); m_defaultStyle[GeoDataPlacemark::ManmadeLighthouse] = createOsmPOIStyle(osmFont, "transportation/lighthouse.16", transportationColor, "#f2efe9", QColor( "#f2efe9" ).darker()); m_defaultStyle[GeoDataPlacemark::ManmadePier] = createStyle(0.0, 3.0, "#f2efe9", "#f2efe9", true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont); m_defaultStyle[GeoDataPlacemark::ManmadeWaterTower] = createOsmPOIStyle(osmFont, "amenity/water_tower.16", amenityColor); m_defaultStyle[GeoDataPlacemark::ManmadeWindMill] = createOsmPOIStyle(osmFont, "amenity/windmill.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HistoricCastle] = createOsmPOIRingStyle(osmFont, "amenity/cinema.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HistoricMemorial] = createOsmPOIStyle(osmFont, "amenity/tourist_memorial.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HistoricMonument] = createOsmPOIStyle(osmFont, "amenity/monument.16", amenityColor); m_defaultStyle[GeoDataPlacemark::HistoricRuins] = createOsmPOIRingStyle(osmFont, QString(), amenityColor); m_defaultStyle[GeoDataPlacemark::TourismAttraction] = createOsmPOIStyle(osmFont, "amenity/tourist_memorial.16", amenityColor); m_defaultStyle[GeoDataPlacemark::TourismArtwork] = createOsmPOIStyle(osmFont, "amenity/artwork", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityCinema] = createOsmPOIStyle(osmFont, "amenity/cinema.16", amenityColor); m_defaultStyle[GeoDataPlacemark::TourismInformation] = createOsmPOIStyle(osmFont, "amenity/information.16", amenityColor); m_defaultStyle[GeoDataPlacemark::TourismMuseum] = createOsmPOIStyle(osmFont, "amenity/museum.16", amenityColor); m_defaultStyle[GeoDataPlacemark::AmenityTheatre] = createOsmPOIStyle(osmFont, "amenity/theatre.16", amenityColor); m_defaultStyle[GeoDataPlacemark::TourismThemePark] = createOsmPOIStyle(osmFont, QString(), amenityColor); m_defaultStyle[GeoDataPlacemark::TourismViewPoint] = createOsmPOIStyle(osmFont, "amenity/viewpoint.16", amenityColor); m_defaultStyle[GeoDataPlacemark::TourismZoo] = createOsmPOIRingStyle(osmFont, QString(), amenityColor, Qt::transparent); m_defaultStyle[GeoDataPlacemark::TourismAlpineHut] = createOsmPOIStyle(osmFont, "transportation/alpinehut.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TourismWildernessHut] = createOsmPOIStyle(osmFont, "transportation/wilderness_hut", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportAerodrome] = createOsmPOIStyle(osmFont, "airtransport/aerodrome", airTransportColor); m_defaultStyle[GeoDataPlacemark::TransportHelipad] = createOsmPOIStyle(osmFont, "airtransport/helipad", airTransportColor); m_defaultStyle[GeoDataPlacemark::TransportAirportTerminal] = createOsmPOIAreaStyle(osmFont, QString(), airTransportColor); m_defaultStyle[GeoDataPlacemark::TransportAirportGate] = createOsmPOIAreaStyle(osmFont, QString(), airTransportColor); m_defaultStyle[GeoDataPlacemark::TransportBusStation] = createOsmPOIStyle(osmFont, "transportation/bus_station.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportBusStop] = createOsmPOIStyle(osmFont, "transportation/bus_stop.12", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportCarShare] = createOsmPOIStyle(osmFont, "transportation/car_share.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportFuel] = createOsmPOIStyle(osmFont, "transportation/fuel.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportParking] = createOsmPOIAreaStyle(osmFont, "transportation/parking", transportationColor, "#F6EEB6", QColor( "#F6EEB6" ).darker()); m_defaultStyle[GeoDataPlacemark::TransportBicycleParking] = createOsmPOIAreaStyle(osmFont, "transportation/bicycle_parking.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportMotorcycleParking] = createOsmPOIAreaStyle(osmFont, "transportation/motorcycle_parking.16", transportationColor); qreal const parkingIconScale = 0.75; m_defaultStyle[GeoDataPlacemark::TransportParking]->iconStyle().setScale(parkingIconScale); m_defaultStyle[GeoDataPlacemark::TransportBicycleParking]->iconStyle().setScale(parkingIconScale); m_defaultStyle[GeoDataPlacemark::TransportMotorcycleParking]->iconStyle().setScale(parkingIconScale); m_defaultStyle[GeoDataPlacemark::TransportParkingSpace] = createWayStyle("#F6EEB6", QColor( "#F6EEB6" ).darker(), true, true); m_defaultStyle[GeoDataPlacemark::TransportPlatform] = createWayStyle("#bbbbbb", Qt::transparent, true, false); m_defaultStyle[GeoDataPlacemark::TransportTrainStation] = createOsmPOIStyle(osmFont, "individual/railway_station", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportTrainStation]->iconStyle().setScale(0.5); m_defaultStyle[GeoDataPlacemark::TransportTramStop] = createOsmPOIStyle(osmFont, "individual/railway_station", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportTramStop]->iconStyle().setScale(0.33); m_defaultStyle[GeoDataPlacemark::TransportRentalBicycle] = createOsmPOIStyle(osmFont, "transportation/rental_bicycle.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportRentalCar] = createOsmPOIStyle(osmFont, "transportation/rental_car.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportTaxiRank] = createOsmPOIStyle(osmFont, "transportation/taxi.16", transportationColor); m_defaultStyle[GeoDataPlacemark::TransportSubwayEntrance] = createOsmPOIStyle(osmFont, "transportation/subway_entrance", transportationColor); m_defaultStyle[GeoDataPlacemark::ReligionPlaceOfWorship] = createOsmPOIStyle(osmFont, QString() /* "black/place_of_worship.16" */); m_defaultStyle[GeoDataPlacemark::ReligionBahai] = createOsmPOIStyle(osmFont, QString()); m_defaultStyle[GeoDataPlacemark::ReligionBuddhist] = createOsmPOIStyle(osmFont, "black/buddhist.16"); m_defaultStyle[GeoDataPlacemark::ReligionChristian] = createOsmPOIStyle(osmFont, "black/christian.16"); m_defaultStyle[GeoDataPlacemark::ReligionMuslim] = createOsmPOIStyle(osmFont, "black/muslim.16"); m_defaultStyle[GeoDataPlacemark::ReligionHindu] = createOsmPOIStyle(osmFont, "black/hinduist.16"); m_defaultStyle[GeoDataPlacemark::ReligionJain] = createOsmPOIStyle(osmFont, QString()); m_defaultStyle[GeoDataPlacemark::ReligionJewish] = createOsmPOIStyle(osmFont, "black/jewish.16"); m_defaultStyle[GeoDataPlacemark::ReligionShinto] = createOsmPOIStyle(osmFont, "black/shintoist.16"); m_defaultStyle[GeoDataPlacemark::ReligionSikh] = createOsmPOIStyle(osmFont, "black/sikhist.16"); m_defaultStyle[GeoDataPlacemark::HighwayTrafficSignals] = createOsmPOIStyle(osmFont, "individual/traffic_light"); m_defaultStyle[GeoDataPlacemark::HighwayTrafficSignals]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::PowerTower] = createOsmPOIStyle(osmFont, "individual/power_tower", QColor( "#888888" )); m_defaultStyle[GeoDataPlacemark::PowerTower]->iconStyle().setScale(0.6); m_defaultStyle[GeoDataPlacemark::BarrierCityWall] = createStyle(6.0, 3.0, "#787878", Qt::transparent, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, Qt::transparent); m_defaultStyle[GeoDataPlacemark::BarrierGate] = createOsmPOIStyle(osmFont, "individual/gate"); m_defaultStyle[GeoDataPlacemark::BarrierGate]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::BarrierLiftGate] = createOsmPOIStyle(osmFont, "individual/liftgate"); m_defaultStyle[GeoDataPlacemark::BarrierLiftGate]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::BarrierWall] = createStyle(2.0, 0.0, "#787878", Qt::transparent, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, Qt::transparent); m_defaultStyle[GeoDataPlacemark::HighwaySteps] = createStyle(0.0, 2.0, "#fa8072", QColor(Qt::white), true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::HighwayUnknown] = createHighwayStyle("#dddddd", "#bbbbbb", osmFont, "000000", 0, 1); m_defaultStyle[GeoDataPlacemark::HighwayPath] = createHighwayStyle("#dddde8", "#999999", osmFont, "000000", 0, 1, Qt::DotLine, Qt::SquareCap, true); m_defaultStyle[GeoDataPlacemark::HighwayTrack] = createHighwayStyle("#996600", QColor(Qt::white), osmFont, QColor(Qt::transparent), 1, 1, Qt::DashLine, Qt::SquareCap, true); m_defaultStyle[GeoDataPlacemark::HighwayPedestrian] = createHighwayStyle("#dddde8", "#999999", osmFont, "000000", 0, 2); m_defaultStyle[GeoDataPlacemark::HighwayPedestrian]->polyStyle().setOutline(false); m_defaultStyle[GeoDataPlacemark::HighwayFootway] = createHighwayStyle("#fa8072", QColor(Qt::white), osmFont, "000000", 0, 2, Qt::DotLine, Qt::SquareCap, true); m_defaultStyle[GeoDataPlacemark::HighwayCycleway] = createHighwayStyle(QColor(Qt::blue), QColor(Qt::white), osmFont, "000000", 0, 2, Qt::DotLine, Qt::SquareCap, true); m_defaultStyle[GeoDataPlacemark::HighwayService] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 1, 6); m_defaultStyle[GeoDataPlacemark::HighwayResidential] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6); m_defaultStyle[GeoDataPlacemark::HighwayLivingStreet] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6); m_defaultStyle[GeoDataPlacemark::HighwayRoad] = createHighwayStyle("#dddddd", "#bbbbbb", osmFont, "000000", 3, 6); m_defaultStyle[GeoDataPlacemark::HighwayUnclassified] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6); m_defaultStyle[GeoDataPlacemark::HighwayTertiary] = createHighwayStyle("#ffffff", "#8f8f8f", osmFont, "000000", 6, 6); m_defaultStyle[GeoDataPlacemark::HighwayTertiaryLink] = createHighwayStyle("#ffffff", "#8f8f8f", osmFont, "000000", 6, 6); m_defaultStyle[GeoDataPlacemark::HighwaySecondary] = createHighwayStyle("#f7fabf", "#707d05", osmFont, "000000", 6, 6); m_defaultStyle[GeoDataPlacemark::HighwaySecondaryLink] = createHighwayStyle("#f7fabf", "#707d05", osmFont, "000000", 6, 6); m_defaultStyle[GeoDataPlacemark::HighwayPrimary] = createHighwayStyle("#fcd6a4", "#a06b00", osmFont, "000000", 9, 6); m_defaultStyle[GeoDataPlacemark::HighwayPrimaryLink] = createHighwayStyle("#fcd6a4", "#a06b00", osmFont, "000000", 6, 6); m_defaultStyle[GeoDataPlacemark::HighwayRaceway] = createHighwayStyle("#ffc0cb", "#ffc0cb", osmFont, "000000", 1, 5); m_defaultStyle[GeoDataPlacemark::HighwayTrunk] = createHighwayStyle("#f9b29c", "#c84e2f", osmFont, "000000", 9, 6); m_defaultStyle[GeoDataPlacemark::HighwayTrunkLink] = createHighwayStyle("#f9b29c", "#c84e2f", osmFont, "000000", 9, 6); m_defaultStyle[GeoDataPlacemark::HighwayMotorway] = createHighwayStyle("#e892a2", "#dc2a67", osmFont, "000000", 9, 10); m_defaultStyle[GeoDataPlacemark::HighwayMotorwayLink] = createHighwayStyle("#e892a2", "#dc2a67", osmFont, "000000", 9, 10); m_defaultStyle[GeoDataPlacemark::HighwayCorridor] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 1, 3); m_defaultStyle[GeoDataPlacemark::TransportAirportRunway] = createHighwayStyle("#bbbbcc", "#bbbbcc", osmFont, "000000", 0, 1, Qt::NoPen); m_defaultStyle[GeoDataPlacemark::TransportAirportTaxiway] = createHighwayStyle("#bbbbcc", "#bbbbcc", osmFont, "000000", 0, 1, Qt::NoPen); m_defaultStyle[GeoDataPlacemark::TransportAirportApron] = createWayStyle("#e9d1ff", Qt::transparent, true, false); m_defaultStyle[GeoDataPlacemark::TransportSpeedCamera] = createOsmPOIStyle(osmFont, "individual/speedcamera"); m_defaultStyle[GeoDataPlacemark::NaturalWater] = createStyle(4, 0, waterColor, waterColor, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(), osmFont, waterColor.darker(150)); m_defaultStyle[GeoDataPlacemark::WaterwayRiver] = createStyle(4, 0, waterColor, waterColor, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(), osmFont, waterColor.darker(150)); m_defaultStyle[GeoDataPlacemark::WaterwayCanal] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver]; m_defaultStyle[GeoDataPlacemark::WaterwayDitch] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver]; m_defaultStyle[GeoDataPlacemark::WaterwayDrain] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver]; m_defaultStyle[GeoDataPlacemark::WaterwayStream] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver]; m_defaultStyle[GeoDataPlacemark::WaterwayWeir] = createStyle(4, 0, "#ffffff", "#87939b", true, false, Qt::SolidPattern, Qt::DotLine, Qt::RoundCap, true, QVector< qreal >(), osmFont, waterColor.darker(150)); m_defaultStyle[GeoDataPlacemark::CrossingIsland] = createOsmPOIStyle(osmFont, "transportation/zebra_crossing", transportationColor); m_defaultStyle[GeoDataPlacemark::CrossingIsland]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::CrossingRailway] = createOsmPOIStyle(osmFont, "transportation/railway_crossing", transportationColor); m_defaultStyle[GeoDataPlacemark::CrossingRailway]->iconStyle().setScale(0.5); m_defaultStyle[GeoDataPlacemark::CrossingSignals] = createOsmPOIStyle(osmFont, "transportation/traffic_light_crossing", transportationColor); m_defaultStyle[GeoDataPlacemark::CrossingSignals]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::CrossingZebra] = createOsmPOIStyle(osmFont, "transportation/zebra_crossing", transportationColor); m_defaultStyle[GeoDataPlacemark::CrossingZebra]->iconStyle().setScale(0.75); m_defaultStyle[GeoDataPlacemark::NaturalReef] = createStyle(5.5, 0, "#36677c", "#36677c", true, false, Qt::Dense7Pattern, Qt::DotLine, Qt::RoundCap, false, QVector< qreal >(), osmFont, waterColor.darker(150)); m_defaultStyle[GeoDataPlacemark::AmenityGraveyard] = createWayStyle("#AACBAF", "#AACBAF", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png")); m_defaultStyle[GeoDataPlacemark::NaturalWood] = createWayStyle("#8DC46C", "#8DC46C", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/forest.png")); m_defaultStyle[GeoDataPlacemark::NaturalBeach] = createWayStyle("#FFF1BA", "#FFF1BA", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/beach.png")); m_defaultStyle[GeoDataPlacemark::NaturalWetland] = createWayStyle("#DDECEC", "#DDECEC", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/wetland.png")); m_defaultStyle[GeoDataPlacemark::NaturalGlacier] = createWayStyle("#DDECEC", "#DDECEC", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/glacier.png")); m_defaultStyle[GeoDataPlacemark::NaturalIceShelf] = createWayStyle("#8ebebe", "#8ebebe", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/glacier.png")); m_defaultStyle[GeoDataPlacemark::NaturalScrub] = createWayStyle("#B5E3B5", "#B5E3B5", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/scrub.png")); m_defaultStyle[GeoDataPlacemark::NaturalCliff] = createWayStyle(Qt::transparent, Qt::transparent, true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/cliff2.png")); m_defaultStyle[GeoDataPlacemark::NaturalCave] = createOsmPOIStyle(osmFont, "amenities/cave", amenityColor); m_defaultStyle[GeoDataPlacemark::NaturalHeath] = createWayStyle("#d6d99f", QColor("#d6d99f").darker(150), true, false); m_defaultStyle[GeoDataPlacemark::LeisureGolfCourse] = createOsmPOIAreaStyle(osmFont, "leisure/golf", "#39ac39", "#b5e3b5", QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::LeisureMinigolfCourse] = createOsmPOIAreaStyle(osmFont, "leisure/miniature_golf", "#39ac39", "#b5e3b5", QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::LeisureMarina] = createOsmPOIStyle(osmFont, QString(), QColor("#95abd5"), QColor("#aec8d1"), QColor("#95abd5").darker(150)); m_defaultStyle[GeoDataPlacemark::LeisurePark] = createWayStyle(QColor("#c8facc"), QColor("#c8facc").darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LeisurePlayground] = createOsmPOIAreaStyle(osmFont, "amenity/playground.16", amenityColor, "#CCFFF1", "#BDFFED"); m_defaultStyle[GeoDataPlacemark::LeisurePitch] = createWayStyle("#8ad3af", QColor("#8ad3af").darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LeisureSportsCentre] = createWayStyle("#33cc99", QColor("#33cc99").darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LeisureStadium] = createWayStyle("#33cc99", QColor("#33cc99").darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LeisureTrack] = createWayStyle("#74dcba", QColor("#74dcba").darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LeisureSwimmingPool] = createWayStyle(waterColor, waterColor.darker(150), true, true); m_defaultStyle[GeoDataPlacemark::LanduseAllotments] = createWayStyle("#E4C6AA", "#E4C6AA", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/allotments.png")); m_defaultStyle[GeoDataPlacemark::LanduseBasin] = createWayStyle(QColor(0xB5, 0xD0, 0xD0, 0x80 ), QColor( 0xB5, 0xD0, 0xD0 )); m_defaultStyle[GeoDataPlacemark::LanduseCemetery] = createWayStyle("#AACBAF", "#AACBAF", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png")); m_defaultStyle[GeoDataPlacemark::LanduseCommercial] = createWayStyle("#F2DAD9", "#D1B2B0", true, true); m_defaultStyle[GeoDataPlacemark::LanduseConstruction] = createWayStyle("#b6b592", "#b6b592", true, false); m_defaultStyle[GeoDataPlacemark::LanduseFarmland] = createWayStyle("#EDDDC9", "#C8B69E", true, true); m_defaultStyle[GeoDataPlacemark::LanduseFarmyard] = createWayStyle("#EFD6B5", "#D1B48C", true, true); m_defaultStyle[GeoDataPlacemark::LanduseGarages] = createWayStyle("#E0DDCD", "#E0DDCD", true, false); m_defaultStyle[GeoDataPlacemark::LanduseGrass] = createWayStyle("#A8C8A5", "#A8C8A5", true, false); m_defaultStyle[GeoDataPlacemark::LanduseIndustrial] = createWayStyle("#DED0D5", "#DED0D5", true, false); m_defaultStyle[GeoDataPlacemark::LanduseLandfill] = createWayStyle("#b6b592", "#b6b592", true, false); m_defaultStyle[GeoDataPlacemark::LanduseMeadow] = createWayStyle("#cdebb0", "#cdebb0", true, false); m_defaultStyle[GeoDataPlacemark::LanduseMilitary] = createWayStyle("#F3D8D2", "#F3D8D2", true, true, Qt::BDiagPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/military_red_hatch.png")); m_defaultStyle[GeoDataPlacemark::LanduseQuarry] = createWayStyle("#C4C2C2", "#C4C2C2", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/quarry.png")); m_defaultStyle[GeoDataPlacemark::LanduseRailway] = createWayStyle("#DED0D5", "#DED0D5", true, false); m_defaultStyle[GeoDataPlacemark::LanduseReservoir] = createWayStyle(waterColor, waterColor, true, false); m_defaultStyle[GeoDataPlacemark::LanduseResidential] = createWayStyle("#DCDCDC", "#DCDCDC", true, false); m_defaultStyle[GeoDataPlacemark::LanduseRetail] = createWayStyle("#FFD6D1", "#D99C95", true, true); m_defaultStyle[GeoDataPlacemark::LanduseOrchard] = createWayStyle("#AEDFA3", "#AEDFA3", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/orchard.png")); m_defaultStyle[GeoDataPlacemark::LanduseVineyard] = createWayStyle("#AEDFA3", "#AEDFA3", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/vineyard.png")); m_defaultStyle[GeoDataPlacemark::MilitaryDangerArea] = createWayStyle("#FFC0CB", "#FFC0CB", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/danger.png")); m_defaultStyle[GeoDataPlacemark::RailwayRail] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, true, QVector< qreal >() << 2 << 3, osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayNarrowGauge] = createStyle(2.0, 1.0, "#706E70", "#EEEEEE", true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, true, QVector< qreal >() << 2 << 3, osmFont, QColor(Qt::transparent)); // FIXME: the tram is currently being rendered as a polygon. m_defaultStyle[GeoDataPlacemark::RailwayTram] = createStyle(2.0, 1.435, "#706E70", "#B7B6B7", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayLightRail] = createStyle(2.0, 1.435, "#706E70", "#706E70", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayAbandoned] = createStyle(2.0, 1.435, Qt::transparent, "#706E70", false, false, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwaySubway] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayPreserved] = createStyle(2.0, 1.435, "#EEEEEE", "#706E70", true, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, true, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayMiniature] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayConstruction] = createStyle(2.0, 1.435, "#EEEEEE", "#706E70", true, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, true, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayMonorail] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RailwayFunicular] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont, QColor(Qt::transparent)); m_defaultStyle[GeoDataPlacemark::RouteHiking] = createHighwayStyle("#ffc0cb", "#ffc0cb", osmFont, "000000", 1, 5); m_defaultStyle[GeoDataPlacemark::Landmass] = createWayStyle("#F1EEE8", "#F1EEE8", true, false); m_defaultStyle[GeoDataPlacemark::UrbanArea] = createWayStyle("#E6E3DD", "#E6E3DD", true, false); m_defaultStyle[GeoDataPlacemark::InternationalDateLine] = createStyle(1.0, 0.0, "#000000", "#000000", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont); m_defaultStyle[GeoDataPlacemark::Bathymetry] = createWayStyle("#a5c9c9", "#a5c9c9", true, false); m_defaultStyle[GeoDataPlacemark::AdminLevel1] = createStyle(0.0, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel2] = createStyle(2.0, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel3] = createStyle(1.8, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel4] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel5] = createStyle(1.25, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashDotDotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel6] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashDotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel7] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel8] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel9] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel10] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::AdminLevel11] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont); m_defaultStyle[GeoDataPlacemark::BoundaryMaritime] = createStyle(2.0, 0.0, "#88b3bf", "#88b3bf", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector(), osmFont); m_defaultStyle[GeoDataPlacemark::Satellite] = GeoDataStyle::Ptr(new GeoDataStyle( MarbleDirs::path( "bitmaps/satellite.png" ), QFont( defaultFamily, defaultSize, 50, false ), defaultLabelColor )); QFont tmp; // Fonts for areas ... tmp = m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().font(); tmp.setLetterSpacing( QFont::AbsoluteSpacing, 2 ); tmp.setCapitalization( QFont::AllUppercase ); tmp.setBold( true ); m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().setFont( tmp ); // Fonts for areas ... tmp = m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().font(); tmp.setLetterSpacing( QFont::AbsoluteSpacing, 2 ); tmp.setCapitalization( QFont::AllUppercase ); tmp.setBold( true ); m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().setFont( tmp ); // Now we need to underline the capitals ... tmp = m_defaultStyle[GeoDataPlacemark::SmallNationCapital]->labelStyle().font(); tmp.setUnderline( true ); m_defaultStyle[GeoDataPlacemark::SmallNationCapital]->labelStyle().setFont( tmp ); tmp = m_defaultStyle[GeoDataPlacemark::MediumNationCapital]->labelStyle().font(); tmp.setUnderline( true ); m_defaultStyle[GeoDataPlacemark::MediumNationCapital]->labelStyle().setFont( tmp ); tmp = m_defaultStyle[GeoDataPlacemark::BigNationCapital]->labelStyle().font(); tmp.setUnderline( true ); m_defaultStyle[GeoDataPlacemark::BigNationCapital]->labelStyle().setFont( tmp ); tmp = m_defaultStyle[GeoDataPlacemark::LargeNationCapital]->labelStyle().font(); tmp.setUnderline( true ); m_defaultStyle[GeoDataPlacemark::LargeNationCapital]->labelStyle().setFont( tmp ); // Buildings m_defaultStyle[GeoDataPlacemark::Building] = createStyle(1, 0, buildingColor, buildingColor.darker(), true, true, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector(), osmFont); for (int i=0; iiconStyle().iconPath().isEmpty()) { auto const category = GeoDataPlacemark::GeoDataVisualCategory(i); m_buildingStyles[category] = GeoDataStyle::Ptr(new GeoDataStyle(*m_defaultStyle[GeoDataPlacemark::Building])); m_buildingStyles[category]->iconStyle() = m_defaultStyle[i]->iconStyle(); m_buildingStyles[category]->labelStyle() = m_defaultStyle[i]->labelStyle(); } } } QString StyleBuilder::Private::createPaintLayerItem(const QString &itemType, GeoDataPlacemark::GeoDataVisualCategory visualCategory, const QString &subType) { QString const category = visualCategoryName(visualCategory); if (subType.isEmpty()) { return itemType + QLatin1Char('/') + category; } else { return itemType + QLatin1Char('/') + category + QLatin1Char('/') + subType; } } void StyleBuilder::Private::initializeOsmVisualCategories() { // Only initialize the map once if (!s_visualCategories.isEmpty()) { return; } s_visualCategories[OsmTag("admin_level", "1")] = GeoDataPlacemark::AdminLevel1; s_visualCategories[OsmTag("admin_level", "2")] = GeoDataPlacemark::AdminLevel2; s_visualCategories[OsmTag("admin_level", "3")] = GeoDataPlacemark::AdminLevel3; s_visualCategories[OsmTag("admin_level", "4")] = GeoDataPlacemark::AdminLevel4; s_visualCategories[OsmTag("admin_level", "5")] = GeoDataPlacemark::AdminLevel5; s_visualCategories[OsmTag("admin_level", "6")] = GeoDataPlacemark::AdminLevel6; s_visualCategories[OsmTag("admin_level", "7")] = GeoDataPlacemark::AdminLevel7; s_visualCategories[OsmTag("admin_level", "8")] = GeoDataPlacemark::AdminLevel8; s_visualCategories[OsmTag("admin_level", "9")] = GeoDataPlacemark::AdminLevel9; s_visualCategories[OsmTag("admin_level", "10")] = GeoDataPlacemark::AdminLevel10; s_visualCategories[OsmTag("admin_level", "11")] = GeoDataPlacemark::AdminLevel11; s_visualCategories[OsmTag("boundary", "maritime")] = GeoDataPlacemark::BoundaryMaritime; s_visualCategories[OsmTag("amenity", "restaurant")] = GeoDataPlacemark::FoodRestaurant; s_visualCategories[OsmTag("amenity", "fast_food")] = GeoDataPlacemark::FoodFastFood; s_visualCategories[OsmTag("amenity", "pub")] = GeoDataPlacemark::FoodPub; s_visualCategories[OsmTag("amenity", "bar")] = GeoDataPlacemark::FoodBar; s_visualCategories[OsmTag("amenity", "cafe")] = GeoDataPlacemark::FoodCafe; s_visualCategories[OsmTag("amenity", "biergarten")] = GeoDataPlacemark::FoodBiergarten; s_visualCategories[OsmTag("amenity", "college")] = GeoDataPlacemark::EducationCollege; s_visualCategories[OsmTag("amenity", "school")] = GeoDataPlacemark::EducationSchool; s_visualCategories[OsmTag("amenity", "university")] = GeoDataPlacemark::EducationUniversity; s_visualCategories[OsmTag("amenity", "childcare")] = GeoDataPlacemark::AmenityKindergarten; s_visualCategories[OsmTag("amenity", "kindergarten")] = GeoDataPlacemark::AmenityKindergarten; s_visualCategories[OsmTag("amenity", "library")] = GeoDataPlacemark::AmenityLibrary; s_visualCategories[OsmTag("amenity", "bus_station")] = GeoDataPlacemark::TransportBusStation; s_visualCategories[OsmTag("amenity", "car_sharing")] = GeoDataPlacemark::TransportCarShare; s_visualCategories[OsmTag("amenity", "fuel")] = GeoDataPlacemark::TransportFuel; s_visualCategories[OsmTag("amenity", "parking")] = GeoDataPlacemark::TransportParking; s_visualCategories[OsmTag("amenity", "parking_space")] = GeoDataPlacemark::TransportParkingSpace; s_visualCategories[OsmTag("amenity", "atm")] = GeoDataPlacemark::MoneyAtm; s_visualCategories[OsmTag("amenity", "bank")] = GeoDataPlacemark::MoneyBank; s_visualCategories[OsmTag("historic", "archaeological_site")] = GeoDataPlacemark::HistoricArchaeologicalSite; s_visualCategories[OsmTag("historic", "castle")] = GeoDataPlacemark::HistoricCastle; s_visualCategories[OsmTag("historic", "fort")] = GeoDataPlacemark::HistoricCastle; s_visualCategories[OsmTag("historic", "memorial")] = GeoDataPlacemark::HistoricMemorial; s_visualCategories[OsmTag("historic", "monument")] = GeoDataPlacemark::HistoricMonument; s_visualCategories[OsmTag("historic", "ruins")] = GeoDataPlacemark::HistoricRuins; s_visualCategories[OsmTag("amenity", "bench")] = GeoDataPlacemark::AmenityBench; s_visualCategories[OsmTag("amenity", "car_wash")] = GeoDataPlacemark::AmenityCarWash; s_visualCategories[OsmTag("amenity", "charging_station")] = GeoDataPlacemark::AmenityChargingStation; s_visualCategories[OsmTag("amenity", "cinema")] = GeoDataPlacemark::AmenityCinema; s_visualCategories[OsmTag("amenity", "community_centre")] = GeoDataPlacemark::AmenityCommunityCentre; s_visualCategories[OsmTag("amenity", "courthouse")] = GeoDataPlacemark::AmenityCourtHouse; s_visualCategories[OsmTag("amenity", "drinking_water")] = GeoDataPlacemark::AmenityDrinkingWater; s_visualCategories[OsmTag("amenity", "embassy")] = GeoDataPlacemark::AmenityEmbassy; s_visualCategories[OsmTag("amenity", "fire_station")] = GeoDataPlacemark::AmenityFireStation; s_visualCategories[OsmTag("amenity", "fountain")] = GeoDataPlacemark::AmenityFountain; s_visualCategories[OsmTag("amenity", "graveyard")] = GeoDataPlacemark::AmenityGraveyard; s_visualCategories[OsmTag("amenity", "hunting_stand")] = GeoDataPlacemark::AmenityHuntingStand; s_visualCategories[OsmTag("amenity", "nightclub")] = GeoDataPlacemark::AmenityNightClub; s_visualCategories[OsmTag("amenity", "police")] = GeoDataPlacemark::AmenityPolice; s_visualCategories[OsmTag("amenity", "post_box")] = GeoDataPlacemark::AmenityPostBox; s_visualCategories[OsmTag("amenity", "post_office")] = GeoDataPlacemark::AmenityPostOffice; s_visualCategories[OsmTag("amenity", "prison")] = GeoDataPlacemark::AmenityPrison; s_visualCategories[OsmTag("amenity", "recycling")] = GeoDataPlacemark::AmenityRecycling; s_visualCategories[OsmTag("amenity", "shelter")] = GeoDataPlacemark::AmenityShelter; s_visualCategories[OsmTag("amenity", "social_facility")] = GeoDataPlacemark::AmenitySocialFacility; s_visualCategories[OsmTag("amenity", "telephone")] = GeoDataPlacemark::AmenityTelephone; s_visualCategories[OsmTag("amenity", "theatre")] = GeoDataPlacemark::AmenityTheatre; s_visualCategories[OsmTag("amenity", "toilets")] = GeoDataPlacemark::AmenityToilets; s_visualCategories[OsmTag("amenity", "townhall")] = GeoDataPlacemark::AmenityTownHall; s_visualCategories[OsmTag("amenity", "waste_basket")] = GeoDataPlacemark::AmenityWasteBasket; s_visualCategories[OsmTag("emergency", "phone")] = GeoDataPlacemark::AmenityEmergencyPhone; s_visualCategories[OsmTag("amenity", "dentist")] = GeoDataPlacemark::HealthDentist; s_visualCategories[OsmTag("amenity", "doctors")] = GeoDataPlacemark::HealthDoctors; s_visualCategories[OsmTag("amenity", "hospital")] = GeoDataPlacemark::HealthHospital; s_visualCategories[OsmTag("amenity", "pharmacy")] = GeoDataPlacemark::HealthPharmacy; s_visualCategories[OsmTag("amenity", "veterinary")] = GeoDataPlacemark::HealthVeterinary; s_visualCategories[OsmTag("amenity", "place_of_worship")] = GeoDataPlacemark::ReligionPlaceOfWorship; s_visualCategories[OsmTag("tourism", "information")] = GeoDataPlacemark::TourismInformation; s_visualCategories[OsmTag("natural", "cave_entrance")] = GeoDataPlacemark::NaturalCave; s_visualCategories[OsmTag("natural", "peak")] = GeoDataPlacemark::NaturalPeak; s_visualCategories[OsmTag("natural", "tree")] = GeoDataPlacemark::NaturalTree; s_visualCategories[OsmTag("natural", "volcano")] = GeoDataPlacemark::NaturalVolcano; s_visualCategories[OsmTag("shop", "alcohol")] = GeoDataPlacemark::ShopAlcohol; s_visualCategories[OsmTag("shop", "art")] = GeoDataPlacemark::ShopArt; s_visualCategories[OsmTag("shop", "bag")] = GeoDataPlacemark::ShopBag; s_visualCategories[OsmTag("shop", "bakery")] = GeoDataPlacemark::ShopBakery; s_visualCategories[OsmTag("shop", "beauty")] = GeoDataPlacemark::ShopBeauty; s_visualCategories[OsmTag("shop", "beverages")] = GeoDataPlacemark::ShopBeverages; s_visualCategories[OsmTag("shop", "bicycle")] = GeoDataPlacemark::ShopBicycle; s_visualCategories[OsmTag("shop", "books")] = GeoDataPlacemark::ShopBook; s_visualCategories[OsmTag("shop", "butcher")] = GeoDataPlacemark::ShopButcher; s_visualCategories[OsmTag("shop", "car")] = GeoDataPlacemark::ShopCar; s_visualCategories[OsmTag("shop", "car_parts")] = GeoDataPlacemark::ShopCarParts; s_visualCategories[OsmTag("shop", "car_repair")] = GeoDataPlacemark::ShopCarRepair; s_visualCategories[OsmTag("shop", "chemist")] = GeoDataPlacemark::ShopChemist; s_visualCategories[OsmTag("shop", "clothes")] = GeoDataPlacemark::ShopClothes; s_visualCategories[OsmTag("shop", "confectionery")] = GeoDataPlacemark::ShopConfectionery; s_visualCategories[OsmTag("shop", "convenience")] = GeoDataPlacemark::ShopConvenience; s_visualCategories[OsmTag("shop", "copy")] = GeoDataPlacemark::ShopCopy; s_visualCategories[OsmTag("shop", "cosmetics")] = GeoDataPlacemark::ShopCosmetics; s_visualCategories[OsmTag("shop", "deli")] = GeoDataPlacemark::ShopDeli; s_visualCategories[OsmTag("shop", "department_store")] = GeoDataPlacemark::ShopDepartmentStore; s_visualCategories[OsmTag("shop", "doityourself")] = GeoDataPlacemark::ShopDoitYourself; s_visualCategories[OsmTag("shop", "electronics")] = GeoDataPlacemark::ShopElectronics; s_visualCategories[OsmTag("shop", "fashion")] = GeoDataPlacemark::ShopFashion; s_visualCategories[OsmTag("shop", "florist")] = GeoDataPlacemark::ShopFlorist; s_visualCategories[OsmTag("shop", "furniture")] = GeoDataPlacemark::ShopFurniture; s_visualCategories[OsmTag("shop", "gift")] = GeoDataPlacemark::ShopGift; s_visualCategories[OsmTag("shop", "greengrocer")] = GeoDataPlacemark::ShopGreengrocer; s_visualCategories[OsmTag("shop", "hairdresser")] = GeoDataPlacemark::ShopHairdresser; s_visualCategories[OsmTag("shop", "hardware")] = GeoDataPlacemark::ShopHardware; s_visualCategories[OsmTag("shop", "hifi")] = GeoDataPlacemark::ShopHifi; s_visualCategories[OsmTag("shop", "jewelry")] = GeoDataPlacemark::ShopJewelry; s_visualCategories[OsmTag("shop", "kiosk")] = GeoDataPlacemark::ShopKiosk; s_visualCategories[OsmTag("shop", "laundry")] = GeoDataPlacemark::ShopLaundry; s_visualCategories[OsmTag("shop", "mobile_phone")] = GeoDataPlacemark::ShopMobilePhone; s_visualCategories[OsmTag("shop", "motorcycle")] = GeoDataPlacemark::ShopMotorcycle; s_visualCategories[OsmTag("shop", "musical_instrument")] = GeoDataPlacemark::ShopMusicalInstrument; s_visualCategories[OsmTag("shop", "optician")] = GeoDataPlacemark::ShopOptician; s_visualCategories[OsmTag("shop", "outdoor")] = GeoDataPlacemark::ShopOutdoor; s_visualCategories[OsmTag("shop", "perfumery")] = GeoDataPlacemark::ShopPerfumery; s_visualCategories[OsmTag("shop", "pet")] = GeoDataPlacemark::ShopPet; s_visualCategories[OsmTag("shop", "photo")] = GeoDataPlacemark::ShopPhoto; s_visualCategories[OsmTag("shop", "seafood")] = GeoDataPlacemark::ShopSeafood; s_visualCategories[OsmTag("shop", "shoes")] = GeoDataPlacemark::ShopShoes; s_visualCategories[OsmTag("shop", "sports")] = GeoDataPlacemark::ShopSports; s_visualCategories[OsmTag("shop", "stationery")] = GeoDataPlacemark::ShopStationery; s_visualCategories[OsmTag("shop", "supermarket")] = GeoDataPlacemark::ShopSupermarket; s_visualCategories[OsmTag("shop", "tea")] = GeoDataPlacemark::ShopTea; s_visualCategories[OsmTag("shop", "tobacco")] = GeoDataPlacemark::ShopTobacco; s_visualCategories[OsmTag("shop", "toys")] = GeoDataPlacemark::ShopToys; s_visualCategories[OsmTag("shop", "travel_agency")] = GeoDataPlacemark::ShopTravelAgency; s_visualCategories[OsmTag("shop", "variety_store")] = GeoDataPlacemark::ShopVarietyStore; // Default for all other shops foreach (const QString &value, shopValues()) { s_visualCategories[OsmTag("shop", value)] = GeoDataPlacemark::Shop; } s_visualCategories[OsmTag("man_made", "bridge")] = GeoDataPlacemark::ManmadeBridge; s_visualCategories[OsmTag("man_made", "lighthouse")] = GeoDataPlacemark::ManmadeLighthouse; s_visualCategories[OsmTag("man_made", "pier")] = GeoDataPlacemark::ManmadePier; s_visualCategories[OsmTag("man_made", "water_tower")] = GeoDataPlacemark::ManmadeWaterTower; s_visualCategories[OsmTag("man_made", "windmill")] = GeoDataPlacemark::ManmadeWindMill; s_visualCategories[OsmTag("religion", "")] = GeoDataPlacemark::ReligionPlaceOfWorship; s_visualCategories[OsmTag("religion", "bahai")] = GeoDataPlacemark::ReligionBahai; s_visualCategories[OsmTag("religion", "buddhist")] = GeoDataPlacemark::ReligionBuddhist; s_visualCategories[OsmTag("religion", "christian")] = GeoDataPlacemark::ReligionChristian; s_visualCategories[OsmTag("religion", "hindu")] = GeoDataPlacemark::ReligionHindu; s_visualCategories[OsmTag("religion", "jain")] = GeoDataPlacemark::ReligionJain; s_visualCategories[OsmTag("religion", "jewish")] = GeoDataPlacemark::ReligionJewish; s_visualCategories[OsmTag("religion", "muslim")] = GeoDataPlacemark::ReligionMuslim; s_visualCategories[OsmTag("religion", "shinto")] = GeoDataPlacemark::ReligionShinto; s_visualCategories[OsmTag("religion", "sikh")] = GeoDataPlacemark::ReligionSikh; s_visualCategories[OsmTag("tourism", "camp_site")] = GeoDataPlacemark::AccomodationCamping; s_visualCategories[OsmTag("tourism", "guest_house")] = GeoDataPlacemark::AccomodationGuestHouse; s_visualCategories[OsmTag("tourism", "hostel")] = GeoDataPlacemark::AccomodationHostel; s_visualCategories[OsmTag("tourism", "hotel")] = GeoDataPlacemark::AccomodationHotel; s_visualCategories[OsmTag("tourism", "motel")] = GeoDataPlacemark::AccomodationMotel; s_visualCategories[OsmTag("tourism", "alpine_hut")] = GeoDataPlacemark::TourismAlpineHut; s_visualCategories[OsmTag("tourism", "artwork")] = GeoDataPlacemark::TourismArtwork; s_visualCategories[OsmTag("tourism", "attraction")] = GeoDataPlacemark::TourismAttraction; s_visualCategories[OsmTag("tourism", "museum")] = GeoDataPlacemark::TourismMuseum; s_visualCategories[OsmTag("tourism", "theme_park")] = GeoDataPlacemark::TourismThemePark; s_visualCategories[OsmTag("tourism", "viewpoint")] = GeoDataPlacemark::TourismViewPoint; s_visualCategories[OsmTag("tourism", "wilderness_hut")] = GeoDataPlacemark::TourismWildernessHut; s_visualCategories[OsmTag("tourism", "zoo")] = GeoDataPlacemark::TourismZoo; s_visualCategories[OsmTag("barrier", "city_wall")] = GeoDataPlacemark::BarrierCityWall; s_visualCategories[OsmTag("barrier", "gate")] = GeoDataPlacemark::BarrierGate; s_visualCategories[OsmTag("barrier", "lift_gate")] = GeoDataPlacemark::BarrierLiftGate; s_visualCategories[OsmTag("barrier", "wall")] = GeoDataPlacemark::BarrierWall; s_visualCategories[OsmTag("highway", "traffic_signals")] = GeoDataPlacemark::HighwayTrafficSignals; s_visualCategories[OsmTag("highway", "cycleway")] = GeoDataPlacemark::HighwayCycleway; s_visualCategories[OsmTag("highway", "footway")] = GeoDataPlacemark::HighwayFootway; s_visualCategories[OsmTag("highway", "living_street")] = GeoDataPlacemark::HighwayLivingStreet; s_visualCategories[OsmTag("highway", "motorway")] = GeoDataPlacemark::HighwayMotorway; s_visualCategories[OsmTag("highway", "motorway_link")] = GeoDataPlacemark::HighwayMotorwayLink; s_visualCategories[OsmTag("highway", "path")] = GeoDataPlacemark::HighwayPath; s_visualCategories[OsmTag("highway", "pedestrian")] = GeoDataPlacemark::HighwayPedestrian; s_visualCategories[OsmTag("highway", "primary")] = GeoDataPlacemark::HighwayPrimary; s_visualCategories[OsmTag("highway", "primary_link")] = GeoDataPlacemark::HighwayPrimaryLink; s_visualCategories[OsmTag("highway", "raceway")] = GeoDataPlacemark::HighwayRaceway; s_visualCategories[OsmTag("highway", "residential")] = GeoDataPlacemark::HighwayResidential; s_visualCategories[OsmTag("highway", "road")] = GeoDataPlacemark::HighwayRoad; s_visualCategories[OsmTag("highway", "secondary")] = GeoDataPlacemark::HighwaySecondary; s_visualCategories[OsmTag("highway", "secondary_link")] = GeoDataPlacemark::HighwaySecondaryLink; s_visualCategories[OsmTag("highway", "service")] = GeoDataPlacemark::HighwayService; s_visualCategories[OsmTag("highway", "steps")] = GeoDataPlacemark::HighwaySteps; s_visualCategories[OsmTag("highway", "tertiary")] = GeoDataPlacemark::HighwayTertiary; s_visualCategories[OsmTag("highway", "tertiary_link")] = GeoDataPlacemark::HighwayTertiaryLink; s_visualCategories[OsmTag("highway", "track")] = GeoDataPlacemark::HighwayTrack; s_visualCategories[OsmTag("highway", "trunk")] = GeoDataPlacemark::HighwayTrunk; s_visualCategories[OsmTag("highway", "trunk_link")] = GeoDataPlacemark::HighwayTrunkLink; s_visualCategories[OsmTag("highway", "unclassified")] = GeoDataPlacemark::HighwayUnclassified; s_visualCategories[OsmTag("highway", "unknown")] = GeoDataPlacemark::HighwayUnknown; s_visualCategories[OsmTag("highway", "corridor")] = GeoDataPlacemark::HighwayCorridor; s_visualCategories[OsmTag("natural", "bay")] = GeoDataPlacemark::NaturalWater; s_visualCategories[OsmTag("natural", "coastline")] = GeoDataPlacemark::NaturalWater; s_visualCategories[OsmTag("natural", "reef")] = GeoDataPlacemark::NaturalReef; s_visualCategories[OsmTag("natural", "water")] = GeoDataPlacemark::NaturalWater; s_visualCategories[OsmTag("waterway", "canal")] = GeoDataPlacemark::WaterwayCanal; s_visualCategories[OsmTag("waterway", "ditch")] = GeoDataPlacemark::WaterwayDitch; s_visualCategories[OsmTag("waterway", "drain")] = GeoDataPlacemark::WaterwayDrain; s_visualCategories[OsmTag("waterway", "river")] = GeoDataPlacemark::WaterwayRiver; s_visualCategories[OsmTag("waterway", "riverbank")] = GeoDataPlacemark::NaturalWater; s_visualCategories[OsmTag("waterway", "weir")] = GeoDataPlacemark::WaterwayWeir; s_visualCategories[OsmTag("waterway", "stream")] = GeoDataPlacemark::WaterwayStream; s_visualCategories[OsmTag("natural", "beach")] = GeoDataPlacemark::NaturalBeach; s_visualCategories[OsmTag("natural", "cliff")] = GeoDataPlacemark::NaturalCliff; s_visualCategories[OsmTag("natural", "glacier")] = GeoDataPlacemark::NaturalGlacier; s_visualCategories[OsmTag("glacier:type", "shelf")] = GeoDataPlacemark::NaturalIceShelf; s_visualCategories[OsmTag("natural", "scrub")] = GeoDataPlacemark::NaturalScrub; s_visualCategories[OsmTag("natural", "wetland")] = GeoDataPlacemark::NaturalWetland; s_visualCategories[OsmTag("natural", "wood")] = GeoDataPlacemark::NaturalWood; s_visualCategories[OsmTag("military", "danger_area")] = GeoDataPlacemark::MilitaryDangerArea; s_visualCategories[OsmTag("landuse", "allotments")] = GeoDataPlacemark::LanduseAllotments; s_visualCategories[OsmTag("landuse", "basin")] = GeoDataPlacemark::LanduseBasin; s_visualCategories[OsmTag("landuse", "brownfield")] = GeoDataPlacemark::LanduseConstruction; s_visualCategories[OsmTag("landuse", "cemetery")] = GeoDataPlacemark::LanduseCemetery; s_visualCategories[OsmTag("landuse", "commercial")] = GeoDataPlacemark::LanduseCommercial; s_visualCategories[OsmTag("landuse", "construction")] = GeoDataPlacemark::LanduseConstruction; s_visualCategories[OsmTag("landuse", "farm")] = GeoDataPlacemark::LanduseFarmland; s_visualCategories[OsmTag("landuse", "farmland")] = GeoDataPlacemark::LanduseFarmland; s_visualCategories[OsmTag("landuse", "farmyard")] = GeoDataPlacemark::LanduseFarmland; s_visualCategories[OsmTag("landuse", "forest")] = GeoDataPlacemark::NaturalWood; s_visualCategories[OsmTag("landuse", "garages")] = GeoDataPlacemark::LanduseGarages; s_visualCategories[OsmTag("landuse", "grass")] = GeoDataPlacemark::LanduseGrass; s_visualCategories[OsmTag("landuse", "greenfield")] = GeoDataPlacemark::LanduseConstruction; s_visualCategories[OsmTag("landuse", "greenhouse_horticulture")] = GeoDataPlacemark::LanduseFarmland; s_visualCategories[OsmTag("landuse", "industrial")] = GeoDataPlacemark::LanduseIndustrial; s_visualCategories[OsmTag("landuse", "landfill")] = GeoDataPlacemark::LanduseLandfill; s_visualCategories[OsmTag("landuse", "meadow")] = GeoDataPlacemark::LanduseMeadow; s_visualCategories[OsmTag("landuse", "military")] = GeoDataPlacemark::LanduseMilitary; s_visualCategories[OsmTag("landuse", "orchard")] = GeoDataPlacemark::LanduseFarmland; s_visualCategories[OsmTag("landuse", "orchard")] = GeoDataPlacemark::LanduseOrchard; s_visualCategories[OsmTag("landuse", "quarry")] = GeoDataPlacemark::LanduseQuarry; s_visualCategories[OsmTag("landuse", "railway")] = GeoDataPlacemark::LanduseRailway; s_visualCategories[OsmTag("landuse", "recreation_ground")] = GeoDataPlacemark::LeisurePark; s_visualCategories[OsmTag("landuse", "reservoir")] = GeoDataPlacemark::LanduseReservoir; s_visualCategories[OsmTag("landuse", "residential")] = GeoDataPlacemark::LanduseResidential; s_visualCategories[OsmTag("landuse", "retail")] = GeoDataPlacemark::LanduseRetail; s_visualCategories[OsmTag("landuse", "village_green")] = GeoDataPlacemark::LanduseGrass; s_visualCategories[OsmTag("landuse", "vineyard")] = GeoDataPlacemark::LanduseVineyard; s_visualCategories[OsmTag("leisure", "common")] = GeoDataPlacemark::LanduseGrass; s_visualCategories[OsmTag("leisure", "garden")] = GeoDataPlacemark::LanduseGrass; s_visualCategories[OsmTag("leisure", "golf_course")] = GeoDataPlacemark::LeisureGolfCourse; s_visualCategories[OsmTag("leisure", "marina")] = GeoDataPlacemark::LeisureMarina; s_visualCategories[OsmTag("leisure", "miniature_golf")] = GeoDataPlacemark::LeisureMinigolfCourse; s_visualCategories[OsmTag("leisure", "park")] = GeoDataPlacemark::LeisurePark; s_visualCategories[OsmTag("leisure", "pitch")] = GeoDataPlacemark::LeisurePitch; s_visualCategories[OsmTag("leisure", "playground")] = GeoDataPlacemark::LeisurePlayground; s_visualCategories[OsmTag("leisure", "sports_centre")] = GeoDataPlacemark::LeisureSportsCentre; s_visualCategories[OsmTag("leisure", "stadium")] = GeoDataPlacemark::LeisureStadium; s_visualCategories[OsmTag("leisure", "swimming_pool")] = GeoDataPlacemark::LeisureSwimmingPool; s_visualCategories[OsmTag("leisure", "track")] = GeoDataPlacemark::LeisureTrack; s_visualCategories[OsmTag("leisure", "water_park")] = GeoDataPlacemark::LeisureWaterPark; s_visualCategories[OsmTag("railway", "abandoned")] = GeoDataPlacemark::RailwayAbandoned; s_visualCategories[OsmTag("railway", "construction")] = GeoDataPlacemark::RailwayConstruction; s_visualCategories[OsmTag("railway", "disused")] = GeoDataPlacemark::RailwayAbandoned; s_visualCategories[OsmTag("railway", "funicular")] = GeoDataPlacemark::RailwayFunicular; s_visualCategories[OsmTag("railway", "halt")] = GeoDataPlacemark::TransportTrainStation; s_visualCategories[OsmTag("railway", "light_rail")] = GeoDataPlacemark::RailwayLightRail; s_visualCategories[OsmTag("railway", "miniature")] = GeoDataPlacemark::RailwayMiniature; s_visualCategories[OsmTag("railway", "monorail")] = GeoDataPlacemark::RailwayMonorail; s_visualCategories[OsmTag("railway", "narrow_gauge")] = GeoDataPlacemark::RailwayNarrowGauge; s_visualCategories[OsmTag("railway", "platform")] = GeoDataPlacemark::TransportPlatform; s_visualCategories[OsmTag("railway", "preserved")] = GeoDataPlacemark::RailwayPreserved; s_visualCategories[OsmTag("railway", "rail")] = GeoDataPlacemark::RailwayRail; s_visualCategories[OsmTag("railway", "razed")] = GeoDataPlacemark::RailwayAbandoned; s_visualCategories[OsmTag("railway", "station")] = GeoDataPlacemark::TransportTrainStation; s_visualCategories[OsmTag("public_transport", "station")] = GeoDataPlacemark::TransportTrainStation; s_visualCategories[OsmTag("railway", "subway")] = GeoDataPlacemark::RailwaySubway; s_visualCategories[OsmTag("railway", "tram")] = GeoDataPlacemark::RailwayTram; s_visualCategories[OsmTag("route", "hiking")] = GeoDataPlacemark::RouteHiking; s_visualCategories[OsmTag("power", "tower")] = GeoDataPlacemark::PowerTower; s_visualCategories[OsmTag("aeroway", "aerodrome")] = GeoDataPlacemark::TransportAerodrome; s_visualCategories[OsmTag("aeroway", "apron")] = GeoDataPlacemark::TransportAirportApron; s_visualCategories[OsmTag("aeroway", "gate")] = GeoDataPlacemark::TransportAirportGate; s_visualCategories[OsmTag("aeroway", "helipad")] = GeoDataPlacemark::TransportHelipad; s_visualCategories[OsmTag("aeroway", "runway")] = GeoDataPlacemark::TransportAirportRunway; s_visualCategories[OsmTag("aeroway", "taxiway")] = GeoDataPlacemark::TransportAirportTaxiway; s_visualCategories[OsmTag("aeroway", "terminal")] = GeoDataPlacemark::TransportAirportTerminal; s_visualCategories[OsmTag("amenity", "bicycle_parking")] = GeoDataPlacemark::TransportBicycleParking; s_visualCategories[OsmTag("amenity", "bicycle_rental")] = GeoDataPlacemark::TransportRentalBicycle; s_visualCategories[OsmTag("amenity", "car_rental")] = GeoDataPlacemark::TransportRentalCar; s_visualCategories[OsmTag("amenity", "motorcycle_parking")] = GeoDataPlacemark::TransportMotorcycleParking; s_visualCategories[OsmTag("amenity", "taxi")] = GeoDataPlacemark::TransportTaxiRank; s_visualCategories[OsmTag("highway", "bus_stop")] = GeoDataPlacemark::TransportBusStop; s_visualCategories[OsmTag("highway", "speed_camera")] = GeoDataPlacemark::TransportSpeedCamera; s_visualCategories[OsmTag("public_transport", "platform")] = GeoDataPlacemark::TransportPlatform; s_visualCategories[OsmTag("railway", "subway_entrance")] = GeoDataPlacemark::TransportSubwayEntrance; s_visualCategories[OsmTag("railway", "tram_stop")] = GeoDataPlacemark::TransportTramStop; s_visualCategories[OsmTag("place", "city")] = GeoDataPlacemark::PlaceCity; s_visualCategories[OsmTag("place", "hamlet")] = GeoDataPlacemark::PlaceHamlet; s_visualCategories[OsmTag("place", "locality")] = GeoDataPlacemark::PlaceLocality; s_visualCategories[OsmTag("place", "suburb")] = GeoDataPlacemark::PlaceSuburb; s_visualCategories[OsmTag("place", "town")] = GeoDataPlacemark::PlaceTown; s_visualCategories[OsmTag("place", "village")] = GeoDataPlacemark::PlaceVillage; //Custom Marble OSM Tags s_visualCategories[OsmTag("marble_land", "landmass")] = GeoDataPlacemark::Landmass; s_visualCategories[OsmTag("settlement", "yes")] = GeoDataPlacemark::UrbanArea; s_visualCategories[OsmTag("marble_line", "date")] = GeoDataPlacemark::InternationalDateLine; s_visualCategories[OsmTag("marble:feature", "bathymetry")] = GeoDataPlacemark::Bathymetry; // Default for buildings foreach (const auto &tag, buildingTags()) { s_visualCategories[tag] = GeoDataPlacemark::Building; } } void StyleBuilder::Private::initializeMinimumZoomLevels() { if (s_defaultMinZoomLevelsInitialized) { return; } s_defaultMinZoomLevelsInitialized = true; for ( int i = 0; i < GeoDataPlacemark::LastIndex; i++ ) { s_defaultMinZoomLevels[i] = -1; } s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel10]= 8; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel11]= 8; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel1] = 0; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel2] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel3] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel4] = 2; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel5] = 4; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel6] = 5; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel7] = 5; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel8] = 7; s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel9] = 7; s_defaultMinZoomLevels[GeoDataPlacemark::HistoricArchaeologicalSite]= 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityBench]= 19; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFountain] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityGraveyard] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTelephone] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityKindergarten] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityLibrary] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityWasteBasket] = 19; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityToilets]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTownHall]= 15; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureWaterPark] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityDrinkingWater]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityEmbassy]= 15; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityEmergencyPhone]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCommunityCentre]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFountain]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityNightClub]= 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCourtHouse]= 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFireStation]= 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityHuntingStand]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPolice]= 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPostBox]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPostOffice]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPrison]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityRecycling]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityShelter]= 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityChargingStation] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCarWash] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::AmenitySocialFacility] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::BarrierCityWall] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::BarrierGate] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::BarrierLiftGate] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::BarrierWall] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::Bathymetry] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::BoundaryMaritime] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::Building] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::Default] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::EducationCollege] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::EducationSchool] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::EducationUniversity] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::FoodBar] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::FoodBiergarten] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::FoodCafe] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::FoodFastFood] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::FoodPub] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::FoodRestaurant] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::HealthHospital] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::HealthPharmacy] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HealthDentist] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HealthDoctors] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HealthVeterinary] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HistoricMemorial] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayCycleway] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayFootway] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayLivingStreet] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayMotorwayLink] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayMotorway] = 6; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPath] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPedestrian] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPrimaryLink] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPrimary] = 8; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayRaceway] = 12; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayResidential] = 14; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayRoad] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySecondaryLink]= 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySecondary] = 9; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayService] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySteps]= 15; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTertiaryLink] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTertiary] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrack]= 15; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrunkLink] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrunk]= 7; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayUnknown] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayUnclassified] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrafficSignals] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HighwayCorridor] = 18; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationCamping] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationHostel] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationHotel] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationMotel] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationYouthHostel] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationGuestHouse] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::InternationalDateLine] = 1; s_defaultMinZoomLevels[GeoDataPlacemark::Landmass] = 0; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseAllotments] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseBasin]= 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseCemetery] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseCommercial] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseConstruction] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseFarmland] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseFarmyard] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseGarages] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseGrass]= 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseIndustrial] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseLandfill] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseMeadow] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseMilitary] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseOrchard] = 14; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseQuarry] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseRailway] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseReservoir] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseResidential] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseRetail] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LanduseVineyard] = 14; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureGolfCourse] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureMarina] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePark] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePlayground] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePitch] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureStadium] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureSwimmingPool] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureSportsCentre] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureTrack] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::LeisureMinigolfCourse] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeBridge] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeLighthouse] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::ManmadePier] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeWaterTower] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeWindMill] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::MilitaryDangerArea] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::MoneyAtm] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::MoneyBank] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalBeach]= 13; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalCliff]= 15; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalGlacier] = 3; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalHeath] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalIceShelf] = 3; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalVolcano] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalPeak] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalReef] = 3; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalScrub]= 13; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalTree] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalCave] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWater]= 3; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWetland] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWood] = 8; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCityNationalCapital] = 9; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCityCapital] = 9; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCity] = 9; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceHamlet] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceLocality] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceSuburb] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTownNationalCapital] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTownCapital] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTown] = 11; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillageNationalCapital] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillageCapital] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillage]= 13; s_defaultMinZoomLevels[GeoDataPlacemark::PowerTower]= 18; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayAbandoned] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayConstruction] = 10; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayFunicular] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayLightRail] = 12; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayMiniature] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayMonorail] = 12; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayNarrowGauge] = 6; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayPreserved] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayRail] = 6; s_defaultMinZoomLevels[GeoDataPlacemark::RailwaySubway] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::RailwayTram] = 14; s_defaultMinZoomLevels[GeoDataPlacemark::RouteHiking] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::Satellite] = 0; for (int shop=GeoDataPlacemark::ShopBeverages; shop<=GeoDataPlacemark::Shop; ++shop) { s_defaultMinZoomLevels[shop] = 17; } s_defaultMinZoomLevels[GeoDataPlacemark::ShopSupermarket] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::ShopDepartmentStore] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::ShopDoitYourself] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TourismAlpineHut] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::TourismWildernessHut] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::TourismAttraction] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TourismArtwork] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::HistoricCastle] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCinema] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TourismMuseum] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::HistoricRuins] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTheatre] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TourismThemePark] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TourismViewPoint] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TourismZoo] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::HistoricMonument] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TourismInformation] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAerodrome] = 9; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportApron] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportRunway] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportTaxiway] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TransportBusStation] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TransportCarShare] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportFuel] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportHelipad] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportTerminal] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportGate] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportPlatform] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportSpeedCamera] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportRentalCar] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportRentalBicycle] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportTaxiRank] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportParking] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportBusStop] = 16; s_defaultMinZoomLevels[GeoDataPlacemark::TransportTrainStation] = 13; s_defaultMinZoomLevels[GeoDataPlacemark::TransportTramStop] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::TransportParkingSpace] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportBicycleParking] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportMotorcycleParking] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::TransportSubwayEntrance] = 17; for (int religion=GeoDataPlacemark::ReligionPlaceOfWorship; religion<=GeoDataPlacemark::ReligionSikh; ++religion) { s_defaultMinZoomLevels[religion] = 17; } s_defaultMinZoomLevels[GeoDataPlacemark::UrbanArea] = 3; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayCanal] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayDitch] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayDrain] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayStream] = 15; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayRiver] = 3; s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayWeir] = 17; s_defaultMinZoomLevels[GeoDataPlacemark::CrossingIsland] = 18; s_defaultMinZoomLevels[GeoDataPlacemark::CrossingRailway] = 18; s_defaultMinZoomLevels[GeoDataPlacemark::CrossingSignals] = 18; s_defaultMinZoomLevels[GeoDataPlacemark::CrossingZebra] = 18; for ( int i = GeoDataPlacemark::PlaceCity; i < GeoDataPlacemark::LastIndex; i++ ) { if (s_defaultMinZoomLevels[i] < 0) { qDebug() << "Missing default min zoom level for GeoDataPlacemark::GeoDataVisualCategory " << i; Q_ASSERT(false && "StyleBuilder::Private::initializeMinimumZoomLevels is incomplete"); s_defaultMinZoomLevels[i] = 15; } } } StyleBuilder::StyleBuilder() : d(new Private) { // nothing to do } StyleBuilder::~StyleBuilder() { delete d; } QFont StyleBuilder::defaultFont() const { return d->m_defaultFont; } void StyleBuilder::setDefaultFont( const QFont& font ) { d->m_defaultFont = font; reset(); } QColor StyleBuilder::defaultLabelColor() const { return d->m_defaultLabelColor; } void StyleBuilder::setDefaultLabelColor( const QColor& color ) { d->m_defaultLabelColor = color; reset(); } GeoDataStyle::ConstPtr StyleBuilder::createStyle(const StyleParameters ¶meters) const { const GeoDataPlacemark *const placemark = parameters.placemark; if (!placemark) { Q_ASSERT(false && "Must not pass a null placemark to StyleBuilder::createStyle"); return GeoDataStyle::Ptr(); } if (placemark->customStyle()) { return placemark->customStyle(); } if (d->m_specialStyleCacheTileLevel != parameters.tileLevel) { d->m_specialStyleCache.clear(); d->m_specialStyleCacheTileLevel = parameters.tileLevel; } QString specialStyleCacheKey; bool cacheSpecialStyle = false; OsmPlacemarkData const & osmData = placemark->osmData(); auto const visualCategory = placemark->visualCategory(); if (visualCategory == GeoDataPlacemark::Building) { auto const tagMap = osmTagMapping(); auto const & osmData = placemark->osmData(); auto const buildingTag = QStringLiteral("building"); for (auto iter = osmData.tagsBegin(), end = osmData.tagsEnd(); iter != end; ++iter) { auto const osmTag = StyleBuilder::OsmTag(iter.key(), iter.value()); if (iter.key() != buildingTag && tagMap.contains(osmTag)) { return d->m_buildingStyles.value(tagMap.value(osmTag), d->m_defaultStyle[visualCategory]); } } } GeoDataStyle::ConstPtr style = d->presetStyle(visualCategory); if (placemark->geometry()->nodeType() == GeoDataTypes::GeoDataPointType) { if (visualCategory == GeoDataPlacemark::NaturalTree) { GeoDataCoordinates const coordinates = placemark->coordinate(); qreal const lat = coordinates.latitude(GeoDataCoordinates::Degree); if (qAbs(lat) > 15) { /** @todo Should maybe auto-adjust to MarbleClock at some point */ int const month = QDate::currentDate().month(); bool const southernHemisphere = lat < 0; if (southernHemisphere) { if (month >= 3 && month <= 5) { style = d->m_styleTreeAutumn; } else if (month >= 6 && month <= 8) { style = d->m_styleTreeWinter; } } else { if (month >= 9 && month <= 11) { style = d->m_styleTreeAutumn; } else if (month == 12 || month == 1 || month == 2) { style = d->m_styleTreeWinter; } } } } } else if (placemark->geometry()->nodeType() == GeoDataTypes::GeoDataLinearRingType) { bool adjustStyle = false; GeoDataPolyStyle polyStyle = style->polyStyle(); GeoDataLineStyle lineStyle = style->lineStyle(); if (visualCategory == GeoDataPlacemark::NaturalWater) { if (osmData.containsTag(QStringLiteral("salt"), QStringLiteral("yes"))) { polyStyle.setColor("#ffff80"); lineStyle.setPenStyle(Qt::DashLine); lineStyle.setWidth(2); adjustStyle = true; } } else if (visualCategory == GeoDataPlacemark::Bathymetry) { auto tagIter = osmData.findTag(QStringLiteral("ele")); if (tagIter != osmData.tagsEnd()) { const QString& elevation = tagIter.value(); if (elevation == QLatin1String("4000")) { polyStyle.setColor("#94c2c2"); lineStyle.setColor("#94c2c2"); adjustStyle = true; } } } else if (visualCategory == GeoDataPlacemark::AmenityGraveyard || visualCategory == GeoDataPlacemark::LanduseCemetery) { auto tagIter = osmData.findTag(QStringLiteral("religion")); if (tagIter != osmData.tagsEnd()) { const QString& religion = tagIter.value(); if (religion == QLatin1String("jewish")) { polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_jewish.png")); adjustStyle = true; } else if (religion == QLatin1String("christian")) { polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_christian.png")); adjustStyle = true; } else if (religion == QLatin1String("INT-generic")) { polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png")); adjustStyle = true; } } } if (adjustStyle) { GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style)); newStyle->setPolyStyle(polyStyle); newStyle->setLineStyle(lineStyle); style = newStyle; } if (style->iconStyle().iconPath().isEmpty()) { const GeoDataPlacemark::GeoDataVisualCategory category = determineVisualCategory(osmData); const GeoDataStyle::ConstPtr categoryStyle = d->presetStyle(category); if (category != GeoDataPlacemark::None && !categoryStyle->iconStyle().scaledIcon().isNull()) { GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style)); newStyle->setIconStyle(categoryStyle->iconStyle()); style = newStyle; } } } else if (placemark->geometry()->nodeType() == GeoDataTypes::GeoDataLineStringType) { GeoDataPolyStyle polyStyle = style->polyStyle(); GeoDataLineStyle lineStyle = style->lineStyle(); GeoDataLabelStyle labelStyle = style->labelStyle(); + GeoDataIconStyle iconStyle = style->iconStyle(); lineStyle.setCosmeticOutline(true); bool adjustStyle = false; if(visualCategory == GeoDataPlacemark::AdminLevel2){ if (osmData.containsTag(QStringLiteral("maritime"), QStringLiteral("yes"))) { lineStyle.setColor("#88b3bf"); polyStyle.setColor("#88b3bf"); if (osmData.containsTag(QStringLiteral("marble:disputed"), QStringLiteral("yes"))) { lineStyle.setPenStyle( Qt::DashLine ); } adjustStyle = true; } } else if ((visualCategory >= GeoDataPlacemark::HighwayService && visualCategory <= GeoDataPlacemark::HighwayMotorway) || visualCategory == GeoDataPlacemark::TransportAirportRunway) { // Take cached Style instance if possible if (d->m_specialStyleCacheTileLevel == parameters.tileLevel) { specialStyleCacheKey = visualCategory; if (d->m_specialStyleCache.contains(specialStyleCacheKey)) { style = d->m_specialStyleCache[specialStyleCacheKey]; return style; } } adjustStyle = true; if (parameters.tileLevel <= 8) { /** @todo: Dummy implementation for dynamic style changes based on tile level, replace with sane values */ lineStyle.setPhysicalWidth(0.0); lineStyle.setWidth(2.0); cacheSpecialStyle = true; } else if (parameters.tileLevel <= 10) { /** @todo: Dummy implementation for dynamic style changes based on tile level, replace with sane values */ lineStyle.setPhysicalWidth(0.0); lineStyle.setWidth(3.0); cacheSpecialStyle = true; } else if (parameters.tileLevel <= 12) { /** @todo: Dummy implementation for dynamic style changes based on tile level, replace with sane values */ lineStyle.setPhysicalWidth(0.0); lineStyle.setWidth(4.0); cacheSpecialStyle = true; } else { auto tagIter = osmData.findTag(QStringLiteral("width")); if (tagIter != osmData.tagsEnd()) { QString const widthValue = QString(tagIter.value()).remove(QStringLiteral(" meters")).remove(QStringLiteral(" m")); bool ok; float const width = widthValue.toFloat(&ok); lineStyle.setPhysicalWidth(ok ? qBound(0.1f, width, 200.0f) : 0.0f); } else { bool const isOneWay = osmData.containsTag(QStringLiteral("oneway"), QStringLiteral("yes")) || osmData.containsTag(QStringLiteral("oneway"), QStringLiteral("-1")); int const lanes = isOneWay ? 1 : 2; // also for motorway which implicitly is one way, but has two lanes and each direction has its own highway double const laneWidth = 3.0; double const margins = visualCategory == GeoDataPlacemark::HighwayMotorway ? 2.0 : (isOneWay ? 1.0 : 0.0); double const physicalWidth = margins + lanes * laneWidth; lineStyle.setPhysicalWidth(physicalWidth); } } QString const accessValue = osmData.tagValue(QStringLiteral("access")); if (accessValue == QLatin1String("private") || accessValue == QLatin1String("no") || accessValue == QLatin1String("agricultural") || accessValue == QLatin1String("delivery") || accessValue == QLatin1String("forestry")) { QColor polyColor = polyStyle.color(); qreal hue, sat, val; polyColor.getHsvF(&hue, &sat, &val); polyColor.setHsvF(0.98, qMin(1.0, 0.2 + sat), val); polyStyle.setColor(polyColor); lineStyle.setColor(lineStyle.color().darker(150)); cacheSpecialStyle = false; } if (osmData.containsTag("tunnel", "yes") ) { QColor polyColor = polyStyle.color(); qreal hue, sat, val; polyColor.getHsvF(&hue, &sat, &val); polyColor.setHsvF(hue, 0.25 * sat, 0.95 * val); polyStyle.setColor(polyColor); lineStyle.setColor(lineStyle.color().lighter(115)); cacheSpecialStyle = false; } } else if (visualCategory >= GeoDataPlacemark::WaterwayCanal && visualCategory <= GeoDataPlacemark::WaterwayStream) { adjustStyle = true; // Take cached Style instance if possible specialStyleCacheKey = visualCategory; if (d->m_specialStyleCache.contains(specialStyleCacheKey)) { style = d->m_specialStyleCache[specialStyleCacheKey]; return style; } if (parameters.tileLevel <= 3) { lineStyle.setWidth(1); lineStyle.setPhysicalWidth(0.0); cacheSpecialStyle = true; } else if (parameters.tileLevel <= 7) { lineStyle.setWidth(2); lineStyle.setPhysicalWidth(0.0); cacheSpecialStyle = true; } else { QString const widthValue = osmData.tagValue(QStringLiteral("width")).remove(QStringLiteral(" meters")).remove(QStringLiteral(" m")); bool ok; float const width = widthValue.toFloat(&ok); lineStyle.setPhysicalWidth(ok ? qBound(0.1f, width, 200.0f) : 0.0f); } + } else if (visualCategory == GeoDataPlacemark::RouteHiking && osmData.containsTagKey(QStringLiteral("osmc:symbol"))) { + adjustStyle = true; + + QString const osmcSymbolValue = osmData.tagValue(QStringLiteral("osmc:symbol")); + OsmcSymbol symbol = OsmcSymbol(osmcSymbolValue); + + lineStyle.setColor(symbol.wayColor()); + iconStyle.setIcon(symbol.icon()); } if (adjustStyle) { GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style)); newStyle->setPolyStyle(polyStyle); newStyle->setLineStyle(lineStyle); newStyle->setLabelStyle(labelStyle); + newStyle->setIconStyle(iconStyle); style = newStyle; if (cacheSpecialStyle) { d->m_specialStyleCache.insert(specialStyleCacheKey, newStyle); } } } else if (placemark->geometry()->nodeType() == GeoDataTypes::GeoDataPolygonType) { GeoDataPolyStyle polyStyle = style->polyStyle(); GeoDataLineStyle lineStyle = style->lineStyle(); bool adjustStyle = false; if (visualCategory == GeoDataPlacemark::Bathymetry) { auto tagIter = osmData.findTag(QStringLiteral("ele")); if (tagIter != osmData.tagsEnd()) { const QString& elevation = tagIter.value(); if (elevation == QLatin1String("4000")) { polyStyle.setColor("#a5c9c9"); lineStyle.setColor("#a5c9c9"); adjustStyle = true; } } } if (adjustStyle) { GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style)); newStyle->setPolyStyle(polyStyle); newStyle->setLineStyle(lineStyle); style = newStyle; } } return style; } GeoDataStyle::ConstPtr StyleBuilder::Private::presetStyle(GeoDataPlacemark::GeoDataVisualCategory visualCategory) const { if (!m_defaultStyleInitialized) { const_cast(this)->initializeDefaultStyles(); // const cast due to lazy initialization } if (visualCategory != GeoDataPlacemark::None && m_defaultStyle[visualCategory] ) { return m_defaultStyle[visualCategory]; } else { return m_defaultStyle[GeoDataPlacemark::Default]; } } QStringList StyleBuilder::renderOrder() const { static QStringList paintLayerOrder; if (paintLayerOrder.isEmpty()) { paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::Landmass); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::UrbanArea); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseResidential); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseAllotments); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseBasin); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseCemetery); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseCommercial); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseConstruction); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseFarmland); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseFarmyard); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseGarages); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseIndustrial); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseLandfill); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseMeadow); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseMilitary); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseQuarry); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseRailway); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseReservoir); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseRetail); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseOrchard); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseVineyard); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::Bathymetry); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureGolfCourse); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureMinigolfCourse); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalBeach); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWetland); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalGlacier); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalIceShelf); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalVolcano); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalCliff); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalPeak); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::MilitaryDangerArea); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePark); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePitch); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureSportsCentre); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureStadium); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWood); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseGrass); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::HighwayPedestrian); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePlayground); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalScrub); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureTrack); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportParking); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportParkingSpace); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::ManmadeBridge); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::BarrierCityWall); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::AmenityGraveyard); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::AmenityKindergarten); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationCollege); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationSchool); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationUniversity); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::HealthHospital); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureSwimmingPool); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::Landmass); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWater); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::WaterwayWeir); for (int i = GeoDataPlacemark::WaterwayCanal; i <= GeoDataPlacemark::WaterwayStream; ++i) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "outline"); paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "inline"); paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "label"); } paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "outline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "inline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "label"); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureMarina); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::ManmadePier); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "outline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "inline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "label"); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportAirportApron); for ( int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "outline"); } for ( int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "inline"); } for ( int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "outline"); } for ( int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "inline"); } // Highway labels shall appear on top of railways, hence here and not already above for ( int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "label"); } for ( int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "label"); } paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::RouteHiking, "outline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::RouteHiking, "inline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::RouteHiking, "label"); paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportPlatform); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "outline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "inline"); paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "label"); for ( int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "outline"); } for ( int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "inline"); } for ( int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++ ) { paintLayerOrder << Private::createPaintLayerItem("LineString", (GeoDataPlacemark::GeoDataVisualCategory)i, "label"); } paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::Bathymetry); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::AmenityGraveyard); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalWood); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalBeach); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalWetland); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalGlacier); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalIceShelf); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalScrub); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisureMarina); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisurePark); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisurePlayground); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisurePitch); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisureSportsCentre); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisureStadium); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::LeisureTrack); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::TransportParking); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::ManmadeBridge); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::BarrierCityWall); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalWater); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalReef); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::Landmass); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalCliff); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::NaturalPeak); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::AmenityKindergarten); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::EducationCollege); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::EducationSchool); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::EducationUniversity); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::HealthHospital); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::TransportSpeedCamera); paintLayerOrder << Private::createPaintLayerItem("Point", GeoDataPlacemark::MilitaryDangerArea); paintLayerOrder << QStringLiteral("Polygon/Building/frame"); paintLayerOrder << QStringLiteral("Polygon/Building/roof"); paintLayerOrder << QStringLiteral("Photo"); Q_ASSERT(QSet::fromList(paintLayerOrder).size() == paintLayerOrder.size()); } return paintLayerOrder; } void StyleBuilder::reset() { d->m_defaultStyleInitialized = false; } int StyleBuilder::minimumZoomLevel(const GeoDataPlacemark &placemark) const { Q_ASSERT(Private::s_defaultMinZoomLevelsInitialized); return Private::s_defaultMinZoomLevels[placemark.visualCategory()]; } int StyleBuilder::minimumZoomLevel(const GeoDataPlacemark::GeoDataVisualCategory &visualCategory) { Private::initializeMinimumZoomLevels(); return Private::s_defaultMinZoomLevels[visualCategory]; } qint64 StyleBuilder::popularity(const GeoDataPlacemark *placemark) { qint64 const defaultValue = 100; int const offset = 10; if (StyleBuilder::Private::s_popularities.isEmpty()) { QVector popularities; popularities << GeoDataPlacemark::PlaceCityNationalCapital; popularities << GeoDataPlacemark::PlaceTownNationalCapital; popularities << GeoDataPlacemark::PlaceCityCapital; popularities << GeoDataPlacemark::PlaceTownCapital; popularities << GeoDataPlacemark::PlaceCity; popularities << GeoDataPlacemark::PlaceTown; popularities << GeoDataPlacemark::PlaceSuburb; popularities << GeoDataPlacemark::PlaceVillageNationalCapital; popularities << GeoDataPlacemark::PlaceVillageCapital; popularities << GeoDataPlacemark::PlaceVillage; popularities << GeoDataPlacemark::PlaceHamlet; popularities << GeoDataPlacemark::PlaceLocality; popularities << GeoDataPlacemark::AmenityEmergencyPhone; popularities << GeoDataPlacemark::HealthHospital; popularities << GeoDataPlacemark::AmenityToilets; popularities << GeoDataPlacemark::MoneyAtm; popularities << GeoDataPlacemark::TransportSpeedCamera; popularities << GeoDataPlacemark::NaturalPeak; popularities << GeoDataPlacemark::NaturalVolcano; popularities << GeoDataPlacemark::AccomodationHotel; popularities << GeoDataPlacemark::AccomodationMotel; popularities << GeoDataPlacemark::AccomodationGuestHouse; popularities << GeoDataPlacemark::AccomodationYouthHostel; popularities << GeoDataPlacemark::AccomodationHostel; popularities << GeoDataPlacemark::AccomodationCamping; popularities << GeoDataPlacemark::HealthDentist; popularities << GeoDataPlacemark::HealthDoctors; popularities << GeoDataPlacemark::HealthPharmacy; popularities << GeoDataPlacemark::HealthVeterinary; popularities << GeoDataPlacemark::AmenityLibrary; popularities << GeoDataPlacemark::EducationCollege; popularities << GeoDataPlacemark::EducationSchool; popularities << GeoDataPlacemark::EducationUniversity; popularities << GeoDataPlacemark::FoodBar; popularities << GeoDataPlacemark::FoodBiergarten; popularities << GeoDataPlacemark::FoodCafe; popularities << GeoDataPlacemark::FoodFastFood; popularities << GeoDataPlacemark::FoodPub; popularities << GeoDataPlacemark::FoodRestaurant; popularities << GeoDataPlacemark::MoneyBank; popularities << GeoDataPlacemark::HistoricArchaeologicalSite; popularities << GeoDataPlacemark::AmenityCarWash; popularities << GeoDataPlacemark::AmenityEmbassy; popularities << GeoDataPlacemark::LeisureWaterPark; popularities << GeoDataPlacemark::AmenityCommunityCentre; popularities << GeoDataPlacemark::AmenityFountain; popularities << GeoDataPlacemark::AmenityNightClub; popularities << GeoDataPlacemark::AmenityCourtHouse; popularities << GeoDataPlacemark::AmenityFireStation; popularities << GeoDataPlacemark::AmenityShelter; popularities << GeoDataPlacemark::AmenityHuntingStand; popularities << GeoDataPlacemark::AmenityPolice; popularities << GeoDataPlacemark::AmenityPostBox; popularities << GeoDataPlacemark::AmenityPostOffice; popularities << GeoDataPlacemark::AmenityPrison; popularities << GeoDataPlacemark::AmenityRecycling; popularities << GeoDataPlacemark::AmenitySocialFacility; popularities << GeoDataPlacemark::AmenityTelephone; popularities << GeoDataPlacemark::AmenityTownHall; popularities << GeoDataPlacemark::AmenityDrinkingWater; popularities << GeoDataPlacemark::AmenityGraveyard; popularities << GeoDataPlacemark::ManmadeBridge; popularities << GeoDataPlacemark::ManmadeLighthouse; popularities << GeoDataPlacemark::ManmadePier; popularities << GeoDataPlacemark::ManmadeWaterTower; popularities << GeoDataPlacemark::ManmadeWindMill; popularities << GeoDataPlacemark::TourismAttraction; popularities << GeoDataPlacemark::TourismArtwork; popularities << GeoDataPlacemark::HistoricCastle; popularities << GeoDataPlacemark::AmenityCinema; popularities << GeoDataPlacemark::TourismInformation; popularities << GeoDataPlacemark::HistoricMonument; popularities << GeoDataPlacemark::TourismMuseum; popularities << GeoDataPlacemark::HistoricRuins; popularities << GeoDataPlacemark::AmenityTheatre; popularities << GeoDataPlacemark::TourismThemePark; popularities << GeoDataPlacemark::TourismViewPoint; popularities << GeoDataPlacemark::TourismZoo; popularities << GeoDataPlacemark::TourismAlpineHut; popularities << GeoDataPlacemark::TourismWildernessHut; popularities << GeoDataPlacemark::HistoricMemorial; popularities << GeoDataPlacemark::TransportAerodrome; popularities << GeoDataPlacemark::TransportHelipad; popularities << GeoDataPlacemark::TransportAirportTerminal; popularities << GeoDataPlacemark::TransportBusStation; popularities << GeoDataPlacemark::TransportBusStop; popularities << GeoDataPlacemark::TransportCarShare; popularities << GeoDataPlacemark::TransportFuel; popularities << GeoDataPlacemark::TransportParking; popularities << GeoDataPlacemark::TransportParkingSpace; popularities << GeoDataPlacemark::TransportPlatform; popularities << GeoDataPlacemark::TransportRentalBicycle; popularities << GeoDataPlacemark::TransportRentalCar; popularities << GeoDataPlacemark::TransportTaxiRank; popularities << GeoDataPlacemark::TransportTrainStation; popularities << GeoDataPlacemark::TransportTramStop; popularities << GeoDataPlacemark::TransportBicycleParking; popularities << GeoDataPlacemark::TransportMotorcycleParking; popularities << GeoDataPlacemark::TransportSubwayEntrance; popularities << GeoDataPlacemark::ShopBeverages; popularities << GeoDataPlacemark::ShopHifi; popularities << GeoDataPlacemark::ShopSupermarket; popularities << GeoDataPlacemark::ShopAlcohol; popularities << GeoDataPlacemark::ShopBakery; popularities << GeoDataPlacemark::ShopButcher; popularities << GeoDataPlacemark::ShopConfectionery; popularities << GeoDataPlacemark::ShopConvenience; popularities << GeoDataPlacemark::ShopGreengrocer; popularities << GeoDataPlacemark::ShopSeafood; popularities << GeoDataPlacemark::ShopDepartmentStore; popularities << GeoDataPlacemark::ShopKiosk; popularities << GeoDataPlacemark::ShopBag; popularities << GeoDataPlacemark::ShopClothes; popularities << GeoDataPlacemark::ShopFashion; popularities << GeoDataPlacemark::ShopJewelry; popularities << GeoDataPlacemark::ShopShoes; popularities << GeoDataPlacemark::ShopVarietyStore; popularities << GeoDataPlacemark::ShopBeauty; popularities << GeoDataPlacemark::ShopChemist; popularities << GeoDataPlacemark::ShopCosmetics; popularities << GeoDataPlacemark::ShopHairdresser; popularities << GeoDataPlacemark::ShopOptician; popularities << GeoDataPlacemark::ShopPerfumery; popularities << GeoDataPlacemark::ShopDoitYourself; popularities << GeoDataPlacemark::ShopFlorist; popularities << GeoDataPlacemark::ShopHardware; popularities << GeoDataPlacemark::ShopFurniture; popularities << GeoDataPlacemark::ShopElectronics; popularities << GeoDataPlacemark::ShopMobilePhone; popularities << GeoDataPlacemark::ShopBicycle; popularities << GeoDataPlacemark::ShopCar; popularities << GeoDataPlacemark::ShopCarRepair; popularities << GeoDataPlacemark::ShopCarParts; popularities << GeoDataPlacemark::ShopMotorcycle; popularities << GeoDataPlacemark::ShopOutdoor; popularities << GeoDataPlacemark::ShopSports; popularities << GeoDataPlacemark::ShopCopy; popularities << GeoDataPlacemark::ShopArt; popularities << GeoDataPlacemark::ShopMusicalInstrument; popularities << GeoDataPlacemark::ShopPhoto; popularities << GeoDataPlacemark::ShopBook; popularities << GeoDataPlacemark::ShopGift; popularities << GeoDataPlacemark::ShopStationery; popularities << GeoDataPlacemark::ShopLaundry; popularities << GeoDataPlacemark::ShopPet; popularities << GeoDataPlacemark::ShopToys; popularities << GeoDataPlacemark::ShopTravelAgency; popularities << GeoDataPlacemark::ShopDeli; popularities << GeoDataPlacemark::ShopTobacco; popularities << GeoDataPlacemark::ShopTea; popularities << GeoDataPlacemark::Shop; popularities << GeoDataPlacemark::LeisureGolfCourse; popularities << GeoDataPlacemark::LeisureMinigolfCourse; popularities << GeoDataPlacemark::LeisurePark; popularities << GeoDataPlacemark::LeisurePlayground; popularities << GeoDataPlacemark::LeisurePitch; popularities << GeoDataPlacemark::LeisureSportsCentre; popularities << GeoDataPlacemark::LeisureStadium; popularities << GeoDataPlacemark::LeisureTrack; popularities << GeoDataPlacemark::LeisureSwimmingPool; popularities << GeoDataPlacemark::CrossingIsland; popularities << GeoDataPlacemark::CrossingRailway; popularities << GeoDataPlacemark::CrossingSignals; popularities << GeoDataPlacemark::CrossingZebra; popularities << GeoDataPlacemark::HighwayTrafficSignals; popularities << GeoDataPlacemark::BarrierGate; popularities << GeoDataPlacemark::BarrierLiftGate; popularities << GeoDataPlacemark::AmenityBench; popularities << GeoDataPlacemark::NaturalTree; popularities << GeoDataPlacemark::NaturalCave; popularities << GeoDataPlacemark::AmenityWasteBasket; popularities << GeoDataPlacemark::PowerTower; int value = defaultValue + offset * popularities.size(); for (auto popularity: popularities) { StyleBuilder::Private::s_popularities[popularity] = value; value -= offset; } } bool const isPrivate = placemark->osmData().containsTag(QStringLiteral("access"), QStringLiteral("private")); int const base = defaultValue + (isPrivate ? 0 : offset * StyleBuilder::Private::s_popularities.size()); return base + StyleBuilder::Private::s_popularities.value(placemark->visualCategory(), defaultValue); } int StyleBuilder::maximumZoomLevel() const { return d->m_maximumZoomLevel; } QString StyleBuilder::visualCategoryName(GeoDataPlacemark::GeoDataVisualCategory category) { static QHash visualCategoryNames; if (visualCategoryNames.isEmpty()) { visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::None] = "None"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Default] = "Default"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Unknown] = "Unknown"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::SmallCity] = "SmallCity"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::SmallCountyCapital] = "SmallCountyCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::SmallStateCapital] = "SmallStateCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::SmallNationCapital] = "SmallNationCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MediumCity] = "MediumCity"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MediumCountyCapital] = "MediumCountyCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MediumStateCapital] = "MediumStateCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MediumNationCapital] = "MediumNationCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::BigCity] = "BigCity"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::BigCountyCapital] = "BigCountyCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::BigStateCapital] = "BigStateCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::BigNationCapital] = "BigNationCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::LargeCity] = "LargeCity"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::LargeCountyCapital] = "LargeCountyCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::LargeStateCapital] = "LargeStateCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::LargeNationCapital] = "LargeNationCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Nation] = "Nation"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceCity] = "PlaceCity"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceCityCapital] = "PlaceCityCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceCityNationalCapital] = "PlaceCityNationalCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceSuburb] = "PlaceSuburb"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceHamlet] = "PlaceHamlet"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceLocality] = "PlaceLocality"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceTown] = "PlaceTown"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceTownCapital] = "PlaceTownCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceTownNationalCapital] = "PlaceTownNationalCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceVillage] = "PlaceVillage"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceVillageCapital] = "PlaceVillageCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::PlaceVillageNationalCapital] = "PlaceVillageNationalCapital"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Mountain] = "Mountain"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Volcano] = "Volcano"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Mons] = "Mons"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Valley] = "Valley"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Continent] = "Continent"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Ocean] = "Ocean"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::OtherTerrain] = "OtherTerrain"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Crater] = "Crater"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Mare] = "Mare"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::GeographicPole] = "GeographicPole"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MagneticPole] = "MagneticPole"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::ShipWreck] = "ShipWreck"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::AirPort] = "AirPort"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::Observatory] = "Observatory"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::MilitaryDangerArea] = "MilitaryDangerArea"; visualCategoryNames[GeoDataPlacemark::GeoDataPlacemark::OsmSite] = "OsmSite"; visualCategoryNames[GeoDataPlacemark::Coordinate] = "Coordinate"; visualCategoryNames[GeoDataPlacemark::MannedLandingSite] = "MannedLandingSite"; visualCategoryNames[GeoDataPlacemark::RoboticRover] = "RoboticRover"; visualCategoryNames[GeoDataPlacemark::UnmannedSoftLandingSite] = "UnmannedSoftLandingSite"; visualCategoryNames[GeoDataPlacemark::UnmannedHardLandingSite] = "UnmannedHardLandingSite"; visualCategoryNames[GeoDataPlacemark::Bookmark] = "Bookmark"; visualCategoryNames[GeoDataPlacemark::NaturalWater] = "NaturalWater"; visualCategoryNames[GeoDataPlacemark::NaturalReef] = "NaturalReef"; visualCategoryNames[GeoDataPlacemark::NaturalWood] = "NaturalWood"; visualCategoryNames[GeoDataPlacemark::NaturalBeach] = "NaturalBeach"; visualCategoryNames[GeoDataPlacemark::NaturalWetland] = "NaturalWetland"; visualCategoryNames[GeoDataPlacemark::NaturalGlacier] = "NaturalGlacier"; visualCategoryNames[GeoDataPlacemark::NaturalIceShelf] = "NaturalIceShelf"; visualCategoryNames[GeoDataPlacemark::NaturalScrub] = "NaturalScrub"; visualCategoryNames[GeoDataPlacemark::NaturalCliff] = "NaturalCliff"; visualCategoryNames[GeoDataPlacemark::NaturalHeath] = "NaturalHeath"; visualCategoryNames[GeoDataPlacemark::HighwayTrafficSignals] = "HighwayTrafficSignals"; visualCategoryNames[GeoDataPlacemark::HighwaySteps] = "HighwaySteps"; visualCategoryNames[GeoDataPlacemark::HighwayUnknown] = "HighwayUnknown"; visualCategoryNames[GeoDataPlacemark::HighwayPath] = "HighwayPath"; visualCategoryNames[GeoDataPlacemark::HighwayFootway] = "HighwayFootway"; visualCategoryNames[GeoDataPlacemark::HighwayTrack] = "HighwayTrack"; visualCategoryNames[GeoDataPlacemark::HighwayPedestrian] = "HighwayPedestrian"; visualCategoryNames[GeoDataPlacemark::HighwayCycleway] = "HighwayCycleway"; visualCategoryNames[GeoDataPlacemark::HighwayService] = "HighwayService"; visualCategoryNames[GeoDataPlacemark::HighwayRoad] = "HighwayRoad"; visualCategoryNames[GeoDataPlacemark::HighwayResidential] = "HighwayResidential"; visualCategoryNames[GeoDataPlacemark::HighwayLivingStreet] = "HighwayLivingStreet"; visualCategoryNames[GeoDataPlacemark::HighwayUnclassified] = "HighwayUnclassified"; visualCategoryNames[GeoDataPlacemark::HighwayTertiaryLink] = "HighwayTertiaryLink"; visualCategoryNames[GeoDataPlacemark::HighwayTertiary] = "HighwayTertiary"; visualCategoryNames[GeoDataPlacemark::HighwaySecondaryLink] = "HighwaySecondaryLink"; visualCategoryNames[GeoDataPlacemark::HighwaySecondary] = "HighwaySecondary"; visualCategoryNames[GeoDataPlacemark::HighwayPrimaryLink] = "HighwayPrimaryLink"; visualCategoryNames[GeoDataPlacemark::HighwayPrimary] = "HighwayPrimary"; visualCategoryNames[GeoDataPlacemark::HighwayRaceway] = "HighwayRaceway"; visualCategoryNames[GeoDataPlacemark::HighwayTrunkLink] = "HighwayTrunkLink"; visualCategoryNames[GeoDataPlacemark::HighwayTrunk] = "HighwayTrunk"; visualCategoryNames[GeoDataPlacemark::HighwayMotorwayLink] = "HighwayMotorwayLink"; visualCategoryNames[GeoDataPlacemark::HighwayMotorway] = "HighwayMotorway"; visualCategoryNames[GeoDataPlacemark::HighwayCorridor] = "HighwayCorridor"; visualCategoryNames[GeoDataPlacemark::Building] = "Building"; visualCategoryNames[GeoDataPlacemark::AccomodationCamping] = "AccomodationCamping"; visualCategoryNames[GeoDataPlacemark::AccomodationHostel] = "AccomodationHostel"; visualCategoryNames[GeoDataPlacemark::AccomodationHotel] = "AccomodationHotel"; visualCategoryNames[GeoDataPlacemark::AccomodationMotel] = "AccomodationMotel"; visualCategoryNames[GeoDataPlacemark::AccomodationYouthHostel] = "AccomodationYouthHostel"; visualCategoryNames[GeoDataPlacemark::AccomodationGuestHouse] = "AccomodationGuestHouse"; visualCategoryNames[GeoDataPlacemark::AmenityLibrary] = "AmenityLibrary"; visualCategoryNames[GeoDataPlacemark::AmenityKindergarten] = "AmenityKindergarten"; visualCategoryNames[GeoDataPlacemark::EducationCollege] = "EducationCollege"; visualCategoryNames[GeoDataPlacemark::EducationSchool] = "EducationSchool"; visualCategoryNames[GeoDataPlacemark::EducationUniversity] = "EducationUniversity"; visualCategoryNames[GeoDataPlacemark::FoodBar] = "FoodBar"; visualCategoryNames[GeoDataPlacemark::FoodBiergarten] = "FoodBiergarten"; visualCategoryNames[GeoDataPlacemark::FoodCafe] = "FoodCafe"; visualCategoryNames[GeoDataPlacemark::FoodFastFood] = "FoodFastFood"; visualCategoryNames[GeoDataPlacemark::FoodPub] = "FoodPub"; visualCategoryNames[GeoDataPlacemark::FoodRestaurant] = "FoodRestaurant"; visualCategoryNames[GeoDataPlacemark::HealthDentist] = "HealthDentist"; visualCategoryNames[GeoDataPlacemark::HealthDoctors] = "HealthDoctors"; visualCategoryNames[GeoDataPlacemark::HealthHospital] = "HealthHospital"; visualCategoryNames[GeoDataPlacemark::HealthPharmacy] = "HealthPharmacy"; visualCategoryNames[GeoDataPlacemark::HealthVeterinary] = "HealthVeterinary"; visualCategoryNames[GeoDataPlacemark::MoneyAtm] = "MoneyAtm"; visualCategoryNames[GeoDataPlacemark::MoneyBank] = "MoneyBank"; visualCategoryNames[GeoDataPlacemark::AmenityEmbassy] = "AmenityEmbassy"; visualCategoryNames[GeoDataPlacemark::AmenityEmergencyPhone] = "AmenityEmergencyPhone"; visualCategoryNames[GeoDataPlacemark::LeisureWaterPark] = "LeisureWaterPark"; visualCategoryNames[GeoDataPlacemark::AmenityCommunityCentre] = "AmenityCommunityCentre"; visualCategoryNames[GeoDataPlacemark::AmenityFountain] = "AmenityFountain"; visualCategoryNames[GeoDataPlacemark::AmenityNightClub] = "AmenityNightClub"; visualCategoryNames[GeoDataPlacemark::AmenityBench] = "AmenityBench"; visualCategoryNames[GeoDataPlacemark::AmenityCourtHouse] = "AmenityCourtHouse"; visualCategoryNames[GeoDataPlacemark::AmenityFireStation] = "AmenityFireStation"; visualCategoryNames[GeoDataPlacemark::AmenityHuntingStand] = "AmenityHuntingStand"; visualCategoryNames[GeoDataPlacemark::AmenityPolice] = "AmenityPolice"; visualCategoryNames[GeoDataPlacemark::AmenityPostBox] = "AmenityPostBox"; visualCategoryNames[GeoDataPlacemark::AmenityPostOffice] = "AmenityPostOffice"; visualCategoryNames[GeoDataPlacemark::AmenityPrison] = "AmenityPrison"; visualCategoryNames[GeoDataPlacemark::AmenityRecycling] = "AmenityRecycling"; visualCategoryNames[GeoDataPlacemark::AmenityShelter] = "AmenityShelter"; visualCategoryNames[GeoDataPlacemark::AmenityTelephone] = "AmenityTelephone"; visualCategoryNames[GeoDataPlacemark::AmenityToilets] = "AmenityToilets"; visualCategoryNames[GeoDataPlacemark::AmenityTownHall] = "AmenityTownHall"; visualCategoryNames[GeoDataPlacemark::AmenityWasteBasket] = "AmenityWasteBasket"; visualCategoryNames[GeoDataPlacemark::AmenityDrinkingWater] = "AmenityDrinkingWater"; visualCategoryNames[GeoDataPlacemark::AmenityGraveyard] = "AmenityGraveyard"; visualCategoryNames[GeoDataPlacemark::AmenityChargingStation] = "ChargingStation"; visualCategoryNames[GeoDataPlacemark::AmenityCarWash] = "CarWash"; visualCategoryNames[GeoDataPlacemark::AmenitySocialFacility] = "SocialFacility"; visualCategoryNames[GeoDataPlacemark::BarrierCityWall] = "BarrierCityWall"; visualCategoryNames[GeoDataPlacemark::BarrierGate] = "BarrierGate"; visualCategoryNames[GeoDataPlacemark::BarrierLiftGate] = "BarrierLiftGate"; visualCategoryNames[GeoDataPlacemark::BarrierWall] = "BarrierWall"; visualCategoryNames[GeoDataPlacemark::NaturalVolcano] = "NaturalVolcano"; visualCategoryNames[GeoDataPlacemark::NaturalPeak] = "NaturalPeak"; visualCategoryNames[GeoDataPlacemark::NaturalTree] = "NaturalTree"; visualCategoryNames[GeoDataPlacemark::NaturalCave] = "NaturalCave"; visualCategoryNames[GeoDataPlacemark::ShopBeverages] = "ShopBeverages"; visualCategoryNames[GeoDataPlacemark::ShopHifi] = "ShopHifi"; visualCategoryNames[GeoDataPlacemark::ShopSupermarket] = "ShopSupermarket"; visualCategoryNames[GeoDataPlacemark::ShopAlcohol] = "ShopAlcohol"; visualCategoryNames[GeoDataPlacemark::ShopBakery] = "ShopBakery"; visualCategoryNames[GeoDataPlacemark::ShopButcher] = "ShopButcher"; visualCategoryNames[GeoDataPlacemark::ShopConfectionery] = "ShopConfectionery"; visualCategoryNames[GeoDataPlacemark::ShopConvenience] = "ShopConvenience"; visualCategoryNames[GeoDataPlacemark::ShopGreengrocer] = "ShopGreengrocer"; visualCategoryNames[GeoDataPlacemark::ShopSeafood] = "ShopSeafood"; visualCategoryNames[GeoDataPlacemark::ShopDepartmentStore] = "ShopDepartmentStore"; visualCategoryNames[GeoDataPlacemark::ShopKiosk] = "ShopKiosk"; visualCategoryNames[GeoDataPlacemark::ShopBag] = "ShopBag"; visualCategoryNames[GeoDataPlacemark::ShopClothes] = "ShopClothes"; visualCategoryNames[GeoDataPlacemark::ShopFashion] = "ShopFashion"; visualCategoryNames[GeoDataPlacemark::ShopJewelry] = "ShopJewelry"; visualCategoryNames[GeoDataPlacemark::ShopShoes] = "ShopShoes"; visualCategoryNames[GeoDataPlacemark::ShopVarietyStore] = "ShopVarietyStore"; visualCategoryNames[GeoDataPlacemark::ShopBeauty] = "ShopBeauty"; visualCategoryNames[GeoDataPlacemark::ShopChemist] = "ShopChemist"; visualCategoryNames[GeoDataPlacemark::ShopCosmetics] = "ShopCosmetics"; visualCategoryNames[GeoDataPlacemark::ShopHairdresser] = "ShopHairdresser"; visualCategoryNames[GeoDataPlacemark::ShopOptician] = "ShopOptician"; visualCategoryNames[GeoDataPlacemark::ShopPerfumery] = "ShopPerfumery"; visualCategoryNames[GeoDataPlacemark::ShopDoitYourself] = "ShopDoitYourself"; visualCategoryNames[GeoDataPlacemark::ShopFlorist] = "ShopFlorist"; visualCategoryNames[GeoDataPlacemark::ShopHardware] = "ShopHardware"; visualCategoryNames[GeoDataPlacemark::ShopFurniture] = "ShopFurniture"; visualCategoryNames[GeoDataPlacemark::ShopElectronics] = "ShopElectronics"; visualCategoryNames[GeoDataPlacemark::ShopMobilePhone] = "ShopMobilePhone"; visualCategoryNames[GeoDataPlacemark::ShopBicycle] = "ShopBicycle"; visualCategoryNames[GeoDataPlacemark::ShopCar] = "ShopCar"; visualCategoryNames[GeoDataPlacemark::ShopCarRepair] = "ShopCarRepair"; visualCategoryNames[GeoDataPlacemark::ShopCarParts] = "ShopCarParts"; visualCategoryNames[GeoDataPlacemark::ShopMotorcycle] = "ShopMotorcycle"; visualCategoryNames[GeoDataPlacemark::ShopOutdoor] = "ShopOutdoor"; visualCategoryNames[GeoDataPlacemark::ShopSports] = "ShopSports"; visualCategoryNames[GeoDataPlacemark::ShopCopy] = "ShopCopy"; visualCategoryNames[GeoDataPlacemark::ShopArt] = "ShopArt"; visualCategoryNames[GeoDataPlacemark::ShopMusicalInstrument] = "ShopMusicalInstrument"; visualCategoryNames[GeoDataPlacemark::ShopPhoto] = "ShopPhoto"; visualCategoryNames[GeoDataPlacemark::ShopBook] = "ShopBook"; visualCategoryNames[GeoDataPlacemark::ShopGift] = "ShopGift"; visualCategoryNames[GeoDataPlacemark::ShopStationery] = "ShopStationery"; visualCategoryNames[GeoDataPlacemark::ShopLaundry] = "ShopLaundry"; visualCategoryNames[GeoDataPlacemark::ShopPet] = "ShopPet"; visualCategoryNames[GeoDataPlacemark::ShopToys] = "ShopToys"; visualCategoryNames[GeoDataPlacemark::ShopTravelAgency] = "ShopTravelAgency"; visualCategoryNames[GeoDataPlacemark::ShopDeli] = "ShopDeli"; visualCategoryNames[GeoDataPlacemark::ShopTobacco] = "ShopTobacco"; visualCategoryNames[GeoDataPlacemark::ShopTea] = "ShopTea"; visualCategoryNames[GeoDataPlacemark::Shop] = "Shop"; visualCategoryNames[GeoDataPlacemark::ManmadeBridge] = "ManmadeBridge"; visualCategoryNames[GeoDataPlacemark::ManmadeLighthouse] = "ManmadeLighthouse"; visualCategoryNames[GeoDataPlacemark::ManmadePier] = "ManmadePier"; visualCategoryNames[GeoDataPlacemark::ManmadeWaterTower] = "ManmadeWaterTower"; visualCategoryNames[GeoDataPlacemark::ManmadeWindMill] = "ManmadeWindMill"; visualCategoryNames[GeoDataPlacemark::TourismAttraction] = "TouristAttraction"; visualCategoryNames[GeoDataPlacemark::TourismArtwork] = "TouristArtwork"; visualCategoryNames[GeoDataPlacemark::HistoricArchaeologicalSite] = "HistoricArchaeologicalSite"; visualCategoryNames[GeoDataPlacemark::HistoricCastle] = "HistoricCastle"; visualCategoryNames[GeoDataPlacemark::HistoricMemorial] = "HistoricMemorial"; visualCategoryNames[GeoDataPlacemark::HistoricMonument] = "HistoricMonument"; visualCategoryNames[GeoDataPlacemark::AmenityCinema] = "TouristCinema"; visualCategoryNames[GeoDataPlacemark::TourismInformation] = "TouristInformation"; visualCategoryNames[GeoDataPlacemark::TourismMuseum] = "TouristMuseum"; visualCategoryNames[GeoDataPlacemark::HistoricRuins] = "TouristRuin"; visualCategoryNames[GeoDataPlacemark::AmenityTheatre] = "TouristTheatre"; visualCategoryNames[GeoDataPlacemark::TourismThemePark] = "TouristThemePark"; visualCategoryNames[GeoDataPlacemark::TourismViewPoint] = "TouristViewPoint"; visualCategoryNames[GeoDataPlacemark::TourismZoo] = "TouristZoo"; visualCategoryNames[GeoDataPlacemark::TourismAlpineHut] = "TouristAlpineHut"; visualCategoryNames[GeoDataPlacemark::TourismWildernessHut] = "TouristWildernessHut"; visualCategoryNames[GeoDataPlacemark::TransportAerodrome] = "TransportAerodrome"; visualCategoryNames[GeoDataPlacemark::TransportHelipad] = "TransportHelipad"; visualCategoryNames[GeoDataPlacemark::TransportAirportTerminal] = "TransportAirportTerminal"; visualCategoryNames[GeoDataPlacemark::TransportAirportGate] = "TransportAirportGate"; visualCategoryNames[GeoDataPlacemark::TransportAirportRunway] = "TransportAirportRunway"; visualCategoryNames[GeoDataPlacemark::TransportAirportTaxiway] = "TransportAirportTaxiway"; visualCategoryNames[GeoDataPlacemark::TransportAirportApron] = "TransportAirportApron"; visualCategoryNames[GeoDataPlacemark::TransportBusStation] = "TransportBusStation"; visualCategoryNames[GeoDataPlacemark::TransportBusStop] = "TransportBusStop"; visualCategoryNames[GeoDataPlacemark::TransportCarShare] = "TransportCarShare"; visualCategoryNames[GeoDataPlacemark::TransportFuel] = "TransportFuel"; visualCategoryNames[GeoDataPlacemark::TransportParking] = "TransportParking"; visualCategoryNames[GeoDataPlacemark::TransportParkingSpace] = "TransportParkingSpace"; visualCategoryNames[GeoDataPlacemark::TransportPlatform] = "TransportPlatform"; visualCategoryNames[GeoDataPlacemark::TransportRentalBicycle] = "TransportRentalBicycle"; visualCategoryNames[GeoDataPlacemark::TransportRentalCar] = "TransportRentalCar"; visualCategoryNames[GeoDataPlacemark::TransportTaxiRank] = "TransportTaxiRank"; visualCategoryNames[GeoDataPlacemark::TransportTrainStation] = "TransportTrainStation"; visualCategoryNames[GeoDataPlacemark::TransportTramStop] = "TransportTramStop"; visualCategoryNames[GeoDataPlacemark::TransportSpeedCamera] = "TransportSpeedCamera"; visualCategoryNames[GeoDataPlacemark::TransportBicycleParking] = "TransportBicycleParking"; visualCategoryNames[GeoDataPlacemark::TransportMotorcycleParking] = "TransportMotorcycleParking"; visualCategoryNames[GeoDataPlacemark::TransportSubwayEntrance] = "TransportSubwayEntrance"; visualCategoryNames[GeoDataPlacemark::ReligionPlaceOfWorship] = "ReligionPlaceOfWorship"; visualCategoryNames[GeoDataPlacemark::ReligionBahai] = "ReligionBahai"; visualCategoryNames[GeoDataPlacemark::ReligionBuddhist] = "ReligionBuddhist"; visualCategoryNames[GeoDataPlacemark::ReligionChristian] = "ReligionChristian"; visualCategoryNames[GeoDataPlacemark::ReligionMuslim] = "ReligionMuslim"; visualCategoryNames[GeoDataPlacemark::ReligionHindu] = "ReligionHindu"; visualCategoryNames[GeoDataPlacemark::ReligionJain] = "ReligionJain"; visualCategoryNames[GeoDataPlacemark::ReligionJewish] = "ReligionJewish"; visualCategoryNames[GeoDataPlacemark::ReligionShinto] = "ReligionShinto"; visualCategoryNames[GeoDataPlacemark::ReligionSikh] = "ReligionSikh"; visualCategoryNames[GeoDataPlacemark::LeisureGolfCourse] = "LeisureGolfCourse"; visualCategoryNames[GeoDataPlacemark::LeisureMarina] = "LeisureMarina"; visualCategoryNames[GeoDataPlacemark::LeisurePark] = "LeisurePark"; visualCategoryNames[GeoDataPlacemark::LeisurePlayground] = "LeisurePlayground"; visualCategoryNames[GeoDataPlacemark::LeisurePitch] = "LeisurePitch"; visualCategoryNames[GeoDataPlacemark::LeisureSportsCentre] = "LeisureSportsCentre"; visualCategoryNames[GeoDataPlacemark::LeisureStadium] = "LeisureStadium"; visualCategoryNames[GeoDataPlacemark::LeisureTrack] = "LeisureTrack"; visualCategoryNames[GeoDataPlacemark::LeisureSwimmingPool] = "LeisureSwimmingPool"; visualCategoryNames[GeoDataPlacemark::LeisureMinigolfCourse] = "LeisureMinigolfCourse"; visualCategoryNames[GeoDataPlacemark::LanduseAllotments] = "LanduseAllotments"; visualCategoryNames[GeoDataPlacemark::LanduseBasin] = "LanduseBasin"; visualCategoryNames[GeoDataPlacemark::LanduseCemetery] = "LanduseCemetery"; visualCategoryNames[GeoDataPlacemark::LanduseCommercial] = "LanduseCommercial"; visualCategoryNames[GeoDataPlacemark::LanduseConstruction] = "LanduseConstruction"; visualCategoryNames[GeoDataPlacemark::LanduseFarmland] = "LanduseFarmland"; visualCategoryNames[GeoDataPlacemark::LanduseFarmyard] = "LanduseFarmyard"; visualCategoryNames[GeoDataPlacemark::LanduseGarages] = "LanduseGarages"; visualCategoryNames[GeoDataPlacemark::LanduseGrass] = "LanduseGrass"; visualCategoryNames[GeoDataPlacemark::LanduseIndustrial] = "LanduseIndustrial"; visualCategoryNames[GeoDataPlacemark::LanduseLandfill] = "LanduseLandfill"; visualCategoryNames[GeoDataPlacemark::LanduseMeadow] = "LanduseMeadow"; visualCategoryNames[GeoDataPlacemark::LanduseMilitary] = "LanduseMilitary"; visualCategoryNames[GeoDataPlacemark::LanduseQuarry] = "LanduseQuarry"; visualCategoryNames[GeoDataPlacemark::LanduseRailway] = "LanduseRailway"; visualCategoryNames[GeoDataPlacemark::LanduseReservoir] = "LanduseReservoir"; visualCategoryNames[GeoDataPlacemark::LanduseResidential] = "LanduseResidential"; visualCategoryNames[GeoDataPlacemark::LanduseRetail] = "LanduseRetail"; visualCategoryNames[GeoDataPlacemark::LanduseOrchard] = "LanduseOrchard"; visualCategoryNames[GeoDataPlacemark::LanduseVineyard] = "LanduseVineyard"; visualCategoryNames[GeoDataPlacemark::RailwayRail] = "RailwayRail"; visualCategoryNames[GeoDataPlacemark::RailwayNarrowGauge] = "RailwayNarrowGauge"; visualCategoryNames[GeoDataPlacemark::RailwayTram] = "RailwayTram"; visualCategoryNames[GeoDataPlacemark::RailwayLightRail] = "RailwayLightRail"; visualCategoryNames[GeoDataPlacemark::RailwayAbandoned] = "RailwayAbandoned"; visualCategoryNames[GeoDataPlacemark::RailwaySubway] = "RailwaySubway"; visualCategoryNames[GeoDataPlacemark::RailwayPreserved] = "RailwayPreserved"; visualCategoryNames[GeoDataPlacemark::RailwayMiniature] = "RailwayMiniature"; visualCategoryNames[GeoDataPlacemark::RailwayConstruction] = "RailwayConstruction"; visualCategoryNames[GeoDataPlacemark::RailwayMonorail] = "RailwayMonorail"; visualCategoryNames[GeoDataPlacemark::RailwayFunicular] = "RailwayFunicular"; visualCategoryNames[GeoDataPlacemark::RouteHiking] = "RouteHiking"; visualCategoryNames[GeoDataPlacemark::PowerTower] = "PowerTower"; visualCategoryNames[GeoDataPlacemark::Satellite] = "Satellite"; visualCategoryNames[GeoDataPlacemark::Landmass] = "Landmass"; visualCategoryNames[GeoDataPlacemark::UrbanArea] = "UrbanArea"; visualCategoryNames[GeoDataPlacemark::InternationalDateLine] = "InternationalDateLine"; visualCategoryNames[GeoDataPlacemark::Bathymetry] = "Bathymetry"; visualCategoryNames[GeoDataPlacemark::AdminLevel1] = "AdminLevel1"; visualCategoryNames[GeoDataPlacemark::AdminLevel2] = "AdminLevel2"; visualCategoryNames[GeoDataPlacemark::AdminLevel3] = "AdminLevel3"; visualCategoryNames[GeoDataPlacemark::AdminLevel4] = "AdminLevel4"; visualCategoryNames[GeoDataPlacemark::AdminLevel5] = "AdminLevel5"; visualCategoryNames[GeoDataPlacemark::AdminLevel6] = "AdminLevel6"; visualCategoryNames[GeoDataPlacemark::AdminLevel7] = "AdminLevel7"; visualCategoryNames[GeoDataPlacemark::AdminLevel8] = "AdminLevel8"; visualCategoryNames[GeoDataPlacemark::AdminLevel9] = "AdminLevel9"; visualCategoryNames[GeoDataPlacemark::AdminLevel10] = "AdminLevel10"; visualCategoryNames[GeoDataPlacemark::AdminLevel11] = "AdminLevel11"; visualCategoryNames[GeoDataPlacemark::BoundaryMaritime] = "BoundaryMaritime"; visualCategoryNames[GeoDataPlacemark::WaterwayCanal] = "WaterwayCanal"; visualCategoryNames[GeoDataPlacemark::WaterwayDitch] = "WaterwayDitch"; visualCategoryNames[GeoDataPlacemark::WaterwayDrain] = "WaterwayDrain"; visualCategoryNames[GeoDataPlacemark::WaterwayStream] = "WaterwayStream"; visualCategoryNames[GeoDataPlacemark::WaterwayRiver] = "WaterwayRiver"; visualCategoryNames[GeoDataPlacemark::WaterwayWeir] = "WaterwayWeir"; visualCategoryNames[GeoDataPlacemark::CrossingIsland] = "CrossingIsland"; visualCategoryNames[GeoDataPlacemark::CrossingRailway] = "CrossingRailway"; visualCategoryNames[GeoDataPlacemark::CrossingSignals] = "CrossingSignals"; visualCategoryNames[GeoDataPlacemark::CrossingZebra] = "CrossingZebra"; visualCategoryNames[GeoDataPlacemark::LastIndex] = "LastIndex"; } Q_ASSERT(visualCategoryNames.contains(category)); return visualCategoryNames[category]; } QHash StyleBuilder::osmTagMapping() { Private::initializeOsmVisualCategories(); return Private::s_visualCategories; } QStringList StyleBuilder::shopValues() { // from https://taginfo.openstreetmap.org/keys/building#values static const QStringList osmShopValues = QStringList() << "cheese" << "chocolate" << "coffee" << "dairy" << "farm" << "pasta" << "pastry" << "wine" << "general" << "mall" << "baby_goods" << "boutique" << "fabric" << "leather" << "tailor" << "watches" << "charity" << "second_hand" << "erotic" << "hearing_aids" << "herbalist" << "massage" << "medical_supply" << "tattoo" << "bathroom_furnishing" << "electrical" << "energy" << "furnace" << "garden_centre" << "garden_furniture" << "gas" << "glaziery" << "houseware" << "locksmith" << "paint" << "trade" << "antiques" << "bed" << "candles" << "carpet" << "curtain" << "interior_decoration" << "kitchen" << "lamps" << "window_blind" << "computer" << "radiotechnics" << "vacuum_cleaner" << "fishing" << "free_flying" << "hunting" << "outdoor" << "scuba_diving" << "sports" << "tyres" << "swimming_pool" << "art" << "craft" << "frame" << "games" << "model" << "music" << "trophy" << "video" << "video_games" << "anime" << "ticket" << "copyshop" << "dry_cleaning" << "e-cigarette" << "funeral_directors" << "money_lender" << "pawnbroker" << "pyrotechnics" << "religion" << "storage_rental" << "weapons" << "user defined"; return osmShopValues; } QSet StyleBuilder::buildingTags() { static const QString building = QStringLiteral("building"); // from https://taginfo.openstreetmap.org/keys/building#values static const QSet osmBuildingTags = QSet() << OsmTag(building, "yes") << OsmTag(building, "house") << OsmTag(building, "residential") << OsmTag(building, "garage") << OsmTag(building, "apartments") << OsmTag(building, "hut") << OsmTag(building, "industrial") << OsmTag(building, "detached") << OsmTag(building, "roof") << OsmTag(building, "garages") << OsmTag(building, "commercial") << OsmTag(building, "terrace") << OsmTag(building, "shed") << OsmTag(building, "school") << OsmTag(building, "retail") << OsmTag(building, "farm_auxiliary") << OsmTag(building, "church") << OsmTag(building, "cathedral") << OsmTag(building, "greenhouse") << OsmTag(building, "barn") << OsmTag(building, "service") << OsmTag(building, "manufacture") << OsmTag(building, "construction") << OsmTag(building, "cabin") << OsmTag(building, "farm") << OsmTag(building, "warehouse") << OsmTag(building, "House") << OsmTag(building, "office") << OsmTag(building, "civic") << OsmTag(building, "Residential") << OsmTag(building, "hangar") << OsmTag(building, "public") << OsmTag(building, "university") << OsmTag(building, "hospital") << OsmTag(building, "chapel") << OsmTag(building, "hotel") << OsmTag(building, "train_station") << OsmTag(building, "dormitory") << OsmTag(building, "kindergarten") << OsmTag(building, "stable") << OsmTag(building, "storage_tank") << OsmTag(building, "shop") << OsmTag(building, "college") << OsmTag(building, "supermarket") << OsmTag(building, "factory") << OsmTag(building, "bungalow") << OsmTag(building, "tower") << OsmTag(building, "silo") << OsmTag(building, "storage") << OsmTag(building, "station") << OsmTag(building, "education") << OsmTag(building, "carport") << OsmTag(building, "houseboat") << OsmTag(building, "castle") << OsmTag(building, "social_facility") << OsmTag(building, "water_tower") << OsmTag(building, "container") << OsmTag(building, "exhibition_hall") << OsmTag(building, "monastery") << OsmTag(building, "bunker") << OsmTag(building, "shelter") << OsmTag("building:part", "yes") << OsmTag("building:part", "antenna"); return osmBuildingTags; } GeoDataPlacemark::GeoDataVisualCategory StyleBuilder::determineVisualCategory(const OsmPlacemarkData &osmData) { if (osmData.containsTagKey(QStringLiteral("area:highway")) || // Not supported yet osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("protected_area")) || // Not relevant for the default map osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("postal_code")) || osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("aerial_views")) || // Created by OSM editor(s) application for digitalization osmData.containsTagKey(QStringLiteral("closed:highway")) || osmData.containsTagKey(QStringLiteral("abandoned:highway")) || osmData.containsTagKey(QStringLiteral("abandoned:natural")) || osmData.containsTagKey(QStringLiteral("abandoned:building")) || osmData.containsTagKey(QStringLiteral("abandoned:leisure")) || osmData.containsTagKey(QStringLiteral("disused:highway")) || osmData.containsTag(QStringLiteral("highway"), QStringLiteral("razed"))) { return GeoDataPlacemark::None; } QString const yes(QStringLiteral("yes")); if (osmData.containsTag(QStringLiteral("building"), yes)) { return GeoDataPlacemark::Building; } if (osmData.containsTag(QStringLiteral("historic"), QStringLiteral("castle")) && osmData.containsTag(QStringLiteral("castle_type"), QStringLiteral("kremlin"))) { return GeoDataPlacemark::None; } if( osmData.containsTag(QStringLiteral("natural"), QStringLiteral("glacier")) && osmData.containsTag(QStringLiteral("glacier:type"), QStringLiteral("shelf")) ){ return GeoDataPlacemark::NaturalIceShelf; } if (osmData.containsTag(QStringLiteral("highway"), QStringLiteral("crossing"))) { QStringList const crossings = osmData.tagValue(QStringLiteral("crossing")).split(';'); QString const crossingRef = osmData.tagValue(QStringLiteral("crossing_ref")); if (crossingRef == QStringLiteral("zebra") || crossingRef == QStringLiteral("tiger") || crossings.contains(QStringLiteral("zebra")) || crossings.contains(QStringLiteral("tiger"))) { return GeoDataPlacemark::CrossingZebra; } else if (crossingRef == QStringLiteral("toucan") || crossingRef == QStringLiteral("pelican") || crossings.contains(QStringLiteral("traffic_signals")) || crossings.contains(QStringLiteral("toucan")) || crossings.contains(QStringLiteral("pelican"))) { return GeoDataPlacemark::CrossingSignals; } else if (crossings.contains(QStringLiteral("island"))) { return GeoDataPlacemark::CrossingIsland; } } if (osmData.containsTag(QStringLiteral("railway"), QStringLiteral("crossing")) || osmData.containsTag(QStringLiteral("railway"), QStringLiteral("level_crossing"))) { return GeoDataPlacemark::CrossingRailway; } Private::initializeOsmVisualCategories(); QString const capital(QStringLiteral("capital")); QString const admin_level(QStringLiteral("admin_level")); // National capitals have admin_level=2 // More at http://wiki.openstreetmap.org/wiki/Key:capital#Using_relations_for_capitals QString const national_level(QStringLiteral("2")); for (auto iter = osmData.tagsBegin(), end=osmData.tagsEnd(); iter != end; ++iter) { const auto tag = OsmTag(iter.key(), iter.value()); GeoDataPlacemark::GeoDataVisualCategory category = Private::s_visualCategories.value(tag, GeoDataPlacemark::None); if (category != GeoDataPlacemark::None) { if (category == GeoDataPlacemark::PlaceCity && osmData.containsTag(admin_level, national_level)) { category = GeoDataPlacemark::PlaceCityNationalCapital; } else if (category == GeoDataPlacemark::PlaceCity && osmData.containsTag(capital, yes)) { category = GeoDataPlacemark::PlaceCityCapital; } else if (category == GeoDataPlacemark::PlaceTown && osmData.containsTag(admin_level, national_level)) { category = GeoDataPlacemark::PlaceTownNationalCapital; } else if (category == GeoDataPlacemark::PlaceTown && osmData.containsTag(capital, yes)) { category = GeoDataPlacemark::PlaceTownCapital; } else if (category == GeoDataPlacemark::PlaceVillage && osmData.containsTag(admin_level, national_level)) { category = GeoDataPlacemark::PlaceVillageNationalCapital; } else if (category == GeoDataPlacemark::PlaceVillage && osmData.containsTag(capital, yes)) { category = GeoDataPlacemark::PlaceVillageCapital; } } if (category != GeoDataPlacemark::None) { return category; } } return GeoDataPlacemark::None; } StyleParameters::StyleParameters(const GeoDataPlacemark *placemark_, int tileLevel_) : placemark(placemark_), tileLevel(tileLevel_) { // nothing to do } } diff --git a/src/lib/marble/libmarble.qrc b/src/lib/marble/libmarble.qrc index bb56407ea..23f634f80 100644 --- a/src/lib/marble/libmarble.qrc +++ b/src/lib/marble/libmarble.qrc @@ -1,107 +1,141 @@ ../../../data/svg/worldmap.svg ../../../data/bitmaps/routing_remove.png ../../../data/bitmaps/routing_pick.png ../../../data/bitmaps/routing_step.png ../../../data/bitmaps/cursor_bc.png ../../../data/bitmaps/cursor_bl.png ../../../data/bitmaps/cursor_br.png ../../../data/bitmaps/cursor_cl.png ../../../data/bitmaps/cursor_cr.png ../../../data/bitmaps/cursor_tc.png ../../../data/bitmaps/cursor_tl.png ../../../data/bitmaps/cursor_tr.png ../../../data/bitmaps/turn-around.png ../../../data/bitmaps/turn-continue.png ../../../data/bitmaps/turn-left.png ../../../data/bitmaps/turn-right.png ../../../data/bitmaps/turn-roundabout-ccw-far.png ../../../data/bitmaps/turn-roundabout-ccw-first.png ../../../data/bitmaps/turn-roundabout-ccw-second.png ../../../data/bitmaps/turn-roundabout-ccw-third.png ../../../data/bitmaps/turn-sharp-left.png ../../../data/bitmaps/turn-sharp-right.png ../../../data/bitmaps/turn-slight-left.png ../../../data/bitmaps/turn-slight-right.png ../../../data/bitmaps/turn-merge.png ../../../data/bitmaps/turn-exit-left.png ../../../data/bitmaps/turn-exit-right.png ../../../data/svg/turn-around.svg ../../../data/svg/turn-continue.svg ../../../data/svg/turn-left.svg ../../../data/svg/turn-right.svg ../../../data/svg/turn-roundabout-far.svg ../../../data/svg/turn-roundabout-first.svg ../../../data/svg/turn-roundabout-second.svg ../../../data/svg/turn-roundabout-third.svg ../../../data/svg/turn-sharp-left.svg ../../../data/svg/turn-sharp-right.svg ../../../data/svg/turn-slight-left.svg ../../../data/svg/turn-slight-right.svg ../../../data/svg/turn-merge.svg ../../../data/svg/turn-exit-left.svg ../../../data/svg/turn-exit-right.svg ../../../data/svg/flag-green.svg ../../apps/marble-ui/icons/places.png ../../apps/marble-ui/icons/16x16/edit-clear.png ../../apps/marble-ui/icons/16x16/list-add.png ../../apps/marble-ui/icons/16x16/list-remove.png ../../apps/marble-ui/icons/16x16/go-up.png ../../apps/marble-ui/icons/16x16/go-down.png ../../apps/marble-ui/icons/16x16/reverse.png ../../apps/marble-ui/icons/16x16/dialog-ok.png ../../apps/marble-ui/icons/16x16/edit-delete.png ../../apps/marble-ui/icons/16x16/system-software-update.png ../../apps/marble-ui/icons/16x16/document-new.png ../../apps/marble-ui/icons/16x16/document-open.png ../../apps/marble-ui/icons/16x16/document-save.png ../../apps/marble-ui/icons/document-save-as.png ../../apps/marble-ui/icons/16x16/media-playback-pause.png ../../apps/marble-ui/icons/16x16/media-playback-start.png ../../apps/marble-ui/icons/16x16/media-playback-stop.png ../../apps/marble-ui/icons/16x16/tool-animator.png ../../../data/bitmaps/webpopup/arrow2_topleft.png ../../../data/bitmaps/webpopup/arrow2_topleft_shadow.png ../../../data/bitmaps/webpopup/webpopup2.png ../../../data/bitmaps/webpopup/webpopup2_shadow.png ../../../data/bitmaps/webpopup/font-awesome-icon-print-16x16.png ../../../data/bitmaps/webpopup/font-awesome-icon-remove-16x16.png ../../../data/bitmaps/webpopup/font-awesome-icon-remove-8x8.png ../../../data/bitmaps/webpopup/font-awesome-icon-arrow-back-16x16.png ../../../data/bitmaps/webpopup/arrow2_bottomleft.png ../../../data/bitmaps/webpopup/arrow2_bottomleft_shadow.png ../../../data/bitmaps/webpopup/arrow2_bottomright.png ../../../data/bitmaps/webpopup/arrow2_bottomright_shadow.png ../../../data/bitmaps/webpopup/arrow2_topright.png ../../../data/bitmaps/webpopup/arrow2_topright_shadow.png ../../../data/bitmaps/webpopup/arrow_vertical_bottomleft.png ../../../data/bitmaps/webpopup/arrow_vertical_bottomleft_shadow.png ../../../data/bitmaps/webpopup/arrow_vertical_bottomright.png ../../../data/bitmaps/webpopup/arrow_vertical_bottomright_shadow.png ../../../data/bitmaps/webpopup/arrow_vertical_topleft.png ../../../data/bitmaps/webpopup/arrow_vertical_topleft_shadow.png ../../../data/bitmaps/webpopup/arrow_vertical_topright.png ../../../data/bitmaps/webpopup/arrow_vertical_topright_shadow.png ../../../data/bitmaps/shadowframe.png ../../../data/bitmaps/flag.png ../../../data/bitmaps/document-edit.png ../../../data/bitmaps/media-playback-pause.png ../../../data/bitmaps/player-time.png ../../../data/bitmaps/audio-x-generic.png webpopup/marble_deco_places.png webpopup/placesscreen.css webpopup/geoplace.html webpopup/city.html webpopup/nation.html webpopup/skyplace.html webpopup/photooverlay.html webpopup/osm.html htmlfeatures/bootstrap.min.css htmlfeatures/bootstrap.inc + + ../../../data/svg/osmc-symbols/dot.svg + ../../../data/svg/osmc-symbols/bowl.svg + ../../../data/svg/osmc-symbols/circle.svg + ../../../data/svg/osmc-symbols/bar.svg + ../../../data/svg/osmc-symbols/stripe.svg + ../../../data/svg/osmc-symbols/x.svg + ../../../data/svg/osmc-symbols/backslash.svg + ../../../data/svg/osmc-symbols/slash.svg + ../../../data/svg/osmc-symbols/triangle.svg + ../../../data/svg/osmc-symbols/triangle_turned.svg + ../../../data/svg/osmc-symbols/triangle_line.svg + ../../../data/svg/osmc-symbols/diamond.svg + ../../../data/svg/osmc-symbols/rectangle.svg + ../../../data/svg/osmc-symbols/rectangle_line.svg + ../../../data/svg/osmc-symbols/pointer.svg + ../../../data/svg/osmc-symbols/fork.svg + ../../../data/svg/osmc-symbols/arch.svg + ../../../data/svg/osmc-symbols/turned_T.svg + ../../../data/svg/osmc-symbols/L.svg + ../../../data/svg/osmc-symbols/lower.svg + ../../../data/svg/osmc-symbols/corner.svg + ../../../data/svg/osmc-symbols/drop_line.svg + ../../../data/svg/osmc-symbols/wolfshook.svg + ../../../data/svg/osmc-symbols/3rdparty/ammonit.svg + ../../../data/svg/osmc-symbols/3rdparty/bridleway.svg + ../../../data/svg/osmc-symbols/3rdparty/heart.svg + ../../../data/svg/osmc-symbols/3rdparty/hiker.svg + ../../../data/svg/osmc-symbols/3rdparty/horse.svg + ../../../data/svg/osmc-symbols/3rdparty/mine.svg + ../../../data/svg/osmc-symbols/3rdparty/shell_modern.svg + ../../../data/svg/osmc-symbols/3rdparty/shell.svg + ../../../data/svg/osmc-symbols/3rdparty/tower.svg +