Fix map center drift by using geographic center instead of bounds center
Problem: Map position drifted north/higher on each reload because bounds.getCenter() returns a visually offset center when pitch is applied Solution: - Use map.getCenter() for accurate geographic center (not affected by pitch) - Save and restore bearing (rotation) along with pitch - Store: lat, lon, zoom, pitch, bearing Before: bounds.getCenter() → visual center (offset by 3D tilt) After: map.getCenter() → true geographic center This ensures the map returns to the exact same position after reload, regardless of the 3D tilt angle. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
f22b9dfe06
commit
2c3722146a
|
|
@ -84,6 +84,10 @@ export function useMapCore(theme) {
|
||||||
map.setZoom(v.zoom);
|
map.setZoom(v.zoom);
|
||||||
// Restore pitch from storage, default to 45 if not saved
|
// Restore pitch from storage, default to 45 if not saved
|
||||||
map.setPitch(typeof v.pitch === "number" ? v.pitch : 45);
|
map.setPitch(typeof v.pitch === "number" ? v.pitch : 45);
|
||||||
|
// Restore bearing (rotation) if saved
|
||||||
|
if (typeof v.bearing === "number") {
|
||||||
|
map.setBearing(v.bearing);
|
||||||
|
}
|
||||||
hadLastView = true;
|
hadLastView = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -114,14 +118,17 @@ export function useMapCore(theme) {
|
||||||
const vp = getViewFromMap(map);
|
const vp = getViewFromMap(map);
|
||||||
setViewParams(vp);
|
setViewParams(vp);
|
||||||
try {
|
try {
|
||||||
const center = vp.center;
|
// Use map.getCenter() directly for accurate geographic center
|
||||||
|
// (bounds.getCenter() can be offset when pitch is applied)
|
||||||
|
const center = map.getCenter();
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
LAST_VIEW_KEY,
|
LAST_VIEW_KEY,
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
lat: center[1],
|
lat: center.lat,
|
||||||
lon: center[0],
|
lon: center.lng,
|
||||||
zoom: map.getZoom(),
|
zoom: map.getZoom(),
|
||||||
pitch: map.getPitch()
|
pitch: map.getPitch(),
|
||||||
|
bearing: map.getBearing()
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} catch {}
|
} catch {}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue