Giter Club home page Giter Club logo

dart-latlong's Introduction

DEPRECATED


This package will not be maintained anymore!

The whole thing landed on TypeScript

Check out the lib on npmjs


LatLong provides a lightweight library for common latitude and longitude calculation.

This library supports both, the "Haversine" and the "Vincenty" algorithm.

"Haversine" is a bit faster but "Vincenty" is far more accurate!

LatLong

Catmull-Rom algorithm is used for smoothing out the path.

Basic usage

Distance

    final Distance distance = new Distance();
    
    // km = 423
    final int km = distance.as(LengthUnit.Kilometer,
     new LatLng(52.518611,13.408056),new LatLng(51.519475,7.46694444));
    
    // meter = 422591.551
    final int meter = distance(
        new LatLng(52.518611,13.408056),
        new LatLng(51.519475,7.46694444)
        );

Offset

    final Distance distance = const Distance();
    final num distanceInMeter = (EARTH_RADIUS * math.PI / 4).round();
    
    final p1 = new LatLng(0.0, 0.0);
    final p2 = distance.offset(p1, distanceInMeter, 180);
    
    // LatLng(latitude:-45.219848, longitude:0.0)
    print(p2.round());
    
    // 45° 13' 11.45" S, 0° 0' 0.00" O
    print(p2.toSexagesimal());
            

Path smoothing

    // zigzag is a list of coordinates
    final Path path = new Path.from(zigzag);
    
    // Result is below
    final Path steps = path.equalize(8,smoothPath: true);

Smooth path

Features and bugs

Please file feature requests and bugs at the issue tracker.

License

Copyright 2015 Michael Mitterer ([email protected]),
IT-Consulting and Development Limited, Austrian Branch

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language
governing permissions and limitations under the License.

If this plugin is helpful for you - please (Circle) me or star this repo here on GitHub

dart-latlong's People

Contributors

alfanhui avatar mikemitterer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dart-latlong's Issues

Can't instantiate any LatLng instance

Every time I try to instantiate an instance of LatLng using the constructor, I get
"Invalid argument(s): Longitude must be between -90 and 90 degrees but was -180.00001532690865"

Regardless of the arguments I pass in. Even LatLng(0,0) will return this error.

Working with doubles as string is wrong

String decimal2sexagesimal(final double dec) {
List<int> _split(final double value) {
final List<String> tmp = round(value,decimals: 10).toString().split('.');
return <int>[ int.parse(tmp[0]).abs(), int.parse(tmp[1])];
}
final List<int> parts = _split(dec);
final int integerPart = parts[0];
final int fractionalPart = parts[1];
final int deg = integerPart;
final double min = double.parse("0.${fractionalPart}") * 60;
final List<int> minParts = _split(min);
final int minFractionalPart = minParts[1];
final double sec = (double.parse("0.${minFractionalPart}") * 60);
return "${deg}° ${min.floor()}' ${round(sec,decimals: 2).toStringAsFixed(2)}\"";
}

When dec is 53.0335 then splitting a double into two parts, that then get parsed as integers is wrong!

The fractionalPart 0335 becomes an integer - 335, and then "recreating" a double by doing 0.$fractionalPart is simply silly.

0.335 != 0.0335

final String sexa2 = decimal2sexagesimal(-42.883891);
expect(sexa2, '42° 53\' 02.01"'); // got '42° 53\' 20.08"'

The right way of doing this is:

/// Converts a decimal coordinate value to sexagesimal format
///
///     final String sexa1 = decimal2sexagesimal(51.519475);
///     expect(sexa1, '51° 31\' 10.11"');
///
///     final String sexa2 = decimal2sexagesimal(-42.883891);
///     expect(sexa2, '42° 53\' 02.01"');
///
String decimal2sexagesimal(final double dec) {
  if (dec == null) throw new ArgumentError.notNull('dec');

  final buf = new StringBuffer();

  final double absDec = dec.abs();
  final int deg = absDec.floor();
  buf.write(deg.toString() + '°');

  final double mins = (absDec - deg) * 60.0;
  final int min = mins.round();
  buf.write(' ' + zeroPad(min) + "'");

  final double secs = (mins - mins.floorToDouble()) * 60.0;
  final int sec = secs.round();
  final int frac = ((secs - secs.floorToDouble()) * 100.0).round();
  buf.write(' ' + zeroPad(sec) + '.' + zeroPad(frac) + '"');

  return buf.toString();
}

/// Pads a number with a single zero, if it is less than 10
String zeroPad(num number) => (number < 10 ? '0' : '') + number.toString();

Sorry, I'm calling this function a lot, so StringBuffer makes sense for me.

Circle constructor radius unit

Hi Creators,

Thanks for the great plugin. This is the easiest and very straight forward plugin I ever used to calculate LatLng distance. But I'v a small doubt.

In Circle constructor,

Circle(LatLng center, double radius, { DistanceCalculator calculator: const Vincenty() })

The radius indicates what unit meters or kilometers, something else? I went through the documentation regarding this but I couldn't able to find it. If I know the correct unit, so then I can draw a circle in the map.

latlong/Path class is being confused with dart:ui Path

I am trying to build a custom clipper class which uses for instance Path.lineTo()but the compiler is not accepting it because I am also using latlong.dart and it has a class named Path. Am I doing something wrong? Thanks Mike

Dart 2 migration issue

Hi @MikeMitterer,
The library version 6.0.1 doesn't work with dart 2,
error mesage

The current Dart SDK version is 2.1.0-dev.0.0.flutter-be6309690f.

Because project depends on latlong >=0.1.1 <0.6.1 which requires SDK version >=1.8.0 <2.0.0, version solving failed.
pub get failed (1)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.