Q&A

Where can brdr be used?

  • Short answer: for geospatial quality assurance and boundary alignment workflows.
  • Long answer:
    • Geodata management:
      • business workflow integration
      • bulk alignment
      • post-reprojection correction
      • geometric cleanup after processing
    • Data analysis:
      • pattern analysis of deviation between thematic and reference boundaries
    • Update detection:
      • compare observations before and after alignment

Does brdr support multiple coordinate systems (CRS)?

  • Short answer: yes.
  • Long answer: you can choose the CRS when creating the Aligner. Use a projected CRS with meter units. Input data must be available in that CRS. On-the-fly loaders try to request/download that CRS; if unsupported by the source service, loading fails with an error.

Which geometry types are supported?

  • Short answer: (Multi)Point, (Multi)LineString, and (Multi)Polygon.
  • Long answer: brdr started with polygon-to-polygon alignment and later added processors for point/line/polygon combinations.

How do I choose the best processor?

  • Short answer: use AlignerGeometryProcessor (default) first.
  • Long answer:
    • AlignerGeometryProcessor delegates to specialized processors based on context.
    • DieussaertGeometryProcessor is typically faster and strong for polygon-to-polygon scenarios.
    • NetworkGeometryProcessor is more generic for mixed geometry combinations but usually slower.
    • TopologyProcessor is experimental and focuses on preserving shared topology between neighboring thematic features.

Recommendation: for polygon-to-polygon use cases, start with DieussaertGeometryProcessor. Move to NetworkGeometryProcessor when generic/mixed geometry behavior is required.

Does brdr support 3D or M/Z coordinates?

  • Short answer: no, processing is 2D.
  • Long answer: alignment is computed on X/Y coordinates. Any Z or M values are not used by the core alignment logic.

Is topology preserved between thematic input features?

  • Short answer: not by default.
  • Long answer: standard processing handles features independently. If topology preservation is required, use TopologyProcessor (experimental).

How should I run tests in daily development?

  • Short answer: use the fast lane first, then full suite when needed.
  • Recommended commands:
    • Fast lane: pytest -m "not native and not network and not slow"
    • Full suite: pytest

Marker meaning:

  • native: GEOS/native-heavy tests (more crash-sensitive).
  • network: tests relying on network-facing behavior or mocks of external services.
  • slow: broader integration/end-to-end scenarios.

Why does directed routing return unchanged/original output sometimes?

  • Short answer: no valid directed path exists under one-way constraints.
  • Long answer: in directed mode, brdr prefers correctness over forced rerouting. If one-way semantics block a route, processors do not invent artificial reverse paths.

How do descriptor and evaluator interact?

  • Short answer: evaluator depends on descriptor observations.
  • Long answer:
    • descriptor.get_base_observation(...) reads base context from feature properties/metadata.
    • descriptor.get_actual_observation(...) derives observation for process results.
    • evaluator compares both and assigns evaluation classes.

When does brdr return an empty geometry vs the original geometry?

  • Short answer:
    • original geometry is returned for unchanged outcomes and specific evaluator choices.
    • empty geometry is returned for invalid processor pre-results and explicit geometry-removal outcomes.
  • Long answer:
    • Typical original geometry cases:
      • no effective change after processing
      • circular-shape guard behavior
      • evaluator keeps original (TO_CHECK_ORIGINAL / no accepted prediction path)
    • Typical empty geometry cases:
      • the input is already empty
      • invalid intermediate processor output (None, empty, or type mismatch pre-result)
      • explicit clipping/exclusion behavior removes all geometry content
      • a processor legitimately computes an empty end result for the chosen strategy

ProcessRemark guidance:

  • RESULT_UNCHANGED:
    • processing completed, but final result equals original geometry (within tolerance).
  • INPUT_CIRCLE:
    • circle-like geometry guard triggered; original geometry is kept.
  • INVALID_EMPTY_RETURNED:
    • processor intermediate output was unusable (e.g. invalid/empty/type mismatch path); brdr returned empty geometry.