Skip to content

Commit

Permalink
refactor(geobase): unit types to singluar form #264
Browse files Browse the repository at this point in the history
  • Loading branch information
navispatial committed Feb 2, 2025
1 parent 4033441 commit 1fcc912
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 90 deletions.
28 changes: 15 additions & 13 deletions dart/geobase/lib/src/common/conversions/angle_unit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,48 @@ import 'dart:math';
/// ```dart
/// /// Convert directly from and to radians.
/// final radians = 3.14159; // ~pi
/// final degreesUnit = AngleUnit.degrees;
/// final degrees = degreesUnit.fromRadians(radians); // ~180.0
/// final radians2 = degreesUnit.toRadians(degrees); // ~3.14159
/// final degrees = AngleUnit.degree.fromRadians(radians); // ~180.0
/// final radians2 = AngleUnit.degree.toRadians(degrees); // ~3.14159
///
/// /// You can also convert between units without using radians.
/// final gradians = degreesUnit.toUnits(degrees, AngleUnit.gradians); // ~200.0
/// final gradians =
/// AngleUnit.degree.toUnit(degrees, AngleUnit.gradian); // ~200.0
/// ```
///
/// See also [Angle](https://en.wikipedia.org/wiki/Angle) in Wikipedia.
enum AngleUnit {
/// 1 milliradian is equal to 0.001 radians.
milliradians(0.001, 'mrad'),
milliradian(0.001, 'mrad'),

/// The SI base unit for angles.
///
/// 1 radian is approximately 57.296 degrees.
radians(1.0, 'rad'),
radian(1.0, 'rad'),

/// 1 arc second is equal to π / (180 * 60 * 60) radians.
///
/// 1 degree contains 60 * 60 = 3600 arc seconds.
arcSeconds(pi / (180 * 60 * 60), 'arcsec'),
arcSecond(pi / (180 * 60 * 60), 'arcsec'),

/// 1 arc minute is equal to π / (180 * 60) radians.
///
/// 1 degree contains 60 arc minutes.
arcMinutes(pi / (180 * 60), 'arcmin'),
arcMinute(pi / (180 * 60), 'arcmin'),

/// 1 degree is equal to π / 180 radians.
///
/// 1 degree is 1/360 of a full circle.
degrees(pi / 180, 'deg'),
degree(pi / 180, 'deg'),

/// 1 gradian is equal to π / 200 radians.
///
/// 1 gradian is 1/400 of a full circle.
gradians(pi / 200, 'gon'),
gradian(pi / 200, 'gon'),

/// 1 turn is equal to 2π radians.
///
/// 1 turn is a full circle.
turns(2 * pi, 'turn');
turn(2 * pi, 'turn');

/// The conversion factor to radians.
final double factorToRadians;
Expand All @@ -75,13 +77,13 @@ enum AngleUnit {
}

/// Convert a value from this unit to another unit.
double toUnits(double value, AngleUnit targetUnit) {
double toUnit(double value, AngleUnit targetUnit) {
final valueInRadians = toRadians(value);
return targetUnit.fromRadians(valueInRadians);
}

/// Convert a value from another unit to this unit.
double fromUnits(double value, AngleUnit sourceUnit) {
double fromUnit(double value, AngleUnit sourceUnit) {
final valueInRadians = sourceUnit.toRadians(value);
return fromRadians(valueInRadians);
}
Expand Down
30 changes: 16 additions & 14 deletions dart/geobase/lib/src/common/conversions/area_unit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,45 @@
/// ```dart
/// /// Convert directly from and to square meters.
/// final squareMeters = 10000.0;
/// final sqKmUnit = AreaUnit.squareKilometers;
/// final sqKmUnit = AreaUnit.squareKilometer;
/// final squareKilometers = sqKmUnit.fromSquareMeters(squareMeters); // 0.01
/// final squareMeters2 = sqKmUnit.toSquareMeters(squareKilometers); // 10000.0
///
/// /// You can also convert between units without using square meters.
/// final acres = sqKmUnit.toUnits(squareKilometers, AreaUnit.acres); // ~2.4711
/// final acres = sqKmUnit.toUnit(squareKilometers, AreaUnit.acre); // ~2.4711
/// ```
///
/// See also [Area](https://en.wikipedia.org/wiki/Area) in Wikipedia.
enum AreaUnit {
/// 1 square millimeter is equal to 1e-6 square meters.
squareMillimeters(1e-6, 'mm²'),
squareMillimeter(1e-6, 'mm²'),

/// 1 square centimeter is equal to 1e-4 square meters.
squareCentimeters(1e-4, 'cm²'),
squareCentimeter(1e-4, 'cm²'),

/// The SI base unit for area.
squareMeters(1.0, 'm²'),
squareMeter(1.0, 'm²'),

/// 1 square kilometer is equal to 1e+6 square meters.
squareKilometers(1e6, 'km²'),
squareKilometer(1e6, 'km²'),

/// 1 square inch is equal to 0.00064516 square meters.
squareInches(0.00064516, 'in²'),
squareInch(0.00064516, 'in²'),

/// 1 square foot is equal to 0.09290304 square meters.
squareFeet(0.09290304, 'ft²'),
squareFoot(0.09290304, 'ft²'),

/// 1 square yard is equal to 0.83612736 square meters.
squareYards(0.83612736, 'yd²'),
squareYard(0.83612736, 'yd²'),

/// 1 square mile is equal to 2589988.11 square meters.
squareMiles(2589988.11, 'mi²'),
squareMile(2589988.11, 'mi²'),

/// 1 acre is equal to 4046.8564224 square meters.
acres(4046.8564224, 'ac'),
acre(4046.8564224, 'ac'),

/// 1 hectare is equal to 10000 square meters.
hectares(10000.0, 'ha');
hectare(10000.0, 'ha');

/// The conversion factor to square meters.
final double factorToSquareMeters;
Expand All @@ -70,13 +72,13 @@ enum AreaUnit {
}

/// Convert a value from this unit to another unit.
double toUnits(double value, AreaUnit targetUnit) {
double toUnit(double value, AreaUnit targetUnit) {
final valueInSquareMeters = toSquareMeters(value);
return targetUnit.fromSquareMeters(valueInSquareMeters);
}

/// Convert a value from another unit to this unit.
double fromUnits(double value, AreaUnit sourceUnit) {
double fromUnit(double value, AreaUnit sourceUnit) {
final valueInSquareMeters = sourceUnit.toSquareMeters(value);
return fromSquareMeters(valueInSquareMeters);
}
Expand Down
32 changes: 18 additions & 14 deletions dart/geobase/lib/src/common/conversions/distance_unit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,47 @@
/// ```dart
/// /// Convert directly from and to meters.
/// final meters = 4000.0;
/// final kmUnit = DistanceUnit.kilometers;
/// final kmUnit = DistanceUnit.kilometer;
/// final kilometers = kmUnit.fromMeters(meters); // 4.0
/// final meters2 = kmUnit.toMeters(kilometers); // 4000.0
///
/// /// You can also convert between units wihout using meters.
/// final miles = kmUnit.toUnits(kilometers, DistanceUnit.miles); // ~ 2.485484
/// final miles = kmUnit.toUnit(kilometers, DistanceUnit.mile); // ~ 2.485484
/// ```dart
///
/// See also [Unit of length](https://en.wikipedia.org/wiki/Unit_of_length) and
/// [Orders of magnitude (length)](https://en.wikipedia.org/wiki/Orders_of_magnitude_(length))
/// in Wikipedia.
enum DistanceUnit {
/// 1 millimeter is equal to 0.001 meters.
millimeters(0.001, 'mm'),
millimeter(0.001, 'mm'),

/// 1 centimeter is equal to 0.01 meters.
centimeters(0.01, 'cm'),
centimeter(0.01, 'cm'),

/// The SI base unit for distance .
meters(1.0, 'm'),
/// The SI base unit for distance.
meter(1.0, 'm'),

/// 1 kilometer is equal to 1000 meters.
kilometers(1000.0, 'km'),
kilometer(1000.0, 'km'),

/// 1 inch is equal to 0.0254 meters.
inches(0.0254, 'in'),
inch(0.0254, 'in'),

/// 1 foot is equal to 0.3048 meters.
feet(0.3048, 'ft'),
foot(0.3048, 'ft'),

/// 1 yard is equal to 0.9144 meters.
yards(0.9144, 'yd'),
yard(0.9144, 'yd'),

/// 1 mile is equal to 1609.344 meters.
miles(1609.344, 'mi'),
mile(1609.344, 'mi'),

/// 1 nautical mile is equal to 1852 meters.
///
/// Official unit symbols for nautical miles are "NM", "nmi" or "M" depending
/// on the context ([Wikipedia](https://en.wikipedia.org/wiki/Nautical_mile)).
nauticalMiles(1852.0, 'nmi');
nauticalMile(1852.0, 'nmi');

/// The conversion factor to meters.
final double factorToMeters;
Expand All @@ -70,13 +74,13 @@ enum DistanceUnit {
}

/// Convert a value from this unit to another unit.
double toUnits(double value, DistanceUnit targetUnit) {
double toUnit(double value, DistanceUnit targetUnit) {
final valueInMeters = toMeters(value);
return targetUnit.fromMeters(valueInMeters);
}

/// Convert a value from another unit to this unit.
double fromUnits(double value, DistanceUnit sourceUnit) {
double fromUnit(double value, DistanceUnit sourceUnit) {
final valueInMeters = sourceUnit.toMeters(value);
return fromMeters(valueInMeters);
}
Expand Down
Loading

0 comments on commit 1fcc912

Please sign in to comment.