Merge pull request #11811 from mike-000/patch-6
Better getPointResolution default when no transform available
This commit is contained in:
@@ -4,6 +4,7 @@ import Projection from '../src/ol/proj/Projection.js';
|
|||||||
import TileWMS from '../src/ol/source/TileWMS.js';
|
import TileWMS from '../src/ol/source/TileWMS.js';
|
||||||
import View from '../src/ol/View.js';
|
import View from '../src/ol/View.js';
|
||||||
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';
|
import {Image as ImageLayer, Tile as TileLayer} from '../src/ol/layer.js';
|
||||||
|
import {ScaleLine, defaults as defaultControls} from '../src/ol/control.js';
|
||||||
|
|
||||||
const layers = [
|
const layers = [
|
||||||
new TileLayer({
|
new TileLayer({
|
||||||
@@ -37,12 +38,18 @@ const layers = [
|
|||||||
// projection object. Requesting tiles only needs the code together with a
|
// projection object. Requesting tiles only needs the code together with a
|
||||||
// tile grid of Cartesian coordinates; it does not matter how those
|
// tile grid of Cartesian coordinates; it does not matter how those
|
||||||
// coordinates relate to latitude or longitude.
|
// coordinates relate to latitude or longitude.
|
||||||
|
//
|
||||||
|
// With no transforms available projection units must be assumed to represent
|
||||||
|
// true distances. In the case of local projections this may be a sufficiently
|
||||||
|
// close approximation for a meaningful (if not 100% accurate) ScaleLine control.
|
||||||
|
|
||||||
const projection = new Projection({
|
const projection = new Projection({
|
||||||
code: 'EPSG:21781',
|
code: 'EPSG:21781',
|
||||||
units: 'm',
|
units: 'm',
|
||||||
});
|
});
|
||||||
|
|
||||||
const map = new Map({
|
const map = new Map({
|
||||||
|
controls: defaultControls().extend([new ScaleLine()]),
|
||||||
layers: layers,
|
layers: layers,
|
||||||
target: 'map',
|
target: 'map',
|
||||||
view: new View({
|
view: new View({
|
||||||
|
|||||||
@@ -212,20 +212,25 @@ export function getPointResolution(projection, resolution, point, opt_units) {
|
|||||||
projection,
|
projection,
|
||||||
get('EPSG:4326')
|
get('EPSG:4326')
|
||||||
);
|
);
|
||||||
let vertices = [
|
if (toEPSG4326 === identityTransform && units !== Units.DEGREES) {
|
||||||
point[0] - resolution / 2,
|
// no transform is available
|
||||||
point[1],
|
pointResolution = resolution * projection.getMetersPerUnit();
|
||||||
point[0] + resolution / 2,
|
} else {
|
||||||
point[1],
|
let vertices = [
|
||||||
point[0],
|
point[0] - resolution / 2,
|
||||||
point[1] - resolution / 2,
|
point[1],
|
||||||
point[0],
|
point[0] + resolution / 2,
|
||||||
point[1] + resolution / 2,
|
point[1],
|
||||||
];
|
point[0],
|
||||||
vertices = toEPSG4326(vertices, vertices, 2);
|
point[1] - resolution / 2,
|
||||||
const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));
|
point[0],
|
||||||
const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));
|
point[1] + resolution / 2,
|
||||||
pointResolution = (width + height) / 2;
|
];
|
||||||
|
vertices = toEPSG4326(vertices, vertices, 2);
|
||||||
|
const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));
|
||||||
|
const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));
|
||||||
|
pointResolution = (width + height) / 2;
|
||||||
|
}
|
||||||
const metersPerUnit = opt_units
|
const metersPerUnit = opt_units
|
||||||
? METERS_PER_UNIT[opt_units]
|
? METERS_PER_UNIT[opt_units]
|
||||||
: projection.getMetersPerUnit();
|
: projection.getMetersPerUnit();
|
||||||
|
|||||||
@@ -410,6 +410,16 @@ describe('ol.proj', function () {
|
|||||||
);
|
);
|
||||||
expect(pointResolution).to.be(1);
|
expect(pointResolution).to.be(1);
|
||||||
});
|
});
|
||||||
|
it('returns the nominal resolution for projections without transforms', function () {
|
||||||
|
const projection = new Projection({
|
||||||
|
code: 'foo',
|
||||||
|
units: 'ft',
|
||||||
|
});
|
||||||
|
let pointResolution = getPointResolution(projection, 2, [0, 0]);
|
||||||
|
expect(pointResolution).to.be(2);
|
||||||
|
pointResolution = getPointResolution(projection, 2, [0, 0], 'm');
|
||||||
|
expect(pointResolution).to.be(0.6096);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Proj4js integration', function () {
|
describe('Proj4js integration', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user