Add parsing of LabelStyle in KML format

This commit is contained in:
oterral
2014-10-09 16:48:49 +02:00
parent c1259aacab
commit 9aeb9849fb
2 changed files with 101 additions and 10 deletions

View File

@@ -275,6 +275,19 @@ ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({
});
/**
* @const
* @type {ol.style.Text}
* @private
*/
ol.format.KML.DEFAULT_TEXT_STYLE_ = new ol.style.Text({
font: 'normal 16px Helvetica',
fill: ol.format.KML.DEFAULT_FILL_STYLE_,
stroke: ol.format.KML.DEFAULT_STROKE_STYLE_,
scale: 1
});
/**
* @const
* @type {ol.style.Style}
@@ -283,7 +296,7 @@ ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({
ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({
fill: ol.format.KML.DEFAULT_FILL_STYLE_,
image: ol.format.KML.DEFAULT_IMAGE_STYLE_,
text: null, // FIXME
text: ol.format.KML.DEFAULT_TEXT_STYLE_,
stroke: ol.format.KML.DEFAULT_STROKE_STYLE_,
zIndex: 0
});
@@ -531,6 +544,34 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
};
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
ol.format.KML.LabelStyleParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
goog.asserts.assert(node.localName == 'LabelStyle');
// FIXME colorMode
var object = ol.xml.pushParseAndPop(
{}, ol.format.KML.LABEL_STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(object)) {
return;
}
var styleObject = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(styleObject));
var textStyle = new ol.style.Text({
fill: new ol.style.Fill({
color: /** @type {ol.Color} */
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_))
}),
scale: /** @type {number|undefined} */
(goog.object.get(object, 'scale'))
});
goog.object.set(styleObject, 'textStyle', textStyle);
};
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
@@ -910,6 +951,8 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
}
var imageStyle = /** @type {ol.style.Image} */ (goog.object.get(
styleObject, 'imageStyle', ol.format.KML.DEFAULT_IMAGE_STYLE_));
var textStyle = /** @type {ol.style.Text} */ (goog.object.get(
styleObject, 'textStyle', ol.format.KML.DEFAULT_TEXT_STYLE_));
var strokeStyle = /** @type {ol.style.Stroke} */ (goog.object.get(
styleObject, 'strokeStyle', ol.format.KML.DEFAULT_STROKE_STYLE_));
var outline = /** @type {boolean|undefined} */
@@ -921,7 +964,7 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
fill: fillStyle,
image: imageStyle,
stroke: strokeStyle,
text: null, // FIXME
text: textStyle,
zIndex: undefined // FIXME
})];
};
@@ -1238,6 +1281,18 @@ ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(
});
/**
* @const
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
* @private
*/
ol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.NAMESPACE_URIS_, {
'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
@@ -1369,6 +1424,7 @@ ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS(
ol.format.KML.NAMESPACE_URIS_, {
'IconStyle': ol.format.KML.IconStyleParser_,
'LabelStyle': ol.format.KML.LabelStyleParser_,
'LineStyle': ol.format.KML.LineStyleParser_,
'PolyStyle': ol.format.KML.PolyStyleParser_
});

View File

@@ -1267,7 +1267,7 @@ describe('ol.format.KML', function() {
expect(imageStyle.getOrigin()).to.be(null);
expect(imageStyle.getRotation()).to.eql(0);
expect(imageStyle.getSize()).to.be(null);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1310,7 +1310,42 @@ describe('ol.format.KML', function() {
expect(imageStyle.getAnchor()).to.eql([24, 36]);
expect(imageStyle.getOrigin()).to.eql([24, 108]);
expect(imageStyle.getRotation()).to.eql(0);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
it('can read a feature\'s LabelStyle', function() {
var text =
'<kml xmlns="http://earth.google.com/kml/2.2">' +
' <Placemark>' +
' <Style>' +
' <LabelStyle>' +
' <color>12345678</color>' +
' <scale>0.25</scale>' +
' </LabelStyle>' +
' </Style>' +
' </Placemark>' +
'</kml>';
var fs = format.readFeatures(text);
expect(fs).to.have.length(1);
var f = fs[0];
expect(f).to.be.an(ol.Feature);
var styleFunction = f.getStyleFunction();
expect(styleFunction).not.to.be(undefined);
var styleArray = styleFunction.call(f, 0);
expect(styleArray).to.be.an(Array);
expect(styleArray).to.have.length(1);
var style = styleArray[0];
expect(style).to.be.an(ol.style.Style);
expect(style.getFill()).to.be(ol.format.KML.DEFAULT_FILL_STYLE_);
expect(style.getImage()).to.be(ol.format.KML.DEFAULT_IMAGE_STYLE_);
expect(style.getStroke()).to.be(ol.format.KML.DEFAULT_STROKE_STYLE_);
var textStyle = style.getText();
expect(textStyle).to.be.an(ol.style.Text);
expect(textStyle.getScale()).to.be(0.5);
var textFillStyle = textStyle.getFill();
expect(textFillStyle).to.be.an(ol.style.Fill);
expect(textFillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1343,7 +1378,7 @@ describe('ol.format.KML', function() {
expect(strokeStyle).to.be.an(ol.style.Stroke);
expect(strokeStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(strokeStyle.getWidth()).to.be(9);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1374,7 +1409,7 @@ describe('ol.format.KML', function() {
expect(fillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(style.getImage()).to.be(ol.format.KML.DEFAULT_IMAGE_STYLE_);
expect(style.getStroke()).to.be(ol.format.KML.DEFAULT_STROKE_STYLE_);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1415,7 +1450,7 @@ describe('ol.format.KML', function() {
expect(strokeStyle).to.be.an(ol.style.Stroke);
expect(strokeStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(strokeStyle.getWidth()).to.be(9);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1452,7 +1487,7 @@ describe('ol.format.KML', function() {
expect(strokeStyle).to.be.an(ol.style.Stroke);
expect(strokeStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(strokeStyle.getWidth()).to.be(9);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1488,7 +1523,7 @@ describe('ol.format.KML', function() {
expect(fillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]);
expect(style.getImage()).to.be(ol.format.KML.DEFAULT_IMAGE_STYLE_);
expect(style.getStroke()).to.be(null);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});
@@ -1524,7 +1559,7 @@ describe('ol.format.KML', function() {
expect(style.getFill()).to.be(null);
expect(style.getImage()).to.be(ol.format.KML.DEFAULT_IMAGE_STYLE_);
expect(style.getStroke()).to.be(null);
expect(style.getText()).to.be(null);
expect(style.getText()).to.be(ol.format.KML.DEFAULT_TEXT_STYLE_);
expect(style.getZIndex()).to.be(undefined);
});