respect padding in cameraForBounds when using globe projection #13126
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #12498
As described in the issue #12498 the
fitBounds
and subsequently thecameraForBounds
methods do not respect the padding when globe projection is used.In the code
_cameraForBoundsOnGlobe
just ignored the padding altogether. I extracted the part of the code that adds the padding to theaabb
s in camera space and used it in globe and mercator case. I also added a test to thecamera.test.js
file.With Padding
Previous
![Screenshot 2024-03-23 at 21 42 23](https://private-user-images.githubusercontent.com/17072869/316268001-19609fb6-e474-447c-93d4-17f31145a1ec.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTM2NzgsIm5iZiI6MTczOTgxMzM3OCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwMDEtMTk2MDlmYjYtZTQ3NC00NDdjLTkzZDQtMTdmMzExNDVhMWVjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE3MjkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkYzU1ZDU0YjIzMmIyZTA3M2RhZTgwNDA5MTYyZDFlOGRiMTRlYzhkOGU5ZWVjNmJlNmVjNTdkYTZlOWI4NjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gFTN3hCze68Wo8p9F68H6xy84caUbKoVQ7U1oMk33wk)
![Screenshot 2024-03-23 at 21 41 35](https://private-user-images.githubusercontent.com/17072869/316268019-b24d327f-2915-4cf3-a4fd-ff0250e13c99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTM2NzgsIm5iZiI6MTczOTgxMzM3OCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwMTktYjI0ZDMyN2YtMjkxNS00Y2YzLWE0ZmQtZmYwMjUwZTEzYzk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE3MjkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk1ZDZlYWVkZGNmMDQ5MTdhNDUxYzg2ZGY2ODg2ZDgxMzI5Njg3NzY1MTRlZTZmM2Q3NTA1YmEzNDQ2MzRlMWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.X5pFmNyI5r9ebVEGl_FUVFAHv2RgOy8On9l7BcTq47w)
With the changes
Without padding
Previous:
![Screenshot 2024-03-23 at 21 40 56](https://private-user-images.githubusercontent.com/17072869/316268084-f858a4df-15dc-440b-8f00-45a5233cbfdc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTM2NzgsIm5iZiI6MTczOTgxMzM3OCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwODQtZjg1OGE0ZGYtMTVkYy00NDBiLThmMDAtNDVhNTIzM2NiZmRjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE3MjkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM1MGYzOGQ1ZDhiYTYzOTliY2FkODlhYWFjZmZmYjg4Y2RkMmE1Zjc1NzE0YTMzYzc3MTNjNzA3ZTEyODNlMTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.N_5yYRqUIQPprQ06uESufyB9Sah9UktB8p7qDmIjrlQ)
![Screenshot 2024-03-23 at 21 41 24](https://private-user-images.githubusercontent.com/17072869/316268103-45089638-ef67-4cc6-8525-331b3b5b59f0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTM2NzgsIm5iZiI6MTczOTgxMzM3OCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgxMDMtNDUwODk2MzgtZWY2Ny00Y2M2LTg1MjUtMzMxYjNiNWI1OWYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE3MjkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRhYWQ1MmJhZWE4YmU3ZjllNDFkNGUyMDYyMzE0MGM4ZDYxMzdkYWVhYjEyNmY3NzM4YmU0MGIzNDIyZmExNzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.38ZuLniqlxEX1RKaW-zmN_ohM2jLc2pZnnAMIC43PiY)
With the changes:
(It's not the same picture I swear! :D)
Visual Testing
In order to verify the functionality visually I created a test scenario html file, there you can move around the markers and see that all possible cases produce a functional camera transform:
Launch Checklist
@mapbox/map-design-team
@mapbox/static-apis
if this PR includes style spec API or visual changes.@mapbox/gl-native
if this PR includes shader changes or needs a native port.