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