Skip to content

Commit ec84818

Browse files
committed
【fix】修复某些投影的无法正确计算MeterPerMapUnit失败的问题
1 parent e5224fb commit ec84818

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed

src/common/util/MapCalculateUtil.js

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,21 @@ import { Unit } from '../REST';
2222
* ```
2323
*/
2424
export var getMeterPerMapUnit = function(mapUnit) {
25-
var earchRadiusInMeters = 6378137;
26-
var meterPerMapUnit;
27-
if (mapUnit === Unit.METER) {
28-
meterPerMapUnit = 1;
29-
} else if (mapUnit === Unit.DEGREE) {
30-
// 每度表示多少米。
31-
meterPerMapUnit = (Math.PI * 2 * earchRadiusInMeters) / 360;
32-
} else if (mapUnit === Unit.KILOMETER) {
33-
meterPerMapUnit = 1.0e-3;
34-
} else if (mapUnit === Unit.INCH) {
35-
meterPerMapUnit = 1 / 2.5399999918e-2;
36-
} else if (mapUnit === Unit.FOOT) {
37-
meterPerMapUnit = 0.3048;
38-
} else {
39-
return meterPerMapUnit;
40-
}
41-
return meterPerMapUnit;
25+
var earchRadiusInMeters = 6378137;
26+
var meterPerMapUnit;
27+
if (['m','meter','meters'].indexOf(mapUnit.toLocaleLowerCase())>-1) {
28+
meterPerMapUnit = 1;
29+
} else if (['degrees','deg','degree','dd'].indexOf(mapUnit.toLocaleLowerCase())>-1) {
30+
// 每度表示多少米。
31+
meterPerMapUnit = (Math.PI * 2 * earchRadiusInMeters) / 360;
32+
} else if (mapUnit === Unit.KILOMETER) {
33+
meterPerMapUnit = 1.0e-3;
34+
} else if (mapUnit === Unit.INCH) {
35+
meterPerMapUnit = 1 / 2.5399999918e-2;
36+
} else if (mapUnit === Unit.FOOT) {
37+
meterPerMapUnit = 0.3048;
38+
}
39+
return meterPerMapUnit;
4240
};
4341

4442
/**
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { getMeterPerMapUnit } from '../../../src/common/util/MapCalculateUtil';
2+
3+
describe('MapCalculateUtil', () => {
4+
it('getMeterPerMapUnit m', () => {
5+
expect(getMeterPerMapUnit('m')).toBe(1);
6+
expect(getMeterPerMapUnit('M')).toBe(1);
7+
expect(getMeterPerMapUnit('meter')).toBe(1);
8+
expect(getMeterPerMapUnit('meters')).toBe(1);
9+
expect(getMeterPerMapUnit('METER')).toBe(1);
10+
expect(getMeterPerMapUnit('METERS')).toBe(1);
11+
expect(getMeterPerMapUnit('METRE')).toBeUndefined()
12+
});
13+
it('getMeterPerMapUnit dge', () => {
14+
expect(getMeterPerMapUnit('degrees')).toBeCloseTo(111319.49079327358, 0.00001);;
15+
expect(getMeterPerMapUnit('deg')).toBeCloseTo(111319.49079327358, 0.00001);;
16+
expect(getMeterPerMapUnit('degree')).toBeCloseTo(111319.49079327358, 0.00001);;
17+
expect(getMeterPerMapUnit('dd')).toBeCloseTo(111319.49079327358, 0.00001);;
18+
expect(getMeterPerMapUnit('DEGREES')).toBeCloseTo(111319.49079327358, 0.00001);;
19+
expect(getMeterPerMapUnit('DEG')).toBeCloseTo(111319.49079327358, 0.00001);;
20+
expect(getMeterPerMapUnit('DEGREE')).toBeCloseTo(111319.49079327358, 0.00001);;
21+
expect(getMeterPerMapUnit('DD')).toBeCloseTo(111319.49079327358, 0.00001);;
22+
expect(getMeterPerMapUnit('degre')).toBeUndefined()
23+
});
24+
});

test/test-main-common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,4 @@ import './common/components/chart/ChartViewSpec';
216216

217217
import './common/util/FetchRequestSpec';
218218
import './common/lang/LangSpec.js';
219+
import './common/util/MapCalculateUtilSpec';

0 commit comments

Comments
 (0)