Check for resolution change and fix unrotated size

Calculate unrotated width and height from frame size and resolution
Check for changes in resolution as well as extent when rendered extent fits inside frame
This commit is contained in:
mike-000
2022-02-24 10:53:32 +00:00
committed by GitHub
parent 28c1874241
commit 69f8a824ec

View File

@@ -20,7 +20,6 @@ import {
containsExtent,
equals,
getCenter,
getHeight,
getIntersection,
getWidth,
intersects,
@@ -484,9 +483,16 @@ class Graticule extends VectorLayer {
/**
* @type {?import("../extent.js").Extent}
* @private
*/
this.renderedExtent_ = null;
/**
* @type {?number}
* @private
*/
this.renderedResolution_ = null;
this.setRenderOrder(null);
}
@@ -536,10 +542,15 @@ class Graticule extends VectorLayer {
];
const renderExtent = getIntersection(layerExtent, extent);
if (this.renderedExtent_ && equals(this.renderedExtent_, renderExtent)) {
if (
this.renderedExtent_ &&
equals(this.renderedExtent_, renderExtent) &&
this.renderedResolution_ === resolution
) {
return;
}
this.renderedExtent_ = renderExtent;
this.renderedResolution_ = resolution;
// bail out if nothing to render
if (isEmpty(renderExtent)) {
@@ -670,16 +681,14 @@ class Graticule extends VectorLayer {
*/
drawLabels_(event) {
const rotation = event.frameState.viewState.rotation;
const resolution = event.frameState.viewState.resolution;
const size = event.frameState.size;
const extent = event.frameState.extent;
const rotationCenter = getCenter(extent);
let rotationExtent = extent;
if (rotation) {
const width = getWidth(extent);
const height = getHeight(extent);
const cr = Math.abs(Math.cos(rotation));
const sr = Math.abs(Math.sin(rotation));
const unrotatedWidth = (sr * height - cr * width) / (sr * sr - cr * cr);
const unrotatedHeight = (sr * width - cr * height) / (sr * sr - cr * cr);
const unrotatedWidth = size[0] * resolution;
const unrotatedHeight = size[1] * resolution;
rotationExtent = [
rotationCenter[0] - unrotatedWidth / 2,
rotationCenter[1] - unrotatedHeight / 2,