Skip to content

Commit 1d6c852

Browse files
committed
function to only set elevation if center point is below horizon
1 parent 3f21cd0 commit 1d6c852

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

src/geo/projection/globe_transform.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ export class GlobeTransform implements ITransform {
111111
setMinElevationForCurrentTile(elevation: number): void {
112112
this._helper.setMinElevationForCurrentTile(elevation);
113113
}
114+
setElevationIfCenterPointBelowHorizon(elevation: number): void {
115+
this._helper.setElevationIfCenterPointBelowHorizon(elevation);
116+
}
114117
setPadding(padding: PaddingOptions): void {
115118
this._helper.setPadding(padding);
116119
}

src/geo/projection/mercator_transform.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ export class MercatorTransform implements ITransform {
8686
setMinElevationForCurrentTile(elevation: number): void {
8787
this._helper.setMinElevationForCurrentTile(elevation);
8888
}
89+
setElevationIfCenterPointBelowHorizon(elevation: number): void {
90+
this._helper.setElevationIfCenterPointBelowHorizon(elevation);
91+
}
8992
setPadding(padding: PaddingOptions): void {
9093
this._helper.setPadding(padding);
9194
}

src/geo/transform_helper.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,12 @@ export class TransformHelper implements ITransformGetters {
190190
this._minElevationForCurrentTile = ele;
191191
}
192192

193+
setElevationIfCenterPointBelowHorizon(elevation: number): void {
194+
if (this.pitch <= 89.0) {
195+
this.setElevation(elevation);
196+
}
197+
}
198+
193199
get tileSize(): number { return this._tileSize; }
194200
get tileZoom(): number { return this._tileZoom; }
195201
get scale(): number { return this._scale; }

src/geo/transform_interface.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@ interface ITransformMutators {
177177
setCenter(center: LngLat): void;
178178
setElevation(elevation: number): void;
179179
setMinElevationForCurrentTile(elevation: number): void;
180+
181+
/**
182+
* Sets the transform's center elevation above sea level, in meters.
183+
* Only takes effect if the current center point is below the horizon.
184+
* If the current center point is above the horizon, setting the elevation to ground level will cause
185+
* the camera to move belo the map.
186+
*/
187+
setElevationIfCenterPointBelowHorizon(elevation: number): void;
188+
180189
setPadding(padding: PaddingOptions): void;
181190

182191
/**

src/ui/map.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,9 +2031,7 @@ export class Map extends Camera {
20312031
if (this.painter.renderToTexture) this.painter.renderToTexture.destruct();
20322032
this.painter.renderToTexture = null;
20332033
this.transform.setMinElevationForCurrentTile(0);
2034-
if (this.transform.pitch <= 89) {
2035-
this.transform.setElevation(0);
2036-
}
2034+
this.transform.setElevationIfCenterPointBelowHorizon(0);
20372035
} else {
20382036
// add terrain
20392037
const sourceCache = this.style.sourceCaches[options.source];
@@ -2057,9 +2055,7 @@ export class Map extends Camera {
20572055
} else if (e.dataType === 'source' && e.tile) {
20582056
if (e.sourceId === options.source && !this._elevationFreeze) {
20592057
this.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
2060-
if (this.transform.pitch <= 89) {
2061-
this.transform.setElevation(this.terrain.getElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
2062-
}
2058+
this.transform.setElevationIfCenterPointBelowHorizon(this.terrain.getElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
20632059
}
20642060
this.terrain.sourceCache.freeRtt(e.tile.tileID);
20652061
}
@@ -3205,14 +3201,12 @@ export class Map extends Camera {
32053201
if (this.terrain) {
32063202
this.terrain.sourceCache.update(this.transform, this.terrain);
32073203
this.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
3208-
if (!this._elevationFreeze && this.transform.pitch <= 89) {
3209-
this.transform.setElevation(this.terrain.getElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
3204+
if (!this._elevationFreeze) {
3205+
this.transform.setElevationIfCenterPointBelowHorizon(this.terrain.getElevationForLngLatZoom(this.transform.center, this.transform.tileZoom));
32103206
}
32113207
} else {
32123208
this.transform.setMinElevationForCurrentTile(0);
3213-
if (this.transform.pitch <= 89) {
3214-
this.transform.setElevation(0);
3215-
}
3209+
this.transform.setElevationIfCenterPointBelowHorizon(0);
32163210
}
32173211

32183212
this._placementDirty = this.style && this.style._updatePlacement(this.transform, this.showCollisionBoxes, fadeDuration, this._crossSourceCollisions, transformUpdateResult.forcePlacementUpdate);

0 commit comments

Comments
 (0)