diff --git a/Directory.Build.props b/Directory.Build.props
index ad267061..13ae5d3e 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -3,7 +3,7 @@
XAML Map Control
Clemens Fischer
Copyright © 2026 Clemens Fischer
- 16.1.0
+ 16.2.0
$(Version)
..\..\MapControl.snk
true
diff --git a/MapsforgeTiles/README.md b/MapsforgeTiles/README.md
index 21427687..127ce2db 100644
--- a/MapsforgeTiles/README.md
+++ b/MapsforgeTiles/README.md
@@ -12,19 +12,18 @@ Map files can be downloaded from the [Mapsforge Download Server](https://downloa
`MapsforgeTileSource` is initialized by a static `LoadMaps` method that takes the file path to either a single map file
or a directory containing multiple map files.
-The `MapsforgeTileSource` instance constructor takes a string parameter that specifies a Mapsforge theme. This is either
-the full path of an XML `rendertheme` file, or the name of one of the built-in themes (ignoring case), e.g. `Default`.
+The class has a `Theme` property that specifies a Mapsforge theme. This is either the path of an XML `rendertheme` file,
+the path of a ZIP file containing a render theme, or the name of one of the built-in themes (ignoring case), e.g. `Default`.
See [MapsforgeThemes.java](https://github.com/mapsforge/mapsforge/blob/master/mapsforge-themes/src/main/java/org/mapsforge/map/rendertheme/internal/MapsforgeThemes.java)
-for available theme names. An additional constructor parameters specifies the size of the tile source's internal cache.
+for available theme names.
Code sample:
```
MapControl.MapsforgeTiles.MapsforgeTileSource.LoadMaps(".\mapfiles");
-map.MapLayer = new MapTileLayer
-{
- TileSource = new MapControl.MapsforgeTiles.MapsforgeTileSource("Default")
-};
+var tileSource = new MapControl.MapsforgeTiles.MapsforgeTileSource { Theme = "Default" };
+
+map.MapLayer = new MapTileLayer { TileSource = tileSource };
```
---
diff --git a/MapsforgeTiles/Shared/MapsforgeTileSource.cs b/MapsforgeTiles/Shared/MapsforgeTileSource.cs
index ace12580..3d043fdd 100644
--- a/MapsforgeTiles/Shared/MapsforgeTileSource.cs
+++ b/MapsforgeTiles/Shared/MapsforgeTileSource.cs
@@ -83,45 +83,7 @@ namespace MapControl.MapsforgeTiles
{
if (renderThemeFuture == null)
{
- lock (displayModel)
- {
- if (renderThemeFuture == null)
- {
- if (mapDataStore == null)
- {
- throw new InvalidOperationException("No map files loaded.");
- }
-
- Logger?.LogInformation("Loading render theme \"{theme}\".", Theme);
-
- ZipInputStream zipInputStream = null;
- XmlRenderTheme renderTheme;
-
- if (Theme.EndsWith(".zip"))
- {
- zipInputStream = new ZipInputStream(new FileInputStream(Theme));
- renderTheme = new ZipRenderTheme(
- Path.GetFileName(Theme).Replace(".zip", ".xml"),
- new ZipXmlThemeResourceProvider(zipInputStream));
- }
- else if (Theme.EndsWith(".xml"))
- {
- renderTheme = new ExternalRenderTheme(Theme);
- }
- else
- {
- renderTheme = MapsforgeThemes.valueOf(Theme.ToUpper());
- }
-
- tileCache = new InMemoryTileCache(CacheCapacity);
- renderer = new DatabaseRenderer(mapDataStore, AwtGraphicFactory.INSTANCE, tileCache, null, true, false, null);
- renderThemeFuture = new RenderThemeFuture(AwtGraphicFactory.INSTANCE, renderTheme, displayModel);
- renderThemeFuture.run();
- zipInputStream?.close();
-
- Logger?.LogInformation("Loading render theme done.");
- }
- }
+ Initialize();
}
int[] imageBuffer = null;
@@ -141,5 +103,48 @@ namespace MapControl.MapsforgeTiles
return imageBuffer;
}
+
+ private void Initialize()
+ {
+ lock (displayModel)
+ {
+ if (renderThemeFuture == null)
+ {
+ if (mapDataStore == null)
+ {
+ throw new InvalidOperationException("No map files loaded.");
+ }
+
+ Logger?.LogInformation("Loading render theme \"{theme}\".", Theme);
+
+ ZipInputStream zipInputStream = null;
+ XmlRenderTheme renderTheme;
+
+ if (Theme.EndsWith(".zip"))
+ {
+ zipInputStream = new ZipInputStream(new FileInputStream(Theme));
+ renderTheme = new ZipRenderTheme(
+ Path.GetFileName(Theme).Replace(".zip", ".xml"),
+ new ZipXmlThemeResourceProvider(zipInputStream));
+ }
+ else if (Theme.EndsWith(".xml"))
+ {
+ renderTheme = new ExternalRenderTheme(Theme);
+ }
+ else
+ {
+ renderTheme = MapsforgeThemes.valueOf(Theme.ToUpper());
+ }
+
+ tileCache = new InMemoryTileCache(CacheCapacity);
+ renderer = new DatabaseRenderer(mapDataStore, AwtGraphicFactory.INSTANCE, tileCache, null, true, false, null);
+ renderThemeFuture = new RenderThemeFuture(AwtGraphicFactory.INSTANCE, renderTheme, displayModel);
+ renderThemeFuture.run();
+ zipInputStream?.close();
+
+ Logger?.LogInformation("Loading render theme done.");
+ }
+ }
+ }
}
}