diff --git a/CHANGES.md b/CHANGES.md
index f27528e12222..432fd89b2523 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -9,8 +9,7 @@ Change Log
* Fixed a bug where picking clusters would return undefined instead of a list of the clustered entities. [#5286](https://github.com/AnalyticalGraphicsInc/cesium/issues/5286)
* Reduced the amount of Sun bloom post-process effect near the horizon. [#5381](https://github.com/AnalyticalGraphicsInc/cesium/issues/5381)
* Added Sandcastle demo for ArcticDEM data. [#5224](https://github.com/AnalyticalGraphicsInc/cesium/issues/5224)
-* `CzmlDataSource` load functions now take an optional `query` object, which will append query parameters to all network requests. [#5419](https://github.com/AnalyticalGraphicsInc/cesium/pull/5419)
-* `KmlDataSource` load functions now take an optional `query` object. which will append query parameters to all network requests. [#5434](https://github.com/AnalyticalGraphicsInc/cesium/pull/5434)
+* `CzmlDataSource` and `KmlDataSource` load functions now take an optional `query` object, which will append query parameters to all network requests. [#5419](https://github.com/AnalyticalGraphicsInc/cesium/pull/5419), [#5434](https://github.com/AnalyticalGraphicsInc/cesium/pull/5434)
### 1.34 - 2017-06-01
diff --git a/Source/DataSources/KmlDataSource.js b/Source/DataSources/KmlDataSource.js
index 5e05c8e2e6a1..766674a9e4e0 100644
--- a/Source/DataSources/KmlDataSource.js
+++ b/Source/DataSources/KmlDataSource.js
@@ -492,10 +492,12 @@ define([
}
}
}
- if (!hrefResolved && defined(sourceUri)) {
- href = getAbsoluteUri(href, getAbsoluteUri(sourceUri));
+ if (!hrefResolved) {
+ if (defined(sourceUri)) {
+ href = getAbsoluteUri(href, getAbsoluteUri(sourceUri));
+ }
+ href = proxyUrl(href, proxy, query);
}
- href = proxyUrl(href, proxy, query);
return href;
}
@@ -678,13 +680,13 @@ define([
return href;
}
- function processBillboardIcon(dataSource, node, targetEntity, sourceUri, uriResolver) {
+ function processBillboardIcon(dataSource, node, targetEntity, sourceUri, uriResolver, query) {
var scale = queryNumericValue(node, 'scale', namespaces.kml);
var heading = queryNumericValue(node, 'heading', namespaces.kml);
var color = queryColorValue(node, 'color', namespaces.kml);
var iconNode = queryFirstNode(node, 'Icon', namespaces.kml);
- var icon = getIconHref(iconNode, dataSource, sourceUri, uriResolver, false);
+ var icon = getIconHref(iconNode, dataSource, sourceUri, uriResolver, false, query);
var x = queryNumericValue(iconNode, 'x', namespaces.gx);
var y = queryNumericValue(iconNode, 'y', namespaces.gx);
var w = queryNumericValue(iconNode, 'w', namespaces.gx);
@@ -753,11 +755,11 @@ define([
}
}
- function applyStyle(dataSource, styleNode, targetEntity, sourceUri, uriResolver) {
+ function applyStyle(dataSource, styleNode, targetEntity, sourceUri, uriResolver, query) {
for (var i = 0, len = styleNode.childNodes.length; i < len; i++) {
var node = styleNode.childNodes.item(i);
if (node.localName === 'IconStyle') {
- processBillboardIcon(dataSource, node, targetEntity, sourceUri, uriResolver);
+ processBillboardIcon(dataSource, node, targetEntity, sourceUri, uriResolver, query);
} else if (node.localName === 'LabelStyle') {
var label = targetEntity.label;
if (!defined(label)) {
@@ -819,7 +821,7 @@ define([
}
//Processes and merges any inline styles for the provided node into the provided entity.
- function computeFinalStyle(entity, dataSource, placeMark, styleCollection, sourceUri, uriResolver) {
+ function computeFinalStyle(entity, dataSource, placeMark, styleCollection, sourceUri, uriResolver, query) {
var result = new Entity();
var styleEntity;
@@ -837,7 +839,7 @@ define([
if (styleIndex !== -1) {
var inlineStyleNode = childNodes[styleIndex];
if (inlineStyleNode.localName === 'Style') {
- applyStyle(dataSource, inlineStyleNode, result, sourceUri, uriResolver);
+ applyStyle(dataSource, inlineStyleNode, result, sourceUri, uriResolver, query);
} else { // StyleMap
var pairs = queryChildNodes(inlineStyleNode, 'Pair', namespaces.kml);
for (var p = 0; p < pairs.length; p++) {
@@ -855,7 +857,7 @@ define([
}
} else {
var node = queryFirstNode(pair, 'Style', namespaces.kml);
- applyStyle(dataSource, node, result, sourceUri, uriResolver);
+ applyStyle(dataSource, node, result, sourceUri, uriResolver, query);
}
} else {
console.log('KML - Unsupported StyleMap key: ' + key);
@@ -922,7 +924,7 @@ define([
id : id
});
styleCollection.add(styleEntity);
- applyStyle(dataSource, node, styleEntity, sourceUri, uriResolver);
+ applyStyle(dataSource, node, styleEntity, sourceUri, uriResolver, query);
}
}
}
@@ -963,7 +965,7 @@ define([
}
} else {
node = queryFirstNode(pair, 'Style', namespaces.kml);
- applyStyle(dataSource, node, styleEntity, sourceUri, uriResolver);
+ applyStyle(dataSource, node, styleEntity, sourceUri, uriResolver, query);
}
}
} else {
@@ -1552,10 +1554,10 @@ define([
entity.description = tmp;
}
- function processFeature(dataSource, parent, featureNode, entityCollection, styleCollection, sourceUri, uriResolver, promises, context) {
+ function processFeature(dataSource, parent, featureNode, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
var entity = createEntity(featureNode, entityCollection, context);
var kmlData = entity.kml;
- var styleEntity = computeFinalStyle(entity, dataSource, featureNode, styleCollection, sourceUri, uriResolver);
+ var styleEntity = computeFinalStyle(entity, dataSource, featureNode, styleCollection, sourceUri, uriResolver, query);
var name = queryStringValue(featureNode, 'name', namespaces.kml);
entity.name = name;
@@ -1630,7 +1632,7 @@ define([
Model : processUnsupportedGeometry
};
- function processDocument(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context) {
+ function processDocument(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
var featureTypeNames = Object.keys(featureTypes);
var featureTypeNamesLength = featureTypeNames.length;
@@ -1644,19 +1646,19 @@ define([
var child = childNodes[q];
if (child.localName === featureName &&
((namespaces.kml.indexOf(child.namespaceURI) !== -1) || (namespaces.gx.indexOf(child.namespaceURI) !== -1))) {
- processFeatureNode(dataSource, parent, child, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
+ processFeatureNode(dataSource, parent, child, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
}
}
}
}
- function processFolder(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context) {
- var r = processFeature(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
- processDocument(dataSource, r.entity, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
+ function processFolder(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
+ var r = processFeature(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
+ processDocument(dataSource, r.entity, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
}
- function processPlacemark(dataSource, parent, placemark, entityCollection, styleCollection, sourceUri, uriResolver, promises, context) {
- var r = processFeature(dataSource, parent, placemark, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
+ function processPlacemark(dataSource, parent, placemark, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
+ var r = processFeature(dataSource, parent, placemark, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
var entity = r.entity;
var styleEntity = r.styleEntity;
@@ -1679,8 +1681,8 @@ define([
}
}
- function processGroundOverlay(dataSource, parent, groundOverlay, entityCollection, styleCollection, sourceUri, uriResolver, promises, context) {
- var r = processFeature(dataSource, parent, groundOverlay, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
+ function processGroundOverlay(dataSource, parent, groundOverlay, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
+ var r = processFeature(dataSource, parent, groundOverlay, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
var entity = r.entity;
var geometry;
@@ -1725,7 +1727,7 @@ define([
}
var iconNode = queryFirstNode(groundOverlay, 'Icon', namespaces.kml);
- var href = getIconHref(iconNode, dataSource, sourceUri, uriResolver, true);
+ var href = getIconHref(iconNode, dataSource, sourceUri, uriResolver, true, query);
if (defined(href)) {
if (isLatLonQuad) {
console.log('KML - gx:LatLonQuad Icon does not support texture projection.');
@@ -1938,7 +1940,7 @@ define([
}
function processNetworkLink(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query) {
- var r = processFeature(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context);
+ var r = processFeature(dataSource, parent, node, entityCollection, styleCollection, sourceUri, uriResolver, promises, context, query);
var networkEntity = r.entity;
var link = queryFirstNode(node, 'Link', namespaces.kml);
@@ -2110,7 +2112,7 @@ define([
}
var styleCollection = new EntityCollection(dataSource);
- return when.all(processStyles(dataSource, kml, styleCollection, sourceUri, false, uriResolver, context)).then(function() {
+ return when.all(processStyles(dataSource, kml, styleCollection, sourceUri, false, uriResolver, query)).then(function() {
var element = kml.documentElement;
if (element.localName === 'kml') {
var childNodes = element.childNodes;
diff --git a/Specs/DataSources/KmlDataSourceSpec.js b/Specs/DataSources/KmlDataSourceSpec.js
index b6e409d67a58..b111d23f5379 100644
--- a/Specs/DataSources/KmlDataSourceSpec.js
+++ b/Specs/DataSources/KmlDataSourceSpec.js
@@ -1555,6 +1555,32 @@ defineSuite([
});
});
+ it('IconStyle: Sets billboard image with query', function() {
+ var kml = '\
+ \
+ \
+ ';
+ debugger;
+ return KmlDataSource.load(parser.parseFromString(kml, "text/xml"), {
+ camera : options.camera,
+ canvas : options.canvas,
+ sourceUri : 'http://test.invalid',
+ query : {
+ "test": true
+ }
+ }).then(function(dataSource) {
+ var entities = dataSource.entities.values;
+ var billboard = entities[0].billboard;
+ expect(billboard.image.getValue()).toEqual('http://test.invalid/image.png?test=true');
+ });
+ });
+
it('IconStyle: Sets billboard image with subregion', function() {
var kml = '\