Jurisdictional Boundary & Precedence Resolution
A parcel near a municipal limit is frequently subject to two agencies whose published boundaries disagree by a few metres and whose standards disagree by rather more. Deciding which governs is a legal question that a pipeline has to answer thousands of times a night, which means the answer has to be data a lawyer can read rather than logic an engineer wrote. This module sits inside Core Geospatial Compliance Architecture & Regulatory Mapping and covers both halves of the problem: reconciling the geometry, and resolving the rules.
Prerequisites
- Boundary layers from each agency involved, with their publication dates and, where stated, their positional accuracy.
- A written precedence table naming the authorities, their order, and the resolution mode per rule family. Deriving one is the work; recording it is one file.
- Parcel geometry already repaired and in the authoritative frame, so boundary disagreements are real rather than artefacts.
- A decision, made once, about the containment predicate used to assign a parcel to a jurisdiction — the same choice discussed in scoping rule frameworks.
- Somebody with the standing to approve the precedence table. This is not an engineering artefact even though engineers will maintain it.
Why the Boundaries Disagree
Boundary disagreement is not a data-quality failure to be fixed; it is the normal state, and understanding the causes tells you which layer to believe.
Agencies digitise at different scales. A state layer generalised for statewide display and a city layer digitised from annexation plats describe the same line at different fidelities, and the difference is measured in metres. Agencies also digitise at different times: an annexation recorded last year appears in the city’s layer immediately and in the state’s at the next refresh cycle, so a parcel can be in the city according to one and outside it according to the other for months.
And some boundaries are genuinely disputed, or defined by reference to a physical feature that has moved — a river centreline, a road alignment since realigned. These are not resolvable by any amount of geometry processing, and treating them as such is how a pipeline manufactures a confident answer to an open question.
The practical consequence is that the boundary layer is not the authority; the adopting instrument is. Where an annexation ordinance describes a boundary, that description governs and the layer approximates it. A pipeline should record which layer it used and its publication date, so a later correction can be traced to the parcels it affects.
Assigning a Parcel to a Jurisdiction
With disagreement as the baseline, assignment needs a stated rule and a recorded margin.
Majority-area containment against the authoritative agency’s own boundary is the workable default: the parcel belongs to whichever jurisdiction holds most of it, according to that jurisdiction’s published line. It behaves sensibly for compact parcels, it is stable under small boundary edits, and it produces a share that measures confidence.
def jurisdiction_for(parcel, boundaries, authority_rank):
"""Majority-area assignment, with the disagreement between agencies measured.
Returns the governing jurisdiction, its area share, and the share claimed by
any other agency — the number that says whether this parcel is contested.
"""
hits = boundaries[boundaries.intersects(parcel)]
if hits.empty:
return {"jurisdiction": None, "reason": "outside every mapped boundary"}
shares = (hits.geometry.intersection(parcel).area / parcel.area)
shares.index = hits["agency"]
winner = shares.idxmax()
contested = float(shares.drop(winner).max()) if len(shares) > 1 else 0.0
return {
"jurisdiction": winner,
"share": float(shares.max()),
"contested_share": contested, # > 0 means two agencies both claim it
"authority_rank": authority_rank.get(winner),
}
The contested_share field is the one that earns its place. A parcel claimed at 0.98 by one agency and 0.03 by another is inside a digitising discrepancy and can be assigned confidently. One claimed at 0.55 and 0.45 is genuinely on a line the two agencies draw differently, and it belongs in front of a planner rather than in a report.
Where a parcel falls outside every mapped boundary, that is a finding rather than a default. Silently assigning it to the nearest jurisdiction produces a verdict against a code that may not apply to it at all.
Precedence as a Table
Assignment decides whose rules are in play. Precedence decides which one governs when several are, and it is the part most often written as nested conditionals and least often reviewed by anyone qualified to review it.
A precedence table has one row per rule family and lists the authorities in order with the resolution mode. Three modes cover nearly everything. Higher authority wins is right where one instrument supersedes another — a state-mandated minimum density that overrides a municipal cap. Strictest wins is right where constraints stack, which is the usual case for environmental buffers layered on zoning setbacks. Explicit override is right where a specific instrument names the resolution, and those are enumerated rather than inferred.
The mode that must never appear is the implicit one, where whichever rule the loop applied last wins. It is stable in testing and non-deterministic in production, and the failure surfaces as verdicts that change between runs with no input change.
# One row per rule family. Reviewable by counsel; diffable in version control.
- rule_family: environmental_buffer
authorities: [state, county, municipal]
mode: strictest_wins # constraints stack
citation: "State Env. Code § 402(b)"
- rule_family: minimum_density
authorities: [state, municipal]
mode: higher_authority_wins # the state floor supersedes a local cap
citation: "State Housing Act § 65913.4"
- rule_family: front_setback
authorities: [municipal]
mode: single_authority
Because the table is data, it can be printed and reviewed by the people whose judgement it encodes, diffed when it changes, and versioned with an effective date exactly like the rules it orders.
Building the Precedence Table Without Guessing
The table is the artefact, and filling it in is the part that requires people rather than code.
Start from the rule families the pipeline actually evaluates rather than from an abstract hierarchy. For each one, the question to put to counsel or to a senior planner is narrow and answerable: when both the county and the city have a standard for this, which governs, and does the other still apply? Most answers come back quickly because the situation is familiar; the ones that do not are precisely the cases worth knowing are uncertain before a verdict depends on them.
Record the answer with its basis. A row citing the statute or the agreement that establishes the precedence is reviewable; one asserting an order with no citation is somebody’s recollection, and recollections differ. Where no instrument settles it, record that too — an explicit “unsettled; route to review” is a legitimate and honest entry, and far better than a default that manufactures certainty.
Expect the table to be small. A jurisdiction with a dozen rule families and three overlapping authorities has a few dozen rows, most of them obvious. The value is not in its size but in its existence: a decision that was previously distributed across several people’s judgement becomes a document that can be read, questioned and corrected in one place.
Revisit it when the pipeline gains a rule family, when an agency changes its standards, and on a slow schedule otherwise. Precedence changes rarely and consequentially, which is exactly the profile of a thing that gets forgotten between the moments it matters.
Cross-Boundary Parcels and Cross-Boundary Projects
Two related cases need explicit handling because both defeat a per-parcel model.
A parcel genuinely straddling a municipal limit is subject to two codes at once, and most jurisdictions have a stated treatment — often that each portion is governed by the code where it lies, with the building confined accordingly. That is apportionment, and it needs the district-share machinery from land use intersection mapping applied at the jurisdiction level.
A development spanning several parcels across a boundary is harder, because the aggregate density or floor-area calculation has no single denominator. The pipeline’s honest role is to compute the components — area and units in each jurisdiction — and to route the combination to a person, since combining standards across authorities is a discretionary act rather than an arithmetic one.
In both cases the output should name every jurisdiction involved and every standard considered, not just the one that governed. The most common question about a cross-boundary result is why the other agency’s rule did not apply, and a record that lists it and its resolution answers it immediately.
Extraterritorial and Overlapping Authority
Municipal limits are not the only boundaries that matter, and several kinds of authority overlap them rather than tiling neatly.
Extraterritorial jurisdiction is the common case: many states allow a municipality to apply subdivision or land-use standards for some distance beyond its corporate limits, often a mile or two, sometimes only for certain rule families. A parcel in that band is subject to county zoning and municipal subdivision standards simultaneously, and the correct answer is not “one of them” but “both, for different rule families” — which is exactly what a precedence table indexed by rule family expresses and what a single jurisdiction assignment cannot.
Special districts overlap in the same way. A water district, a fire protection district, a school district and an airport authority each carry standards, each has its own boundary published on its own schedule, and none of them respects municipal limits. Treating them as overlays in the routing table, rather than as jurisdictions, keeps the model simple: the parcel has one governing land-use jurisdiction and a set of overlapping authorities whose rules are combined by the modes already defined.
Tribal and federal lands are the case worth flagging explicitly, because the usual assumptions invert. Land held in trust is generally not subject to local zoning at all, and a pipeline that applies municipal standards to it produces confidently wrong results with real consequences. Where such lands exist in a study area, the honest treatment is an explicit exclusion recorded in the boundary configuration, with those parcels reported as out of scope rather than evaluated.
The general principle behind all three cases is the same: the question is never only “which jurisdiction” but “which authority, for which rule family”. Building the model around that pairing from the start costs nothing and avoids a rewrite the first time an extraterritorial band appears.
Boundary Changes Over Time
Boundaries move — through annexation, incorporation, detachment and occasional judicial correction — and a compliance pipeline that treats them as static will answer historical questions wrongly.
The mechanism is the same one that handles rule amendments: boundary layers carry effective dates, and the assignment step selects the layer in force on the application date rather than the one published today. An annexation effective in March means a parcel evaluated for a February application is still in the county, and applying today’s boundary would evaluate it under standards that did not apply to it.
That in turn means retaining superseded boundary layers rather than replacing them, on the same retention schedule as the rest of the compliance record. The storage cost is negligible — a municipal boundary is a few kilobytes — and the alternative is being unable to reproduce any historical result once a boundary has moved.
Annexations also generate a lineage question worth answering deliberately: does compliance history follow the parcel across a jurisdiction change? Usually yes for the record and no for the standards, meaning past verdicts remain valid statements about the code that applied then, while future evaluation uses the new jurisdiction’s rules. Recording the jurisdiction with each verdict is what allows both statements to coexist without contradiction.
The same publication habit applies to the precedence table. Sharing it with the agencies whose standards it orders occasionally produces a correction, which is the cheapest possible way to find out that an assumption was wrong.
Recording the Decision
Precedence resolution generates exactly the kind of decision that gets questioned, so the record is not optional.
Each verdict should carry the jurisdiction assigned and its share, the contested share if any, every rule family that had competing authorities, the mode applied to each, and the resulting governing rule with its citation. That is a handful of fields and it converts “why did the county buffer apply here rather than the city’s?” from an investigation into a lookup.
Keep the precedence table’s version in the run manifest alongside the rule pack version. A change to precedence changes verdicts as surely as a change to a threshold, and attributing a shift to the right cause requires knowing which one moved.
One further habit is worth adopting early: publish the disagreement. A simple periodic report listing the parcels where two agencies’ boundaries produce different assignments, with the contested share for each, is useful to both agencies and costs one query. In practice it is often the first time anybody has quantified the discrepancy, and it tends to prompt the boundary reconciliation that removes the problem at source — which is a considerably better outcome than resolving it correctly forever in a pipeline nobody else can see.
Troubleshooting
- A parcel flips jurisdiction between runs. The boundary layer refreshed and the parcel sits inside the two agencies’ disagreement. Check the contested share; if it is near even, it should have been flagged rather than assigned.
- Two rules both claim to supersede each other. A cycle in the precedence table. Validate the table for cycles at load with a topological sort, so it fails at startup with a readable message rather than resolving arbitrarily.
- A rule family has no row. The resolver has nothing to apply. Fail loudly rather than defaulting; a missing row is a gap in a legal judgement, not a technical detail.
- Verdicts change after a boundary refresh with no code change. Expected and correct, but it must be attributable. Record boundary layer editions in the manifest so the diff can name the cause.
- A parcel matches no jurisdiction. Usually a gap between adjacent agencies’ layers. Report it; unincorporated slivers are real and are governed by whoever the county says.
None of this machinery is elaborate. What it replaces is a set of judgements distributed across several people’s heads, applied inconsistently and impossible to review — which is a considerably more expensive arrangement than a table and a few recorded fields, even before the first time somebody asks why a particular parcel was evaluated under the county’s standard rather than the city’s.
Related
Part of: Core Geospatial Compliance Architecture & Regulatory Mapping
- Scoping rule frameworks — applicability and precedence within a single code.
- Overlay zone conditional routing — the same combination problem inside one jurisdiction.
- Geometry validation and topology repair — making sure a boundary disagreement is real.
- Zoning layer ingestion strategies — snapshotting each agency’s layer with its date.
- Variance and exception handling — the recorded overrides that beat any general precedence.
Conclusion
Boundary disagreement between agencies is the normal condition, not a defect, and precedence between their rules is a legal judgement the pipeline executes rather than makes. Assign parcels by majority area against the authoritative line, measure and report the contested share, and keep precedence in a table that the people accountable for it can read and approve. Record the jurisdiction, the competing authorities, the mode applied and the governing citation with every verdict, and the question that follows a cross-boundary result becomes a lookup rather than an investigation.