| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
can any of the maintainer please review the fix for the issue please ? |
Sorry, something went wrong.
|
Hello @SharadhNaidu! Thanks for the PR. I'll try to review this, but it might take a bit to get to. |
Sorry, something went wrong.
|
In the meantime, could you provide some examples that this fixes and some testing steps? |
Sorry, something went wrong.
|
Give me some time please , i'll provide you with few examples with before and after , also the testing steps . |
Sorry, something went wrong.
|
here's the repro from the issue , before/after, and how to test. example (the case from #7844) Plotly.newPlot('graph', [{
type: 'scattergeo', mode: 'markers',
lat: [43.1155, 32.7157], lon: [131.8855, -179]
}], {
geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }
});the two points sit either side of ±180° before, fitbounds measures the longitude span the long way (~311°) and zooms out to almost the whole world , after it uses the compact crossing range (~49°). before (v3.6.0) points squashed against opposite edges:
after (this PR) compact view across the antimeridian, framed like any other fitbounds map:
for reference, the eastern-most = 179 case already worked and is unchanged:
what changed: testing npm run test-jasmine -- geo
Manual: swap -179 for 179 in the snippet — both now give the same compact view. i'll attach a few more examples and tests . |
Sorry, something went wrong.
Sorry, something went wrong.
When `fitbounds` point data straddles +/-180 degrees longitude, the naive [min, max] range from getAutoRange includes the large empty span the long way round the globe, so the map zooms out far more than necessary (plotly/plotly.py#5539). Add getFitboundsLonRange, which finds the widest gap between consecutive longitudes and returns the complementary, antimeridian-crossing range when it is more compact. The override is scoped to longitude point data: it is skipped when a choropleth or location-based scattergeo trace is present (whose region extents are not captured here) and when the data spans the whole globe.
The antimeridian fix replaced the padded naive range with a tight [min, max], so markers ended up flush against the frame on straddling maps while every other fitbounds map leaves a margin. Scale the padding getAutoRange already applied to the naive range down to the narrower crossing range and apply it. The padding is symmetric, so the mid-longitude the projection centers on is unchanged. Loosen the integration test's range assertion to match.
|
I dont why the one CI run failed , its an animation/transition test , I dont think i have touch any path/file which required "test/jasmine/tests/transition_test.js" , dont know why it failed but just in case I rebased , to the recent changes . |
Sorry, something went wrong.
There was a problem hiding this comment.
This is great! Thanks for the fix. It works well from my testing. I requested a few changes. Once those are done, this can be merged.
Sorry, something went wrong.
- Guard against an empty locations array (truthy [] should not count as region data) - Clarify the comment on why the compact-range path is restricted to fitbounds='locations' with no region-bearing traces - Tighten the projection rotation assertion in the straddling test
|
@camdecoster the requested reviews are applied , please let me know if any. Also i have an issue please look into it when free (/issues/7835) I am willing to spend more time on it. |
Sorry, something went wrong.
|
The test failures are unrelated to this PR, so I'm going to merge. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
fixes #7844.
With fitbounds: "locations" on a geo subplot, points that straddle the antimeridian make the map zoom out far more than it should. The longitude range comes straight from getAutoRange as a plain min/max, so it measures the span the long way around the globe. The issue's example (lon 131.8855 and -179) ends up with a ~311° span, when crossing the antimeridian only needs ~49°.
I added a helper, getFitboundsLonRange, that sorts the longitudes, finds the largest gap between neighbouring points, and if that gap is wider than the one the naive range leaves open across the antimeridian, returns the complementary range instead. The result can exceed 180° (e.g. [131.8855, 181]), but makeRangeBox already handles ranges that cross the antimeridian, so the projection code is untouched.
It runs right after getAutoRange, so it can only shrink the range, never grow it. It deliberately stays out of the way when:
Tests: unit tests on the helper (straddling, not straddling, whole globe, too few points) plus an integration test that renders both of the issue's cases and checks the fitted range and the projection rotation. The existing fitbounds mocks and the winkel-tripel draw-time test are all location-based or globe-spanning, so none of them shift.
One open question: the range I return is tight, whereas getAutoRange pads a little for marker size, so in the crossing case points can sit right on the edge. Happy to mirror that padding if you'd prefer.