Skip to content

Google Maps Flutter: LatLng longitude loses precision in constructor #90574

@Murray-Meller

Description

@Murray-Meller

Hi,

Thanks for your time in reading this bug.

The issue i am experiencing involves the LatLng class provided by the google_maps_flutter package. The constructor for the LatLng class is losing precision on the given longitude. The end result is that my map markers are in the wrong location with an error of 2-10 meters.

Steps to Reproduce

I am running my flutter application on a physical iPhone 7 with iOS 13.7.

Expected results:

When giving the marker object the coordinates: (lat: -34.509981, long: 150.792384)

I would expect the object to have lat and long values: Latlng(-34.509981, 150.792384)

Actual results:

The object has values that are close but are not precise. LatLng(-34.509981, 150.79238399999997)

After reviewing the LatLng constructor it appears the error comes from precision loss in the longitudes normalisation:

const LatLng(double latitude, double longitude)
      : assert(latitude != null),
        assert(longitude != null),
        latitude =
            (latitude < -90.0 ? -90.0 : (90.0 < latitude ? 90.0 : latitude)),
        longitude = (longitude + 180.0) % 360.0 - 180.0;

Proposed change:

What I would like to do is this: skip the normalisation if the given value is within the acceptable range.

This would allow my to avoid any unnecessary loss of precision.

This issue was original raised here: #65589

Logs
[✓] Flutter (Channel stable, 1.20.2, on Mac OS X 10.15.5 19F101, locale en-AU)
    • Flutter version 1.20.2 at /Users/murray/dev/flutter
    • Framework revision bbfbf1770c (4 weeks ago), 2020-08-13 08:33:09 -0700
    • Engine revision 9d5b21729f
    • Dart version 2.9.1

 
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at <USER_DIR>/Library/Android/sdk
    • Platform android-29, build-tools 29.0.2
    • Java binary at: <USER_DIR>/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/193.6626763/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses

[✓] Xcode - develop for iOS and macOS (Xcode 11.7)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.7, Build version 11E801a
    • CocoaPods version 1.9.3

[✓] Android Studio (version 4.0)
    • Android Studio at <USER_DIR>/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/193.6626763/Android Studio.app/Contents
    • Flutter plugin version 36.1.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)

[!] VS Code (version 1.44.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[!] Connected device
    • Error: <User's> iPhone is not connected. Xcode will continue when <User's> iPhone is connected. (code -13)

! Doctor found issues in 3 categories.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projectfound in release: 2.5Found to occur in 2.5found in release: 2.6Found to occur in 2.6has reproducible stepsThe issue has been confirmed reproducible and is ready to work onp: mapsGoogle Maps pluginpackageflutter/packages repository. See also p: labels.r: fixedIssue is closed as already fixed in a newer version

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions