kopia lustrzana https://github.com/OpenDroneMap/WebODM
Add US imperial
rodzic
ece6bba200
commit
adf9c7dc5f
|
@ -2,15 +2,25 @@ import { _ } from './gettext';
|
|||
|
||||
const units = {
|
||||
acres: {
|
||||
factor: 1 / 4046.85642,
|
||||
abbr: 'ac',
|
||||
factor: (1 / (0.3048 * 0.3048)) / 43560,
|
||||
abbr: 'ac',
|
||||
round: 5
|
||||
},
|
||||
acres_us: {
|
||||
factor: Math.pow(3937 / 1200, 2) / 43560,
|
||||
abbr: 'ac (US)',
|
||||
round: 5
|
||||
},
|
||||
feet: {
|
||||
factor: 3.28084,
|
||||
factor: 1 / 0.3048,
|
||||
abbr: 'ft',
|
||||
round: 4
|
||||
},
|
||||
feet_us:{
|
||||
factor: 3937 / 1200,
|
||||
abbr: 'ft (US)',
|
||||
round: 4
|
||||
},
|
||||
hectares: {
|
||||
factor: 0.0001,
|
||||
abbr: 'ha',
|
||||
|
@ -32,15 +42,25 @@ const units = {
|
|||
round: 1
|
||||
},
|
||||
miles: {
|
||||
factor: 3.28084 / 5280,
|
||||
abbr: 'mi',
|
||||
round: 5
|
||||
factor: (1 / 0.3048) / 5280,
|
||||
abbr: 'mi',
|
||||
round: 5
|
||||
},
|
||||
miles_us: {
|
||||
factor: (3937 / 1200) / 5280,
|
||||
abbr: 'mi (US)',
|
||||
round: 5
|
||||
},
|
||||
sqfeet: {
|
||||
factor: 1 / 0.09290304,
|
||||
factor: 1 / (0.3048 * 0.3048),
|
||||
abbr: 'ft²',
|
||||
round: 2
|
||||
},
|
||||
sqfeet_us: {
|
||||
factor: Math.pow(3937 / 1200, 2),
|
||||
abbr: 'ft² (US)',
|
||||
round: 2
|
||||
},
|
||||
sqmeters: {
|
||||
factor: 1,
|
||||
abbr: 'm²',
|
||||
|
@ -52,9 +72,14 @@ const units = {
|
|||
round: 5
|
||||
},
|
||||
sqmiles: {
|
||||
factor: 0.000000386102,
|
||||
factor: Math.pow((1 / 0.3048) / 5280, 2),
|
||||
abbr: 'mi²',
|
||||
round: 5
|
||||
},
|
||||
sqmiles_us: {
|
||||
factor: Math.pow((3937 / 1200) / 5280, 2),
|
||||
abbr: 'mi² (US)',
|
||||
round: 5
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -117,24 +142,71 @@ class ImperialSystem extends UnitSystem{
|
|||
getName(){
|
||||
return _("Imperial");
|
||||
}
|
||||
|
||||
feet(){
|
||||
return units.feet;
|
||||
}
|
||||
|
||||
sqfeet(){
|
||||
return units.sqfeet;
|
||||
}
|
||||
|
||||
miles(){
|
||||
return units.miles;
|
||||
}
|
||||
|
||||
sqmiles(){
|
||||
return units.sqmiles;
|
||||
}
|
||||
|
||||
acres(){
|
||||
return units.acres;
|
||||
}
|
||||
|
||||
lengthUnit(meters){
|
||||
const feet = units.feet.factor * meters;
|
||||
if (feet >= 5280) return units.miles;
|
||||
else return units.feet;
|
||||
const feet = this.feet().factor * meters;
|
||||
if (feet >= 5280) return this.miles();
|
||||
else return this.feet();
|
||||
}
|
||||
|
||||
areaUnit(sqmeters){
|
||||
const sqfeet = units.sqfeet.factor * sqmeters;
|
||||
if (sqfeet >= 43560 && sqfeet < 27878400) return units.acres;
|
||||
else if (sqfeet >= 27878400) return units.sqmiles;
|
||||
else return units.sqfeet;
|
||||
const sqfeet = this.sqfeet().factor * sqmeters;
|
||||
if (sqfeet >= 43560 && sqfeet < 27878400) return this.acres();
|
||||
else if (sqfeet >= 27878400) return this.sqmiles();
|
||||
else return this.sqfeet();
|
||||
}
|
||||
}
|
||||
|
||||
class ImperialUSSystem extends ImperialSystem{
|
||||
getName(){
|
||||
return _("Imperial (US)");
|
||||
}
|
||||
|
||||
feet(){
|
||||
return units.feet_us;
|
||||
}
|
||||
|
||||
sqfeet(){
|
||||
return units.sqfeet_us;
|
||||
}
|
||||
|
||||
miles(){
|
||||
return units.miles_us;
|
||||
}
|
||||
|
||||
sqmiles(){
|
||||
return units.sqmiles_us;
|
||||
}
|
||||
|
||||
acres(){
|
||||
return units.acres_us;
|
||||
}
|
||||
}
|
||||
|
||||
const systems = {
|
||||
metric: new MetricSystem(),
|
||||
imperial: new ImperialSystem()
|
||||
imperial: new ImperialSystem(),
|
||||
imperialUS: new ImperialUSSystem()
|
||||
}
|
||||
|
||||
// Expose to allow every part of the app to access this information
|
||||
|
|
|
@ -41,34 +41,38 @@ describe('Metric system', () => {
|
|||
})
|
||||
});
|
||||
|
||||
describe('Imperial system', () => {
|
||||
describe('Imperial systems', () => {
|
||||
it('it should display units properly', () => {
|
||||
|
||||
const { imperial } = systems;
|
||||
const { imperial, imperialUS } = systems;
|
||||
|
||||
const lengths = [
|
||||
[1, "3.2808 ft"],
|
||||
[0.01, "0.0328 ft"],
|
||||
[0.0154, "0.0505 ft"],
|
||||
[1609, "5,278.8716 ft"],
|
||||
[1609.344, "1 mi"],
|
||||
[3218.69, "2 mi"]
|
||||
[1, "3.2808 ft", "3.2808 ft (US)"],
|
||||
[0.01, "0.0328 ft", "0.0328 ft (US)"],
|
||||
[0.0154, "0.0505 ft", "0.0505 ft (US)"],
|
||||
[1609, "5,278.8714 ft", "5,278.8608 ft (US)"],
|
||||
[1609.344, "1 mi", "5,279.9894 ft (US)"],
|
||||
[1609.3472187, "1 mi", "1 mi (US)"],
|
||||
[3218.69, "2 mi", "2 mi (US)"]
|
||||
];
|
||||
|
||||
lengths.forEach(l => {
|
||||
expect(imperial.length(l[0]).toString()).toBe(l[1]);
|
||||
expect(imperial.length(l[0]).toString()).toBe(l[1]);
|
||||
expect(imperialUS.length(l[0]).toString()).toBe(l[2]);
|
||||
});
|
||||
|
||||
const areas = [
|
||||
[1, "10.76 ft²"],
|
||||
[9999, "2.47081 ac"],
|
||||
[4046.86, "1 ac"],
|
||||
[2587398.1, "639.35999 ac"],
|
||||
[2.59e+6, "1 mi²"]
|
||||
[1, "10.76 ft²", "10.76 ft² (US)"],
|
||||
[9999, "2.47081 ac", "2.4708 ac (US)"],
|
||||
[4046.86, "1 ac", "43,559.86 ft² (US)"],
|
||||
[4046.87261, "1 ac", "1 ac (US)"],
|
||||
[2587398.1, "639.35999 ac", "639.35744 ac (US)"],
|
||||
[2.59e+6, "1 mi²", "1 mi² (US)"]
|
||||
];
|
||||
|
||||
areas.forEach(a => {
|
||||
expect(imperial.area(a[0]).toString()).toBe(a[1]);
|
||||
expect(imperial.area(a[0]).toString()).toBe(a[1]);
|
||||
expect(imperialUS.area(a[0]).toString()).toBe(a[2]);
|
||||
});
|
||||
})
|
||||
});
|
Ładowanie…
Reference in New Issue