Merge pull request #7814 from tschaub/unstatic-private

Remove more private static members
This commit is contained in:
Tim Schaub
2018-02-12 05:55:53 -07:00
committed by GitHub
9 changed files with 1605 additions and 1842 deletions

View File

@@ -83,81 +83,94 @@ inherits(MVT, FeatureFormat);
/**
* Reader callbacks for parsing the PBF.
* @type {Object.<string, function(number, Object, ol.ext.PBF)>}
* Reader callback for parsing layers.
* @param {number} tag The tag.
* @param {Object} layers The layers object.
* @param {ol.ext.PBF} pbf The PBF.
*/
MVT.pbfReaders_ = {
layers: function(tag, layers, pbf) {
if (tag === 3) {
const layer = {
keys: [],
values: [],
features: []
};
const end = pbf.readVarint() + pbf.pos;
pbf.readFields(MVT.pbfReaders_.layer, layer, end);
layer.length = layer.features.length;
if (layer.length) {
layers[layer.name] = layer;
}
}
},
layer: function(tag, layer, pbf) {
if (tag === 15) {
layer.version = pbf.readVarint();
} else if (tag === 1) {
layer.name = pbf.readString();
} else if (tag === 5) {
layer.extent = pbf.readVarint();
} else if (tag === 2) {
layer.features.push(pbf.pos);
} else if (tag === 3) {
layer.keys.push(pbf.readString());
} else if (tag === 4) {
let value = null;
const end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
tag = pbf.readVarint() >> 3;
value = tag === 1 ? pbf.readString() :
tag === 2 ? pbf.readFloat() :
tag === 3 ? pbf.readDouble() :
tag === 4 ? pbf.readVarint64() :
tag === 5 ? pbf.readVarint() :
tag === 6 ? pbf.readSVarint() :
tag === 7 ? pbf.readBoolean() : null;
}
layer.values.push(value);
}
},
feature: function(tag, feature, pbf) {
if (tag == 1) {
feature.id = pbf.readVarint();
} else if (tag == 2) {
const end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
const key = feature.layer.keys[pbf.readVarint()];
const value = feature.layer.values[pbf.readVarint()];
feature.properties[key] = value;
}
} else if (tag == 3) {
feature.type = pbf.readVarint();
} else if (tag == 4) {
feature.geometry = pbf.pos;
function layersPBFReader(tag, layers, pbf) {
if (tag === 3) {
const layer = {
keys: [],
values: [],
features: []
};
const end = pbf.readVarint() + pbf.pos;
pbf.readFields(layerPBFReader, layer, end);
layer.length = layer.features.length;
if (layer.length) {
layers[layer.name] = layer;
}
}
};
}
/**
* Reader callback for parsing layer.
* @param {number} tag The tag.
* @param {Object} layer The layer object.
* @param {ol.ext.PBF} pbf The PBF.
*/
function layerPBFReader(tag, layer, pbf) {
if (tag === 15) {
layer.version = pbf.readVarint();
} else if (tag === 1) {
layer.name = pbf.readString();
} else if (tag === 5) {
layer.extent = pbf.readVarint();
} else if (tag === 2) {
layer.features.push(pbf.pos);
} else if (tag === 3) {
layer.keys.push(pbf.readString());
} else if (tag === 4) {
let value = null;
const end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
tag = pbf.readVarint() >> 3;
value = tag === 1 ? pbf.readString() :
tag === 2 ? pbf.readFloat() :
tag === 3 ? pbf.readDouble() :
tag === 4 ? pbf.readVarint64() :
tag === 5 ? pbf.readVarint() :
tag === 6 ? pbf.readSVarint() :
tag === 7 ? pbf.readBoolean() : null;
}
layer.values.push(value);
}
}
/**
* Reader callback for parsing feature.
* @param {number} tag The tag.
* @param {Object} feature The feature object.
* @param {ol.ext.PBF} pbf The PBF.
*/
function featurePBFReader(tag, feature, pbf) {
if (tag == 1) {
feature.id = pbf.readVarint();
} else if (tag == 2) {
const end = pbf.readVarint() + pbf.pos;
while (pbf.pos < end) {
const key = feature.layer.keys[pbf.readVarint()];
const value = feature.layer.values[pbf.readVarint()];
feature.properties[key] = value;
}
} else if (tag == 3) {
feature.type = pbf.readVarint();
} else if (tag == 4) {
feature.geometry = pbf.pos;
}
}
/**
* Read a raw feature from the pbf offset stored at index `i` in the raw layer.
* @suppress {missingProperties}
* @private
* @param {ol.ext.PBF} pbf PBF.
* @param {Object} layer Raw layer.
* @param {number} i Index of the feature in the raw layer's `features` array.
* @return {Object} Raw feature.
*/
MVT.readRawFeature_ = function(pbf, layer, i) {
function readRawFeature(pbf, layer, i) {
pbf.pos = layer.features[i];
const end = pbf.readVarint() + pbf.pos;
@@ -166,22 +179,22 @@ MVT.readRawFeature_ = function(pbf, layer, i) {
type: 0,
properties: {}
};
pbf.readFields(MVT.pbfReaders_.feature, feature, end);
pbf.readFields(featurePBFReader, feature, end);
return feature;
};
}
/**
* Read the raw geometry from the pbf offset stored in a raw feature's geometry
* proeprty.
* @suppress {missingProperties}
* @private
* @param {ol.ext.PBF} pbf PBF.
* @param {Object} feature Raw feature.
* @param {Array.<number>} flatCoordinates Array to store flat coordinates in.
* @param {Array.<number>} ends Array to store ends in.
* @private
*/
MVT.readRawGeometry_ = function(pbf, feature, flatCoordinates, ends) {
MVT.prototype.readRawGeometry_ = function(pbf, feature, flatCoordinates, ends) {
pbf.pos = feature.geometry;
const end = pbf.readVarint() + pbf.pos;
@@ -239,13 +252,12 @@ MVT.readRawGeometry_ = function(pbf, feature, flatCoordinates, ends) {
/**
* @suppress {missingProperties}
* @private
* @param {number} type The raw feature's geometry type
* @param {number} numEnds Number of ends of the flat coordinates of the
* geometry.
* @return {ol.geom.GeometryType} The geometry type.
*/
MVT.getGeometryType_ = function(type, numEnds) {
function getGeometryType(type, numEnds) {
/** @type {ol.geom.GeometryType} */
let geometryType;
if (type === 1) {
@@ -261,7 +273,7 @@ MVT.getGeometryType_ = function(type, numEnds) {
// outer rings of polygons.
}
return geometryType;
};
}
/**
* @private
@@ -283,9 +295,9 @@ MVT.prototype.createFeature_ = function(pbf, rawFeature, opt_options) {
const flatCoordinates = [];
let ends = [];
MVT.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);
this.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);
const geometryType = MVT.getGeometryType_(type, ends.length);
const geometryType = getGeometryType(type, ends.length);
if (this.featureClass_ === RenderFeature) {
feature = new this.featureClass_(geometryType, flatCoordinates, ends, values, id);
@@ -357,7 +369,7 @@ MVT.prototype.readFeatures = function(source, opt_options) {
const layers = this.layers_;
const pbf = new PBF(/** @type {ArrayBuffer} */ (source));
const pbfLayers = pbf.readFields(MVT.pbfReaders_.layers, {});
const pbfLayers = pbf.readFields(layersPBFReader, {});
/** @type {Array.<ol.Feature|ol.render.Feature>} */
const features = [];
let pbfLayer;
@@ -368,7 +380,7 @@ MVT.prototype.readFeatures = function(source, opt_options) {
pbfLayer = pbfLayers[name];
for (let i = 0, ii = pbfLayer.length; i < ii; ++i) {
const rawFeature = MVT.readRawFeature_(pbf, pbfLayer, i);
const rawFeature = readRawFeature(pbf, pbfLayer, i);
features.push(this.createFeature_(pbf, rawFeature));
}
this.extent_ = pbfLayer ? [0, 0, pbfLayer.extent, pbfLayer.extent] : null;

View File

@@ -36,12 +36,50 @@ const OSMXML = function() {
inherits(OSMXML, XMLFeature);
/**
* @const
* @type {Array.<string>}
*/
const NAMESPACE_URIS = [null];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const WAY_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'nd': readNd,
'tag': readTag
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'node': readNode,
'way': readWay
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const NODE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'tag': readTag
});
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
OSMXML.readNode_ = function(node, objectStack) {
function readNode(node, objectStack) {
const options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
const state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
const id = node.getAttribute('id');
@@ -54,7 +92,7 @@ OSMXML.readNode_ = function(node, objectStack) {
const values = pushParseAndPop({
tags: {}
}, OSMXML.NODE_PARSERS_, node, objectStack);
}, NODE_PARSERS, node, objectStack);
if (!isEmpty(values.tags)) {
const geometry = new Point(coordinates);
transformWithOptions(geometry, false, options);
@@ -63,91 +101,43 @@ OSMXML.readNode_ = function(node, objectStack) {
feature.setProperties(values.tags);
state.features.push(feature);
}
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
OSMXML.readWay_ = function(node, objectStack) {
function readWay(node, objectStack) {
const id = node.getAttribute('id');
const values = pushParseAndPop({
id: id,
ndrefs: [],
tags: {}
}, OSMXML.WAY_PARSERS_, node, objectStack);
}, WAY_PARSERS, node, objectStack);
const state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
state.ways.push(values);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
OSMXML.readNd_ = function(node, objectStack) {
function readNd(node, objectStack) {
const values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
values.ndrefs.push(node.getAttribute('ref'));
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
OSMXML.readTag_ = function(node, objectStack) {
function readTag(node, objectStack) {
const values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
values.tags[node.getAttribute('k')] = node.getAttribute('v');
};
/**
* @const
* @private
* @type {Array.<string>}
*/
OSMXML.NAMESPACE_URIS_ = [
null
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OSMXML.WAY_PARSERS_ = makeStructureNS(
OSMXML.NAMESPACE_URIS_, {
'nd': OSMXML.readNd_,
'tag': OSMXML.readTag_
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OSMXML.PARSERS_ = makeStructureNS(
OSMXML.NAMESPACE_URIS_, {
'node': OSMXML.readNode_,
'way': OSMXML.readWay_
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OSMXML.NODE_PARSERS_ = makeStructureNS(
OSMXML.NAMESPACE_URIS_, {
'tag': OSMXML.readTag_
});
}
/**
@@ -172,7 +162,7 @@ OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {
nodes: {},
ways: [],
features: []
}, OSMXML.PARSERS_, node, [options]);
}, PARSERS, node, [options]);
// parse nodes in ways
for (let j = 0; j < state.ways.length; j++) {
const values = /** @type {Object} */ (state.ways[j]);

View File

@@ -18,6 +18,187 @@ const OWS = function() {
inherits(OWS, XML);
/**
* @const
* @type {Array.<string>}
*/
const NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'ServiceIdentification': makeObjectPropertySetter(
readServiceIdentification),
'ServiceProvider': makeObjectPropertySetter(
readServiceProvider),
'OperationsMetadata': makeObjectPropertySetter(
readOperationsMetadata)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const ADDRESS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'DeliveryPoint': makeObjectPropertySetter(
XSD.readString),
'City': makeObjectPropertySetter(XSD.readString),
'AdministrativeArea': makeObjectPropertySetter(
XSD.readString),
'PostalCode': makeObjectPropertySetter(XSD.readString),
'Country': makeObjectPropertySetter(XSD.readString),
'ElectronicMailAddress': makeObjectPropertySetter(
XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const ALLOWED_VALUES_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Value': makeObjectPropertyPusher(readValue)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONSTRAINT_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'AllowedValues': makeObjectPropertySetter(
readAllowedValues)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONTACT_INFO_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Phone': makeObjectPropertySetter(readPhone),
'Address': makeObjectPropertySetter(readAddress)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const DCP_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'HTTP': makeObjectPropertySetter(readHttp)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const HTTP_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Get': makeObjectPropertyPusher(readGet),
'Post': undefined // TODO
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const OPERATION_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'DCP': makeObjectPropertySetter(readDcp)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const OPERATIONS_METADATA_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Operation': readOperation
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const PHONE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Voice': makeObjectPropertySetter(XSD.readString),
'Facsimile': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const REQUEST_METHOD_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Constraint': makeObjectPropertyPusher(
readConstraint)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const SERVICE_CONTACT_PARSERS =
makeStructureNS(
NAMESPACE_URIS, {
'IndividualName': makeObjectPropertySetter(
XSD.readString),
'PositionName': makeObjectPropertySetter(XSD.readString),
'ContactInfo': makeObjectPropertySetter(
readContactInfo)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const SERVICE_IDENTIFICATION_PARSERS =
makeStructureNS(
NAMESPACE_URIS, {
'Abstract': makeObjectPropertySetter(XSD.readString),
'AccessConstraints': makeObjectPropertySetter(XSD.readString),
'Fees': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'ServiceTypeVersion': makeObjectPropertySetter(
XSD.readString),
'ServiceType': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const SERVICE_PROVIDER_PARSERS =
makeStructureNS(
NAMESPACE_URIS, {
'ProviderName': makeObjectPropertySetter(XSD.readString),
'ProviderSite': makeObjectPropertySetter(XLink.readHref),
'ServiceContact': makeObjectPropertySetter(
readServiceContact)
});
/**
* @inheritDoc
*/
@@ -36,7 +217,7 @@ OWS.prototype.readFromDocument = function(doc) {
*/
OWS.prototype.readFromNode = function(node) {
const owsObject = pushParseAndPop({},
OWS.PARSERS_, node, []);
PARSERS, node, []);
return owsObject ? owsObject : null;
};
@@ -44,387 +225,176 @@ OWS.prototype.readFromNode = function(node) {
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The address.
*/
OWS.readAddress_ = function(node, objectStack) {
function readAddress(node, objectStack) {
return pushParseAndPop({},
OWS.ADDRESS_PARSERS_, node, objectStack);
};
ADDRESS_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The values.
*/
OWS.readAllowedValues_ = function(node, objectStack) {
function readAllowedValues(node, objectStack) {
return pushParseAndPop({},
OWS.ALLOWED_VALUES_PARSERS_, node, objectStack);
};
ALLOWED_VALUES_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The constraint.
*/
OWS.readConstraint_ = function(node, objectStack) {
function readConstraint(node, objectStack) {
const name = node.getAttribute('name');
if (!name) {
return undefined;
}
return pushParseAndPop({'name': name},
OWS.CONSTRAINT_PARSERS_, node,
CONSTRAINT_PARSERS, node,
objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The contact info.
*/
OWS.readContactInfo_ = function(node, objectStack) {
function readContactInfo(node, objectStack) {
return pushParseAndPop({},
OWS.CONTACT_INFO_PARSERS_, node, objectStack);
};
CONTACT_INFO_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The DCP.
*/
OWS.readDcp_ = function(node, objectStack) {
function readDcp(node, objectStack) {
return pushParseAndPop({},
OWS.DCP_PARSERS_, node, objectStack);
};
DCP_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The GET object.
*/
OWS.readGet_ = function(node, objectStack) {
function readGet(node, objectStack) {
const href = XLink.readHref(node);
if (!href) {
return undefined;
}
return pushParseAndPop({'href': href},
OWS.REQUEST_METHOD_PARSERS_, node, objectStack);
};
REQUEST_METHOD_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The HTTP object.
*/
OWS.readHttp_ = function(node, objectStack) {
return pushParseAndPop({}, OWS.HTTP_PARSERS_,
function readHttp(node, objectStack) {
return pushParseAndPop({}, HTTP_PARSERS,
node, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The operation.
*/
OWS.readOperation_ = function(node, objectStack) {
function readOperation(node, objectStack) {
const name = node.getAttribute('name');
const value = pushParseAndPop({},
OWS.OPERATION_PARSERS_, node, objectStack);
OPERATION_PARSERS, node, objectStack);
if (!value) {
return undefined;
}
const object = /** @type {Object} */
(objectStack[objectStack.length - 1]);
object[name] = value;
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The operations metadata.
*/
OWS.readOperationsMetadata_ = function(node,
function readOperationsMetadata(node,
objectStack) {
return pushParseAndPop({},
OWS.OPERATIONS_METADATA_PARSERS_, node,
OPERATIONS_METADATA_PARSERS, node,
objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The phone.
*/
OWS.readPhone_ = function(node, objectStack) {
function readPhone(node, objectStack) {
return pushParseAndPop({},
OWS.PHONE_PARSERS_, node, objectStack);
};
PHONE_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The service identification.
*/
OWS.readServiceIdentification_ = function(node,
function readServiceIdentification(node,
objectStack) {
return pushParseAndPop(
{}, OWS.SERVICE_IDENTIFICATION_PARSERS_, node,
{}, SERVICE_IDENTIFICATION_PARSERS, node,
objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The service contact.
*/
OWS.readServiceContact_ = function(node, objectStack) {
function readServiceContact(node, objectStack) {
return pushParseAndPop(
{}, OWS.SERVICE_CONTACT_PARSERS_, node,
{}, SERVICE_CONTACT_PARSERS, node,
objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} The service provider.
*/
OWS.readServiceProvider_ = function(node, objectStack) {
function readServiceProvider(node, objectStack) {
return pushParseAndPop(
{}, OWS.SERVICE_PROVIDER_PARSERS_, node,
{}, SERVICE_PROVIDER_PARSERS, node,
objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {string|undefined} The value.
*/
OWS.readValue_ = function(node, objectStack) {
function readValue(node, objectStack) {
return XSD.readString(node);
};
}
/**
* @const
* @type {Array.<string>}
* @private
*/
OWS.NAMESPACE_URIS_ = [
null,
'http://www.opengis.net/ows/1.1'
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'ServiceIdentification': makeObjectPropertySetter(
OWS.readServiceIdentification_),
'ServiceProvider': makeObjectPropertySetter(
OWS.readServiceProvider_),
'OperationsMetadata': makeObjectPropertySetter(
OWS.readOperationsMetadata_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.ADDRESS_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'DeliveryPoint': makeObjectPropertySetter(
XSD.readString),
'City': makeObjectPropertySetter(XSD.readString),
'AdministrativeArea': makeObjectPropertySetter(
XSD.readString),
'PostalCode': makeObjectPropertySetter(XSD.readString),
'Country': makeObjectPropertySetter(XSD.readString),
'ElectronicMailAddress': makeObjectPropertySetter(
XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.ALLOWED_VALUES_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Value': makeObjectPropertyPusher(OWS.readValue_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.CONSTRAINT_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'AllowedValues': makeObjectPropertySetter(
OWS.readAllowedValues_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.CONTACT_INFO_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Phone': makeObjectPropertySetter(OWS.readPhone_),
'Address': makeObjectPropertySetter(OWS.readAddress_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.DCP_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'HTTP': makeObjectPropertySetter(OWS.readHttp_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.HTTP_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Get': makeObjectPropertyPusher(OWS.readGet_),
'Post': undefined // TODO
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.OPERATION_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'DCP': makeObjectPropertySetter(OWS.readDcp_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.OPERATIONS_METADATA_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Operation': OWS.readOperation_
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.PHONE_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Voice': makeObjectPropertySetter(XSD.readString),
'Facsimile': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.REQUEST_METHOD_PARSERS_ = makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Constraint': makeObjectPropertyPusher(
OWS.readConstraint_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.SERVICE_CONTACT_PARSERS_ =
makeStructureNS(
OWS.NAMESPACE_URIS_, {
'IndividualName': makeObjectPropertySetter(
XSD.readString),
'PositionName': makeObjectPropertySetter(XSD.readString),
'ContactInfo': makeObjectPropertySetter(
OWS.readContactInfo_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.SERVICE_IDENTIFICATION_PARSERS_ =
makeStructureNS(
OWS.NAMESPACE_URIS_, {
'Abstract': makeObjectPropertySetter(XSD.readString),
'AccessConstraints': makeObjectPropertySetter(XSD.readString),
'Fees': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'ServiceTypeVersion': makeObjectPropertySetter(
XSD.readString),
'ServiceType': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
OWS.SERVICE_PROVIDER_PARSERS_ =
makeStructureNS(
OWS.NAMESPACE_URIS_, {
'ProviderName': makeObjectPropertySetter(XSD.readString),
'ProviderSite': makeObjectPropertySetter(XLink.readHref),
'ServiceContact': makeObjectPropertySetter(
OWS.readServiceContact_)
});
export default OWS;

View File

@@ -234,9 +234,8 @@ WFS.prototype.readFeatureCollectionMetadataFromDocument = function(doc) {
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WFS.FEATURE_COLLECTION_PARSERS_ = {
const FEATURE_COLLECTION_PARSERS = {
'http://www.opengis.net/gml': {
'boundedBy': makeObjectPropertySetter(
GMLBase.prototype.readGeometryElement, 'bounds')
@@ -256,16 +255,15 @@ WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {
result['numberOfFeatures'] = value;
return pushParseAndPop(
/** @type {ol.WFSFeatureCollectionMetadata} */ (result),
WFS.FEATURE_COLLECTION_PARSERS_, node, [], this.gmlFormat_);
FEATURE_COLLECTION_PARSERS, node, [], this.gmlFormat_);
};
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WFS.TRANSACTION_SUMMARY_PARSERS_ = {
const TRANSACTION_SUMMARY_PARSERS = {
'http://www.opengis.net/wfs': {
'totalInserted': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
@@ -281,20 +279,18 @@ WFS.TRANSACTION_SUMMARY_PARSERS_ = {
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Transaction Summary.
* @private
*/
WFS.readTransactionSummary_ = function(node, objectStack) {
function readTransactionSummary(node, objectStack) {
return pushParseAndPop(
{}, WFS.TRANSACTION_SUMMARY_PARSERS_, node, objectStack);
};
{}, TRANSACTION_SUMMARY_PARSERS, node, objectStack);
}
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WFS.OGC_FID_PARSERS_ = {
const OGC_FID_PARSERS = {
'http://www.opengis.net/ogc': {
'FeatureId': makeArrayPusher(function(node, objectStack) {
return node.getAttribute('fid');
@@ -306,21 +302,19 @@ WFS.OGC_FID_PARSERS_ = {
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
*/
WFS.fidParser_ = function(node, objectStack) {
parseNode(WFS.OGC_FID_PARSERS_, node, objectStack);
};
function fidParser(node, objectStack) {
parseNode(OGC_FID_PARSERS, node, objectStack);
}
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WFS.INSERT_RESULTS_PARSERS_ = {
const INSERT_RESULTS_PARSERS = {
'http://www.opengis.net/wfs': {
'Feature': WFS.fidParser_
'Feature': fidParser
}
};
@@ -329,25 +323,23 @@ WFS.INSERT_RESULTS_PARSERS_ = {
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Array.<string>|undefined} Insert results.
* @private
*/
WFS.readInsertResults_ = function(node, objectStack) {
function readInsertResults(node, objectStack) {
return pushParseAndPop(
[], WFS.INSERT_RESULTS_PARSERS_, node, objectStack);
};
[], INSERT_RESULTS_PARSERS, node, objectStack);
}
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WFS.TRANSACTION_RESPONSE_PARSERS_ = {
const TRANSACTION_RESPONSE_PARSERS = {
'http://www.opengis.net/wfs': {
'TransactionSummary': makeObjectPropertySetter(
WFS.readTransactionSummary_, 'transactionSummary'),
readTransactionSummary, 'transactionSummary'),
'InsertResults': makeObjectPropertySetter(
WFS.readInsertResults_, 'insertIds')
readInsertResults, 'insertIds')
}
};
@@ -373,15 +365,14 @@ WFS.prototype.readTransactionResponseFromDocument = function(doc) {
WFS.prototype.readTransactionResponseFromNode = function(node) {
return pushParseAndPop(
/** @type {ol.WFSTransactionResponse} */({}),
WFS.TRANSACTION_RESPONSE_PARSERS_, node, []);
TRANSACTION_RESPONSE_PARSERS, node, []);
};
/**
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
* @private
*/
WFS.QUERY_SERIALIZERS_ = {
const QUERY_SERIALIZERS = {
'http://www.opengis.net/wfs': {
'PropertyName': makeChildAppender(XSD.writeStringTextNode)
}
@@ -392,9 +383,8 @@ WFS.QUERY_SERIALIZERS_ = {
* @param {Node} node Node.
* @param {ol.Feature} feature Feature.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeFeature_ = function(node, feature, objectStack) {
function writeFeature(node, feature, objectStack) {
const context = objectStack[objectStack.length - 1];
const featureType = context['featureType'];
const featureNS = context['featureNS'];
@@ -406,31 +396,29 @@ WFS.writeFeature_ = function(node, feature, objectStack) {
} else {
GML3.prototype.writeFeatureElement(child, feature, objectStack);
}
};
}
/**
* @param {Node} node Node.
* @param {number|string} fid Feature identifier.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeOgcFidFilter_ = function(node, fid, objectStack) {
function writeOgcFidFilter(node, fid, objectStack) {
const filter = createElementNS(WFS.OGCNS, 'Filter');
const child = createElementNS(WFS.OGCNS, 'FeatureId');
filter.appendChild(child);
child.setAttribute('fid', fid);
node.appendChild(filter);
};
}
/**
* @param {string|undefined} featurePrefix The prefix of the feature.
* @param {string} featureType The type of the feature.
* @returns {string} The value of the typeName property.
* @private
*/
WFS.getTypeName_ = function(featurePrefix, featureType) {
function getTypeName(featurePrefix, featureType) {
featurePrefix = featurePrefix ? featurePrefix :
WFS.FEATURE_PREFIX;
const prefix = featurePrefix + ':';
@@ -440,28 +428,41 @@ WFS.getTypeName_ = function(featurePrefix, featureType) {
} else {
return prefix + featureType;
}
};
}
/**
* @param {Node} node Node.
* @param {ol.Feature} feature Feature.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeDelete_ = function(node, feature, objectStack) {
function writeDelete(node, feature, objectStack) {
const context = objectStack[objectStack.length - 1];
assert(feature.getId() !== undefined, 26); // Features must have an id set
const featureType = context['featureType'];
const featurePrefix = context['featurePrefix'];
const featureNS = context['featureNS'];
const typeName = WFS.getTypeName_(featurePrefix, featureType);
const typeName = getTypeName(featurePrefix, featureType);
node.setAttribute('typeName', typeName);
setAttributeNS(node, WFS.XMLNS, 'xmlns:' + featurePrefix,
featureNS);
const fid = feature.getId();
if (fid !== undefined) {
WFS.writeOgcFidFilter_(node, fid, objectStack);
writeOgcFidFilter(node, fid, objectStack);
}
}
/**
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
*/
const TRANSACTION_SERIALIZERS = {
'http://www.opengis.net/wfs': {
'Insert': makeChildAppender(writeFeature),
'Update': makeChildAppender(writeUpdate),
'Delete': makeChildAppender(writeDelete),
'Property': makeChildAppender(writeProperty),
'Native': makeChildAppender(writeNative)
}
};
@@ -470,15 +471,14 @@ WFS.writeDelete_ = function(node, feature, objectStack) {
* @param {Node} node Node.
* @param {ol.Feature} feature Feature.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeUpdate_ = function(node, feature, objectStack) {
function writeUpdate(node, feature, objectStack) {
const context = objectStack[objectStack.length - 1];
assert(feature.getId() !== undefined, 27); // Features must have an id set
const featureType = context['featureType'];
const featurePrefix = context['featurePrefix'];
const featureNS = context['featureNS'];
const typeName = WFS.getTypeName_(featurePrefix, featureType);
const typeName = getTypeName(featurePrefix, featureType);
const geometryName = feature.getGeometryName();
node.setAttribute('typeName', typeName);
setAttributeNS(node, WFS.XMLNS, 'xmlns:' + featurePrefix,
@@ -500,21 +500,20 @@ WFS.writeUpdate_ = function(node, feature, objectStack) {
pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ (
{'gmlVersion': context['gmlVersion'], node: node,
'hasZ': context['hasZ'], 'srsName': context['srsName']}),
WFS.TRANSACTION_SERIALIZERS_,
TRANSACTION_SERIALIZERS,
makeSimpleNodeFactory('Property'), values,
objectStack);
WFS.writeOgcFidFilter_(node, fid, objectStack);
writeOgcFidFilter(node, fid, objectStack);
}
};
}
/**
* @param {Node} node Node.
* @param {Object} pair Property name and value.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeProperty_ = function(node, pair, objectStack) {
function writeProperty(node, pair, objectStack) {
const name = createElementNS(WFS.WFSNS, 'Name');
const context = objectStack[objectStack.length - 1];
const gmlVersion = context['gmlVersion'];
@@ -535,7 +534,7 @@ WFS.writeProperty_ = function(node, pair, objectStack) {
XSD.writeStringTextNode(value, pair.value);
}
}
};
}
/**
@@ -543,9 +542,8 @@ WFS.writeProperty_ = function(node, pair, objectStack) {
* @param {{vendorId: string, safeToIgnore: boolean, value: string}}
* nativeElement The native element.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeNative_ = function(node, nativeElement, objectStack) {
function writeNative(node, nativeElement, objectStack) {
if (nativeElement.vendorId) {
node.setAttribute('vendorId', nativeElement.vendorId);
}
@@ -555,20 +553,34 @@ WFS.writeNative_ = function(node, nativeElement, objectStack) {
if (nativeElement.value !== undefined) {
XSD.writeStringTextNode(node, nativeElement.value);
}
};
}
/**
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
* @private
*/
WFS.TRANSACTION_SERIALIZERS_ = {
const GETFEATURE_SERIALIZERS = {
'http://www.opengis.net/wfs': {
'Insert': makeChildAppender(WFS.writeFeature_),
'Update': makeChildAppender(WFS.writeUpdate_),
'Delete': makeChildAppender(WFS.writeDelete_),
'Property': makeChildAppender(WFS.writeProperty_),
'Native': makeChildAppender(WFS.writeNative_)
'Query': makeChildAppender(writeQuery)
},
'http://www.opengis.net/ogc': {
'During': makeChildAppender(writeDuringFilter),
'And': makeChildAppender(writeLogicalFilter),
'Or': makeChildAppender(writeLogicalFilter),
'Not': makeChildAppender(writeNotFilter),
'BBOX': makeChildAppender(writeBboxFilter),
'Contains': makeChildAppender(writeContainsFilter),
'Intersects': makeChildAppender(writeIntersectsFilter),
'Within': makeChildAppender(writeWithinFilter),
'PropertyIsEqualTo': makeChildAppender(writeComparisonFilter),
'PropertyIsNotEqualTo': makeChildAppender(writeComparisonFilter),
'PropertyIsLessThan': makeChildAppender(writeComparisonFilter),
'PropertyIsLessThanOrEqualTo': makeChildAppender(writeComparisonFilter),
'PropertyIsGreaterThan': makeChildAppender(writeComparisonFilter),
'PropertyIsGreaterThanOrEqualTo': makeChildAppender(writeComparisonFilter),
'PropertyIsNull': makeChildAppender(writeIsNullFilter),
'PropertyIsBetween': makeChildAppender(writeIsBetweenFilter),
'PropertyIsLike': makeChildAppender(writeIsLikeFilter)
}
};
@@ -577,9 +589,8 @@ WFS.TRANSACTION_SERIALIZERS_ = {
* @param {Node} node Node.
* @param {string} featureType Feature type.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeQuery_ = function(node, featureType, objectStack) {
function writeQuery(node, featureType, objectStack) {
const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
const featurePrefix = context['featurePrefix'];
const featureNS = context['featureNS'];
@@ -588,7 +599,7 @@ WFS.writeQuery_ = function(node, featureType, objectStack) {
let typeName;
// If feature prefix is not defined, we must not use the default prefix.
if (featurePrefix) {
typeName = WFS.getTypeName_(featurePrefix, featureType);
typeName = getTypeName(featurePrefix, featureType);
} else {
typeName = featureType;
}
@@ -603,101 +614,95 @@ WFS.writeQuery_ = function(node, featureType, objectStack) {
const item = /** @type {ol.XmlNodeStackItem} */ (assign({}, context));
item.node = node;
pushSerializeAndPop(item,
WFS.QUERY_SERIALIZERS_,
QUERY_SERIALIZERS,
makeSimpleNodeFactory('PropertyName'), propertyNames,
objectStack);
const filter = context['filter'];
if (filter) {
const child = createElementNS(WFS.OGCNS, 'Filter');
node.appendChild(child);
WFS.writeFilterCondition_(child, filter, objectStack);
writeFilterCondition(child, filter, objectStack);
}
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Filter} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeFilterCondition_ = function(node, filter, objectStack) {
function writeFilterCondition(node, filter, objectStack) {
/** @type {ol.XmlNodeStackItem} */
const item = {node: node};
pushSerializeAndPop(item,
WFS.GETFEATURE_SERIALIZERS_,
GETFEATURE_SERIALIZERS,
makeSimpleNodeFactory(filter.getTagName()),
[filter], objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Bbox} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeBboxFilter_ = function(node, filter, objectStack) {
function writeBboxFilter(node, filter, objectStack) {
const context = objectStack[objectStack.length - 1];
context['srsName'] = filter.srsName;
WFS.writeOgcPropertyName_(node, filter.geometryName);
writeOgcPropertyName(node, filter.geometryName);
GML3.prototype.writeGeometryElement(node, filter.extent, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Contains} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeContainsFilter_ = function(node, filter, objectStack) {
function writeContainsFilter(node, filter, objectStack) {
const context = objectStack[objectStack.length - 1];
context['srsName'] = filter.srsName;
WFS.writeOgcPropertyName_(node, filter.geometryName);
writeOgcPropertyName(node, filter.geometryName);
GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Intersects} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeIntersectsFilter_ = function(node, filter, objectStack) {
function writeIntersectsFilter(node, filter, objectStack) {
const context = objectStack[objectStack.length - 1];
context['srsName'] = filter.srsName;
WFS.writeOgcPropertyName_(node, filter.geometryName);
writeOgcPropertyName(node, filter.geometryName);
GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Within} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeWithinFilter_ = function(node, filter, objectStack) {
function writeWithinFilter(node, filter, objectStack) {
const context = objectStack[objectStack.length - 1];
context['srsName'] = filter.srsName;
WFS.writeOgcPropertyName_(node, filter.geometryName);
writeOgcPropertyName(node, filter.geometryName);
GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.During} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeDuringFilter_ = function(node, filter, objectStack) {
function writeDuringFilter(node, filter, objectStack) {
const valueReference = createElementNS(WFS.FESNS, 'ValueReference');
XSD.writeStringTextNode(valueReference, filter.propertyName);
@@ -709,190 +714,150 @@ WFS.writeDuringFilter_ = function(node, filter, objectStack) {
const begin = createElementNS(GMLBase.GMLNS, 'begin');
timePeriod.appendChild(begin);
WFS.writeTimeInstant_(begin, filter.begin);
writeTimeInstant(begin, filter.begin);
const end = createElementNS(GMLBase.GMLNS, 'end');
timePeriod.appendChild(end);
WFS.writeTimeInstant_(end, filter.end);
};
writeTimeInstant(end, filter.end);
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.LogicalNary} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeLogicalFilter_ = function(node, filter, objectStack) {
function writeLogicalFilter(node, filter, objectStack) {
/** @type {ol.XmlNodeStackItem} */
const item = {node: node};
const conditions = filter.conditions;
for (let i = 0, ii = conditions.length; i < ii; ++i) {
const condition = conditions[i];
pushSerializeAndPop(item,
WFS.GETFEATURE_SERIALIZERS_,
GETFEATURE_SERIALIZERS,
makeSimpleNodeFactory(condition.getTagName()),
[condition], objectStack);
}
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.Not} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeNotFilter_ = function(node, filter, objectStack) {
function writeNotFilter(node, filter, objectStack) {
/** @type {ol.XmlNodeStackItem} */
const item = {node: node};
const condition = filter.condition;
pushSerializeAndPop(item,
WFS.GETFEATURE_SERIALIZERS_,
GETFEATURE_SERIALIZERS,
makeSimpleNodeFactory(condition.getTagName()),
[condition], objectStack);
};
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.ComparisonBinary} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeComparisonFilter_ = function(node, filter, objectStack) {
function writeComparisonFilter(node, filter, objectStack) {
if (filter.matchCase !== undefined) {
node.setAttribute('matchCase', filter.matchCase.toString());
}
WFS.writeOgcPropertyName_(node, filter.propertyName);
WFS.writeOgcLiteral_(node, '' + filter.expression);
};
writeOgcPropertyName(node, filter.propertyName);
writeOgcLiteral(node, '' + filter.expression);
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.IsNull} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeIsNullFilter_ = function(node, filter, objectStack) {
WFS.writeOgcPropertyName_(node, filter.propertyName);
};
function writeIsNullFilter(node, filter, objectStack) {
writeOgcPropertyName(node, filter.propertyName);
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.IsBetween} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeIsBetweenFilter_ = function(node, filter, objectStack) {
WFS.writeOgcPropertyName_(node, filter.propertyName);
function writeIsBetweenFilter(node, filter, objectStack) {
writeOgcPropertyName(node, filter.propertyName);
const lowerBoundary = createElementNS(WFS.OGCNS, 'LowerBoundary');
node.appendChild(lowerBoundary);
WFS.writeOgcLiteral_(lowerBoundary, '' + filter.lowerBoundary);
writeOgcLiteral(lowerBoundary, '' + filter.lowerBoundary);
const upperBoundary = createElementNS(WFS.OGCNS, 'UpperBoundary');
node.appendChild(upperBoundary);
WFS.writeOgcLiteral_(upperBoundary, '' + filter.upperBoundary);
};
writeOgcLiteral(upperBoundary, '' + filter.upperBoundary);
}
/**
* @param {Node} node Node.
* @param {ol.format.filter.IsLike} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeIsLikeFilter_ = function(node, filter, objectStack) {
function writeIsLikeFilter(node, filter, objectStack) {
node.setAttribute('wildCard', filter.wildCard);
node.setAttribute('singleChar', filter.singleChar);
node.setAttribute('escapeChar', filter.escapeChar);
if (filter.matchCase !== undefined) {
node.setAttribute('matchCase', filter.matchCase.toString());
}
WFS.writeOgcPropertyName_(node, filter.propertyName);
WFS.writeOgcLiteral_(node, '' + filter.pattern);
};
writeOgcPropertyName(node, filter.propertyName);
writeOgcLiteral(node, '' + filter.pattern);
}
/**
* @param {string} tagName Tag name.
* @param {Node} node Node.
* @param {string} value Value.
* @private
*/
WFS.writeOgcExpression_ = function(tagName, node, value) {
function writeOgcExpression(tagName, node, value) {
const property = createElementNS(WFS.OGCNS, tagName);
XSD.writeStringTextNode(property, value);
node.appendChild(property);
};
}
/**
* @param {Node} node Node.
* @param {string} value PropertyName value.
* @private
*/
WFS.writeOgcPropertyName_ = function(node, value) {
WFS.writeOgcExpression_('PropertyName', node, value);
};
function writeOgcPropertyName(node, value) {
writeOgcExpression('PropertyName', node, value);
}
/**
* @param {Node} node Node.
* @param {string} value PropertyName value.
* @private
*/
WFS.writeOgcLiteral_ = function(node, value) {
WFS.writeOgcExpression_('Literal', node, value);
};
function writeOgcLiteral(node, value) {
writeOgcExpression('Literal', node, value);
}
/**
* @param {Node} node Node.
* @param {string} time PropertyName value.
* @private
*/
WFS.writeTimeInstant_ = function(node, time) {
function writeTimeInstant(node, time) {
const timeInstant = createElementNS(GMLBase.GMLNS, 'TimeInstant');
node.appendChild(timeInstant);
const timePosition = createElementNS(GMLBase.GMLNS, 'timePosition');
timeInstant.appendChild(timePosition);
XSD.writeStringTextNode(timePosition, time);
};
/**
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
* @private
*/
WFS.GETFEATURE_SERIALIZERS_ = {
'http://www.opengis.net/wfs': {
'Query': makeChildAppender(WFS.writeQuery_)
},
'http://www.opengis.net/ogc': {
'During': makeChildAppender(WFS.writeDuringFilter_),
'And': makeChildAppender(WFS.writeLogicalFilter_),
'Or': makeChildAppender(WFS.writeLogicalFilter_),
'Not': makeChildAppender(WFS.writeNotFilter_),
'BBOX': makeChildAppender(WFS.writeBboxFilter_),
'Contains': makeChildAppender(WFS.writeContainsFilter_),
'Intersects': makeChildAppender(WFS.writeIntersectsFilter_),
'Within': makeChildAppender(WFS.writeWithinFilter_),
'PropertyIsEqualTo': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsNotEqualTo': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsLessThan': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsLessThanOrEqualTo': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsGreaterThan': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsGreaterThanOrEqualTo': makeChildAppender(WFS.writeComparisonFilter_),
'PropertyIsNull': makeChildAppender(WFS.writeIsNullFilter_),
'PropertyIsBetween': makeChildAppender(WFS.writeIsBetweenFilter_),
'PropertyIsLike': makeChildAppender(WFS.writeIsLikeFilter_)
}
};
}
/**
@@ -904,7 +869,7 @@ WFS.GETFEATURE_SERIALIZERS_ = {
*/
WFS.writeFilter = function(filter) {
const child = createElementNS(WFS.OGCNS, 'Filter');
WFS.writeFilterCondition_(child, filter, []);
writeFilterCondition(child, filter, []);
return child;
};
@@ -913,17 +878,16 @@ WFS.writeFilter = function(filter) {
* @param {Node} node Node.
* @param {Array.<string>} featureTypes Feature types.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
WFS.writeGetFeature_ = function(node, featureTypes, objectStack) {
function writeGetFeature(node, featureTypes, objectStack) {
const context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
const item = /** @type {ol.XmlNodeStackItem} */ (assign({}, context));
item.node = node;
pushSerializeAndPop(item,
WFS.GETFEATURE_SERIALIZERS_,
GETFEATURE_SERIALIZERS,
makeSimpleNodeFactory('Query'), featureTypes,
objectStack);
};
}
/**
@@ -985,7 +949,7 @@ WFS.prototype.writeGetFeature = function(options) {
};
assert(Array.isArray(options.featureTypes),
11); // `options.featureTypes` should be an Array
WFS.writeGetFeature_(node, /** @type {!Array.<string>} */ (options.featureTypes), [context]);
writeGetFeature(node, /** @type {!Array.<string>} */ (options.featureTypes), [context]);
return node;
};
@@ -1028,7 +992,7 @@ WFS.prototype.writeTransaction = function(inserts, updates, deletes,
'gmlVersion': gmlVersion, 'hasZ': options.hasZ, 'srsName': options.srsName};
assign(obj, baseObj);
pushSerializeAndPop(obj,
WFS.TRANSACTION_SERIALIZERS_,
TRANSACTION_SERIALIZERS,
makeSimpleNodeFactory('Insert'), inserts,
objectStack);
}
@@ -1038,7 +1002,7 @@ WFS.prototype.writeTransaction = function(inserts, updates, deletes,
'gmlVersion': gmlVersion, 'hasZ': options.hasZ, 'srsName': options.srsName};
assign(obj, baseObj);
pushSerializeAndPop(obj,
WFS.TRANSACTION_SERIALIZERS_,
TRANSACTION_SERIALIZERS,
makeSimpleNodeFactory('Update'), updates,
objectStack);
}
@@ -1046,7 +1010,7 @@ WFS.prototype.writeTransaction = function(inserts, updates, deletes,
pushSerializeAndPop({node: node, 'featureNS': options.featureNS,
'featureType': options.featureType, 'featurePrefix': featurePrefix,
'gmlVersion': gmlVersion, 'srsName': options.srsName},
WFS.TRANSACTION_SERIALIZERS_,
TRANSACTION_SERIALIZERS,
makeSimpleNodeFactory('Delete'), deletes,
objectStack);
}
@@ -1054,7 +1018,7 @@ WFS.prototype.writeTransaction = function(inserts, updates, deletes,
pushSerializeAndPop({node: node, 'featureNS': options.featureNS,
'featureType': options.featureType, 'featurePrefix': featurePrefix,
'gmlVersion': gmlVersion, 'srsName': options.srsName},
WFS.TRANSACTION_SERIALIZERS_,
TRANSACTION_SERIALIZERS,
makeSimpleNodeFactory('Native'), options.nativeElements,
objectStack);
}

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,7 @@ import XSD from '../format/XSD.js';
import {makeArrayPusher, makeObjectPropertyPusher, makeObjectPropertySetter,
makeStructureNS, pushParseAndPop} from '../xml.js';
/**
* @classdesc
* Format for reading WMS capabilities data
@@ -29,6 +30,242 @@ const WMSCapabilities = function() {
inherits(WMSCapabilities, XML);
/**
* @const
* @type {Array.<string>}
*/
const NAMESPACE_URIS = [
null,
'http://www.opengis.net/wms'
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Service': makeObjectPropertySetter(readService),
'Capability': makeObjectPropertySetter(readCapability)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CAPABILITY_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Request': makeObjectPropertySetter(readRequest),
'Exception': makeObjectPropertySetter(readException),
'Layer': makeObjectPropertySetter(readCapabilityLayer)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const SERVICE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'KeywordList': makeObjectPropertySetter(readKeywordList),
'OnlineResource': makeObjectPropertySetter(XLink.readHref),
'ContactInformation': makeObjectPropertySetter(readContactInformation),
'Fees': makeObjectPropertySetter(XSD.readString),
'AccessConstraints': makeObjectPropertySetter(XSD.readString),
'LayerLimit': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MaxWidth': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MaxHeight': makeObjectPropertySetter(XSD.readNonNegativeInteger)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONTACT_INFORMATION_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'ContactPersonPrimary': makeObjectPropertySetter(readContactPersonPrimary),
'ContactPosition': makeObjectPropertySetter(XSD.readString),
'ContactAddress': makeObjectPropertySetter(readContactAddress),
'ContactVoiceTelephone': makeObjectPropertySetter(XSD.readString),
'ContactFacsimileTelephone': makeObjectPropertySetter(XSD.readString),
'ContactElectronicMailAddress': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONTACT_PERSON_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'ContactPerson': makeObjectPropertySetter(XSD.readString),
'ContactOrganization': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONTACT_ADDRESS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'AddressType': makeObjectPropertySetter(XSD.readString),
'Address': makeObjectPropertySetter(XSD.readString),
'City': makeObjectPropertySetter(XSD.readString),
'StateOrProvince': makeObjectPropertySetter(XSD.readString),
'PostCode': makeObjectPropertySetter(XSD.readString),
'Country': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const EXCEPTION_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Format': makeArrayPusher(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const LAYER_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'KeywordList': makeObjectPropertySetter(readKeywordList),
'CRS': makeObjectPropertyPusher(XSD.readString),
'EX_GeographicBoundingBox': makeObjectPropertySetter(readEXGeographicBoundingBox),
'BoundingBox': makeObjectPropertyPusher(readBoundingBox),
'Dimension': makeObjectPropertyPusher(readDimension),
'Attribution': makeObjectPropertySetter(readAttribution),
'AuthorityURL': makeObjectPropertyPusher(readAuthorityURL),
'Identifier': makeObjectPropertyPusher(XSD.readString),
'MetadataURL': makeObjectPropertyPusher(readMetadataURL),
'DataURL': makeObjectPropertyPusher(readFormatOnlineresource),
'FeatureListURL': makeObjectPropertyPusher(readFormatOnlineresource),
'Style': makeObjectPropertyPusher(readStyle),
'MinScaleDenominator': makeObjectPropertySetter(XSD.readDecimal),
'MaxScaleDenominator': makeObjectPropertySetter(XSD.readDecimal),
'Layer': makeObjectPropertyPusher(readLayer)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const ATTRIBUTION_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Title': makeObjectPropertySetter(XSD.readString),
'OnlineResource': makeObjectPropertySetter(XLink.readHref),
'LogoURL': makeObjectPropertySetter(readSizedFormatOnlineresource)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS =
makeStructureNS(NAMESPACE_URIS, {
'westBoundLongitude': makeObjectPropertySetter(XSD.readDecimal),
'eastBoundLongitude': makeObjectPropertySetter(XSD.readDecimal),
'southBoundLatitude': makeObjectPropertySetter(XSD.readDecimal),
'northBoundLatitude': makeObjectPropertySetter(XSD.readDecimal)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const REQUEST_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'GetCapabilities': makeObjectPropertySetter(readOperationType),
'GetMap': makeObjectPropertySetter(readOperationType),
'GetFeatureInfo': makeObjectPropertySetter(readOperationType)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const OPERATIONTYPE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Format': makeObjectPropertyPusher(XSD.readString),
'DCPType': makeObjectPropertyPusher(readDCPType)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const DCPTYPE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'HTTP': makeObjectPropertySetter(readHTTP)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const HTTP_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Get': makeObjectPropertySetter(readFormatOnlineresource),
'Post': makeObjectPropertySetter(readFormatOnlineresource)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const STYLE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'LegendURL': makeObjectPropertyPusher(readSizedFormatOnlineresource),
'StyleSheetURL': makeObjectPropertySetter(readFormatOnlineresource),
'StyleURL': makeObjectPropertySetter(readFormatOnlineresource)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const FORMAT_ONLINERESOURCE_PARSERS =
makeStructureNS(NAMESPACE_URIS, {
'Format': makeObjectPropertySetter(XSD.readString),
'OnlineResource': makeObjectPropertySetter(XLink.readHref)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const KEYWORDLIST_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Keyword': makeArrayPusher(XSD.readString)
});
/**
* Read a WMS capabilities document.
*
@@ -60,30 +297,28 @@ WMSCapabilities.prototype.readFromNode = function(node) {
this.version = node.getAttribute('version').trim();
const wmsCapabilityObject = pushParseAndPop({
'version': this.version
}, WMSCapabilities.PARSERS_, node, []);
}, PARSERS, node, []);
return wmsCapabilityObject ? wmsCapabilityObject : null;
};
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Attribution object.
*/
WMSCapabilities.readAttribution_ = function(node, objectStack) {
function readAttribution(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.ATTRIBUTION_PARSERS_, node, objectStack);
};
{}, ATTRIBUTION_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object} Bounding box object.
*/
WMSCapabilities.readBoundingBox_ = function(node, objectStack) {
function readBoundingBox(node, objectStack) {
const extent = [
XSD.readDecimalString(node.getAttribute('minx')),
XSD.readDecimalString(node.getAttribute('miny')),
@@ -101,19 +336,18 @@ WMSCapabilities.readBoundingBox_ = function(node, objectStack) {
'extent': extent,
'res': resolutions
};
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {ol.Extent|undefined} Bounding box object.
*/
WMSCapabilities.readEXGeographicBoundingBox_ = function(node, objectStack) {
function readEXGeographicBoundingBox(node, objectStack) {
const geographicBoundingBox = pushParseAndPop(
{},
WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_,
EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS,
node, objectStack);
if (!geographicBoundingBox) {
return undefined;
@@ -134,108 +368,100 @@ WMSCapabilities.readEXGeographicBoundingBox_ = function(node, objectStack) {
westBoundLongitude, southBoundLatitude,
eastBoundLongitude, northBoundLatitude
];
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Capability object.
*/
WMSCapabilities.readCapability_ = function(node, objectStack) {
function readCapability(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.CAPABILITY_PARSERS_, node, objectStack);
};
{}, CAPABILITY_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Service object.
*/
WMSCapabilities.readService_ = function(node, objectStack) {
function readService(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.SERVICE_PARSERS_, node, objectStack);
};
{}, SERVICE_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Contact information object.
*/
WMSCapabilities.readContactInformation_ = function(node, objectStack) {
function readContactInformation(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.CONTACT_INFORMATION_PARSERS_,
{}, CONTACT_INFORMATION_PARSERS,
node, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Contact person object.
*/
WMSCapabilities.readContactPersonPrimary_ = function(node, objectStack) {
function readContactPersonPrimary(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.CONTACT_PERSON_PARSERS_,
{}, CONTACT_PERSON_PARSERS,
node, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Contact address object.
*/
WMSCapabilities.readContactAddress_ = function(node, objectStack) {
function readContactAddress(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.CONTACT_ADDRESS_PARSERS_,
{}, CONTACT_ADDRESS_PARSERS,
node, objectStack);
};
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Array.<string>|undefined} Format array.
*/
WMSCapabilities.readException_ = function(node, objectStack) {
function readException(node, objectStack) {
return pushParseAndPop(
[], WMSCapabilities.EXCEPTION_PARSERS_, node, objectStack);
};
[], EXCEPTION_PARSERS, node, objectStack);
}
/**
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @private
* @return {Object|undefined} Layer object.
*/
WMSCapabilities.readCapabilityLayer_ = function(node, objectStack) {
function readCapabilityLayer(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.LAYER_PARSERS_, node, objectStack);
};
{}, LAYER_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Layer object.
*/
WMSCapabilities.readLayer_ = function(node, objectStack) {
function readLayer(node, objectStack) {
const parentLayerObject = /** @type {Object.<string,*>} */
(objectStack[objectStack.length - 1]);
const layerObject = pushParseAndPop(
{}, WMSCapabilities.LAYER_PARSERS_, node, objectStack);
{}, LAYER_PARSERS, node, objectStack);
if (!layerObject) {
return undefined;
@@ -300,16 +526,15 @@ WMSCapabilities.readLayer_ = function(node, objectStack) {
});
return layerObject;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object} Dimension object.
*/
WMSCapabilities.readDimension_ = function(node, objectStack) {
function readDimension(node, objectStack) {
const dimensionObject = {
'name': node.getAttribute('name'),
'units': node.getAttribute('units'),
@@ -323,79 +548,73 @@ WMSCapabilities.readDimension_ = function(node, objectStack) {
'values': XSD.readString(node)
};
return dimensionObject;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Online resource object.
*/
WMSCapabilities.readFormatOnlineresource_ = function(node, objectStack) {
function readFormatOnlineresource(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_,
{}, FORMAT_ONLINERESOURCE_PARSERS,
node, objectStack);
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Request object.
*/
WMSCapabilities.readRequest_ = function(node, objectStack) {
function readRequest(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.REQUEST_PARSERS_, node, objectStack);
};
{}, REQUEST_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} DCP type object.
*/
WMSCapabilities.readDCPType_ = function(node, objectStack) {
function readDCPType(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.DCPTYPE_PARSERS_, node, objectStack);
};
{}, DCPTYPE_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} HTTP object.
*/
WMSCapabilities.readHTTP_ = function(node, objectStack) {
function readHTTP(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.HTTP_PARSERS_, node, objectStack);
};
{}, HTTP_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Operation type object.
*/
WMSCapabilities.readOperationType_ = function(node, objectStack) {
function readOperationType(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.OPERATIONTYPE_PARSERS_, node, objectStack);
};
{}, OPERATIONTYPE_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Online resource object.
*/
WMSCapabilities.readSizedFormatOnlineresource_ = function(node, objectStack) {
function readSizedFormatOnlineresource(node, objectStack) {
const formatOnlineresource =
WMSCapabilities.readFormatOnlineresource_(node, objectStack);
readFormatOnlineresource(node, objectStack);
if (formatOnlineresource) {
const size = [
XSD.readNonNegativeIntegerString(node.getAttribute('width')),
@@ -405,368 +624,61 @@ WMSCapabilities.readSizedFormatOnlineresource_ = function(node, objectStack) {
return formatOnlineresource;
}
return undefined;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Authority URL object.
*/
WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {
function readAuthorityURL(node, objectStack) {
const authorityObject =
WMSCapabilities.readFormatOnlineresource_(node, objectStack);
readFormatOnlineresource(node, objectStack);
if (authorityObject) {
authorityObject['name'] = node.getAttribute('name');
return authorityObject;
}
return undefined;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Metadata URL object.
*/
WMSCapabilities.readMetadataURL_ = function(node, objectStack) {
function readMetadataURL(node, objectStack) {
const metadataObject =
WMSCapabilities.readFormatOnlineresource_(node, objectStack);
readFormatOnlineresource(node, objectStack);
if (metadataObject) {
metadataObject['type'] = node.getAttribute('type');
return metadataObject;
}
return undefined;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Style object.
*/
WMSCapabilities.readStyle_ = function(node, objectStack) {
function readStyle(node, objectStack) {
return pushParseAndPop(
{}, WMSCapabilities.STYLE_PARSERS_, node, objectStack);
};
{}, STYLE_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Array.<string>|undefined} Keyword list.
*/
WMSCapabilities.readKeywordList_ = function(node, objectStack) {
function readKeywordList(node, objectStack) {
return pushParseAndPop(
[], WMSCapabilities.KEYWORDLIST_PARSERS_, node, objectStack);
};
[], KEYWORDLIST_PARSERS, node, objectStack);
}
/**
* @const
* @private
* @type {Array.<string>}
*/
WMSCapabilities.NAMESPACE_URIS_ = [
null,
'http://www.opengis.net/wms'
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Service': makeObjectPropertySetter(
WMSCapabilities.readService_),
'Capability': makeObjectPropertySetter(
WMSCapabilities.readCapability_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.CAPABILITY_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Request': makeObjectPropertySetter(
WMSCapabilities.readRequest_),
'Exception': makeObjectPropertySetter(
WMSCapabilities.readException_),
'Layer': makeObjectPropertySetter(
WMSCapabilities.readCapabilityLayer_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.SERVICE_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'KeywordList': makeObjectPropertySetter(
WMSCapabilities.readKeywordList_),
'OnlineResource': makeObjectPropertySetter(
XLink.readHref),
'ContactInformation': makeObjectPropertySetter(
WMSCapabilities.readContactInformation_),
'Fees': makeObjectPropertySetter(XSD.readString),
'AccessConstraints': makeObjectPropertySetter(
XSD.readString),
'LayerLimit': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MaxWidth': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MaxHeight': makeObjectPropertySetter(
XSD.readNonNegativeInteger)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'ContactPersonPrimary': makeObjectPropertySetter(
WMSCapabilities.readContactPersonPrimary_),
'ContactPosition': makeObjectPropertySetter(
XSD.readString),
'ContactAddress': makeObjectPropertySetter(
WMSCapabilities.readContactAddress_),
'ContactVoiceTelephone': makeObjectPropertySetter(
XSD.readString),
'ContactFacsimileTelephone': makeObjectPropertySetter(
XSD.readString),
'ContactElectronicMailAddress': makeObjectPropertySetter(
XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.CONTACT_PERSON_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'ContactPerson': makeObjectPropertySetter(
XSD.readString),
'ContactOrganization': makeObjectPropertySetter(
XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'AddressType': makeObjectPropertySetter(XSD.readString),
'Address': makeObjectPropertySetter(XSD.readString),
'City': makeObjectPropertySetter(XSD.readString),
'StateOrProvince': makeObjectPropertySetter(
XSD.readString),
'PostCode': makeObjectPropertySetter(XSD.readString),
'Country': makeObjectPropertySetter(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.EXCEPTION_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Format': makeArrayPusher(XSD.readString)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.LAYER_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'KeywordList': makeObjectPropertySetter(
WMSCapabilities.readKeywordList_),
'CRS': makeObjectPropertyPusher(XSD.readString),
'EX_GeographicBoundingBox': makeObjectPropertySetter(
WMSCapabilities.readEXGeographicBoundingBox_),
'BoundingBox': makeObjectPropertyPusher(
WMSCapabilities.readBoundingBox_),
'Dimension': makeObjectPropertyPusher(
WMSCapabilities.readDimension_),
'Attribution': makeObjectPropertySetter(
WMSCapabilities.readAttribution_),
'AuthorityURL': makeObjectPropertyPusher(
WMSCapabilities.readAuthorityURL_),
'Identifier': makeObjectPropertyPusher(XSD.readString),
'MetadataURL': makeObjectPropertyPusher(
WMSCapabilities.readMetadataURL_),
'DataURL': makeObjectPropertyPusher(
WMSCapabilities.readFormatOnlineresource_),
'FeatureListURL': makeObjectPropertyPusher(
WMSCapabilities.readFormatOnlineresource_),
'Style': makeObjectPropertyPusher(
WMSCapabilities.readStyle_),
'MinScaleDenominator': makeObjectPropertySetter(
XSD.readDecimal),
'MaxScaleDenominator': makeObjectPropertySetter(
XSD.readDecimal),
'Layer': makeObjectPropertyPusher(
WMSCapabilities.readLayer_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.ATTRIBUTION_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Title': makeObjectPropertySetter(XSD.readString),
'OnlineResource': makeObjectPropertySetter(
XLink.readHref),
'LogoURL': makeObjectPropertySetter(
WMSCapabilities.readSizedFormatOnlineresource_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ =
makeStructureNS(WMSCapabilities.NAMESPACE_URIS_, {
'westBoundLongitude': makeObjectPropertySetter(
XSD.readDecimal),
'eastBoundLongitude': makeObjectPropertySetter(
XSD.readDecimal),
'southBoundLatitude': makeObjectPropertySetter(
XSD.readDecimal),
'northBoundLatitude': makeObjectPropertySetter(
XSD.readDecimal)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.REQUEST_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'GetCapabilities': makeObjectPropertySetter(
WMSCapabilities.readOperationType_),
'GetMap': makeObjectPropertySetter(
WMSCapabilities.readOperationType_),
'GetFeatureInfo': makeObjectPropertySetter(
WMSCapabilities.readOperationType_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.OPERATIONTYPE_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Format': makeObjectPropertyPusher(XSD.readString),
'DCPType': makeObjectPropertyPusher(
WMSCapabilities.readDCPType_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.DCPTYPE_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'HTTP': makeObjectPropertySetter(
WMSCapabilities.readHTTP_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.HTTP_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Get': makeObjectPropertySetter(
WMSCapabilities.readFormatOnlineresource_),
'Post': makeObjectPropertySetter(
WMSCapabilities.readFormatOnlineresource_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.STYLE_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Name': makeObjectPropertySetter(XSD.readString),
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'LegendURL': makeObjectPropertyPusher(
WMSCapabilities.readSizedFormatOnlineresource_),
'StyleSheetURL': makeObjectPropertySetter(
WMSCapabilities.readFormatOnlineresource_),
'StyleURL': makeObjectPropertySetter(
WMSCapabilities.readFormatOnlineresource_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ =
makeStructureNS(WMSCapabilities.NAMESPACE_URIS_, {
'Format': makeObjectPropertySetter(XSD.readString),
'OnlineResource': makeObjectPropertySetter(
XLink.readHref)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMSCapabilities.KEYWORDLIST_PARSERS_ = makeStructureNS(
WMSCapabilities.NAMESPACE_URIS_, {
'Keyword': makeArrayPusher(XSD.readString)
});
export default WMSCapabilities;

View File

@@ -51,17 +51,15 @@ inherits(WMSGetFeatureInfo, XMLFeature);
/**
* @const
* @type {string}
* @private
*/
WMSGetFeatureInfo.featureIdentifier_ = '_feature';
const featureIdentifier = '_feature';
/**
* @const
* @type {string}
* @private
*/
WMSGetFeatureInfo.layerIdentifier_ = '_layer';
const layerIdentifier = '_layer';
/**
@@ -102,7 +100,7 @@ WMSGetFeatureInfo.prototype.readFeatures_ = function(node, objectStack) {
}
const context = objectStack[0];
const toRemove = WMSGetFeatureInfo.layerIdentifier_;
const toRemove = layerIdentifier;
const layerName = layer.localName.replace(toRemove, '');
if (this.layers_ && !includes(this.layers_, layerName)) {
@@ -110,7 +108,7 @@ WMSGetFeatureInfo.prototype.readFeatures_ = function(node, objectStack) {
}
const featureType = layerName +
WMSGetFeatureInfo.featureIdentifier_;
featureIdentifier;
context['featureType'] = featureType;
context['featureNS'] = this.featureNS_;

View File

@@ -31,6 +31,168 @@ const WMTSCapabilities = function() {
inherits(WMTSCapabilities, XML);
/**
* @const
* @type {Array.<string>}
*/
const NAMESPACE_URIS = [
null,
'http://www.opengis.net/wmts/1.0'
];
/**
* @const
* @type {Array.<string>}
*/
const OWS_NAMESPACE_URIS = [
null,
'http://www.opengis.net/ows/1.1'
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Contents': makeObjectPropertySetter(readContents)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const CONTENTS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Layer': makeObjectPropertyPusher(readLayer),
'TileMatrixSet': makeObjectPropertyPusher(readTileMatrixSet)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const LAYER_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Style': makeObjectPropertyPusher(readStyle),
'Format': makeObjectPropertyPusher(XSD.readString),
'TileMatrixSetLink': makeObjectPropertyPusher(readTileMatrixSetLink),
'Dimension': makeObjectPropertyPusher(readDimensions),
'ResourceURL': makeObjectPropertyPusher(readResourceUrl)
}, makeStructureNS(OWS_NAMESPACE_URIS, {
'Title': makeObjectPropertySetter(XSD.readString),
'Abstract': makeObjectPropertySetter(XSD.readString),
'WGS84BoundingBox': makeObjectPropertySetter(readWgs84BoundingBox),
'Identifier': makeObjectPropertySetter(XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const STYLE_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'LegendURL': makeObjectPropertyPusher(readLegendUrl)
}, makeStructureNS(OWS_NAMESPACE_URIS, {
'Title': makeObjectPropertySetter(XSD.readString),
'Identifier': makeObjectPropertySetter(XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const TMS_LINKS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'TileMatrixSet': makeObjectPropertySetter(XSD.readString),
'TileMatrixSetLimits': makeObjectPropertySetter(readTileMatrixLimitsList)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const TMS_LIMITS_LIST_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'TileMatrixLimits': makeArrayPusher(readTileMatrixLimits)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const TMS_LIMITS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'TileMatrix': makeObjectPropertySetter(XSD.readString),
'MinTileRow': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MaxTileRow': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MinTileCol': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MaxTileCol': makeObjectPropertySetter(XSD.readNonNegativeInteger)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const DIMENSION_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'Default': makeObjectPropertySetter(XSD.readString),
'Value': makeObjectPropertyPusher(XSD.readString)
}, makeStructureNS(OWS_NAMESPACE_URIS, {
'Identifier': makeObjectPropertySetter(XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const WGS84_BBOX_READERS = makeStructureNS(
OWS_NAMESPACE_URIS, {
'LowerCorner': makeArrayPusher(readCoordinates),
'UpperCorner': makeArrayPusher(readCoordinates)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const TMS_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'WellKnownScaleSet': makeObjectPropertySetter(XSD.readString),
'TileMatrix': makeObjectPropertyPusher(readTileMatrix)
}, makeStructureNS(OWS_NAMESPACE_URIS, {
'SupportedCRS': makeObjectPropertySetter(XSD.readString),
'Identifier': makeObjectPropertySetter(XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
*/
const TM_PARSERS = makeStructureNS(
NAMESPACE_URIS, {
'TopLeftCorner': makeObjectPropertySetter(readCoordinates),
'ScaleDenominator': makeObjectPropertySetter(XSD.readDecimal),
'TileWidth': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'TileHeight': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MatrixWidth': makeObjectPropertySetter(XSD.readNonNegativeInteger),
'MatrixHeight': makeObjectPropertySetter(XSD.readNonNegativeInteger)
}, makeStructureNS(OWS_NAMESPACE_URIS, {
'Identifier': makeObjectPropertySetter(XSD.readString)
}));
/**
* Read a WMTS capabilities document.
*
@@ -66,56 +228,52 @@ WMTSCapabilities.prototype.readFromNode = function(node) {
}
WMTSCapabilityObject['version'] = version;
WMTSCapabilityObject = pushParseAndPop(WMTSCapabilityObject,
WMTSCapabilities.PARSERS_, node, []);
PARSERS, node, []);
return WMTSCapabilityObject ? WMTSCapabilityObject : null;
};
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Attribution object.
*/
WMTSCapabilities.readContents_ = function(node, objectStack) {
function readContents(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.CONTENTS_PARSERS_, node, objectStack);
};
CONTENTS_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Layers object.
*/
WMTSCapabilities.readLayer_ = function(node, objectStack) {
function readLayer(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.LAYER_PARSERS_, node, objectStack);
};
LAYER_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Tile Matrix Set object.
*/
WMTSCapabilities.readTileMatrixSet_ = function(node, objectStack) {
function readTileMatrixSet(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.TMS_PARSERS_, node, objectStack);
};
TMS_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Style object.
*/
WMTSCapabilities.readStyle_ = function(node, objectStack) {
function readStyle(node, objectStack) {
const style = pushParseAndPop({},
WMTSCapabilities.STYLE_PARSERS_, node, objectStack);
STYLE_PARSERS, node, objectStack);
if (!style) {
return undefined;
}
@@ -123,41 +281,38 @@ WMTSCapabilities.readStyle_ = function(node, objectStack) {
style['isDefault'] = isDefault;
return style;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Tile Matrix Set Link object.
*/
WMTSCapabilities.readTileMatrixSetLink_ = function(node,
function readTileMatrixSetLink(node,
objectStack) {
return pushParseAndPop({},
WMTSCapabilities.TMS_LINKS_PARSERS_, node, objectStack);
};
TMS_LINKS_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Dimension object.
*/
WMTSCapabilities.readDimensions_ = function(node, objectStack) {
function readDimensions(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.DIMENSION_PARSERS_, node, objectStack);
};
DIMENSION_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Resource URL object.
*/
WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {
function readResourceUrl(node, objectStack) {
const format = node.getAttribute('format');
const template = node.getAttribute('template');
const resourceType = node.getAttribute('resourceType');
@@ -172,46 +327,43 @@ WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {
resource['resourceType'] = resourceType;
}
return resource;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} WGS84 BBox object.
*/
WMTSCapabilities.readWgs84BoundingBox_ = function(node, objectStack) {
function readWgs84BoundingBox(node, objectStack) {
const coordinates = pushParseAndPop([],
WMTSCapabilities.WGS84_BBOX_READERS_, node, objectStack);
WGS84_BBOX_READERS, node, objectStack);
if (coordinates.length != 2) {
return undefined;
}
return boundingExtent(coordinates);
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Legend object.
*/
WMTSCapabilities.readLegendUrl_ = function(node, objectStack) {
function readLegendUrl(node, objectStack) {
const legend = {};
legend['format'] = node.getAttribute('format');
legend['href'] = XLink.readHref(node);
return legend;
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} Coordinates object.
*/
WMTSCapabilities.readCoordinates_ = function(node, objectStack) {
function readCoordinates(node, objectStack) {
const coordinates = XSD.readString(node).split(' ');
if (!coordinates || coordinates.length != 2) {
return undefined;
@@ -222,257 +374,42 @@ WMTSCapabilities.readCoordinates_ = function(node, objectStack) {
return undefined;
}
return [x, y];
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} TileMatrix object.
*/
WMTSCapabilities.readTileMatrix_ = function(node, objectStack) {
function readTileMatrix(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.TM_PARSERS_, node, objectStack);
};
TM_PARSERS, node, objectStack);
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} TileMatrixSetLimits Object.
*/
WMTSCapabilities.readTileMatrixLimitsList_ = function(node,
function readTileMatrixLimitsList(node,
objectStack) {
return pushParseAndPop([],
WMTSCapabilities.TMS_LIMITS_LIST_PARSERS_, node,
TMS_LIMITS_LIST_PARSERS, node,
objectStack);
};
}
/**
* @private
* @param {Node} node Node.
* @param {Array.<*>} objectStack Object stack.
* @return {Object|undefined} TileMatrixLimits Array.
*/
WMTSCapabilities.readTileMatrixLimits_ = function(node, objectStack) {
function readTileMatrixLimits(node, objectStack) {
return pushParseAndPop({},
WMTSCapabilities.TMS_LIMITS_PARSERS_, node, objectStack);
};
TMS_LIMITS_PARSERS, node, objectStack);
}
/**
* @const
* @private
* @type {Array.<string>}
*/
WMTSCapabilities.NAMESPACE_URIS_ = [
null,
'http://www.opengis.net/wmts/1.0'
];
/**
* @const
* @private
* @type {Array.<string>}
*/
WMTSCapabilities.OWS_NAMESPACE_URIS_ = [
null,
'http://www.opengis.net/ows/1.1'
];
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'Contents': makeObjectPropertySetter(
WMTSCapabilities.readContents_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.CONTENTS_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'Layer': makeObjectPropertyPusher(
WMTSCapabilities.readLayer_),
'TileMatrixSet': makeObjectPropertyPusher(
WMTSCapabilities.readTileMatrixSet_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.LAYER_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'Style': makeObjectPropertyPusher(
WMTSCapabilities.readStyle_),
'Format': makeObjectPropertyPusher(
XSD.readString),
'TileMatrixSetLink': makeObjectPropertyPusher(
WMTSCapabilities.readTileMatrixSetLink_),
'Dimension': makeObjectPropertyPusher(
WMTSCapabilities.readDimensions_),
'ResourceURL': makeObjectPropertyPusher(
WMTSCapabilities.readResourceUrl_)
}, makeStructureNS(WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Title': makeObjectPropertySetter(
XSD.readString),
'Abstract': makeObjectPropertySetter(
XSD.readString),
'WGS84BoundingBox': makeObjectPropertySetter(
WMTSCapabilities.readWgs84BoundingBox_),
'Identifier': makeObjectPropertySetter(
XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.STYLE_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'LegendURL': makeObjectPropertyPusher(
WMTSCapabilities.readLegendUrl_)
}, makeStructureNS(WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Title': makeObjectPropertySetter(
XSD.readString),
'Identifier': makeObjectPropertySetter(
XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.TMS_LINKS_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'TileMatrixSet': makeObjectPropertySetter(
XSD.readString),
'TileMatrixSetLimits': makeObjectPropertySetter(
WMTSCapabilities.readTileMatrixLimitsList_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.TMS_LIMITS_LIST_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'TileMatrixLimits': makeArrayPusher(
WMTSCapabilities.readTileMatrixLimits_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.TMS_LIMITS_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'TileMatrix': makeObjectPropertySetter(
XSD.readString),
'MinTileRow': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MaxTileRow': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MinTileCol': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MaxTileCol': makeObjectPropertySetter(
XSD.readNonNegativeInteger)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.DIMENSION_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'Default': makeObjectPropertySetter(
XSD.readString),
'Value': makeObjectPropertyPusher(
XSD.readString)
}, makeStructureNS(WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Identifier': makeObjectPropertySetter(
XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.WGS84_BBOX_READERS_ = makeStructureNS(
WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'LowerCorner': makeArrayPusher(
WMTSCapabilities.readCoordinates_),
'UpperCorner': makeArrayPusher(
WMTSCapabilities.readCoordinates_)
});
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.TMS_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'WellKnownScaleSet': makeObjectPropertySetter(
XSD.readString),
'TileMatrix': makeObjectPropertyPusher(
WMTSCapabilities.readTileMatrix_)
}, makeStructureNS(WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'SupportedCRS': makeObjectPropertySetter(
XSD.readString),
'Identifier': makeObjectPropertySetter(
XSD.readString)
}));
/**
* @const
* @type {Object.<string, Object.<string, ol.XmlParser>>}
* @private
*/
WMTSCapabilities.TM_PARSERS_ = makeStructureNS(
WMTSCapabilities.NAMESPACE_URIS_, {
'TopLeftCorner': makeObjectPropertySetter(
WMTSCapabilities.readCoordinates_),
'ScaleDenominator': makeObjectPropertySetter(
XSD.readDecimal),
'TileWidth': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'TileHeight': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MatrixWidth': makeObjectPropertySetter(
XSD.readNonNegativeInteger),
'MatrixHeight': makeObjectPropertySetter(
XSD.readNonNegativeInteger)
}, makeStructureNS(WMTSCapabilities.OWS_NAMESPACE_URIS_, {
'Identifier': makeObjectPropertySetter(
XSD.readString)
}));
export default WMTSCapabilities;

View File

@@ -103,13 +103,11 @@ describe('ol.format.MVT', function() {
name: 'layer1'
}
};
const readRawGeometry_ = MVT.readRawGeometry_;
MVT.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
format.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
flatCoordinates.push(0, 0);
ends.push(2);
};
const feature = format.createFeature_({}, rawFeature);
MVT.readRawGeometry_ = readRawGeometry_;
const geometry = feature.getGeometry();
expect(geometry).to.be.a(Point);
expect(feature.get('myGeom')).to.equal(geometry);
@@ -127,14 +125,12 @@ describe('ol.format.MVT', function() {
name: 'layer1'
}
};
const readRawGeometry_ = MVT.readRawGeometry_;
MVT.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
format.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
flatCoordinates.push(0, 0, 3, 0, 3, 3, 3, 0, 0, 0);
flatCoordinates.push(1, 1, 1, 2, 2, 2, 2, 1, 1, 1);
ends.push(10, 20);
};
const feature = format.createFeature_({}, rawFeature);
MVT.readRawGeometry_ = readRawGeometry_;
const geometry = feature.getGeometry();
expect(geometry).to.be.a(Polygon);
});
@@ -150,14 +146,12 @@ describe('ol.format.MVT', function() {
name: 'layer1'
}
};
const readRawGeometry_ = MVT.readRawGeometry_;
MVT.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
format.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
flatCoordinates.push(0, 0, 1, 0, 1, 1, 1, 0, 0, 0);
flatCoordinates.push(1, 1, 2, 1, 2, 2, 2, 1, 1, 1);
ends.push(10, 20);
};
const feature = format.createFeature_({}, rawFeature);
MVT.readRawGeometry_ = readRawGeometry_;
const geometry = feature.getGeometry();
expect(geometry).to.be.a(MultiPolygon);
});
@@ -173,10 +167,9 @@ describe('ol.format.MVT', function() {
name: 'layer1'
}
};
const readRawGeometry_ = MVT.readRawGeometry_;
let createdFlatCoordinates;
let createdEnds;
MVT.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
format.readRawGeometry_ = function({}, rawFeature, flatCoordinates, ends) {
flatCoordinates.push(0, 0, 1, 0, 1, 1, 1, 0, 0, 0);
flatCoordinates.push(1, 1, 2, 1, 2, 2, 2, 1, 1, 1);
createdFlatCoordinates = flatCoordinates;
@@ -184,7 +177,6 @@ describe('ol.format.MVT', function() {
createdEnds = ends;
};
const feature = format.createFeature_({}, rawFeature);
MVT.readRawGeometry_ = readRawGeometry_;
expect(feature).to.be.a(RenderFeature);
expect(feature.getType()).to.be('Polygon');
expect(feature.getFlatCoordinates()).to.equal(createdFlatCoordinates);