Edge-case catalogue

Every operational, geometric, global, hierarchy, platform, privacy, advertising, temporal, and data-quality edge case in geographic interoperability, each with detection and mitigation.

93 entries across 9 categories. Each has its own page with detection, mitigation, and the conversions it affects.

On the taxonomy. This catalogue follows the source specification, which files several groups under one "edge-case" heading. Not all 93 are failure modes: the Advertising semantics group (physical presence, home/work location, lookback window, cross-device) are targeting concepts that change what a geometry means, not bugs; the Privacy group are constraints. They live here because each still alters a conversion's result and needs handling - read "case to account for," not "defect."

Geometry

13
Duplicate verticesConsecutive repeated coordinates (zero-length segments) in a ring can produce degenerate edges that break area and intersection calculations.Empty geometriesA feature with a null or zero-ring geometry (e.g. GEOMETRYCOLLECTION EMPTY, or coordinates: []) produces no cells and can silently vanish from an audience or trade-area union.Incorrect ring winding orderGeoJSON requires exterior rings counter-clockwise and holes clockwise (right-hand rule); reversed winding flips interior/exterior for winding-sensitive fillers.Invalid coordinate valuesNaN, Infinity, out-of-range (|lat|>90, |lng|>180), or null coordinate components crash or silently corrupt downstream H3 indexing.MultiPolygon / multipartDisjoint parts (islands, exclaves) must all be filled; a single-ring assumption drops parts.Narrow / sliver polygonsPolygons thinner than a cell can yield zero center-contained cells.Nested holesA hole containing an island (hole-in-hole-in-fill) violates simple-polygon assumptions; naive ring parity gets the interior/exterior classification backwards.Polygon holesInterior rings (donuts) must be respected so cells inside a hole are excluded.Self-intersecting polygonBowtie/overlapping rings make area and containment undefined.Simplified boundariesDouglas-Peucker-style simplification shifts the boundary, moving which cells qualify.Tiny polygonsPolygons much smaller than a cell may be missed or over-represented by a single cell.Touching-only intersectionA cell that only shares a boundary point/edge (zero area) with the polygon.Unclosed ringsA polygon ring whose first and last coordinates differ is not technically closed, causing GeoJSON-strict fillers to throw or silently miscompute area.

Global

12
Antimeridian (±180° meridian)Geometries crossing ±180° longitude wrap incorrectly, producing world-spanning artifacts when treated as planar.Coastal boundary ambiguityLand/water boundary polygons vary by data vintage and mean-high-water definition; cells right at the coastline can flip land/water classification between sources.Disputed territoriesAreas with contested sovereignty (e.g. Crimea, Kashmir, Western Sahara) may appear in different admin boundary sources assigned to different countries, causing double-counting or gaps in cross-vendor crosswalks.EnclavesA region entirely surrounded by another region's territory (e.g. Lesotho in South Africa) can be mis-assigned to the surrounding region by centroid- or overlap-based admin joins.ExclavesA region's territory disconnected from its main body (e.g. Kaliningrad, Alaska) is geometrically a separate multipolygon part; overlap-max joins can attribute it to the surrounding region instead of its true owner.Geodesic versus planar geometryBuffer, distance, and intersection operations computed on raw lat/lng as if it were a flat Cartesian plane diverge measurably from true great-circle geometry, worsening with distance and latitude.H3 pentagons12 pentagon cells per resolution sit at icosahedron vertices; they break the 6-neighbour and regular-shape assumptions and have lower inscribed/circumscribed ratios.Icosahedron face-crossing cellsCells spanning two icosahedron faces are distorted; edges are not symmetric and area varies.Offshore islandsSmall islands belonging to a mainland admin region are geometrically disjoint (multipolygon parts) and can be dropped by fillers that assume a single contiguous ring.Polar singularitiesNear the North/South poles, longitude lines converge to a point; planar buffering and equirectangular projections badly distort cell shape and area right at the pole cells.Water-only cellsCells whose entire footprint is open water (ocean, large lake) carry no population/audience but can still be generated by a naive grid fill over a bounding box or coastal buffer.Web Mercator distortionWeb Mercator (EPSG:3857) inflates area and distance with latitude (infinite at the poles); using tile-based Mercator coordinates for area/radius math biases high-latitude markets.

Hierarchy

6

Platform

11
Asynchronous boundary updatesWhen an admin/postal boundary source updates, ad platforms and the advertiser's own crosswalk do not necessarily update on the same date; targeting and reporting can briefly use different boundary vintages for the same campaign.Optimized targeting expansionPlatforms with 'audience expansion' or 'optimized targeting' features silently deliver impressions outside the submitted geography/audience to hit performance goals, breaking the assumption that delivery equals the requested target.Platform accepts only native IDsNo polygons/coordinates — everything must be crosswalked to platform IDs, losing sub-unit precision.Platform coordinate roundingSome platform APIs round submitted lat/lng to a fixed decimal precision (e.g. 4 decimals ≈ 11 m) before executing a circle target, shifting the effective center from the intended one.Platform maximum radiusAd platforms often cap point-radius targeting at an upper bound (e.g. 50 km); a computed circumscribed or equal-area radius above that ceiling is silently clamped by the platform, shrinking actual coverage below what was reported.Platform minimum radiusA platform floor (e.g. 1 km) makes sub-floor cells un-executable as circles.Radius rounding / incrementsPlatforms round radii to increments, changing coverage/overlap.Reporting at a coarser level than executionA platform executes targeting at a fine geography (e.g. H3 r8 or zip+4) but only reports delivery at a coarse level (e.g. DMA or state), masking whether the fine-grained target was actually honored.Undocumented deduplicationSome ad platforms silently dedupe overlapping target geographies or audience segments across line items without disclosing the rule, causing reported vs. delivered reach to diverge in ways not explainable from inputs alone.Unsupported exclusions'Include A minus B' cannot be expressed on platforms without exclusion support; the exclusion is silently dropped.Unsupported polygon targetingSome platforms accept only circles or native geo IDs, not arbitrary polygons; a custom trade-area polygon submitted directly is rejected or silently approximated by the platform's own simplification.

Privacy

11
Consent-based precision reductionConsent state can coarsen or drop coordinates, changing cell assignment.Device trajectory exposureOrdered high-resolution trajectories are re-identifying even when individual points are not.Differential privacy noise calibrationAdding calibrated noise (e.g. Laplace/Gaussian mechanism) to protect individual privacy in aggregate counts can distort small-cell counts enough to invert rank ordering between nearby cells if the privacy budget (epsilon) is set too aggressively for the use case.Household-level targeting riskTargeting resolved down to a single-household granularity (e.g. one residential parcel or a cell containing exactly one dwelling) functions as individually addressable targeting even when labeled as 'neighborhood' targeting.K-anonymity thresholdsReporting a cell-level metric is only privacy-safe if at least k individuals share that cell/attribute combination; enforcing k only on the cell dimension while ignoring cross-tabulation with other dimensions (age, segment) can still expose small groups.Minimum aggregation windowReporting audience or visit counts over too short a time window (e.g. hourly) at fine spatial resolution can approach single-visit identifiability even if the raw count clears a k-anonymity floor for a longer window.Regional privacy restrictionsLocation-data privacy law varies by jurisdiction (GDPR/ePrivacy in the EU, CCPA/CPRA in California, and others), so a pipeline using a single global minimum-aggregation or consent policy can be non-compliant in stricter regions or needlessly conservative in others.Resolution degradation policyWhen a cell fails a privacy check, the correct response is to roll it up to a coarser resolution and re-check, not to drop it or leave it at the original resolution with a suppressed value, either of which loses coverage or gives a false sense of the original grain.Small-cell re-identification riskA cell with very few observed individuals (e.g. 1-3) can be cross-referenced with public or other data sources to re-identify a specific person, even without any single field being personally identifiable on its own.Sparse-audience suppressionCells with too few users risk re-identification and must be suppressed or coarsened.Temporal leakagePublishing a sequence of snapshots over time for the same fine-grained cell (even if each snapshot independently meets k-anonymity) can let an observer intersect the snapshots to re-identify an individual whose presence changed between them.

Measurement

1

Advertising semantics

18
Bidstream truncationHigh-volume bidstream feeds often truncate or sample records under load, and truncated records can silently drop the geo field entirely or truncate coordinate precision, biasing which impressions are geo-resolvable.Corridor boundary oscillationA path skimming a cell edge produces a jagged, duplicated cell sequence.Cross-device location stitchingLocation histories merged across a household's or individual's multiple devices via probabilistic ID-graph stitching can double-count visits or attribute one device's location to another device incorrectly, inflating cell-level audience counts.Destination interestPredictive 'likely to visit X' destination-interest scores are probabilistic, not observed; treating the resulting audience as equivalent to a confirmed-visitor segment overstates targeting precision.Excluded-area leakageA requested exclusion zone (e.g. exclude a competitor's trade area or a control market) can still receive delivery if the platform's exclusion granularity is coarser than the requested boundary, or exclusion isn't supported and is silently dropped.Frequency across overlapping targetsWhen two or more targeted geographies overlap (e.g. a store radius nested inside a DMA target), a user in the overlap can receive frequency from both line items, inflating true frequency and reach reporting per user.GPS noise / boundary oscillationNoisy fixes near a boundary flip cells back and forth, inflating counts.GPS-derived location accuracyA GPS fix's reported horizontal accuracy (often tens to hundreds of meters, worse indoors/urban canyon) is frequently discarded downstream, letting a low-accuracy fix be indexed at a resolution finer than it can support.Home location inferenceInferred 'home' location (typically the most common overnight device location over N days) can be wrong for shared devices, frequent travelers, or short observation windows, misassigning the household cell.IP-derived locationIP geolocation is coarse and often centroid-biased; it is not physical presence.Location confidence scoringVendors attach a confidence score to location signals, but many downstream pipelines drop it and treat every observation as equally trustworthy, letting low-confidence noise dilute high-confidence signal in aggregate cell counts.Location interest versus presence'Location interest' segments (built from search, content consumption, or app category signals about a place) are conflated with physical visitation, but a user searching for a location has not necessarily been there.Lookback window sensitivityAudience size and composition for a 'visited store X' segment change substantially with the chosen lookback window (7 vs. 30 vs. 90 days); an undocumented or inconsistent window makes cross-campaign comparisons invalid.Physical presenceA location signal claiming 'physical presence' may actually derive from a lower-confidence source (Wi-Fi, IP, declared) that has not been verified against a GPS dwell; treating all presence signals as equally reliable overstates confidence.Publisher-declared locationLocation supplied by the publisher/app (e.g. a self-reported profile city or content geography) rather than device-observed, is far coarser and more gameable than GPS or IP-derived signals, but is often merged into the same location field without a source tag.Recent presence'Recent presence' segments depend entirely on the chosen lookback window; a location visit from 90 days ago counted as 'recent' in a stale segment misrepresents current audience composition.Treatment/control contaminationIn a geo-lift experiment, cells assigned to control can still receive treatment exposure via platform audience expansion, ad-adjacent delivery, or a resident's movement into a treatment cell, biasing the measured lift toward null.Work location inferenceInferred 'work' location (typical daytime weekday device location) misfires for remote/hybrid workers, gig workers, and multi-site employees, assigning a work cell that doesn't reflect actual employment geography.

Temporal

9
Administrative boundary changesMunicipal annexations, incorporations, and county line adjustments change which admin polygon a location belongs to over time; a crosswalk built on one vintage misattributes cells for periods before or after the change.DMA redefinitionMedia markets are periodically redrawn; crosswalks must be pinned to a vintage.Postal boundary changesZIP/ZCTA definitions drift between vintages.Stale boundariesAdmin/postal/DMA boundaries change; using an old vintage misassigns cells.Store openings and closuresA store location list used for trade-area or catchment geometry goes stale as locations open, close, or relocate; targeting or measuring against a closed store's geometry wastes spend and biases lift measurement toward zero.Temporary event zonesAd-hoc geofences for a limited-duration event (a festival, stadium concert, disaster-response zone) exist only for a narrow time window; applying that geography outside its valid window either misses the event or wrongly attributes unrelated activity to it.Time-dependent audience membershipAudience membership defined by location visitation is inherently time-bound (a person who visited last month may not still be a customer); treating an audience segment as static after its build date silently stales the targeting/measurement population.Version mismatch between execution and reportingThe H3/boundary/crosswalk version active at campaign execution time can differ from the version active when the reporting/measurement query runs later, causing the same nominal geography to resolve to different actual cells between planning and results.Weather polygonsWeather alert/impact polygons (storm tracks, flood zones, air-quality advisories) are issued, updated, and retracted on an hourly-to-sub-hourly cadence; using a cached or stale version misrepresents current conditions for weather-triggered targeting or reporting.

Data quality

12
Axis-order reversal (lat/lng swap)Coordinates supplied as [lat,lng] where [lng,lat] is expected place geometry in the wrong hemisphere.Coastal / mixed pixelsPixels straddling land/water mislabel coastal cells.Duplicated region IDsThe same admin id mapping to multiple polygons (data error) breaks partition assumptions.Geocoding uncertaintyAddress-to-point geocoding carries a precision tier (rooftop, street, ZIP centroid) that is often dropped downstream; a ZIP-centroid-precision point treated as rooftop-precision misassigns the cell.Incomplete geometryA polygon with fewer than 4 coordinates (or a ring truncated mid-transfer) is not a valid closed shape and will fail or misbehave in a filler.Missing CRS declarationA geometry file with no CRS metadata forces an assumption (usually WGS84); if the true CRS differs, every downstream cell assignment is wrong with no detection signal.Missing polygonsA source dataset silently omits polygons for some regions (e.g. a boundary file missing a newly incorporated municipality), leaving gaps in cell coverage with no explicit null marker.Raster no-data valuesSentinel no-data pixels (e.g. -9999) corrupt aggregates if not masked.Raster/cell resolution mismatchA coarse raster over fine cells yields false precision; fine raster over coarse cells needs area weighting.Rounded / truncated coordinatesBidstream coordinates rounded to 2–3 decimals snap to a coarse grid, biasing cell assignment.Wrong CRS assumedCoordinates delivered in a projected or regional CRS (e.g. State Plane, UTM) but consumed as if they were WGS84 lat/lng place points thousands of kilometers off with no error thrown.Zero-island coordinatesNull or unparsed lat/lng fields defaulting to (0,0) plot as real points in the Gulf of Guinea ('Null Island'), silently injecting fake density into that cell.