geodesy 0.5.0
geodesy: ^0.5.0 copied to clipboard
A Dart library for geodesic and trigonometric calculations working with points and paths
example/main.dart
import 'package:latlong2/latlong.dart';
// ignore: avoid_relative_lib_imports
import '../lib/geodesy.dart' show Geodesy;
void main() async {
var geodesy = Geodesy();
var l1 = const LatLng(50.06638889, 5.71472222);
var l2 = const LatLng(58.64388889, 3.07000000);
var distance = geodesy.distanceBetweenTwoGeoPoints(l1, l2);
print('[distanceBetweenTwoGeoPoints] Distance: ' + distance.toString());
var l3 = const LatLng(51.4778, -0.0015);
var destinationPoint =
geodesy.destinationPointByDistanceAndBearing(l3, 7794.0, 300.7);
print('[destinationPointByDistanceAndBearing] Lat: ' +
destinationPoint.latitude.toString());
print('[destinationPointByDistanceAndBearing] Lng: ' +
destinationPoint.longitude.toString());
var l4 = const LatLng(52.205, 0.119);
var l5 = const LatLng(48.857, 2.351);
var bearing = geodesy.bearingBetweenTwoGeoPoints(l4, l5);
print('[bearingBetweenTwoGeoPoints] Bearing: ' + bearing.toString());
var finalBearing = geodesy.finalBearingBetweenTwoGeoPoints(l4, l5);
print('[finalBearingBetweenTwoGeoPoints] Bearing:' + finalBearing.toString());
var midpoint = geodesy.midPointBetweenTwoGeoPoints(l4, l5);
print('[midPointBetweenTwoGeoPoints] Midpoint Lat: ' +
midpoint.latitude.toString());
print('[midPointBetweenTwoGeoPoints] Midpoint Lng: ' +
midpoint.longitude.toString());
var inBoundingBox = geodesy.isGeoPointInBoundingBox(l3, l5, l4);
print('[isGeoPointInBoundingBox]: ' + inBoundingBox.toString());
num b1 = 108.547;
num b2 = 32.435;
var intersectionByPaths = geodesy.intersectionByPaths(l4, l5, b1, b2);
print(
'[intersectionByPaths] Lat: ' + intersectionByPaths!.latitude.toString());
print(
'[intersectionByPaths] Lng: ' + intersectionByPaths.longitude.toString());
var l6 = const LatLng(50.587, 1.231);
var distanceToGreatCircle = geodesy.crossTrackDistanceTo(l4, l5, l6);
print('[crossTrackDistanceTo] :' + distanceToGreatCircle.toString());
var poly = <LatLng>[
const LatLng(1.0, 1.0),
const LatLng(1.0, 2.0),
const LatLng(2.0, 2.0),
const LatLng(2.0, 1.0)
];
var l7 = const LatLng(1.5, 1.5);
var isGeoPointInPolygon = geodesy.isGeoPointInPolygon(l7, poly);
print('[isGeoPointInPolygon] :' + isGeoPointInPolygon.toString());
// Great-circle distance between two points using the Haversine formula
num latitude1 = 37.7749;
num longitude1 = -122.4194;
num latitude2 = 37.3382;
num longitude2 = -121.8863;
num greatCircleDistance = geodesy.greatCircleDistanceBetweenTwoGeoPoints(
latitude1, longitude1, latitude2, longitude2);
print(
'''[greatCircleDistance]: ${greatCircleDistance.toStringAsFixed(2)} km''');
// Polygon Coords
List<LatLng> polygonCoords = [
const LatLng(37.7749, -122.4194),
const LatLng(37.3382, -121.8863),
const LatLng(37.7749, -121.4194),
const LatLng(37.7749, -123.4194),
];
List<LatLng> rectangleBounds = geodesy.getRectangleBounds(polygonCoords);
print('[getRectangleBounds]: ');
for (LatLng coord in rectangleBounds) {
print(' > Latitude: ${coord.latitude}, Longitude: ${coord.longitude}');
}
// Calculate Bounding Box
// Example central position (San Francisco)
final centerPoint = const LatLng(37.7749, -122.4194);
// Example distance in kilometers
final distanceInKm = 1.0;
final boundingBox = geodesy.calculateBoundingBox(centerPoint, distanceInKm);
print('[calculateBoundingBox]: ');
print(' > Top Left: ${boundingBox[0]}');
print(' > Bottom Right: ${boundingBox[1]}');
}