rendering issue #37

Closed
opened 2026-08-02 11:24:34 +00:00 by map-issues-bot · 5 comments
Collaborator

At specifically zoom 17 this renders badly. Looks like a problem with too small buffer around the MVT.


Location: z18 / 52.23002 / 20.91506
Feature: cover — country=pl, cover_class=transport
Area: circle r=127 m @ 52.23020, 20.91504

{
 "features": [
  {
   "geometry": {
    "type": "Polygon",
    "coordinates": [
     [
      [
       20.91718554496765,
       52.2610527278575
      ],
      [
       20.91720700263977,
       52.260612753944315
      ],
      [
       20.91721773147583,
       52.26054708582171
      ],
      [
       20.91722846031189,
       52.26027127864481
      ],
      [
       20.917067527770996,
       52.26026471178636
      ],
      [
       20.915769338607788,
       52.26024501120517
      ],
      [
       20.915662050247192,
       52.26024501120517
      ],
      [
       20.915640592575073,
       52.260507684901455
      ],
      [
       20.915629863739014,
       52.26095422661439
      ],
      [
       20.915629863739014,
       52.26101332738651
      ],
      [
       20.91570496559143,
       52.26101332738651
      ],
      [
       20.916016101837158,
       52.26101989413411
      ],
      [
       20.91620922088623,
       52.26102646088074
      ],
      [
       20.916327238082886,
       52.26103302762638
      ],
      [
       20.91647744178772,
       52.261039594371056
      ],
      [
       20.91697096824646,
       52.2610527278575
      ],
      [
       20.91718554496765,
       52.2610527278575
      ]
     ]
    ]
   },
   "properties": {
    "_layer": "cover_industrial",
    "_sourceLayer": "cover",
    "country": "pl",
    "cover_class": "transport"
   },
   "type": "Feature"
  },
  {
   "geometry": {
    "type": "Polygon",
    "coordinates": [
     [
      [
       20.916905372472463,
       52.23019747386121
      ],
      [
       20.916896389197532,
       52.23030947311961
      ],
      [
       20.916869525886593,
       52.23042039376393
      ],
      [
       20.916825041248014,
       52.230529167567724
      ],
      [
       20.916763363693182,
       52.2306347469798
      ],
      [
       20.916685087210666,
       52.230736115212714
      ],
      [
       20.916590965645785,
       52.230832296034954
      ],
      [
       20.91648190544066,
       52.23092236317263
      ],
      [
       20.91635895690468,
       52.23100544922998
      ],
      [
       20.91622330409946,
       52.23108075404284
      ],
      [
       20.916076253435676,
       52.231147552384705
      ],
      [
       20.915919221091595,
       52.23120520095102
      ],
      [
       20.915753719374543,
       52.23125314455458
      ],
      [
       20.91558134215652,
       52.23129092147227
      ],
      [
       20.915403749524376,
       52.231318167891736
      ],
      [
       20.91522265179223,
       52.231334621415044
      ],
      [
       20.915039793030246,
       52.23134012358579
      ],
      [
       20.91485693426826,
       52.231334621415044
      ],
      [
       20.914675836536116,
       52.231318167891736
      ],
      [
       20.91449824390397,
       52.23129092147227
      ],
      [
       20.91432586668595,
       52.23125314455458
      ],
      [
       20.914160364968897,
       52.23120520095102
      ],
      [
       20.914003332624816,
       52.231147552384705
      ],
      [
       20.91385628196103,
       52.23108075404284
      ],
      [
       20.91372062915581,
       52.23100544922998
      ],
      [
       20.913597680619834,
       52.23092236317263
      ],
      [
       20.913488620414707,
       52.230832296034954
      ],
      [
       20.913394498849826,
       52.230736115212714
      ],
      [
       20.91331622236731,
       52.2306347469798
      ],
      [
       20.913254544812478,
       52.230529167567724
      ],
      [
       20.9132100601739,
       52.23042039376393
      ],
      [
       20.91318319686296,
       52.23030947311961
      ],
      [
       20.91317421358803,
       52.23019747386121
      ],
      [
       20.91318319686296,
       52.23008547460281
      ],
      [
       20.9132100601739,
       52.22997455395849
      ],
      [
       20.913254544812478,
       52.2298657801547
      ],
      [
       20.91331622236731,
       52.22976020074262
      ],
      [
       20.913394498849826,
       52.229658832509706
      ],
      [
       20.913488620414707,
       52.229562651687466
      ],
      [
       20.913597680619834,
       52.22947258454979
      ],
      [
       20.91372062915581,
       52.22938949849244
      ],
      [
       20.91385628196103,
       52.22931419367958
      ],
      [
       20.914003332624816,
       52.229247395337715
      ],
      [
       20.914160364968897,
       52.229189746771404
      ],
      [
       20.91432586668595,
       52.22914180316784
      ],
      [
       20.91449824390397,
       52.22910402625015
      ],
      [
       20.914675836536116,
       52.229076779830685
      ],
      [
       20.91485693426826,
       52.229060326307376
      ],
      [
       20.915039793030246,
       52.22905482413663
      ],
      [
       20.91522265179223,
       52.229060326307376
      ],
      [
       20.915403749524376,
       52.229076779830685
      ],
      [
       20.91558134215652,
       52.22910402625015
      ],
      [
       20.915753719374543,
       52.22914180316784
      ],
      [
       20.915919221091595,
       52.229189746771404
      ],
      [
       20.916076253435676,
       52.229247395337715
      ],
      [
       20.91622330409946,
       52.22931419367958
      ],
      [
       20.91635895690468,
       52.22938949849244
      ],
      [
       20.91648190544066,
       52.22947258454979
      ],
      [
       20.916590965645785,
       52.229562651687466
      ],
      [
       20.916685087210666,
       52.229658832509706
      ],
      [
       20.916763363693182,
       52.22976020074262
      ],
      [
       20.916825041248014,
       52.2298657801547
      ],
      [
       20.916869525886593,
       52.22997455395849
      ],
      [
       20.916896389197532,
       52.23008547460281
      ],
      [
       20.916905372472463,
       52.23019747386121
      ]
     ]
    ]
   },
   "properties": {
    "_kind": "selection-circle",
    "_radius_m": 127
   },
   "type": "Feature"
  }
 ],
 "properties": {
  "lat": 52.230019,
  "lng": 20.915062,
  "map": "se",
  "zoom": 17.51
 },
 "type": "FeatureCollection"
}
At specifically zoom 17 this renders badly. Looks like a problem with too small buffer around the MVT. --- **Location:** [z18 / 52.23002 / 20.91506](https://experiments.blahonga.org/?map=se#17.51/52.230019/20.915062) **Feature:** `cover` — country=pl, cover_class=transport **Area:** circle r=127 m @ 52.23020, 20.91504 ```map-report { "features": [ { "geometry": { "type": "Polygon", "coordinates": [ [ [ 20.91718554496765, 52.2610527278575 ], [ 20.91720700263977, 52.260612753944315 ], [ 20.91721773147583, 52.26054708582171 ], [ 20.91722846031189, 52.26027127864481 ], [ 20.917067527770996, 52.26026471178636 ], [ 20.915769338607788, 52.26024501120517 ], [ 20.915662050247192, 52.26024501120517 ], [ 20.915640592575073, 52.260507684901455 ], [ 20.915629863739014, 52.26095422661439 ], [ 20.915629863739014, 52.26101332738651 ], [ 20.91570496559143, 52.26101332738651 ], [ 20.916016101837158, 52.26101989413411 ], [ 20.91620922088623, 52.26102646088074 ], [ 20.916327238082886, 52.26103302762638 ], [ 20.91647744178772, 52.261039594371056 ], [ 20.91697096824646, 52.2610527278575 ], [ 20.91718554496765, 52.2610527278575 ] ] ] }, "properties": { "_layer": "cover_industrial", "_sourceLayer": "cover", "country": "pl", "cover_class": "transport" }, "type": "Feature" }, { "geometry": { "type": "Polygon", "coordinates": [ [ [ 20.916905372472463, 52.23019747386121 ], [ 20.916896389197532, 52.23030947311961 ], [ 20.916869525886593, 52.23042039376393 ], [ 20.916825041248014, 52.230529167567724 ], [ 20.916763363693182, 52.2306347469798 ], [ 20.916685087210666, 52.230736115212714 ], [ 20.916590965645785, 52.230832296034954 ], [ 20.91648190544066, 52.23092236317263 ], [ 20.91635895690468, 52.23100544922998 ], [ 20.91622330409946, 52.23108075404284 ], [ 20.916076253435676, 52.231147552384705 ], [ 20.915919221091595, 52.23120520095102 ], [ 20.915753719374543, 52.23125314455458 ], [ 20.91558134215652, 52.23129092147227 ], [ 20.915403749524376, 52.231318167891736 ], [ 20.91522265179223, 52.231334621415044 ], [ 20.915039793030246, 52.23134012358579 ], [ 20.91485693426826, 52.231334621415044 ], [ 20.914675836536116, 52.231318167891736 ], [ 20.91449824390397, 52.23129092147227 ], [ 20.91432586668595, 52.23125314455458 ], [ 20.914160364968897, 52.23120520095102 ], [ 20.914003332624816, 52.231147552384705 ], [ 20.91385628196103, 52.23108075404284 ], [ 20.91372062915581, 52.23100544922998 ], [ 20.913597680619834, 52.23092236317263 ], [ 20.913488620414707, 52.230832296034954 ], [ 20.913394498849826, 52.230736115212714 ], [ 20.91331622236731, 52.2306347469798 ], [ 20.913254544812478, 52.230529167567724 ], [ 20.9132100601739, 52.23042039376393 ], [ 20.91318319686296, 52.23030947311961 ], [ 20.91317421358803, 52.23019747386121 ], [ 20.91318319686296, 52.23008547460281 ], [ 20.9132100601739, 52.22997455395849 ], [ 20.913254544812478, 52.2298657801547 ], [ 20.91331622236731, 52.22976020074262 ], [ 20.913394498849826, 52.229658832509706 ], [ 20.913488620414707, 52.229562651687466 ], [ 20.913597680619834, 52.22947258454979 ], [ 20.91372062915581, 52.22938949849244 ], [ 20.91385628196103, 52.22931419367958 ], [ 20.914003332624816, 52.229247395337715 ], [ 20.914160364968897, 52.229189746771404 ], [ 20.91432586668595, 52.22914180316784 ], [ 20.91449824390397, 52.22910402625015 ], [ 20.914675836536116, 52.229076779830685 ], [ 20.91485693426826, 52.229060326307376 ], [ 20.915039793030246, 52.22905482413663 ], [ 20.91522265179223, 52.229060326307376 ], [ 20.915403749524376, 52.229076779830685 ], [ 20.91558134215652, 52.22910402625015 ], [ 20.915753719374543, 52.22914180316784 ], [ 20.915919221091595, 52.229189746771404 ], [ 20.916076253435676, 52.229247395337715 ], [ 20.91622330409946, 52.22931419367958 ], [ 20.91635895690468, 52.22938949849244 ], [ 20.91648190544066, 52.22947258454979 ], [ 20.916590965645785, 52.229562651687466 ], [ 20.916685087210666, 52.229658832509706 ], [ 20.916763363693182, 52.22976020074262 ], [ 20.916825041248014, 52.2298657801547 ], [ 20.916869525886593, 52.22997455395849 ], [ 20.916896389197532, 52.23008547460281 ], [ 20.916905372472463, 52.23019747386121 ] ] ] }, "properties": { "_kind": "selection-circle", "_radius_m": 127 }, "type": "Feature" } ], "properties": { "lat": 52.230019, "lng": 20.915062, "map": "se", "zoom": 17.51 }, "type": "FeatureCollection" } ```
Owner

Investigation complete (2026-08-04, night-shift run; worker hit its iteration cap before committing — nothing to push, hence release rather than blocked).

Finding: the buffer is not the visible cause. A systematic A/B comparison (buffer 64 vs 256, pixel-traced renders at z17.51 and z18 at 52.230019/20.915062) produced 0-pixel diffs: opaque cover fills hide buffer-edge clipping, adjacent-tile fragments stay seamless, and the reported polygon renders exactly at its DB geometry (edge pixels match to ≤2 px). The 'white areas' in the report are roads (roads_secondary/_tertiary/_minor, up to ~60 px wide at z17) and the purple lines are transit_tram — confirmed via queryRenderedFeatures per pixel. Not missing fill.

Hard clipping at the buffer line IS real in the decoded MVTs (coords exactly at x=4160=4096+64 / y=-64), it just isn't visible for opaque fills.

Recommendation (maintainer's call): (a) raise the buffer 64→256 in importer/shared.go + layer.go as a defensive improvement — measured cost 7–34% on z17 transport tiles, redeploy via one importer run — or (b) accept that no visible defect is reproducible at buffer 64 today and close/re-scope this issue. Full detail in the delegation transcript if wanted.

Investigation complete (2026-08-04, night-shift run; worker hit its iteration cap before committing — nothing to push, hence release rather than blocked). **Finding: the buffer is not the visible cause.** A systematic A/B comparison (buffer 64 vs 256, pixel-traced renders at z17.51 and z18 at 52.230019/20.915062) produced 0-pixel diffs: opaque cover fills hide buffer-edge clipping, adjacent-tile fragments stay seamless, and the reported polygon renders exactly at its DB geometry (edge pixels match to ≤2 px). The 'white areas' in the report are roads (roads_secondary/_tertiary/_minor, up to ~60 px wide at z17) and the purple lines are transit_tram — confirmed via queryRenderedFeatures per pixel. Not missing fill. Hard clipping at the buffer line IS real in the decoded MVTs (coords exactly at x=4160=4096+64 / y=-64), it just isn't visible for opaque fills. **Recommendation (maintainer's call):** (a) raise the buffer 64→256 in importer/shared.go + layer.go as a defensive improvement — measured cost 7–34% on z17 transport tiles, redeploy via one importer run — or (b) accept that no visible defect is reproducible at buffer 64 today and close/re-scope this issue. Full detail in the delegation transcript if wanted.
Author
Collaborator

night-shift — released, not worked.

Worker hit its iteration cap after completing the investigation (buffer not the visible cause — see comment). No commits to keep; re-queued for a maintainer decision on the recommendation.

**night-shift** — released, not worked. Worker hit its iteration cap after completing the investigation (buffer not the visible cause — see comment). No commits to keep; re-queued for a maintainer decision on the recommendation.
Owner

Attached two screenshots from two different countries, in the first the right lane of "Powstańców Śląskich" renders completely wrong, in the second we can see that the north edge of Hägerstensvägen is all wrong. Just the fact that we can't see the casing and can see one of the street segments ending (with that rounded cap) should tell us that something is wrong.

If it's not a buffer issue in the MVT, then what's causing this? The next agent that picks up this issue, please add a comment with screenshots of the verification of this particular intersection (Powstańców Śląskich and Czulhowska) at zoom level 19 (19 is worse even than 17 and 18) with different buffer settings in the MVT (changing the MVT function for one test should be trivial).

Attached two screenshots from two different countries, in the first the right lane of "Powstańców Śląskich" renders completely wrong, in the second we can see that the north edge of Hägerstensvägen is all wrong. Just the fact that we can't see the casing and can see one of the street segments ending (with that rounded cap) should tell us that something is wrong. If it's not a buffer issue in the MVT, then what's causing this? The next agent that picks up this issue, please add a comment with screenshots of the verification of this particular intersection (Powstańców Śląskich and Czulhowska) at zoom level 19 (19 is worse even than 17 and 18) with different buffer settings in the MVT (changing the MVT function for one test should be trivial).
Owner

Verification of the buffer hypothesis at the reported intersection (Powstańców Śląskich × Człuchowska, Warsaw) and the second data point (Hägerstensvägen, Stockholm), both at z19 — exactly as asked.

Method. Rendered the same cameras at MVT buffer 64 (current) and 256 (test) via real Chrome over CDP (scripts/cdp-map-check.mjs, no virtual time), 2 renders per buffer. Same-buffer controls are 0-pixel diffs; the cross-buffer diff is real and concentrated at tile edges.

Result — the artifact IS the buffer cut, and b256 fixes it.

  • Warsaw z19 (Powstańców Śląskich × Człuchowska): b64 vs b256 = 6644 px differ (control 0). At b64 the decoded tile clips the road geometry at x/y = 4160 (= 4096+64) — the road copy ends at the buffer line and MapLibre draws its line-cap: round there, so the casing is missing on one side and segments end mid-road with a rounded cap. At b256 the clip moves to 4352 (= 4096+256), the road extends past the seam, and the casing/cap artifact is gone.
  • Stockholm z19 (Hägerstensvägen): b64 vs b256 = 4551 px differ (control 0). Same pattern: casing break on the north edge gone at b256.
  • z18 Warsaw: 3499 px differ — the artifact exists there too, just less visible, matching "19 is worse than 17 and 18".

Tile-size cost at z19 (hex-encoded zxy_map bytes, b64 → b256, five tiles around the Warsaw intersection): 596→677 (+14%), 576→623 (+8%), 430→494 (+15%), 378→451 (+19%), 504→561 (+11%). The roads layer alone is +4% to +21% per tile. Modest, and only the stroked layers pay it — the opaque cover fills render identically (the earlier 0-diff finding was fill-only, as suspected).

Screenshots: left = buffer 64 (artifact: casing break / rounded cap at the seam), right = buffer 256 (clean).

Verification of the buffer hypothesis at the reported intersection (Powstańców Śląskich × Człuchowska, Warsaw) and the second data point (Hägerstensvägen, Stockholm), both at z19 — exactly as asked. **Method.** Rendered the same cameras at MVT buffer 64 (current) and 256 (test) via real Chrome over CDP (`scripts/cdp-map-check.mjs`, no virtual time), 2 renders per buffer. Same-buffer controls are 0-pixel diffs; the cross-buffer diff is real and concentrated at tile edges. **Result — the artifact IS the buffer cut, and b256 fixes it.** - Warsaw z19 (Powstańców Śląskich × Człuchowska): b64 vs b256 = **6644 px** differ (control 0). At b64 the decoded tile clips the road geometry at x/y = 4160 (= 4096+64) — the road copy ends at the buffer line and MapLibre draws its `line-cap: round` there, so the casing is missing on one side and segments end mid-road with a rounded cap. At b256 the clip moves to 4352 (= 4096+256), the road extends past the seam, and the casing/cap artifact is gone. - Stockholm z19 (Hägerstensvägen): b64 vs b256 = **4551 px** differ (control 0). Same pattern: casing break on the north edge gone at b256. - z18 Warsaw: 3499 px differ — the artifact exists there too, just less visible, matching "19 is worse than 17 and 18". **Tile-size cost at z19** (hex-encoded `zxy_map` bytes, b64 → b256, five tiles around the Warsaw intersection): 596→677 (+14%), 576→623 (+8%), 430→494 (+15%), 378→451 (+19%), 504→561 (+11%). The roads layer alone is +4% to +21% per tile. Modest, and only the stroked layers pay it — the opaque cover fills render identically (the earlier 0-diff finding was fill-only, as suspected). Screenshots: left = buffer 64 (artifact: casing break / rounded cap at the seam), right = buffer 256 (clean).
Owner

The fix is in #59#59; the review note is the PR description. b256 A/B verification (screenshots above) shows the casing/cap artifact at the reported intersection is gone.

The fix is in #59 — https://git.blahonga.org/art/ismap/pulls/59; the review note is the PR description. b256 A/B verification (screenshots above) shows the casing/cap artifact at the reported intersection is gone.
art 2026-08-05 01:14:33 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
art/ismap#37
No description provided.