-
Notifications
You must be signed in to change notification settings - Fork 501
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add batch mode of screen location #554
Add batch mode of screen location #554
Conversation
5f06f75
to
d1373f4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM besides the todo - very nice to have this feature! @shroff would be great if you could review
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code to perform the batch coords to position translation LGTM, but naming in the example code is quite confusing and should be fixed before landing.
mapbox_gl_platform_interface/lib/src/method_channel_mapbox_gl.dart
Outdated
Show resolved
Hide resolved
android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java
Outdated
Show resolved
Hide resolved
mapbox_gl_platform_interface/lib/src/mapbox_gl_platform_interface.dart
Outdated
Show resolved
Hide resolved
@shroff |
302cdbf
to
afcfa81
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not tested after the changes, but code LGTM.
reply.append(Double(returnVal.x)) | ||
reply.append(Double(returnVal.y)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same as in java, better to construct a list of the known size and insert at index rather than appending.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, fixed.
afcfa81
to
4fd9045
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Appreciate the PR @OttyLab! 🚀
The performance isn't that great but we can iterate on it.
I am getting this on v11 release now
|
Thank you for reporting the issue. How can I reproduce the error? Running sample code in SDK nor creating a simple app from the scratch did not reproduce it. |
@OttyLab I get when I just update from 0.10.0 to 0.11.0. What could be important is that library is used as path, that points to my fork. In my fork I checkout 0.11.0 tag and then do pub get in the main project. |
When I create a simple app with 0.10.0 (getting via Pub.dev) and upgrading to 0.11.0 does not reproduce the issue.
Does this mean you forked |
* Change iOS dependencies to Maplibre * Update MapLibre dependency * Set iOS deployment target to 9.0 * fix Podfile syntax * Podfile: comment out platform key * set MinimumOSVersion: 9.0; uncomment Podfile:platform key * CI: verbose iOS build * Update IPHONEOS_DEPLOYMENT_TARGET to 9.0 * [web] Fix Mapbox GL JS CSS embedding (#551) Fixes #514 * iOS: update Podfile to fix CI (#565) * Update deprecated patterns to fix CI static analysis (#568) * [offline][android] Add setOffline method (#537) * Add batch mode of screen location (#554) * Change SDK version of example * Add toScreenLocationBatch * Add custom marker example * Define which annotations consume tap events (Multiple annotations on click area management) (#575) * AnnotationClickOrder working (not order but activation/desactivation) * Switch to annotationConsumeTapEvents method * Remove failed offline pack downloads (#583) When a download error occurs, the app is informed through the channel so that it can display an appropriate error. However, on subsequent calls to list the available downloaded packs it is surprising to see that the failed region download is present as if it had been downloaded. There is no way for the app to repair this incomplete pack. Therefore, it seems much better to clean up the failed download as soon as it's detected. If any tiles were downloaded they will be at least temporarily in the cache and available to a future re-download attempt. This follows the same logic as failures caused by hitting the tile limit. * [docs] update changelog for v0.11.0 release (#584) * [release] update pubspec for v0.11.0 (#585) * add annotationOrder to web (#588) * emits onTap only for the feature above the others (#589) * [web] update image dependency to ^3.0.2 (#598) * [android] bumpn release to v9.6.0 and use SDK registry distribution mechanism (#489) * [iOS][Android] Batch creation/removal for circles, fills and lines (#576) * added batch mode * added circle support * added remove features * removed test code * inital android implementation * added documentation * removed unused code * add batch example * fix feature mamager on release build (#593) * Improve description to enable location features (#596) * Update to Mapbox-iOS-SDK 6.3.0 (#513) * Update to Mapbox-iOS-SDK 6.3.0 The 6.0.0 upgrade had no breaking changes: > This major release does not include any breaking changes to public > APIs. We are treating this release as a SEMVER major change because > our installation instructions have changed. https://github.com/mapbox/mapbox-gl-native-ios/releases/tag/ios-v6.0.0 I did however need to cast the `accessToken` as a `String` to satisfy the compiler after this upgrade. Prior to the upgrade I was seeing crashes from this bug, which was fixed in 6.2: mapbox/mapbox-gl-native-ios#485 So far I don't see any issues at all after the upgrade. Developers will need to configure their access token in order to fetch the mapbox sdk for this an future versions, described here: https://docs.mapbox.com/ios/maps/guides/install/ * Setup .netrc for iOS mapbox sdk download Writes a `~/.netrc` file containing the credentials needed to download the iOS mapbox sdk. I'm not experienced with github workflow so I'm just hoping that I can write to the home directory of whatever container it runs in. This should allow curl to find and use the given credentials. Co-authored-by: tobrun <tobrun.van.nuland@gmail.com> * [docs] update changeog for v0.12.0 (#602) * [release] v0.12.0 (#603) * fix: update MapLibre dependencies and imports. * fix: update String cast * Fix maplibre dependency (org.maplibre.gl has migrated to maven central) * Update iOS MapLibre to 5.12.0 * Bump MapLibreAnnotationExtension to 0.0.1-beta.3 * Update maplibre_gl.podspec * [iOS] - Fix compilation issue with maplibre 5.12.0 * Update CHANGELOG.md Co-authored-by: m0nac0 <58807793+m0nac0@users.noreply.github.com> Co-authored-by: shroff <ashroff6@gmail.com> Co-authored-by: Yoshikage Ochi <yoshikage.ochi@mapbox.com> Co-authored-by: Stephane Trepier <stephane.trepier@gmail.com> Co-authored-by: Nathan <nathan@transit.app> Co-authored-by: Tobrun <tobrun.van.nuland@gmail.com> Co-authored-by: Andrea Valenzano <andr3a689@gmail.com> Co-authored-by: Ahmed <ahm322@hotmail.com> Co-authored-by: Felix Horvat <felix.horvat@ocell.aero> Co-authored-by: Ettore Atalan <atalanttore@googlemail.com> Co-authored-by: Konrad Koeppe <konrad.koeppe@bareways.com> Co-authored-by: Vincent Berthet <vincent@web-74.com>
Summary
toScreenLocationBatch
is created for the better performance.Background
I want to put a rich marker that is implemented as a Flutter Widget instead of using Symbol Layer. The idea is as same as that of Android
MarkerView
implementation.This approach requires
toScreenLocation
query to update marker location on the screen every time the camera position is changed.toScreenLocation
is implemented as a method channel and it is not performant.The camera moving callback is called more than 10 times per second. Therefore, if the number of marker is 100, the API call should be less than 1ms. It's depends on the device but some fail to meet this requirement and the animation gets heavy.
Implementation
toScreenLocationBatch
is newly defined.List<List<LatLng>>
is a parameter and returned value isList<List<Point>>
. The parameter and return value orders are garanteeed.Sample code
trackCameraPosition: true,
Result
x-axis shows the number of
toScreenLocation
ortoScreenLocationBatch
call and y-axis shows the time. Blue lines show the result oftoScreenLocation
while red lines showtoScreenLocationBatch
. According to the result,toScreenLocationBatch
significantly improves the performance.Screenshot
output.mp4
Review required items
flutter-mapbox-gl
also requires v2.1.0)toScreenLocationBatch
is acceptable