Releases: ObjectVision/GeoDMS
Release list
GeoDms 20.3.0
GeoDms 20.3.0's headline is interactive view rotation and tilt in the MapView — the map can now be yawed and tilted into an oblique / perspective view, with horizon-aware rendering across raster, WMS background, polygon, arc and graticule layers, plus OGR Parquet/Arrow/Feather support.
This release also a new interactive Chart view (#75), template-driven editor presets, a routing/connectivity fix, operator improvements, a self-contained Linux package, and a large Linux/GCC warning cleanup. The sections below cover everything since 20.1.0.
Builds are provided at the same source revision in three flavors:
| Flavor | Platform | Asset |
|---|---|---|
.m |
Windows x64 (MSBuild) | GeoDms20.3.0.m-Setup-x64.exe |
.c |
Windows x64 (CMake) | GeoDms20.3.0.c-Setup-x64.exe |
.l |
Linux x64 (WSL / Ubuntu 24.04) | GeoDms20.3.0.l-linux-x64.deb (+ .tar.gz) |
🗺️ Map view: rotation & tilt (new)
- View rotation (yaw) and tilt end-to-end: the MapView can be rotated and tilted into an oblique / perspective projection (yaw direction matches the Google-Maps feel; tilt clamped to 0–75°, no negative tilt or upside-down flip).
- Rotated rasters: rotated raster georeferences are parsed into a projective coordinate transformation, and a new
DrawImageTransformedprimitive blits rotated/tilted raster tiles. - Horizon-aware rendering under tilt so nothing above the horizon renders as an artifact: polygon fills and borders, arcs, feature layers, the graticule and WMS background tiles are all horizon-clipped — fixing "UFOs" in the sky, the foreground being cut off, fills ballooning into slabs, and stray outline lines.
- WMS background under rotation/tilt: counter-rotation, white-seam, tile-enumeration and pan-follow fixes so the background stays aligned with the foreground.
📊 Chart view (#75, new)
- New Chart data view with a histogram mode and a series mode.
- Series layers: scatter and line rendering via a dedicated
ChartLayer, with thematic colouring and menu synchronisation. - Bar mode: bar draw mode with an X-axis picker, a categorical X axis, and side-by-side grouped bars for multiple bar layers.
🖱️ View & interaction
- Reactivating a layer in the Layer Control now redraws immediately.
- Fixed MapView keyboard-focus drift after app re-activation / view switch.
- Fixed pan corrupting tilted views (full repaint when the scroll is not a pure translation).
➗ Operators, storage & calculation
- GDAL (#1142):
.parquet/.arrow/.featherextensions now map to the OGR Parquet / Arrow drivers. connect/ routing (#1138, #1136, #793): fixed a cut sort-key regression from the #793 parallelization that silently disconnected split road segments (severing origins and destinations from the routed network and diverging the land-use output); connectivity now matches the pre-#793 results.area/arc_length(#1119) now convert the result to the requested unit and gain a unary auto-derive form.
Value Composition: arc, polygon, multi_point
points2arc,points2polygon, andpoints2multi_pointvariants ofpoints2sequence.- depreciation warnings when value composition is different than expected in various functions.
geos_buffer(#1038) dispatches on argumentValueComposition;recollect_by_condnow warns when its 2nd/3rd arguments have a mismatchedValueComposition.
⚡ Stability
WmsLayer::Drawis now suspendible/resumable (ResumableCounter port) making MapView navigation faster- #1126: dropped a false-positive DeadLock detection in
lock_shared.
🐧 Linux & build
- Self-contained Linux package (#1137) — the
.lsetup now bundles the Qt6 runtime (with rpath$ORIGIN), so the GUI runs on machines without a system Qt6 install (e.g. headless servers). - GCC/Linux warning cleanup — the Linux/CMake build's warning surface was cut ~67k → ~450 with no behavior change. A handful of latent bugs were fixed along the way: a
delete[]of avoid*(UB), a pointer-vs-string-literal comparison, a 16-bit truncation when printing aULONG, a1 << 63shift-count overflow, and an always-falseIsInTrans(). - #1133: the
/Llog now carries explicit severity + category tags; the profiler parses both the tagged and the legacy log formats. - The executable now self-determines its exe-root directory, and Help/About reports the running executable.
- Build housekeeping: project-local vcpkg MSBuild integration,
CONFIGURE_DEPENDSon CMake source/header globs, de-hardcoded repo-root paths in build/test scripts, LOC tooling, version/buildstamp headers generated once per build session, restored vcpkg runtime DLLs on a no-relink incremental MSBuild, and aCLAUDE.mdbuild/run policy.
Verifying the Linux download
sha256sum -c GeoDms20.3.0.l-linux-x64.tar.gz.sha256
The accompanying .p7s is a detached SHA-256 signature of the checksum file (GlobalSign EV).
Full Changelog: v20.1.0...v20.3.0
GeoDms 20.1.0
GeoDms 20.1.0's headline is first-class Linux support: the GeoDMS engine and the Qt GUI now build and run natively on Linux, distributed as a .deb package and a portable tarball alongside the Windows installers. This release also brings a UTF-8 overhaul across all modules, several map/table-view improvements, a first-class pow operator, and a refreshed dependency baseline.
Builds are provided at the same source revision in three flavors:
| Flavor | Platform | Asset |
|---|---|---|
.m |
Windows x64 (MSBuild) | GeoDms20.1.0.m-Setup-x64.exe |
.c |
Windows x64 (CMake) | GeoDms20.1.0.c-Setup-x64.exe |
.l |
Linux x64 (WSL / Ubuntu 24.04) | GeoDms20.1.0.l-linux-x64.deb (+ .tar.gz) |
🐧 Linux support (new)
- GeoDmsRun and the GeoDmsGuiQt GUI now run on Linux (built under WSL/Ubuntu, Qt 6), shipped as a
.deband a portable tarball. - Completed the narrow → wide (UTF-8) migration:
shvand every module now build as Unicode, and the Windows executables embed a UTF-8 active-code-page manifest, so paths and text behave consistently across platforms. - Fixed a Linux GUI exit segfault during window teardown (
OnStatusTextdereferencing an already-cleared main window). - Known issue: some Qt libraries are missing in the Linux install; they will be included in a next version. This might only affect the workings of GeoDmsGuiQt, not GeoDmsRun. Workaround: Install Qt version 6.4. See #1137
🗺️ Map & table views
- WMS/WMTS legends (#405): the map-view layer control can now fetch and display a remote legend image.
- Name disambiguation (#418, #620): view captions and value-info panels qualify non-distinct item names so duplicates are distinguishable.
- Focus highlight (#1039): the focused MapView/TableView is marked with a clear magenta highlight.
- Single-point zoom (#374): opening a single point no longer over-zooms.
- Multi-column resize (#1121): pooled column-width resizing across a multi-column selection.
- Fixed a duplicated column when activating a container (#1122).
- Window position and size are now persisted between sessions.
➗ Operators & calculation
pow/^is now a first-class operator (#839) instead of being rewritten asexp(b·log(a))— correct results for integer, negative, and zero bases, with less precision loss.- Fixed a conversion regression (#1098).
- Fixed grid-range upper-bound clamping on large grids (unsigned rounding past 32767).
StorageTileSizeXPropDef = 0on non-storage-holders is no longer treated as an error.- Clearer NetCDF diagnostic when a raster band is missing.
⚡ Performance & stability
- #933: storage reads no longer block worker threads on a storage manager's critical section, improving throughput on storage-heavy models.
🔧 Build & dependencies
- Upgraded the vcpkg baseline to 2026.05.25 — boost 1.91, GDAL 3.12, CGAL 6.1, PROJ 9.8 — via an in-repo vcpkg submodule that auto-bootstraps on a fresh checkout (both MSBuild and CMake).
- Pinned the toolchain to MSVC 14.50.35717 to avoid a GEOS miscompile in 14.51 that caused buffer-operation crashes.
- Corrected PROJ/GDAL data deployment so PROJ 9.8 ships a current
proj.db. - Packaging fixes (ship
tinyxml2.dll; drop staleuriparser/vcpkg DLL references) and a large build-warning cleanup.
Verifying the Linux download
sha256sum -c GeoDms20.1.0.l-linux-x64.tar.gz.sha256
The accompanying .p7s is a detached SHA-256 signature of the checksum file (GlobalSign EV).
Full Changelog: v20.0.4...v20.1.0
Known regresssion in the connect operator that is now multi-treaded but has a sorting issue in this version. Has been resolved for the next release: see #1138
Test results
https://geodms.nl/tests/reports/20_1_0_c___17_9_2.html
https://geodms.nl/tests/reports/20_1_0_m___17_9_2.html
See https://github.com/ObjectVision/GeoDMS/wiki/Full-test for context
GeoDms 20.0.4
Public pre-release of the 20.0.4 line with three installer flavors:
- Windows CMake (
.c) flavor —GeoDms20.0.4.c-Setup-x64.exe - Linux/WSL (
.l) — signed.deb+.tar.gz - Windows MSBuild (
.m) —GeoDms20.0.4.m-Setup-x64.exe, available for comparison with the.cflavor; may be phased out to reduce the number of build tools.
Same source, three build paths — pick whichever matches your workflow.
This release supersedes and retracts 20.0.0c; its release notes are folded in below so nothing is lost.
For installation steps see the wiki:
Linux-only verification of the signed .tar.gz is documented in nsi/VERIFY-LINUX.md.
What's new since v20.0.0c
Security / hardening
- GDAL + DLL search path hardened against config-driven RCE
LastConfigFile: validate the registry path before silent auto-load, and confirm before reopening on startupConfigFileName: cap#includenesting depth at 64; FS-aware path compare for include-recursion detection
Storage (#1098, #1106)
ReadUnitRangenow defines StorageManager-determined unit ranges using the block size the external file actually has (tif and gdal.grid)- Expose native TIFF tile/strip size as
StorageTileSizeX/Y gdal_base: register user-specifiedGDAL_DRIVERon the read path (#1106)
GUI
- #946 indirect
StorageNamecomponents are now clickable - #621 F2 traces the error through
FenceContainer - #1112 fix in-cell editing regression in
PaletteEditor/TableView - #1093
MultiPointLayer:PointCountcolumn +sequence_element_countoperator - #212 square symbol support
- #1109 tooltip values capped at 400 characters
- #1100 follow-ups:
ScrollDeviceno longer blanks the MapView on pan; XOR-mode line/polygon carets with redraw bracketing and resize/straddle artifact fixes - #1113 refactor suitability-map retrieval and error handling
GridLayer: restoreSRCANDblit so white pixels keep underlying layers visible- Restore treeview / detail-pages width after a window squeeze
layercontrollength-attribute fix- Reject out-of-envelope ROI; harden
Round.hagainst NaN / out-of-range input
Correctness / threading
- Reverted the experimental post-order supplier-DAG drain (
Actor::SuspendibleUpdate/UpdateMetaInfo,FuncDCR2 phases) that caused worker-pool starvation; kept the stack-safety refactors that convert deep recursion to explicit worklists tile_task_group: keep the CheckThis sum-vs-counter invariant in bulk-completion paths- Catch exceptions before they propagate to Qt; richer context when a
DmsExceptionis thrown - Fixed #1108, #1110, #1111, #1114, #1115
Windows integration
- #499 GeoDMS installs now register in Windows Apps & Features
Build & release
windeployqt: use--translationdir(not--translations)- Build-staleness guard switched from empty
FileVersionmetadata to an mtime check; cmake (.c) guard checksDmRtc.dll(always relinked) to avoid a false abort when ABI-unchanged dependents skip relink
Linux
-Wl,-z,stack-size=67108864forGeoDmsRunandGeoDmsGuiQt- Longer regression time-out for
t641under WSL
What's new since v19.3.0 (carried over from the retracted 20.0.0c)
Cross-platform / Linux port
- Full Linux/WSL2 build via CMake + Qt 6 (
linux-x64-release/linux-x64-debugpresets) - New flavor-suffixed install layout (
GeoDms<ver>.{m,c,l}) so all three can coexist - Unit test suite (
TestLinuxDebugUnit.sh,TestLinuxReleaseUnit.sh) and Linux regression harness (full.py -version local-linux-release)
GUI (#1100)
- Bold table-header text, 1-px padding fix in
DataItemColumn; correct row-height unit in tabular controls dmsscript:BringToFrontkeyword to raise the GUI in Z-order
Filesystem & Unicode (#1101)
- Three-pass UTF-8 → wide-char audit across Windows filesystem calls (incl.
IsFileOrDirWritable→_waccess) - Linux
ConvertDmsFileNamelexically normalises..so includes through .dms-stem subdirs work cross-platform
Correctness (other)
- #1103 / #462
lookup: propagateV::UNDEFINEDthrough merged-unsigned proxy — fixes the 407K-row BAG snapshot regression where IPoint NULLs leaked as(-1, -1) - #1102
IsMainThread()→IsMetaThread()sweep across rtc/tic/stx/sym/clc/stg connect: fix danglingSA_Referencefrom temporarySA_Iteratorstg/shp:ShpHeader/ShpRecordHeader/ShpPolygonHeaderlong → Int32qtgui: constructQApplicationbefore the try block- UnifyValues regression fix (
bee4cd22,6c421f66)
Performance / memory
rtc/FixedAlloc: drop power-of-2 guard fromSpecialSizestg/tic: expose native GDAL block size asStorageTileSizeX/Yprops
CLI ergonomics
GeoDmsRun/GeoDmsGuiQt: unknown command-line options are diagnosed (Windows/<x>, Linux-<x>) instead of silently treated as a config-file nameStxInterface:Cannot open configuration file '<path>'.error now also reports the CWD
Build & release
nsi/GeoDmsVersion.cmd— single source forMAJOR.MINOR.PATCH, shared across the threeBuildSignAndCreateSetup{,Cmake,Linux}.batscriptsDMS_PLATFORMtitle-bar tag distinguishes cmake vs msbuild builds- Signed
.deb+.tar.gzproduced via PowerShellSignedCms; verification recipe inVERIFY-LINUX.md
Known issues
- The
.msetup in this release was built from193fc052(the 20.0.4 version bump), one commit before thewindeployqt --translationdirfix; its bundled Qt translations layout differs cosmetically from.c. The.mis provided only for comparison. - Linux regression:
t641_*(RSopen MakeBaseData / Variant / Allocatie) needs WSL memory ≥ 64 GB; on smaller VMs they OOM. Native Linux is unaffected. - Profiler bokeh series flat-lines for the
.lflavor (#1104) — cosmetic; test status is still correct. - Python binding version matching (#1105) —
.mgeodms.pydlinks Python 3.13,.clinks Python 3.12, no runtime is bundled. Users supply their own matching Python.
Full changelog
GeoDms 19.3.0
Known isssue: #1103, don't use this version.
Full Changelog: v19.0.0...v19.3.0
https://github.com/ObjectVision/GeoDMS/milestone/73?closed=1
https://github.com/ObjectVision/GeoDMS/milestone/72?closed=1
https://github.com/ObjectVision/GeoDMS/milestone/70?closed=1
https://github.com/ObjectVision/GeoDMS/milestone/69?closed=1
https://github.com/ObjectVision/GeoDMS/milestone/68?closed=1
What's Changed
Ctrl+Shift+F for finding Items by name
Maintenance
New Contributors
- @MaartenHilferink made their first contribution in #186
- @jipclaassens made their first contribution in #923
Full Changelog: https://github.com/ObjectVision/GeoDMS/commits/v19.3.0
GeoDms 19.2.0b
Known isssue: #1103, don't use this version.
Full Changelog: v19.1.0...v19.2.0b
GeoDms 19.1.0
Known isssue: #1103, don't use this version.
Fully implemented Tooltips, see #740
Fixed hanging large calculations due to skipping a tile_task when suspending, see #1070
Test results
https://geodms.nl/tests/reports/19_1_0___17_9_2.html Now also Hestia is included in the release testing, including performance results.
See https://github.com/ObjectVision/GeoDMS/wiki/Full-test for context
Full Changelog: v19.0.3...v19.1.0
v19.0.3
Full Changelog: v19.0.2...v19.0.3
New feature: Tooltips on TextControls, TableView text, Layered Features, and raster data, see #740
Experimental solution for: pbl-nl/model-RSopen#18
v19.0.2
Fixed issues since 19.0.0: https://github.com/ObjectVision/GeoDMS/milestone/70?closed=1
Full Changelog: v19.0.0...v19.0.2
GeoDms 19.0.0
Compiled with Visual Studio 2026.
In this major release, all ambiguous syntax for points with 2 coordinates are obsolete, i.e. no longer supported.
In calculation rules, use either point_xy or point_yx In data blocks, use xy(...) or yx(...).
Furthermore, the internal object inheritance structure has been adapted, and the reference counting mechanism has been updated to better differentiate between unique ownership, and duplication of shared ownership that blocks the further non-concurrent mutability. DataView and GraphicObject are no longer (indirectly) derived from SharedObj and therefore don't have an unused and ambivalent m_RefCount member as their lifetime is managed by std::shared_ptr's
Test results
https://geodms.nl/tests/reports/19_0_0___17_9_2.html Now also Hestia is included in the release testing, including performance results. Hestia will be green in these test results in a near future version after setting and checking reference results, See ObjectVision/GeoDMS-Test#16
See https://github.com/ObjectVision/GeoDMS/wiki/Full-test for context
Full Changelog: v18.2.2...v19.0.0.b
v18.2.2
Full Changelog: v18.1.3...v18.2.0
Full Changelog: v18.2.0...v18.2.1
Full Changelog: v18.2.1...v18.2.2
multi-byte utf8 characters in filenames are better supported now, see #1040
https://github.com/ObjectVision/GeoDMS/milestone/66?closed=1
Test results
https://geodms.nl/tests/reports/18_2_2___17_9_2.html
https://geodms.nl/tests/reports/18_2_1___17_9_2.html
See https://github.com/ObjectVision/GeoDMS/wiki/Full-test for context