rename some variables and add comments
This commit is contained in:
+58
-28
@@ -218,25 +218,25 @@ class Graticule extends VectorLayer {
|
|||||||
* @type {number}
|
* @type {number}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.maxLatP_ = Infinity;
|
this.maxX_ = Infinity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.maxLonP_ = Infinity;
|
this.maxY_ = Infinity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.minLatP_ = -Infinity;
|
this.minX_ = -Infinity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.minLonP_ = -Infinity;
|
this.minY_ = -Infinity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
@@ -290,25 +290,25 @@ class Graticule extends VectorLayer {
|
|||||||
* @type {import("../coordinate.js").Coordinate}
|
* @type {import("../coordinate.js").Coordinate}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.blLonLatP_ = null;
|
this.bottomLeft_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {import("../coordinate.js").Coordinate}
|
* @type {import("../coordinate.js").Coordinate}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.brLonLatP_ = null;
|
this.bottomRight_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {import("../coordinate.js").Coordinate}
|
* @type {import("../coordinate.js").Coordinate}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.tlLonLatP_ = null;
|
this.topLeft_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {import("../coordinate.js").Coordinate}
|
* @type {import("../coordinate.js").Coordinate}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.trLonLatP_ = null;
|
this.topRight_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {Array<GraticuleLabelDataType>}
|
* @type {Array<GraticuleLabelDataType>}
|
||||||
@@ -698,12 +698,18 @@ class Graticule extends VectorLayer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const validCenter = [
|
// Constrain the center to fit into the extent available to the graticule
|
||||||
clamp(center[0], this.minLonP_, this.maxLonP_),
|
|
||||||
clamp(center[1], this.minLatP_, this.maxLatP_)
|
const validCenterP = [
|
||||||
|
clamp(center[0], this.minX_, this.maxX_),
|
||||||
|
clamp(center[1], this.minY_, this.maxY_)
|
||||||
];
|
];
|
||||||
|
|
||||||
const centerLonLat = this.toLonLatTransform_(validCenter);
|
// Transform the center to lon lat
|
||||||
|
// Some projections may have a void area at the poles
|
||||||
|
// so replace any NaN latitudes with the min or max value closest to a pole
|
||||||
|
|
||||||
|
const centerLonLat = this.toLonLatTransform_(validCenterP);
|
||||||
if (isNaN(centerLonLat[1])) {
|
if (isNaN(centerLonLat[1])) {
|
||||||
centerLonLat[1] = Math.abs(this.maxLat_) >= Math.abs(this.minLat_) ?
|
centerLonLat[1] = Math.abs(this.maxLat_) >= Math.abs(this.minLat_) ?
|
||||||
this.maxLat_ : this.minLat_;
|
this.maxLat_ : this.minLat_;
|
||||||
@@ -713,32 +719,42 @@ class Graticule extends VectorLayer {
|
|||||||
const maxLines = this.maxLines_;
|
const maxLines = this.maxLines_;
|
||||||
let cnt, idx, lat, lon;
|
let cnt, idx, lat, lon;
|
||||||
|
|
||||||
|
// Limit the extent to fit into the extent available to the graticule
|
||||||
|
|
||||||
const validExtentP = [
|
const validExtentP = [
|
||||||
clamp(extent[0], this.minLonP_, this.maxLonP_),
|
clamp(extent[0], this.minX_, this.maxX_),
|
||||||
clamp(extent[1], this.minLatP_, this.maxLatP_),
|
clamp(extent[1], this.minY_, this.maxY_),
|
||||||
clamp(extent[2], this.minLonP_, this.maxLonP_),
|
clamp(extent[2], this.minX_, this.maxX_),
|
||||||
clamp(extent[3], this.minLatP_, this.maxLatP_)
|
clamp(extent[3], this.minY_, this.maxY_)
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Transform the extent to get the lon lat ranges for the edges of the extent
|
||||||
|
|
||||||
const validExtent = applyTransform(validExtentP, this.toLonLatTransform_, undefined, 8);
|
const validExtent = applyTransform(validExtentP, this.toLonLatTransform_, undefined, 8);
|
||||||
|
|
||||||
if (containsCoordinate(validExtentP, this.blLonLatP_)) {
|
// Check if extremities of the world extent lie inside the extent
|
||||||
|
// (for example the pole in a polar projection)
|
||||||
|
// and extend the extent as appropriate
|
||||||
|
|
||||||
|
if (containsCoordinate(validExtentP, this.bottomLeft_)) {
|
||||||
validExtent[0] = this.minLon_;
|
validExtent[0] = this.minLon_;
|
||||||
validExtent[1] = this.minLat_;
|
validExtent[1] = this.minLat_;
|
||||||
}
|
}
|
||||||
if (containsCoordinate(validExtentP, this.brLonLatP_)) {
|
if (containsCoordinate(validExtentP, this.bottomRight_)) {
|
||||||
validExtent[2] = this.maxLon_;
|
validExtent[2] = this.maxLon_;
|
||||||
validExtent[1] = this.minLat_;
|
validExtent[1] = this.minLat_;
|
||||||
}
|
}
|
||||||
if (containsCoordinate(validExtentP, this.tlLonLatP_)) {
|
if (containsCoordinate(validExtentP, this.topLeft_)) {
|
||||||
validExtent[0] = this.minLon_;
|
validExtent[0] = this.minLon_;
|
||||||
validExtent[3] = this.maxLat_;
|
validExtent[3] = this.maxLat_;
|
||||||
}
|
}
|
||||||
if (containsCoordinate(validExtentP, this.trLonLatP_)) {
|
if (containsCoordinate(validExtentP, this.topRight_)) {
|
||||||
validExtent[2] = this.maxLon_;
|
validExtent[2] = this.maxLon_;
|
||||||
validExtent[3] = this.maxLat_;
|
validExtent[3] = this.maxLat_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The transformed center may also extend the lon lat ranges used for rendering
|
||||||
|
|
||||||
const maxLat = clamp(validExtent[3], centerLat, this.maxLat_);
|
const maxLat = clamp(validExtent[3], centerLat, this.maxLat_);
|
||||||
const maxLon = clamp(validExtent[2], centerLon, this.maxLon_);
|
const maxLon = clamp(validExtent[2], centerLon, this.maxLon_);
|
||||||
const minLat = clamp(validExtent[1], this.minLat_, centerLat);
|
const minLat = clamp(validExtent[1], this.minLat_, centerLat);
|
||||||
@@ -814,6 +830,7 @@ class Graticule extends VectorLayer {
|
|||||||
const p2 = [];
|
const p2 = [];
|
||||||
for (let i = 0, ii = this.intervals_.length; i < ii; ++i) {
|
for (let i = 0, ii = this.intervals_.length; i < ii; ++i) {
|
||||||
const delta = clamp(this.intervals_[i] / 2, 0, 90);
|
const delta = clamp(this.intervals_[i] / 2, 0, 90);
|
||||||
|
// Don't attempt to transform latitudes beyond the poles!
|
||||||
const clampedLat = clamp(centerLat, -90 + delta, 90 - delta);
|
const clampedLat = clamp(centerLat, -90 + delta, 90 - delta);
|
||||||
p1[0] = centerLon - delta;
|
p1[0] = centerLon - delta;
|
||||||
p1[1] = clampedLat - delta;
|
p1[1] = clampedLat - delta;
|
||||||
@@ -964,6 +981,9 @@ class Graticule extends VectorLayer {
|
|||||||
this.minLat_ = worldExtent[1];
|
this.minLat_ = worldExtent[1];
|
||||||
this.minLon_ = worldExtent[0];
|
this.minLon_ = worldExtent[0];
|
||||||
|
|
||||||
|
// If the world extent crosses the dateline define a custom transform to
|
||||||
|
// return longitudes which wrap the dateline
|
||||||
|
|
||||||
const toLonLatTransform = getTransform(projection, epsg4326Projection);
|
const toLonLatTransform = getTransform(projection, epsg4326Projection);
|
||||||
if (this.minLon_ < this.maxLon_) {
|
if (this.minLon_ < this.maxLon_) {
|
||||||
this.toLonLatTransform_ = toLonLatTransform;
|
this.toLonLatTransform_ = toLonLatTransform;
|
||||||
@@ -982,6 +1002,9 @@ class Graticule extends VectorLayer {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Transform the extent to get the limits of the view projection extent
|
||||||
|
// which should be available to the graticule
|
||||||
|
|
||||||
this.fromLonLatTransform_ = getTransform(epsg4326Projection, projection);
|
this.fromLonLatTransform_ = getTransform(epsg4326Projection, projection);
|
||||||
const worldExtentP = applyTransform(
|
const worldExtentP = applyTransform(
|
||||||
[this.minLon_, this.minLat_, this.maxLon_, this.maxLat_],
|
[this.minLon_, this.minLat_, this.maxLon_, this.maxLat_],
|
||||||
@@ -990,15 +1013,22 @@ class Graticule extends VectorLayer {
|
|||||||
8
|
8
|
||||||
);
|
);
|
||||||
|
|
||||||
this.maxLatP_ = worldExtentP[3];
|
this.minX_ = worldExtentP[0];
|
||||||
this.maxLonP_ = worldExtentP[2];
|
this.maxX_ = worldExtentP[2];
|
||||||
this.minLatP_ = worldExtentP[1];
|
this.minY_ = worldExtentP[1];
|
||||||
this.minLonP_ = worldExtentP[0];
|
this.maxY_ = worldExtentP[3];
|
||||||
|
|
||||||
this.blLonLatP_ = this.fromLonLatTransform_([this.minLon_, this.minLat_]);
|
// Determine the view projection coordinates of the extremities of the world extent
|
||||||
this.brLonLatP_ = this.fromLonLatTransform_([this.maxLon_, this.minLat_]);
|
// as these may lie inside a view extent (for example the pole in a polar projection)
|
||||||
this.tlLonLatP_ = this.fromLonLatTransform_([this.minLon_, this.maxLat_]);
|
|
||||||
this.trLonLatP_ = this.fromLonLatTransform_([this.maxLon_, this.maxLat_]);
|
this.bottomLeft_ = this.fromLonLatTransform_([this.minLon_, this.minLat_]);
|
||||||
|
this.bottomRight_ = this.fromLonLatTransform_([this.maxLon_, this.minLat_]);
|
||||||
|
this.topLeft_ = this.fromLonLatTransform_([this.minLon_, this.maxLat_]);
|
||||||
|
this.topRight_ = this.fromLonLatTransform_([this.maxLon_, this.maxLat_]);
|
||||||
|
|
||||||
|
// Transform the projection center to lon lat
|
||||||
|
// Some projections may have a void area at the poles
|
||||||
|
// so replace any NaN latitudes with the min or max value closest to a pole
|
||||||
|
|
||||||
this.projectionCenterLonLat_ = this.toLonLatTransform_(getCenter(projection.getExtent()));
|
this.projectionCenterLonLat_ = this.toLonLatTransform_(getCenter(projection.getExtent()));
|
||||||
if (isNaN(this.projectionCenterLonLat_[1])) {
|
if (isNaN(this.projectionCenterLonLat_[1])) {
|
||||||
|
|||||||
Reference in New Issue
Block a user