Merge branch 'organicmaps:master' into etaswitchfeature

This commit is contained in:
Aryan 2023-03-18 10:52:20 +05:30 committed by GitHub
commit c055fc94d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 6604 additions and 6424 deletions

View file

@ -624,7 +624,7 @@
<activity
android:name="app.organicmaps.DownloadResourcesLegacyActivity"
android:configChanges="screenLayout|screenSize"/>
android:configChanges="orientation|screenLayout|screenSize"/>
<activity-alias
android:name="app.organicmaps.DownloadResourcesActivity"

View file

@ -13,19 +13,18 @@ import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.badge.BadgeUtils;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import app.organicmaps.R;
import app.organicmaps.downloader.MapManager;
import app.organicmaps.downloader.UpdateInfo;
import app.organicmaps.routing.RoutingController;
import app.organicmaps.util.Config;
import app.organicmaps.util.ThemeUtils;
import app.organicmaps.util.UiUtils;
import app.organicmaps.widget.menu.MyPositionButton;
import app.organicmaps.widget.placepage.PlacePageController;
import app.organicmaps.util.Config;
import app.organicmaps.util.UiUtils;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.badge.BadgeUtils;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.HashMap;
import java.util.Map;
@ -242,8 +241,10 @@ public class MapButtonsController extends Fragment
public void updateButtonsVisibility()
{
updateButtonsVisibility(mInnerLeftButtonsFrame.getTranslationY(), mInnerLeftButtonsFrame);
updateButtonsVisibility(mInnerRightButtonsFrame.getTranslationY(), mInnerRightButtonsFrame);
if (mInnerLeftButtonsFrame != null)
updateButtonsVisibility(mInnerLeftButtonsFrame.getTranslationY(), mInnerLeftButtonsFrame);
if (mInnerRightButtonsFrame != null)
updateButtonsVisibility(mInnerRightButtonsFrame.getTranslationY(), mInnerRightButtonsFrame);
}
private void updateButtonsVisibility(final float translation, @Nullable View parent)
@ -254,7 +255,7 @@ public class MapButtonsController extends Fragment
{
final View button = entry.getValue();
if (button.getParent() == parent)
showButton(getViewTopOffset(translation, button) > 0, entry.getKey());
showButton(getViewTopOffset(translation, button) >= 0, entry.getKey());
}
}
@ -269,7 +270,10 @@ public class MapButtonsController extends Fragment
public void showMapButtons(boolean show)
{
if (show)
{
UiUtils.show(mFrame);
updateButtonsVisibility();
}
else
UiUtils.hide(mFrame);
mOnBottomButtonsHeightChangedListener.OnBottomButtonsHeightChanged();

View file

@ -52,13 +52,12 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
private Preference mStoragePref;
@Nullable
private TwoStatePreference mPrefEnabled;
private TwoStatePreference mTtsPrefEnabled;
@Nullable
private ListPreference mPrefLanguages;
private ListPreference mTtsPrefLanguages;
@Nullable
private Preference mLangInfo;
@Nullable
private Preference mLangInfoLink;
private Preference mTtsLangInfo;
private PreferenceScreen mPreferenceScreen;
@NonNull
@ -76,27 +75,23 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
if (!set)
{
TtsPlayer.setEnabled(false);
if (mPrefLanguages != null)
mPrefLanguages.setEnabled(false);
if (mLangInfo != null)
mLangInfo.setSummary(R.string.prefs_languages_information_off);
if (mLangInfoLink != null && isOnTtsScreen())
getPreferenceScreen().addPreference(mLangInfoLink);
if (mTtsPrefLanguages != null)
mTtsPrefLanguages.setEnabled(false);
if (mTtsLangInfo != null)
mTtsLangInfo.setSummary(R.string.prefs_languages_information_off);
root.setSummary(R.string.off);
if (mPrefEnabled != null)
mPrefEnabled.setTitle(R.string.off);
if (mTtsPrefEnabled != null)
mTtsPrefEnabled.setTitle(R.string.off);
return true;
}
if (mLangInfo != null)
mLangInfo.setSummary(R.string.prefs_languages_information);
if (mTtsLangInfo != null)
mTtsLangInfo.setSummary(R.string.prefs_languages_information);
root.setSummary(R.string.on);
if (mPrefEnabled != null)
mPrefEnabled.setTitle(R.string.on);
if (mLangInfoLink != null)
removePreference(getString(R.string.pref_navigation), mLangInfoLink);
if (mTtsPrefEnabled != null)
mTtsPrefEnabled.setTitle(R.string.on);
if (mCurrentLanguage != null && mCurrentLanguage.downloaded)
{
@ -133,27 +128,25 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
private void enableListeners(boolean enable)
{
if (mPrefEnabled != null)
mPrefEnabled.setOnPreferenceChangeListener(enable ? mEnabledListener : null);
if (mPrefLanguages != null)
mPrefLanguages.setOnPreferenceChangeListener(enable ? mLangListener : null);
if (mTtsPrefEnabled != null)
mTtsPrefEnabled.setOnPreferenceChangeListener(enable ? mEnabledListener : null);
if (mTtsPrefLanguages != null)
mTtsPrefLanguages.setOnPreferenceChangeListener(enable ? mLangListener : null);
}
private void setLanguage(@NonNull LanguageData lang)
{
Config.setTtsEnabled(true);
TtsPlayer.INSTANCE.setLanguage(lang);
if (mPrefLanguages != null)
mPrefLanguages.setSummary(lang.name);
if (mTtsPrefLanguages != null)
mTtsPrefLanguages.setSummary(lang.name);
updateTts();
}
// Use this method only on TTS screen. Prerequisites: mTtsPrefEnabled, mTtsPrefLanguages and mTtsLangInfo are not null.
private void updateTts()
{
if (mPrefEnabled == null || mPrefLanguages == null || mLangInfo == null || mLangInfoLink == null)
return;
enableListeners(false);
List<LanguageData> languages = TtsPlayer.INSTANCE.refreshLanguages();
@ -164,15 +157,13 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
if (languages.isEmpty())
{
mPrefEnabled.setChecked(false);
mPrefEnabled.setEnabled(false);
mPrefEnabled.setSummary(R.string.pref_tts_unavailable);
mPrefEnabled.setTitle(R.string.off);
mPrefLanguages.setEnabled(false);
mPrefLanguages.setSummary(null);
mLangInfo.setSummary(R.string.prefs_languages_information_off);
if (isOnTtsScreen())
getPreferenceScreen().addPreference(mLangInfoLink);
mTtsPrefEnabled.setChecked(false);
mTtsPrefEnabled.setEnabled(false);
mTtsPrefEnabled.setSummary(R.string.pref_tts_unavailable);
mTtsPrefEnabled.setTitle(R.string.off);
mTtsPrefLanguages.setEnabled(false);
mTtsPrefLanguages.setSummary(null);
mTtsLangInfo.setSummary(R.string.prefs_languages_information_off);
root.setSummary(R.string.off);
enableListeners(true);
@ -180,15 +171,11 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
}
boolean enabled = TtsPlayer.isEnabled();
mPrefEnabled.setChecked(enabled);
mPrefEnabled.setSummary(null);
mPrefEnabled.setTitle(enabled ? R.string.on : R.string.off);
mLangInfo.setSummary(enabled ? R.string.prefs_languages_information
: R.string.prefs_languages_information_off);
if (enabled)
removePreference(getString(R.string.pref_navigation), mLangInfoLink);
else if (isOnTtsScreen())
getPreferenceScreen().addPreference(mLangInfoLink);
mTtsPrefEnabled.setChecked(enabled);
mTtsPrefEnabled.setSummary(null);
mTtsPrefEnabled.setTitle(enabled ? R.string.on : R.string.off);
mTtsLangInfo.setSummary(enabled ? R.string.prefs_languages_information
: R.string.prefs_languages_information_off);
if (root != null)
root.setSummary(enabled ? R.string.on : R.string.off);
@ -204,19 +191,24 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
mLanguages.put(lang.internalCode, lang);
}
mPrefLanguages.setEntries(entries);
mPrefLanguages.setEntryValues(values);
mTtsPrefLanguages.setEntries(entries);
mTtsPrefLanguages.setEntryValues(values);
mCurrentLanguage = TtsPlayer.getSelectedLanguage(languages);
boolean available = (mCurrentLanguage != null && mCurrentLanguage.downloaded);
mPrefLanguages.setEnabled(available && TtsPlayer.isEnabled());
mPrefLanguages.setSummary(available ? mCurrentLanguage.name : null);
mPrefLanguages.setValue(available ? mCurrentLanguage.internalCode : null);
mPrefEnabled.setChecked(available && TtsPlayer.isEnabled());
mTtsPrefLanguages.setEnabled(available && TtsPlayer.isEnabled());
mTtsPrefLanguages.setSummary(available ? mCurrentLanguage.name : null);
mTtsPrefLanguages.setValue(available ? mCurrentLanguage.internalCode : null);
mTtsPrefEnabled.setChecked(available && TtsPlayer.isEnabled());
enableListeners(true);
}
private boolean isOnMainScreen()
{
return mPreferenceScreen.getKey() == null;
}
private boolean isOnTtsScreen()
{
String ttsScreenKey = requireActivity().getString(R.string.pref_tts_screen);
@ -241,38 +233,47 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
{
super.onViewCreated(view, savedInstanceState);
mPreferenceScreen = getPreferenceScreen();
mStoragePref = getPreference(getString(R.string.pref_storage));
mPrefEnabled = getPreference(getString(R.string.pref_tts_enabled));
mPrefLanguages = getPreference(getString(R.string.pref_tts_language));
mLangInfo = getPreference(getString(R.string.pref_tts_info));
mLangInfoLink = getPreference(getString(R.string.pref_tts_info_link));
initLangInfoLink();
initStoragePrefCallbacks();
initMeasureUnitsPrefsCallbacks();
initZoomPrefsCallbacks();
initMapStylePrefsCallbacks();
initSpeedCamerasPrefs();
initAutoDownloadPrefsCallbacks();
initLargeFontSizePrefsCallbacks();
initTransliterationPrefsCallbacks();
init3dModePrefsCallbacks();
initPerspectivePrefsCallbacks();
initAutoZoomPrefsCallbacks();
initLoggingEnabledPrefsCallbacks();
initEmulationBadStorage();
initUseMobileDataPrefsCallbacks();
initPowerManagementPrefsCallbacks();
boolean playServices = initPlayServicesPrefsCallbacks();
boolean crashReports = initCrashReports();
if (!playServices && !crashReports)
if (isOnMainScreen())
{
// Remove "Tracking" section completely.
final PreferenceCategory tracking = getPreference(getString(R.string.pref_subtittle_opt_out));
mPreferenceScreen.removePreference(tracking);
// Initialize main preferences screen.
mStoragePref = getPreference(getString(R.string.pref_storage));
initStoragePrefCallbacks();
initMeasureUnitsPrefsCallbacks();
initZoomPrefsCallbacks();
initMapStylePrefsCallbacks();
initSpeedCamerasPrefs();
initAutoDownloadPrefsCallbacks();
initLargeFontSizePrefsCallbacks();
initTransliterationPrefsCallbacks();
init3dModePrefsCallbacks();
initPerspectivePrefsCallbacks();
initAutoZoomPrefsCallbacks();
initLoggingEnabledPrefsCallbacks();
initEmulationBadStorage();
initUseMobileDataPrefsCallbacks();
initPowerManagementPrefsCallbacks();
final boolean playServices = initPlayServicesPrefsCallbacks();
final boolean crashReports = initCrashReports();
if (!playServices && !crashReports)
{
// Remove "Tracking" section completely.
final PreferenceCategory tracking = findPreference(getString(R.string.pref_subtittle_opt_out));
if (tracking != null)
mPreferenceScreen.removePreference(tracking);
}
initScreenSleepEnabledPrefsCallbacks();
initShowOnLockScreenPrefsCallbacks();
}
else if (isOnTtsScreen())
{
// Initialize TTS preferences screen.
mTtsPrefEnabled = getPreference(getString(R.string.pref_tts_enabled));
mTtsPrefLanguages = getPreference(getString(R.string.pref_tts_language));
mTtsLangInfo = getPreference(getString(R.string.pref_tts_info));
initTtsLangInfoLink();
updateTts();
}
initScreenSleepEnabledPrefsCallbacks();
initShowOnLockScreenPrefsCallbacks();
updateTts();
}
private void initSpeedCamerasPrefs()
@ -310,7 +311,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
{
super.onResume();
updateTts();
if (isOnTtsScreen())
updateTts();
}
@Override
@ -322,7 +324,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
if (requestCode == REQUEST_INSTALL_DATA)
{
updateTts();
if (isOnTtsScreen())
updateTts();
LanguageData lang = mLanguages.get(mSelectedLanguage);
if (lang != null && lang.downloaded)
@ -344,24 +347,25 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
return super.onPreferenceTreeClick(preference);
}
private void initLangInfoLink()
// Use this method only on TTS screen.
private void initTtsLangInfoLink()
{
if (mLangInfoLink != null)
{
Spannable link = new SpannableString(getString(R.string.prefs_languages_information_off_link));
link.setSpan(new ForegroundColorSpan(ContextCompat.getColor(requireContext(),
UiUtils.getStyledResourceId(requireContext(), R.attr.colorAccent))),
0, link.length(), 0);
mLangInfoLink.setSummary(link);
String TTS_INFO_LINK = requireActivity().getString(R.string.tts_info_link);
mLangInfoLink.setOnPreferenceClickListener(preference -> {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(TTS_INFO_LINK));
requireContext().startActivity(intent);
return false;
});
removePreference(getString(R.string.pref_navigation), mLangInfoLink);
}
final Preference ttsLangInfoLink = getPreference(getString(R.string.pref_tts_info_link));
final String ttsLinkText = getString(R.string.prefs_languages_information_off_link);
final Spannable link = new SpannableString(ttsLinkText + "");
// Set link color.
link.setSpan(new ForegroundColorSpan(ContextCompat.getColor(requireContext(),
UiUtils.getStyledResourceId(requireContext(), R.attr.colorAccent))),
0, ttsLinkText.length(), 0);
ttsLangInfoLink.setSummary(link);
final String ttsInfoUrl = requireActivity().getString(R.string.tts_info_link);
ttsLangInfoLink.setOnPreferenceClickListener(preference -> {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(ttsInfoUrl));
requireContext().startActivity(intent);
return false;
});
}
private void initLargeFontSizePrefsCallbacks()
@ -464,7 +468,9 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
private void initEmulationBadStorage()
{
final Preference pref = getPreference(getString(R.string.pref_emulate_bad_external_storage));
final Preference pref = findPreference(getString(R.string.pref_emulate_bad_external_storage));
if (pref == null)
return;
if (!SharedPropertiesUtils.shouldShowEmulateBadStorageSetting(requireContext()))
removePreference(getString(R.string.pref_settings_general), pref);
@ -489,7 +495,9 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
private boolean initPlayServicesPrefsCallbacks()
{
final Preference pref = getPreference(getString(R.string.pref_play_services));
final Preference pref = findPreference(getString(R.string.pref_play_services));
if (pref == null)
return false;
if (!LocationProviderFactory.isGoogleLocationAvailable(requireActivity().getApplicationContext()))
{
@ -694,7 +702,9 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment
private boolean initCrashReports()
{
final Preference pref = getPreference(getString(R.string.pref_crash_reports));
final Preference pref = findPreference(getString(R.string.pref_crash_reports));
if (pref == null)
return false;
if (!CrashlyticsUtils.INSTANCE.isAvailable())
{

View file

@ -59,8 +59,6 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
mTvBookmarkNote.setOnLongClickListener(this);
final View editBookmarkBtn = mFrame.findViewById(R.id.tv__bookmark_edit);
editBookmarkBtn.setOnClickListener(this);
mViewModel.getMapObject().observe(requireActivity(), this);
}
private void initWebView()
@ -75,9 +73,16 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
}
@Override
public void onDestroyView()
public void onResume()
{
super.onDestroyView();
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
}
@Override
public void onPause()
{
super.onPause();
mViewModel.getMapObject().removeObserver(this);
}

View file

@ -134,8 +134,6 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
mTvLinePage = mFrame.findViewById(R.id.tv__place_line_page);
mLinePage.setOnClickListener((v) -> openUrl(Metadata.MetadataType.FMD_CONTACT_LINE));
mLinePage.setOnLongClickListener((v) -> copyUrl(mLinePage, Metadata.MetadataType.FMD_CONTACT_LINE));
mViewModel.getMapObject().observe(requireActivity(), this);
}
private boolean isSocialUsername(Metadata.MetadataType type)
@ -218,9 +216,16 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
}
@Override
public void onDestroyView()
public void onResume()
{
super.onDestroyView();
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
}
@Override
public void onPause()
{
super.onPause();
mViewModel.getMapObject().removeObserver(this);
}

View file

@ -59,8 +59,6 @@ public class PlacePageOpeningHoursFragment extends Fragment implements Observer<
mFullWeekOpeningHours = view.findViewById(R.id.rw__full_opening_hours);
mOpeningHoursAdapter = new PlaceOpeningHoursAdapter();
mFullWeekOpeningHours.setAdapter(mOpeningHoursAdapter);
mViewModel.getMapObject().observe(requireActivity(), this);
}
private void refreshTodayNonBusinessTime(Timespan[] closedTimespans)
@ -180,9 +178,16 @@ public class PlacePageOpeningHoursFragment extends Fragment implements Observer<
}
@Override
public void onDestroyView()
public void onResume()
{
super.onDestroyView();
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
}
@Override
public void onPause()
{
super.onPause();
mViewModel.getMapObject().removeObserver(this);
}

View file

@ -36,14 +36,19 @@ public class PlacePagePhoneFragment extends Fragment implements Observer<MapObje
RecyclerView phoneRecycler = view.findViewById(R.id.rw__phone);
mPhoneAdapter = new PlacePhoneAdapter();
phoneRecycler.setAdapter(mPhoneAdapter);
}
@Override
public void onResume()
{
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
}
@Override
public void onDestroyView()
public void onPause()
{
super.onDestroyView();
super.onPause();
mViewModel.getMapObject().removeObserver(this);
}

View file

@ -239,10 +239,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mDownloaderInfo = mPreview.findViewById(R.id.tv__downloader_details);
mViewModel.getMapObject().observe(requireActivity(), this);
mMapObject = mViewModel.getMapObject().getValue();
LocationHelper.INSTANCE.addListener(this);
}
@Override
@ -253,14 +250,34 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
}
@Override
public void onDestroyView()
public void onResume()
{
super.onDestroyView();
detachCountry();
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
LocationHelper.INSTANCE.addListener(this);
}
@Override
public void onPause()
{
super.onPause();
// Unsubscribe from events as soon as the fragment becomes inactive
// to prevent unwanted side effects
mViewModel.getMapObject().removeObserver(this);
LocationHelper.INSTANCE.removeListener(this);
}
@Override
public void onStop()
{
super.onStop();
// Safely detach the country once the fragment is hidden from the user
// It is safer to call this here than in onPause as the app could go from onPause to
// onResume without killing the fragment.
// In this case we would not want to detach the country.
detachCountry();
}
@Override
public void onPlacePageButtonClick(PlacePageButtons.ButtonType item)
{

View file

@ -52,8 +52,6 @@ public class PlacePageWikipediaFragment extends Fragment implements Observer<Map
placeDescriptionMoreBtn.setOnClickListener(v -> showDescriptionScreen());
mPlaceDescriptionView.setOnClickListener(v -> showDescriptionScreen());
mWiki = view.findViewById(R.id.ll__place_wiki);
mViewModel.getMapObject().observe(requireActivity(), this);
}
private void showDescriptionScreen()
@ -97,9 +95,16 @@ public class PlacePageWikipediaFragment extends Fragment implements Observer<Map
}
@Override
public void onDestroyView()
public void onResume()
{
super.onDestroyView();
super.onResume();
mViewModel.getMapObject().observe(requireActivity(), this);
}
@Override
public void onPause()
{
super.onPause();
mViewModel.getMapObject().removeObserver(this);
}

Binary file not shown.

View file

@ -13034,10 +13034,17 @@ cont {
}
cont {
name: "craft-metal_construction"
element {
scale: 17
symbol {
name: "metal_construction-m"
priority: 16000
}
}
element {
scale: 18
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -13053,7 +13060,7 @@ cont {
element {
scale: 19
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -37397,14 +37404,14 @@ cont {
element {
scale: 14
area {
color: 13029267
color: 13620648
priority: -15875
}
}
element {
scale: 15
area {
color: 13029267
color: 13620648
priority: -15875
}
}
@ -39955,35 +39962,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40005,7 +40012,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40013,7 +40020,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40035,7 +40042,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40043,7 +40050,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40072,7 +40079,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40080,7 +40087,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40109,7 +40116,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40125,7 +40132,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40154,7 +40161,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40166,7 +40173,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40195,7 +40202,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40210,35 +40217,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40260,7 +40267,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40268,7 +40275,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40290,7 +40297,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40298,7 +40305,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40327,7 +40334,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40335,7 +40342,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40364,7 +40371,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40380,7 +40387,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40409,7 +40416,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40421,7 +40428,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40450,7 +40457,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40465,35 +40472,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40515,7 +40522,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40523,7 +40530,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40545,7 +40552,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40553,7 +40560,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40582,7 +40589,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40590,7 +40597,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40619,7 +40626,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40635,7 +40642,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40664,7 +40671,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40676,7 +40683,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40705,7 +40712,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40720,35 +40727,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40770,7 +40777,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40778,7 +40785,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40800,7 +40807,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40808,7 +40815,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40837,7 +40844,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40845,7 +40852,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40874,7 +40881,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40890,7 +40897,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40919,7 +40926,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40931,7 +40938,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40960,7 +40967,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -45074,42 +45081,42 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 12372094
priority: -15866
}
}
element {
scale: 15
area {
color: 11584112
color: 12372094
priority: -15866
}
}
element {
scale: 16
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 17
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 18
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 19
area {
color: 11190117
color: 11781233
priority: -15866
}
}

Binary file not shown.

View file

@ -12803,10 +12803,17 @@ cont {
}
cont {
name: "craft-metal_construction"
element {
scale: 17
symbol {
name: "metal_construction-m"
priority: 16000
}
}
element {
scale: 18
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -12822,7 +12829,7 @@ cont {
element {
scale: 19
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -37035,14 +37042,14 @@ cont {
element {
scale: 14
area {
color: 13029267
color: 13620648
priority: -15875
}
}
element {
scale: 15
area {
color: 13029267
color: 13620648
priority: -15875
}
}
@ -39593,35 +39600,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -39643,7 +39650,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -39651,7 +39658,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -39673,7 +39680,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -39681,7 +39688,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39710,7 +39717,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -39718,7 +39725,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39747,7 +39754,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -39763,7 +39770,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39792,7 +39799,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39804,7 +39811,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39833,7 +39840,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39848,35 +39855,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -39898,7 +39905,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -39906,7 +39913,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -39928,7 +39935,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -39936,7 +39943,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -39965,7 +39972,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -39973,7 +39980,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40002,7 +40009,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40018,7 +40025,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40047,7 +40054,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40059,7 +40066,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40088,7 +40095,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40103,35 +40110,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40153,7 +40160,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40161,7 +40168,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40183,7 +40190,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40191,7 +40198,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40220,7 +40227,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40228,7 +40235,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40257,7 +40264,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40273,7 +40280,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40302,7 +40309,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40314,7 +40321,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40343,7 +40350,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40358,35 +40365,35 @@ cont {
element {
scale: 10
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 11
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 12
area {
color: 12372094
color: 13620648
priority: -15933
}
}
element {
scale: 13
area {
color: 11781233
color: 13029267
priority: -15933
}
}
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
symbol {
@ -40408,7 +40415,7 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40416,7 +40423,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
symbol {
@ -40438,7 +40445,7 @@ cont {
element {
scale: 15
area {
color: 11584112
color: 13029267
priority: -15933
}
apply_if: "!name"
@ -40446,7 +40453,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40475,7 +40482,7 @@ cont {
element {
scale: 16
area {
color: 11190117
color: 12372094
priority: -15933
}
apply_if: "!name"
@ -40483,7 +40490,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40512,7 +40519,7 @@ cont {
element {
scale: 17
area {
color: 11190117
color: 12372094
priority: -15933
}
caption {
@ -40528,7 +40535,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40557,7 +40564,7 @@ cont {
element {
scale: 18
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40569,7 +40576,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -40598,7 +40605,7 @@ cont {
element {
scale: 19
area {
color: 11190117
color: 12372094
priority: -15933
}
symbol {
@ -44712,42 +44719,42 @@ cont {
element {
scale: 14
area {
color: 11453035
color: 12372094
priority: -15866
}
}
element {
scale: 15
area {
color: 11584112
color: 12372094
priority: -15866
}
}
element {
scale: 16
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 17
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 18
area {
color: 11190117
color: 11781233
priority: -15866
}
}
element {
scale: 19
area {
color: 11190117
color: 11781233
priority: -15866
}
}

Binary file not shown.

View file

@ -12803,10 +12803,17 @@ cont {
}
cont {
name: "craft-metal_construction"
element {
scale: 17
symbol {
name: "metal_construction-m"
priority: 16000
}
}
element {
scale: 18
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -12822,7 +12829,7 @@ cont {
element {
scale: 19
symbol {
name: "hand-m"
name: "metal_construction-m"
priority: 16586
}
caption {
@ -37178,14 +37185,14 @@ cont {
element {
scale: 14
area {
color: 1251584
color: 988160
priority: -15875
}
}
element {
scale: 15
area {
color: 1251584
color: 988160
priority: -15875
}
}
@ -39736,35 +39743,35 @@ cont {
element {
scale: 10
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 11
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 12
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 13
area {
color: 1317888
color: 1251584
priority: -15933
}
}
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -39786,7 +39793,7 @@ cont {
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -39794,7 +39801,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -39816,7 +39823,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -39991,35 +39998,35 @@ cont {
element {
scale: 10
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 11
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 12
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 13
area {
color: 1317888
color: 1251584
priority: -15933
}
}
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40041,7 +40048,7 @@ cont {
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -40049,7 +40056,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40071,7 +40078,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -40246,35 +40253,35 @@ cont {
element {
scale: 10
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 11
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 12
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 13
area {
color: 1317888
color: 1251584
priority: -15933
}
}
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40296,7 +40303,7 @@ cont {
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -40304,7 +40311,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40326,7 +40333,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -40501,35 +40508,35 @@ cont {
element {
scale: 10
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 11
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 12
area {
color: 1317888
color: 988160
priority: -15933
}
}
element {
scale: 13
area {
color: 1317888
color: 1251584
priority: -15933
}
}
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40551,7 +40558,7 @@ cont {
element {
scale: 14
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"
@ -40559,7 +40566,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
symbol {
@ -40581,7 +40588,7 @@ cont {
element {
scale: 15
area {
color: 1317888
color: 1251584
priority: -15933
}
apply_if: "!name"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 KiB

After

Width:  |  Height:  |  Size: 761 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 KiB

After

Width:  |  Height:  |  Size: 768 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

After

Width:  |  Height:  |  Size: 351 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 KiB

After

Width:  |  Height:  |  Size: 355 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 211 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 213 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 KiB

After

Width:  |  Height:  |  Size: 491 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 499 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 KiB

After

Width:  |  Height:  |  Size: 797 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 KiB

After

Width:  |  Height:  |  Size: 808 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 963 KiB

After

Width:  |  Height:  |  Size: 963 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 975 KiB

After

Width:  |  Height:  |  Size: 978 KiB

File diff suppressed because it is too large Load diff

View file

@ -24713,7 +24713,7 @@
fa = گردشگری
fi = Taideteos
fr = Œuvre
hu = Szobor
hu = Műalkotás
id = Pariwisata
it = Opera d'arte
ja = 建築
@ -24748,7 +24748,7 @@
fa = گردشگری
fi = Taideteos
fr = Œuvre
hu = Szobor
hu = Műalkotás
id = Pariwisata
it = Dipinto
ja = 絵画

View file

@ -273,7 +273,7 @@ area|z12-[natural=grassland],
area|z12-[leisure=golf_course],
area|z12-[natural=heath],
area|z12-[landuse=allotments],
area|z12-[natural=scrub],
area|z14-[natural=scrub],
area|z12-[natural=bare_rock],
area|z12-[landuse=orchard],
area|z12-[landuse=vineyard],
@ -283,8 +283,21 @@ area|z12-[landuse=village_green],
area|z12-[landuse=field],
{fill-position: background; fill-opacity: 1;}
area|z10-12[leisure=park],
{fill-color: @green0;}
area|z13-15[leisure=park],
{fill-color: @green1;}
area|z16-[leisure=park],
area|z14-15[natural=scrub],
{fill-color: @green2;}
area|z16-[natural=scrub],
{fill-color: @green3;}
area|z14-15[landuse=grass],
{fill-color: @green0;}
area|z10[landuse=forest],
area|z14-[landuse=grass],
area|z16-[landuse=grass],
area|z14-[natural=grassland],
area|z14-[leisure=golf_course],
area|z14-[natural=heath],
@ -296,16 +309,21 @@ area|z14-[landuse=recreation_ground],
area|z14-[landuse=village_green],
area|z14-[landuse=field],
{fill-color: @green1;}
area|z11-12[landuse=forest],
area|z10-12[leisure=park],
area|z12[leisure=garden],
{fill-color: @green2;}
area|z13[landuse=forest],
area|z13[leisure=park],
area|z13[leisure=garden]
{fill-color: @green3;}
area|z14[landuse=forest],
area|z14[leisure=garden],
{fill-color: @green4;}
area|z15[landuse=forest],
area|z15[leisure=garden],
{fill-color: @green5;}
area|z16-[landuse=forest],
area|z16-[leisure=garden],
{fill-color: @forest;}
area|z12-13[landuse=grass],
area|z12-13[natural=grassland],
@ -332,24 +350,6 @@ area|z12-[landuse=military]
{fill-opacity: 0.5; fill-color: @military;}
/* End of hardcoded */
area|z14[landuse=forest],
area|z14[leisure=park],
area|z14[leisure=garden],
area|z14[natural=scrub]
{fill-color: @green4;}
area|z15[landuse=forest],
area|z15[leisure=park],
area|z15[leisure=garden],
area|z15[natural=scrub]
{fill-color: @green5;}
area|z16-[landuse=forest],
area|z16-[leisure=park],
area|z16-[leisure=garden],
area|z16-[natural=scrub]
{fill-color: @forest;}
area|z12-[natural=bare_rock],
{fill-color: @barerock;}

View file

@ -2722,6 +2722,9 @@ area|z17-[craft=shoemaker]
node|z17-[craft=tailor],
area|z17-[craft=tailor]
{icon-image:clothes-m.svg;}
node|z17-[craft=metal_construction],
area|z17-[craft=metal_construction]
{icon-image:metal_construction-m.svg;}
/* 7. CAR */

View file

@ -47,13 +47,13 @@
/*3.2 Vegetation*/
@forest: #AABF65;
@green0: #CFD5A8;
@green1: #C6CF93;
@green2: #BCC87E;
@green3: #B3C471;
@green4: #AEC26B;
@green5: #B0C270;
@forest: #AABF65;
@green6: #888C38;
/* 4.LANDUSE */

View file

@ -0,0 +1,13 @@
<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>metal_construction-m</title>
<g fill="none" fill-rule="evenodd">
<g id="metal_construction-m" fill-rule="nonzero">
<circle id="Oval" cx="12" cy="12" r="12" fill="#fff" opacity=".6"/>
<circle id="Oval" cx="12" cy="12" r="11" fill="#8C5F93"/>
<path
id="path1575"
style="fill:#ffffff;stroke-width:1.08707"
d="m 4.8393016,8.1229641 0.018198,2.1276649 2.6206275,-0.03546 0.018198,6.400728 H 4.8575004 l 0.036398,2.021282 7.2977196,-0.01772 -0.01819,-2.056744 -2.6752241,-0.03546 0.0182,-6.418459 2.5842311,0.01773 -0.01819,-1.9503594 z m 0.8086105,7.9060379 h 1.2096387 v -0.764781 z m 4.5554489,-5.253167 2.406409,0.05015 3.899154,-2.469866 0.0386,4.03704 1.132428,0.02508 -5.263215,3.610768 h -2.264852 z m 8.30018,1.868071 0.05148,1.25374 -5.623533,4.3254 -0.09008,-1.855535 z m -5.700745,-4.6639088 0.09008,1.9056827 5.662139,-3.422707 -0.02574,-1.3289634 z M 6.0768201,7.5201255 12.646588,7.5733171 17.560265,4.949196 12.664788,4.8960044 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,13 @@
<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<title>metal_construction_night-m</title>
<g id="Page-2:-Night" fill="none" fill-rule="evenodd" opacity="1">
<g id="metal_construction_night-m" fill-rule="nonzero">
<circle id="Oval" cx="12" cy="12" r="12" fill="#000" opacity=".6"/>
<circle id="Oval" cx="12" cy="12" r="11" fill="#8C5F93"/>
<path
id="path1575"
style="fill:#000000;stroke-width:1.08707"
d="m 4.839,8.1229597 0.018198,2.1276653 2.6206275,-0.03546 0.018198,6.400728 H 4.8571988 l 0.036398,2.021282 7.2977192,-0.01772 -0.01819,-2.056744 -2.6752237,-0.03546 0.0182,-6.418459 2.5842307,0.01773 -0.01819,-1.9503598 z m 0.8086105,7.9060383 h 1.2096387 v -0.764781 z m 4.5554485,-5.253167 2.406409,0.05015 3.899154,-2.4698664 0.0386,4.0370404 1.132428,0.02508 -5.263215,3.610768 h -2.264852 z m 8.30018,1.868071 0.05148,1.25374 -5.623533,4.3254 -0.09008,-1.855535 z m -5.700745,-4.6639092 0.09008,1.9056827 5.662139,-3.422707 -0.02574,-1.3289634 z M 6.0765185,7.5201211 12.646286,7.5733131 17.559963,4.949192 12.664486,4.896 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -874,3 +874,46 @@ UNIT_TEST(Kml_Ver_2_3)
TEST_EQUAL(lines[0].size(), 7, ());
TEST_EQUAL(lines[1].size(), 6, ());
}
UNIT_TEST(Kml_Placemark_contains_both_Bookmark_and_Track_data)
{
char const * input = R"(<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<MultiGeometry>
<Point>
<coordinates>28.968447783842,41.009030507129,0</coordinates>
</Point>
<LineString>
<coordinates>28.968447783842,41.009030507129,0 28.965858,41.018449,0</coordinates>
</LineString>
</MultiGeometry>
</Placemark>
<Placemark>
<MultiGeometry>
<LineString>
<coordinates>28.968447783842,41.009030507129,0 28.965858,41.018449,0</coordinates>
</LineString>
<Point>
<coordinates>28.968447783842,41.009030507129,0</coordinates>
</Point>
</MultiGeometry>
</Placemark>
</kml>
)";
kml::FileData fData;
try
{
MemReader reader(input, strlen(input));
kml::DeserializerKml des(fData);
des.Deserialize(reader);
}
catch (kml::DeserializerKml::DeserializeException const & ex)
{
TEST(false, ("Exception raised", ex.Msg()));
}
TEST_EQUAL(fData.m_bookmarksData.size(), 2, ());
TEST_EQUAL(fData.m_tracksData.size(), 2, ());
}

View file

@ -734,7 +734,7 @@ void KmlParser::ParseAndAddPoints(MultiGeometry::LineT & line, std::string_view
geometry::PointWithAltitude point;
if (ParsePointWithAltitude(v, coordSeparator, point))
{
// We dont't expect vertical surfaces, so do not compare heights here.
// We don't expect vertical surfaces, so do not compare heights here.
// Will get a lot of duplicating points otherwise after import some user KMLs.
// https://github.com/organicmaps/organicmaps/issues/3895
if (line.empty() || !AlmostEqualAbs(line.back().GetPoint(), point.GetPoint(), kMwmPointAccuracy))
@ -745,7 +745,9 @@ void KmlParser::ParseAndAddPoints(MultiGeometry::LineT & line, std::string_view
void KmlParser::ParseLineString(std::string const & s)
{
m_geometryType = GEOMETRY_TYPE_LINE;
// If m_org is not empty, then it's still a Bookmark but with track data
if (m_org == m2::PointD::Zero())
m_geometryType = GEOMETRY_TYPE_LINE;
MultiGeometry::LineT line;
ParseAndAddPoints(line, s, " \n\r\t", ",");
@ -934,6 +936,23 @@ void KmlParser::Pop(std::string const & tag)
}
m_data.m_bookmarksData.push_back(std::move(data));
// There is a track stored inside a bookmark
if (m_geometry.IsValid())
{
BookmarkData const & bookmarkData = m_data.m_bookmarksData.back();
TrackData trackData;
trackData.m_localId = m_localId;
trackData.m_name = bookmarkData.m_name;
trackData.m_description = bookmarkData.m_description;
trackData.m_layers = std::move(m_trackLayers);
trackData.m_timestamp = m_timestamp;
trackData.m_geometry = std::move(m_geometry);
trackData.m_visible = m_visible;
trackData.m_nearestToponyms = std::move(m_nearestToponyms);
trackData.m_properties = bookmarkData.m_properties;
m_data.m_tracksData.push_back(std::move(trackData));
}
}
else if (GEOMETRY_TYPE_LINE == m_geometryType)
{