updates to not depend on closure library; improvements on styles for KML placemarks
This commit is contained in:
+44
-34
@@ -220,6 +220,13 @@ ol.format.KML.createStyleDefaults_ = function() {
|
|||||||
src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_
|
src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {string}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.format.KML.DEFAULT_NO_IMAGE_STYLE_ = 'NO_IMAGE';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {ol.style.Stroke}
|
* @type {ol.style.Stroke}
|
||||||
@@ -305,10 +312,8 @@ ol.format.KML.createNameStyleFunction_ = function(foundStyle, name) {
|
|||||||
var imageScale = foundStyle.getImage().getScale();
|
var imageScale = foundStyle.getImage().getScale();
|
||||||
if (isNaN(imageScale)) {
|
if (isNaN(imageScale)) {
|
||||||
imageScale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
imageScale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
||||||
} else {
|
|
||||||
imageScale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_ * imageScale;
|
|
||||||
}
|
}
|
||||||
if (imageSize && imageSize.length == 2) {
|
if (imageSize.length == 2) {
|
||||||
// Offset the label to be centered to the right of the icon, if there is
|
// Offset the label to be centered to the right of the icon, if there is
|
||||||
// one.
|
// one.
|
||||||
textOffset[0] = imageScale * imageSize[0] / 2;
|
textOffset[0] = imageScale * imageSize[0] / 2;
|
||||||
@@ -531,12 +536,7 @@ ol.format.KML.readVec2_ = function(node) {
|
|||||||
* @return {number|undefined} Scale.
|
* @return {number|undefined} Scale.
|
||||||
*/
|
*/
|
||||||
ol.format.KML.readScale_ = function(node) {
|
ol.format.KML.readScale_ = function(node) {
|
||||||
var number = ol.format.XSD.readDecimal(node);
|
return ol.format.XSD.readDecimal(node);
|
||||||
if (number !== undefined) {
|
|
||||||
return Math.sqrt(number);
|
|
||||||
} else {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -575,12 +575,13 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
|||||||
}
|
}
|
||||||
var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||||
var IconObject = 'Icon' in object ? object['Icon'] : {};
|
var IconObject = 'Icon' in object ? object['Icon'] : {};
|
||||||
|
var drawIcon = (!('Icon' in object) || Object.keys(IconObject).length > 0);
|
||||||
var src;
|
var src;
|
||||||
var href = /** @type {string|undefined} */
|
var href = /** @type {string|undefined} */
|
||||||
(IconObject['href']);
|
(IconObject['href']);
|
||||||
if (href) {
|
if (href) {
|
||||||
src = href;
|
src = href;
|
||||||
} else {
|
} else if (drawIcon) {
|
||||||
src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_;
|
src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_;
|
||||||
}
|
}
|
||||||
var anchor, anchorXUnits, anchorYUnits;
|
var anchor, anchorXUnits, anchorYUnits;
|
||||||
@@ -616,8 +617,6 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
|||||||
(IconObject['h']);
|
(IconObject['h']);
|
||||||
if (w !== undefined && h !== undefined) {
|
if (w !== undefined && h !== undefined) {
|
||||||
size = [w, h];
|
size = [w, h];
|
||||||
} else {
|
|
||||||
size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var rotation;
|
var rotation;
|
||||||
@@ -628,31 +627,39 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var scale = /** @type {number|undefined} */
|
var scale = /** @type {number|undefined} */
|
||||||
(object['scale'] * ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_);
|
(object['scale']);
|
||||||
if (isNaN(scale)) {
|
if (isNaN(scale) || scale === undefined) {
|
||||||
scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
||||||
}
|
} else {
|
||||||
if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
|
scale = scale * ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
||||||
size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
|
|
||||||
if (scale === undefined) {
|
|
||||||
scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageStyle = new ol.style.Icon({
|
if (drawIcon) {
|
||||||
anchor: anchor,
|
if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
|
||||||
anchorOrigin: ol.style.IconOrigin.BOTTOM_LEFT,
|
size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
|
||||||
anchorXUnits: anchorXUnits,
|
if (scale === undefined) {
|
||||||
anchorYUnits: anchorYUnits,
|
scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
|
||||||
crossOrigin: 'anonymous', // FIXME should this be configurable?
|
}
|
||||||
offset: offset,
|
}
|
||||||
offsetOrigin: ol.style.IconOrigin.BOTTOM_LEFT,
|
|
||||||
rotation: rotation,
|
var imageStyle = new ol.style.Icon({
|
||||||
scale: scale,
|
anchor: anchor,
|
||||||
size: size,
|
anchorOrigin: ol.style.IconOrigin.BOTTOM_LEFT,
|
||||||
src: src
|
anchorXUnits: anchorXUnits,
|
||||||
});
|
anchorYUnits: anchorYUnits,
|
||||||
styleObject['imageStyle'] = imageStyle;
|
crossOrigin: 'anonymous', // FIXME should this be configurable?
|
||||||
|
offset: offset,
|
||||||
|
offsetOrigin: ol.style.IconOrigin.BOTTOM_LEFT,
|
||||||
|
rotation: rotation,
|
||||||
|
scale: scale,
|
||||||
|
size: size,
|
||||||
|
src: src
|
||||||
|
});
|
||||||
|
styleObject['imageStyle'] = imageStyle;
|
||||||
|
} else {
|
||||||
|
// handle the case when we explicitly want to draw no icon.
|
||||||
|
styleObject['imageStyle'] = ol.format.KML.DEFAULT_NO_IMAGE_STYLE_;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1101,6 +1108,9 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
|
|||||||
var imageStyle = /** @type {ol.style.Image} */
|
var imageStyle = /** @type {ol.style.Image} */
|
||||||
('imageStyle' in styleObject ?
|
('imageStyle' in styleObject ?
|
||||||
styleObject['imageStyle'] : ol.format.KML.DEFAULT_IMAGE_STYLE_);
|
styleObject['imageStyle'] : ol.format.KML.DEFAULT_IMAGE_STYLE_);
|
||||||
|
if (imageStyle == ol.format.KML.DEFAULT_NO_IMAGE_STYLE_) {
|
||||||
|
imageStyle = undefined;
|
||||||
|
}
|
||||||
var textStyle = /** @type {ol.style.Text} */
|
var textStyle = /** @type {ol.style.Text} */
|
||||||
('textStyle' in styleObject ?
|
('textStyle' in styleObject ?
|
||||||
styleObject['textStyle'] : ol.format.KML.DEFAULT_TEXT_STYLE_);
|
styleObject['textStyle'] : ol.format.KML.DEFAULT_TEXT_STYLE_);
|
||||||
|
|||||||
@@ -1394,7 +1394,7 @@ describe('ol.format.KML', function() {
|
|||||||
expect(imageStyle.getOrigin()).to.be(null);
|
expect(imageStyle.getOrigin()).to.be(null);
|
||||||
expect(imageStyle.getRotation()).to.eql(0);
|
expect(imageStyle.getRotation()).to.eql(0);
|
||||||
expect(imageStyle.getSize()).to.be(null);
|
expect(imageStyle.getSize()).to.be(null);
|
||||||
expect(imageStyle.getScale()).to.be(1);
|
expect(imageStyle.getScale()).to.be(ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_);
|
||||||
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
|
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
|
||||||
expect(style.getZIndex()).to.be(undefined);
|
expect(style.getZIndex()).to.be(undefined);
|
||||||
});
|
});
|
||||||
@@ -1439,7 +1439,7 @@ describe('ol.format.KML', function() {
|
|||||||
expect(imageStyle.getAnchor()).to.eql([24, 36]);
|
expect(imageStyle.getAnchor()).to.eql([24, 36]);
|
||||||
expect(imageStyle.getOrigin()).to.eql([24, 108]);
|
expect(imageStyle.getOrigin()).to.eql([24, 108]);
|
||||||
expect(imageStyle.getRotation()).to.eql(0);
|
expect(imageStyle.getRotation()).to.eql(0);
|
||||||
expect(imageStyle.getScale()).to.eql(Math.sqrt(3));
|
expect(imageStyle.getScale()).to.eql(ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_ * 3.0);
|
||||||
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
|
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
|
||||||
expect(style.getZIndex()).to.be(undefined);
|
expect(style.getZIndex()).to.be(undefined);
|
||||||
});
|
});
|
||||||
@@ -1472,7 +1472,7 @@ describe('ol.format.KML', function() {
|
|||||||
expect(style.getStroke()).to.be(ol.format.KML.DEFAULT_STROKE_STYLE_);
|
expect(style.getStroke()).to.be(ol.format.KML.DEFAULT_STROKE_STYLE_);
|
||||||
var textStyle = style.getText();
|
var textStyle = style.getText();
|
||||||
expect(textStyle).to.be.an(ol.style.Text);
|
expect(textStyle).to.be.an(ol.style.Text);
|
||||||
expect(textStyle.getScale()).to.be(0.5);
|
expect(textStyle.getScale()).to.be(0.25);
|
||||||
var textFillStyle = textStyle.getFill();
|
var textFillStyle = textStyle.getFill();
|
||||||
expect(textFillStyle).to.be.an(ol.style.Fill);
|
expect(textFillStyle).to.be.an(ol.style.Fill);
|
||||||
expect(textFillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
|
expect(textFillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
|
||||||
|
|||||||
Reference in New Issue
Block a user