Skip to content

Tracking: QGIS project and style import parity #882

Open

Description

@pick2510

Tracking issue for opening QGIS projects and styles in RustGIS as QGIS draws them. Each piece below gets its own pull request, or a few (piece 1 had a proposal issue, #883; with the plan agreed, the later pieces go straight to pull requests); this issue keeps the order and links them.

Where it stands

The pieces

Ordered by how often real projects (SMV25 and the Training Manual) hit them, and whether RustGIS already has the feature. Mapping means the importer reads QGIS's setting into something RustGIS has; feature means RustGIS needs it first.

# Piece Kind Crates Size
1 #883, #885 Geographic coordinate systems: a project in EPSG:4326 (9 of the real projects) opens in Equirectangular instead of Web Mercator, as QGIS draws it mapping engine small
2 #900 Markers along lines and hash lines: interval, placement (vertices, first/last, centre), rotation with the line (SMV25: railways, boundaries) feature map, render medium
3 Font markers: a character from a font as a point symbol, with rotation (SMV25: 12 layers of map signs). 3a #926: the character, on points and along lines. 3b: several marks stacked on a point (half of SMV25's signs are a white character under a coloured one), their offsets, and rotation by a field (SMV25: - "WINKEL") feature map, render medium
4 Labels: halo colour and width, backgrounds, letter spacing, offsets, wrapping, repeat along lines feature map, render large
5 Fills: line and point pattern fills, gradient fills, several fills per symbol feature map, render medium
6 Data-defined properties: size, colour, rotation by field, on symbols and labels feature map, render medium
7 Expressions: an expression language for feature layers (arithmetic, functions, CASE) for filters, label text and data-defined values; QGIS expressions translated to it feature data, map large
8 Renderers: rule-based renderers beyond the SQL subset, inverted polygons, merged features, heat maps feature + mapping map, render medium
9 Symbols: SVG and image markers on feature layers, arrows, draw effects (shadow, glow) feature map, render large
10 Sources: SpatiaLite, SQL Server, ArcGIS feature and map servers, WCS, vector tiles, delimited text with WKT, memory layers with their features, virtual layers through sql.query mapping engine, map medium
11 Project structure: groups (opacity, scale range), bookmarks, time settings, relations; notes for map themes, variables, joins, virtual fields mapping engine, map medium
12 Print layouts: QGIS layout items, page sizes, map item extent, scale and theme, the atlas, onto RustGIS layouts mapping engine, map large
13 Annotations and diagrams: the QGIS annotation layer as a graphics layer; per-feature diagrams mapping + feature engine, map, render medium
14 Round trip: project.exportQgis and style.exportQgis, tested by reading back feature map, engine large

Related but separate: #769 (WMTS tile matrix sets other than Web Mercator) affects QGIS projects only through their WMTS and tile layers.

How each piece is tested

  • Unit tests: in crates/map/src/qgis/tests.rs, written in the shapes QGIS writes, for each setting read.
  • Corpus: every_corpus_file_reads over crates/map/testdata/qgis/ (test(map): a corpus of QGIS projects and styles the importer reads #881). A piece that needs a setting the corpus lacks adds a file through generate.py.
  • Engine tests: for the commands (project.importQgis, style.importQgis), including hostile_params_never_panic.
  • Rendering pieces (2–9): a render test in crates/render, plus a comparison with QGIS on SMV25 (downloaded, not in the repository) at fixed extents reported in the pull request (the pixel difference before and after).

Not planned

Mesh, point cloud and tiled-scene layers (no RustGIS equivalent), 3D views, layer actions, forms and editing widgets: noted on import.

Pieces 1 and 2 are merged, and 3a is in #926. Next is 3b, then piece 4 (labels).

Activity

  1. pick2510 commented on Oct 25, 2026

    @pick2510
    ContributorAuthor

    @giswqs Any comments on this plan, the order or the scope? Piece 1 is proposed in #883 and implemented as a draft in #885; I'll mark it ready once you're fine with the approach.

  2. giswqs commented on Oct 25, 2026

    @giswqs
    Member

    @pick2510 This is a great plan! Thank you for putting it together. Just added you to the RustGIS-Maintainers team. Keep going.

  3. pinned this issue on Oct 25, 2026
  4. pick2510 commented on Oct 25, 2026

    @pick2510
    ContributorAuthor

    Great. I will continue with the stepwise implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions