summaryrefslogtreecommitdiff
path: root/misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js')
-rw-r--r--misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js190
1 files changed, 190 insertions, 0 deletions
diff --git a/misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js b/misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
new file mode 100644
index 0000000..aac2030
--- /dev/null
+++ b/misc/openlayers/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
@@ -0,0 +1,190 @@
+/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
+ * full list of contributors). Published under the 2-clause BSD license.
+ * See license.txt in the OpenLayers distribution or repository for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Format/GML/v3.js
+ */
+
+/**
+ * Class: OpenLayers.Format.SOSGetFeatureOfInterest
+ * Read and write SOS GetFeatureOfInterest. This is used to get to
+ * the location of the features (stations). The stations can have 1 or more
+ * sensors.
+ *
+ * Inherits from:
+ * - <OpenLayers.Format.XML>
+ */
+OpenLayers.Format.SOSGetFeatureOfInterest = OpenLayers.Class(
+ OpenLayers.Format.XML, {
+
+ /**
+ * Constant: VERSION
+ * {String} 1.0.0
+ */
+ VERSION: "1.0.0",
+
+ /**
+ * Property: namespaces
+ * {Object} Mapping of namespace aliases to namespace URIs.
+ */
+ namespaces: {
+ sos: "http://www.opengis.net/sos/1.0",
+ gml: "http://www.opengis.net/gml",
+ sa: "http://www.opengis.net/sampling/1.0",
+ xsi: "http://www.w3.org/2001/XMLSchema-instance"
+ },
+
+ /**
+ * Property: schemaLocation
+ * {String} Schema location
+ */
+ schemaLocation: "http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd",
+
+ /**
+ * Property: defaultPrefix
+ */
+ defaultPrefix: "sos",
+
+ /**
+ * Property: regExes
+ * Compiled regular expressions for manipulating strings.
+ */
+ regExes: {
+ trimSpace: (/^\s*|\s*$/g),
+ removeSpace: (/\s*/g),
+ splitSpace: (/\s+/),
+ trimComma: (/\s*,\s*/g)
+ },
+
+ /**
+ * Constructor: OpenLayers.Format.SOSGetFeatureOfInterest
+ *
+ * Parameters:
+ * options - {Object} An optional object whose properties will be set on
+ * this instance.
+ */
+
+ /**
+ * APIMethod: read
+ * Parse a GetFeatureOfInterest response and return an array of features
+ *
+ * Parameters:
+ * data - {String} or {DOMElement} data to read/parse.
+ *
+ * Returns:
+ * {Array(<OpenLayers.Feature.Vector>)} An array of features.
+ */
+ read: function(data) {
+ if(typeof data == "string") {
+ data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
+ }
+ if(data && data.nodeType == 9) {
+ data = data.documentElement;
+ }
+
+ var info = {features: []};
+ this.readNode(data, info);
+
+ var features = [];
+ for (var i=0, len=info.features.length; i<len; i++) {
+ var container = info.features[i];
+ // reproject features if needed
+ if(this.internalProjection && this.externalProjection &&
+ container.components[0]) {
+ container.components[0].transform(
+ this.externalProjection, this.internalProjection
+ );
+ }
+ var feature = new OpenLayers.Feature.Vector(
+ container.components[0], container.attributes);
+ features.push(feature);
+ }
+ return features;
+ },
+
+ /**
+ * Property: readers
+ * Contains public functions, grouped by namespace prefix, that will
+ * be applied when a namespaced node is found matching the function
+ * name. The function will be applied in the scope of this parser
+ * with two arguments: the node being read and a context object passed
+ * from the parent.
+ */
+ readers: {
+ "sa": {
+ "SamplingPoint": function(node, obj) {
+ // sampling point can also be without a featureMember if
+ // there is only 1
+ if (!obj.attributes) {
+ var feature = {attributes: {}};
+ obj.features.push(feature);
+ obj = feature;
+ }
+ obj.attributes.id = this.getAttributeNS(node,
+ this.namespaces.gml, "id");
+ this.readChildNodes(node, obj);
+ },
+ "position": function (node, obj) {
+ this.readChildNodes(node, obj);
+ }
+ },
+ "gml": OpenLayers.Util.applyDefaults({
+ "FeatureCollection": function(node, obj) {
+ this.readChildNodes(node, obj);
+ },
+ "featureMember": function(node, obj) {
+ var feature = {attributes: {}};
+ obj.features.push(feature);
+ this.readChildNodes(node, feature);
+ },
+ "name": function(node, obj) {
+ obj.attributes.name = this.getChildValue(node);
+ },
+ "pos": function(node, obj) {
+ // we need to parse the srsName to get to the
+ // externalProjection, that's why we cannot use
+ // GML v3 for this
+ if (!this.externalProjection) {
+ this.externalProjection = new OpenLayers.Projection(
+ node.getAttribute("srsName"));
+ }
+ OpenLayers.Format.GML.v3.prototype.readers.gml.pos.apply(
+ this, [node, obj]);
+ }
+ }, OpenLayers.Format.GML.v3.prototype.readers.gml)
+ },
+
+ /**
+ * Property: writers
+ * As a compliment to the readers property, this structure contains public
+ * writing functions grouped by namespace alias and named like the
+ * node names they produce.
+ */
+ writers: {
+ "sos": {
+ "GetFeatureOfInterest": function(options) {
+ var node = this.createElementNSPlus("GetFeatureOfInterest", {
+ attributes: {
+ version: this.VERSION,
+ service: 'SOS',
+ "xsi:schemaLocation": this.schemaLocation
+ }
+ });
+ for (var i=0, len=options.fois.length; i<len; i++) {
+ this.writeNode("FeatureOfInterestId", {foi: options.fois[i]}, node);
+ }
+ return node;
+ },
+ "FeatureOfInterestId": function(options) {
+ var node = this.createElementNSPlus("FeatureOfInterestId", {value: options.foi});
+ return node;
+ }
+ }
+ },
+
+ CLASS_NAME: "OpenLayers.Format.SOSGetFeatureOfInterest"
+
+});