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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxMjc2MzQsIm5iZiI6MTczOTEyNzMzNCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwMDEtMTk2MDlmYjYtZTQ3NC00NDdjLTkzZDQtMTdmMzExNDVhMWVjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA5VDE4NTUzNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJhMTdlMzVmMTE0ZWQ0NWRlMDA1OTVjMjFmNjUzMGM1YzI0ZjMzZjkwMzNmZTcwYmYyNTkwMGY2MDYwODNlMzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VvuoYumEamjQv2aMvM7CyLh4l0h-QGvP53U-beN-p90)
![Screenshot 2024-03-23 at 21 41 35](https://private-user-images.githubusercontent.com/17072869/316268019-b24d327f-2915-4cf3-a4fd-ff0250e13c99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxMjc2MzQsIm5iZiI6MTczOTEyNzMzNCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwMTktYjI0ZDMyN2YtMjkxNS00Y2YzLWE0ZmQtZmYwMjUwZTEzYzk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA5VDE4NTUzNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThlY2EwYzgxNWJkZjc4YzQwZWQ1M2EzNGNlNWY5N2ViNmY2OTcyNGY5MGFhZjUwZmI1YTkwYzIyNTZlNGJlMWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.BLjsjzuKuxFk32iHh2x00ZNMEQJui8nA0JHDBZpIJDs)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxMjc2MzQsIm5iZiI6MTczOTEyNzMzNCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgwODQtZjg1OGE0ZGYtMTVkYy00NDBiLThmMDAtNDVhNTIzM2NiZmRjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA5VDE4NTUzNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU0NjI3MjkzMzMxOTE5Njc4NGIwMWVkMTI5YTRhZWRmOGVhMjQyNjYzZTFhNGE0ZDBmNTlmODNlZWYyNDAwYTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.JAEClldBYNkQmadwGJM7CWa6PWVTw5DOhCYKeahJwN0)
![Screenshot 2024-03-23 at 21 41 24](https://private-user-images.githubusercontent.com/17072869/316268103-45089638-ef67-4cc6-8525-331b3b5b59f0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxMjc2MzQsIm5iZiI6MTczOTEyNzMzNCwicGF0aCI6Ii8xNzA3Mjg2OS8zMTYyNjgxMDMtNDUwODk2MzgtZWY2Ny00Y2M2LTg1MjUtMzMxYjNiNWI1OWYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA5VDE4NTUzNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU0MDExNDYwZmNkOTAwYzE0ZTRmM2U1MjBkOTM5NDgxY2JjN2NkZDUyN2Q3NDI5N2YyNjA0NGU1ZGMwZDQxYWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1edG55ukhpclj8gr6GkHOYFjJu_Vq29nzw7FrrGa00s)
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.