Get projection and axis order from GML data

To make tests pass, the winding order of the coordinates in the
test data had to be reversed to conform to common gml practice.
This commit is contained in:
ahocevar
2013-07-24 22:42:49 +02:00
parent 109ec71877
commit 56e8b1cfb4
8 changed files with 102 additions and 28 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ var raster = new ol.layer.TileLayer({
var vector = new ol.layer.Vector({ var vector = new ol.layer.Vector({
source: new ol.source.Vector({ source: new ol.source.Vector({
parser: new ol.parser.ogc.GML_v3({axisOrientation: 'neu'}), parser: new ol.parser.ogc.GML_v3(),
url: 'data/gml/topp-states-wfs.xml' url: 'data/gml/topp-states-wfs.xml'
}), }),
style: new ol.style.Style({rules: [ style: new ol.style.Style({rules: [
+5 -2
View File
@@ -357,7 +357,9 @@
/** /**
* @typedef {Object} ol.parser.GMLOptions * @typedef {Object} ol.parser.GMLOptions
* @property {string|undefined} axisOrientation The axis orientation as * @property {string|undefined} axisOrientation The axis orientation as
* specified in Proj4. The default is 'enu'. * specified in Proj4. If this is not provided, 'enu' will be used for GML2,
* and the projection's axis orientation for GML3, with a fallback to 'enu'
* if `projection` was not configured and is not provided by the data.
* @property {boolean|undefined} curve Write gml:Curve instead of * @property {boolean|undefined} curve Write gml:Curve instead of
* gml:LineString elements. This also affects the elements in multi-part * gml:LineString elements. This also affects the elements in multi-part
* geometries. Default is `false´. This only applies to GML version 3. * geometries. Default is `false´. This only applies to GML version 3.
@@ -381,7 +383,8 @@
* @property {string|undefined} srsName URI for spatial reference system. * @property {string|undefined} srsName URI for spatial reference system.
* This is optional for single part geometries and mandatory for * This is optional for single part geometries and mandatory for
* collections and multis. If set, the srsName attribute will be written * collections and multis. If set, the srsName attribute will be written
* for all geometries. Default is null. * for all geometries. Default is null. For reading only, no `srsName` needs
* to be provided.
* @property {boolean|undefined} surface Write gml:Surface instead of * @property {boolean|undefined} surface Write gml:Surface instead of
* gml:Polygon elements. This also affects the elements in multi-part * gml:Polygon elements. This also affects the elements in multi-part
* geometries. Default is `false´. This only applies to GML version 3. * geometries. Default is `false´. This only applies to GML version 3.
+62 -2
View File
@@ -14,6 +14,7 @@ goog.require('ol.geom.Point');
goog.require('ol.geom.Polygon'); goog.require('ol.geom.Polygon');
goog.require('ol.parser.StringFeatureParser'); goog.require('ol.parser.StringFeatureParser');
goog.require('ol.parser.XML'); goog.require('ol.parser.XML');
goog.require('ol.proj');
@@ -41,6 +42,20 @@ ol.parser.ogc.GML = function(opt_options) {
options.multiSurface : true; options.multiSurface : true;
this.srsName = goog.isDef(options.srsName) ? this.srsName = goog.isDef(options.srsName) ?
options.srsName : null; options.srsName : null;
/**
* @private
* @type {string|undefined}
*/
this.srsName_ = goog.isNull(this.srsName) ? undefined : this.srsName;
/**
* @private
* @type {string|undefined}
*/
this.axisOrientation_ = goog.isNull(this.srsName) ? undefined :
ol.proj.get(this.srsName).getAxisOrientation();
if (goog.isDef(options.schemaLocation)) { if (goog.isDef(options.schemaLocation)) {
this.schemaLocation = options.schemaLocation; this.schemaLocation = options.schemaLocation;
} }
@@ -197,7 +212,7 @@ ol.parser.ogc.GML = function(opt_options) {
var points = new Array(numPoints); var points = new Array(numPoints);
for (var i = 0; i < numPoints; ++i) { for (var i = 0; i < numPoints; ++i) {
coords = goog.array.map(pointList[i].split(cs), parseFloat); coords = goog.array.map(pointList[i].split(cs), parseFloat);
if (this.axisOrientation.substr(0, 2) === 'en') { if (this.getAxisOrientation().substr(0, 2) === 'en') {
points[i] = coords; points[i] = coords;
} else { } else {
if (coords.length === 2) { if (coords.length === 2) {
@@ -302,6 +317,27 @@ ol.parser.ogc.GML = function(opt_options) {
if (!this.geometryName) { if (!this.geometryName) {
this.geometryName = node.nodeName.split(':').pop(); this.geometryName = node.nodeName.split(':').pop();
} }
// TODO: Deal with GML documents that do not have the same SRS for all
// geometries.
if (!goog.isDef(this.srsName_)) {
for (var i = node.childNodes.length - 1; i >= 0; --i) {
var child = node.childNodes[i];
if (child.nodeType == 1) {
var srsName = child.getAttribute('srsName');
if (goog.isDef(srsName)) {
this.srsName_ = srsName.replace(ol.parser.ogc.GML.regExes.epsg,
'EPSG:');
if (!goog.isDef(this.axisOrientation_)) {
var projection = ol.proj.get(this.srsName_);
if (!goog.isNull(projection)) {
this.axisOrientation_ = projection.getAxisOrientation();
}
}
}
break;
}
}
}
this.readChildNodes(node, obj); this.readChildNodes(node, obj);
}, },
'_attribute': function(node, obj) { '_attribute': function(node, obj) {
@@ -453,6 +489,26 @@ ol.parser.ogc.GML = function(opt_options) {
goog.inherits(ol.parser.ogc.GML, ol.parser.XML); goog.inherits(ol.parser.ogc.GML, ol.parser.XML);
/**
* Constants for regExes.
* @enum {RegExp}
*/
ol.parser.ogc.GML.regExes = {
epsg: new RegExp('(http:\/\/www\.opengis\.net\/gml\/srs\/epsg.xml#|' +
'urn:x-ogc:def:crs:EPSG:)', 'i')
};
/**
* @return {string?} Axis orientation of the data that is currently being
* parsed.
*/
ol.parser.ogc.GML.prototype.getAxisOrientation = function() {
return goog.isDef(this.axisOrientation_) ?
this.axisOrientation_ : this.axisOrientation;
};
/** /**
* @param {string|Document|Element|Object} data Data to read. * @param {string|Document|Element|Object} data Data to read.
* @return {ol.parser.ReadFeaturesResult} An object representing the document. * @return {ol.parser.ReadFeaturesResult} An object representing the document.
@@ -464,8 +520,12 @@ ol.parser.ogc.GML.prototype.read = function(data) {
if (data && data.nodeType == 9) { if (data && data.nodeType == 9) {
data = data.documentElement; data = data.documentElement;
} }
var obj = {features: [], metadata: {projection: null}}; var obj = /** @type {ol.parser.ReadFeaturesResult} */
({features: [], metadata: {}});
this.readNode(data, obj, true); this.readNode(data, obj, true);
obj.metadata.projection = this.srsName_;
this.srsName_ = goog.isNull(this.srsName) ? undefined : this.srsName;
delete this.axisOrientation_;
return obj; return obj;
}; };
+8
View File
@@ -111,6 +111,14 @@ ol.parser.ogc.GML_v2 = function(opt_options) {
goog.inherits(ol.parser.ogc.GML_v2, ol.parser.ogc.GML); goog.inherits(ol.parser.ogc.GML_v2, ol.parser.ogc.GML);
/**
* @return {string?} Axis orientation that was configured with this instance.
*/
ol.parser.ogc.GML_v2.prototype.getAxisOrientation = function() {
return this.axisOrientation;
};
/** /**
* @param {Object} obj Object structure to write out as XML. * @param {Object} obj Object structure to write out as XML.
* @return {string} An string representing the XML document. * @return {string} An string representing the XML document.
+3 -3
View File
@@ -101,7 +101,7 @@ ol.parser.ogc.GML_v3 = function(opt_options) {
this.regExes.trimSpace, ''); this.regExes.trimSpace, '');
var coords = goog.array.map(str.split(this.regExes.splitSpace), var coords = goog.array.map(str.split(this.regExes.splitSpace),
parseFloat); parseFloat);
if (this.axisOrientation.substr(0, 2) === 'en') { if (this.getAxisOrientation().substr(0, 2) === 'en') {
obj.push([coords]); obj.push([coords]);
} else { } else {
if (coords.length === 2) { if (coords.length === 2) {
@@ -125,7 +125,7 @@ ol.parser.ogc.GML_v3 = function(opt_options) {
for (var i = 0, ii = coords.length; i < ii; i += dim) { for (var i = 0, ii = coords.length; i < ii; i += dim) {
x = parseFloat(coords[i]); x = parseFloat(coords[i]);
y = parseFloat(coords[i + 1]); y = parseFloat(coords[i + 1]);
var xy = this.axisOrientation.substr(0, 2) === 'en'; var xy = this.getAxisOrientation().substr(0, 2) === 'en';
if (dim === 3) { if (dim === 3) {
if (xy) { if (xy) {
points[i / dim] = [x, y, parseFloat(coords[i + 2])]; points[i / dim] = [x, y, parseFloat(coords[i + 2])];
@@ -393,7 +393,7 @@ ol.parser.ogc.GML_v3 = function(opt_options) {
'upperCorner': function(bounds) { 'upperCorner': function(bounds) {
// only 2d for simple features profile // only 2d for simple features profile
var pos; var pos;
if (this.axisOrientation.substr(0, 2) === 'en') { if (this.axisOrientation().substr(0, 2) === 'en') {
pos = (bounds.right + ' ' + bounds.top); pos = (bounds.right + ' ' + bounds.top);
} else { } else {
pos = (bounds.top + ' ' + bounds.right); pos = (bounds.top + ' ' + bounds.right);
+10 -9
View File
@@ -23,7 +23,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('point'); expect(obj.geometry.type).to.eql('point');
expect(obj.geometry.coordinates).to.eql([1, 2]); expect(obj.geometry.coordinates).to.eql([1, 2]);
done(); done();
@@ -51,7 +51,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multipoint'); expect(obj.geometry.type).to.eql('multipoint');
expect(obj.geometry.parts.length).to.eql(3); expect(obj.geometry.parts.length).to.eql(3);
expect(obj.geometry.parts[0].type).to.eql('point'); expect(obj.geometry.parts[0].type).to.eql('point');
@@ -80,7 +80,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('linestring'); expect(obj.geometry.type).to.eql('linestring');
expect(obj.geometry.coordinates.length).to.eql(2); expect(obj.geometry.coordinates.length).to.eql(2);
expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4]]); expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4]]);
@@ -108,7 +108,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multilinestring'); expect(obj.geometry.type).to.eql('multilinestring');
expect(obj.geometry.parts.length).to.eql(2); expect(obj.geometry.parts.length).to.eql(2);
expect(obj.geometry.parts[0].type).to.eql('linestring'); expect(obj.geometry.parts[0].type).to.eql('linestring');
@@ -142,7 +142,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('polygon'); expect(obj.geometry.type).to.eql('polygon');
done(); done();
}); });
@@ -166,7 +166,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multipolygon'); expect(obj.geometry.type).to.eql('multipolygon');
expect(obj.geometry.parts.length).to.eql(2); expect(obj.geometry.parts.length).to.eql(2);
expect(obj.geometry.parts[0].type).to.eql('polygon'); expect(obj.geometry.parts[0].type).to.eql('polygon');
@@ -227,7 +227,7 @@ describe('ol.parser.gml_v2', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('linearring'); expect(obj.geometry.type).to.eql('linearring');
expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4], [5, 6], expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4], [5, 6],
[1, 2]]); [1, 2]]);
@@ -237,17 +237,17 @@ describe('ol.parser.gml_v2', function() {
it('FeatureCollection read / written correctly', function(done) { it('FeatureCollection read / written correctly', function(done) {
var url = 'spec/ol/parser/ogc/xml/gml_v2/topp-states.xml'; var url = 'spec/ol/parser/ogc/xml/gml_v2/topp-states.xml';
afterLoadXml(url, function(xml) { afterLoadXml(url, function(xml) {
var srsName = 'http://www.opengis.net/gml/srs/epsg.xml#4326';
var schemaLoc = 'http://www.openplans.org/topp ' + var schemaLoc = 'http://www.openplans.org/topp ' +
'http://demo.opengeo.org/geoserver/wfs?service=WFS&version=' + 'http://demo.opengeo.org/geoserver/wfs?service=WFS&version=' +
'1.0.0&request=DescribeFeatureType&typeName=topp:states ' + '1.0.0&request=DescribeFeatureType&typeName=topp:states ' +
'http://www.opengis.net/wfs http://demo.opengeo.org/' + 'http://www.opengis.net/wfs http://demo.opengeo.org/' +
'geoserver/schemas/wfs/1.0.0/WFS-basic.xsd'; 'geoserver/schemas/wfs/1.0.0/WFS-basic.xsd';
var p = new ol.parser.ogc.GML_v2({srsName: srsName, var p = new ol.parser.ogc.GML_v2({
featureType: 'states', featureType: 'states',
featureNS: 'http://www.openplans.org/topp', featureNS: 'http://www.openplans.org/topp',
schemaLocation: schemaLoc}); schemaLocation: schemaLoc});
var obj = p.read(xml); var obj = p.read(xml);
p.srsName = 'http://www.opengis.net/gml/srs/epsg.xml#4326';
var output = p.write(obj); var output = p.write(obj);
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml); expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
expect(obj.features.length).to.eql(3); expect(obj.features.length).to.eql(3);
@@ -261,6 +261,7 @@ describe('ol.parser.gml_v2', function() {
expect(attributes['SUB_REGION']).to.eql('E N Cen'); expect(attributes['SUB_REGION']).to.eql('E N Cen');
expect(attributes['STATE_ABBR']).to.eql('IL'); expect(attributes['STATE_ABBR']).to.eql('IL');
expect(attributes['LAND_KM']).to.eql('143986.61'); expect(attributes['LAND_KM']).to.eql('143986.61');
expect(obj.metadata.projection).to.eql('EPSG:4326');
done(); done();
}); });
}); });
+12 -10
View File
@@ -21,7 +21,7 @@ describe('ol.parser.gml_v3', function() {
parser.srsName = 'foo'; parser.srsName = 'foo';
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
delete parser.srsName; parser.srsName = null;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
expect(obj.geometry.type).to.eql('linearring'); expect(obj.geometry.type).to.eql('linearring');
expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4], [5, 6], expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4], [5, 6],
@@ -37,7 +37,7 @@ describe('ol.parser.gml_v3', function() {
parser.srsName = 'foo'; parser.srsName = 'foo';
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
delete parser.srsName; parser.srsName = null;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
expect(obj.geometry.type).to.eql('linestring'); expect(obj.geometry.type).to.eql('linestring');
expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4]]); expect(obj.geometry.coordinates).to.eql([[1, 2], [3, 4]]);
@@ -103,7 +103,7 @@ describe('ol.parser.gml_v3', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multilinestring'); expect(obj.geometry.type).to.eql('multilinestring');
expect(obj.geometry.parts.length).to.eql(2); expect(obj.geometry.parts.length).to.eql(2);
expect(obj.geometry.parts[0].type).to.eql('linestring'); expect(obj.geometry.parts[0].type).to.eql('linestring');
@@ -147,7 +147,7 @@ describe('ol.parser.gml_v3', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multipoint'); expect(obj.geometry.type).to.eql('multipoint');
expect(obj.geometry.parts.length).to.eql(3); expect(obj.geometry.parts.length).to.eql(3);
expect(obj.geometry.parts[0].type).to.eql('point'); expect(obj.geometry.parts[0].type).to.eql('point');
@@ -199,7 +199,7 @@ describe('ol.parser.gml_v3', function() {
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
delete parser.srsName; parser.srsName = null;
expect(obj.geometry.type).to.eql('multipolygon'); expect(obj.geometry.type).to.eql('multipolygon');
expect(obj.geometry.parts.length).to.eql(2); expect(obj.geometry.parts.length).to.eql(2);
expect(obj.geometry.parts[0].type).to.eql('polygon'); expect(obj.geometry.parts[0].type).to.eql('polygon');
@@ -229,7 +229,7 @@ describe('ol.parser.gml_v3', function() {
parser.srsName = 'foo'; parser.srsName = 'foo';
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
delete parser.srsName; parser.srsName = null;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
expect(obj.geometry.type).to.eql('point'); expect(obj.geometry.type).to.eql('point');
expect(obj.geometry.coordinates).to.eql([1, 2]); expect(obj.geometry.coordinates).to.eql([1, 2]);
@@ -244,7 +244,7 @@ describe('ol.parser.gml_v3', function() {
parser.srsName = 'foo'; parser.srsName = 'foo';
var node = parser.featureNSWiters_['_geometry'].apply(parser, var node = parser.featureNSWiters_['_geometry'].apply(parser,
[geom]).firstChild; [geom]).firstChild;
delete parser.srsName; parser.srsName = null;
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml); expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
expect(obj.geometry.type).to.eql('polygon'); expect(obj.geometry.type).to.eql('polygon');
done(); done();
@@ -266,15 +266,15 @@ describe('ol.parser.gml_v3', function() {
it('FeatureCollection from GML read / written correctly', function(done) { it('FeatureCollection from GML read / written correctly', function(done) {
var url = 'spec/ol/parser/ogc/xml/gml_v3/topp-states-gml.xml'; var url = 'spec/ol/parser/ogc/xml/gml_v3/topp-states-gml.xml';
afterLoadXml(url, function(xml) { afterLoadXml(url, function(xml) {
var srsName = 'urn:x-ogc:def:crs:EPSG:4326';
var schemaLoc = 'http://www.openplans.org/topp ' + var schemaLoc = 'http://www.openplans.org/topp ' +
'http://demo.opengeo.org/geoserver/wfs?service=WFS&version=' + 'http://demo.opengeo.org/geoserver/wfs?service=WFS&version=' +
'1.1.0&request=DescribeFeatureType&typeName=topp:states ' + '1.1.0&request=DescribeFeatureType&typeName=topp:states ' +
'http://www.opengis.net/gml ' + 'http://www.opengis.net/gml ' +
'http://schemas.opengis.net/gml/3.2.1/gml.xsd'; 'http://schemas.opengis.net/gml/3.2.1/gml.xsd';
var p = new ol.parser.ogc.GML_v3({srsName: srsName, var p = new ol.parser.ogc.GML_v3({schemaLocation: schemaLoc});
schemaLocation: schemaLoc});
var obj = p.read(xml); var obj = p.read(xml);
p.srsName = 'urn:x-ogc:def:crs:EPSG:4326';
p.axisOrientation = 'neu';
var output = p.write(obj); var output = p.write(obj);
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml); expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
expect(p.geometryName).to.eql('the_geom'); expect(p.geometryName).to.eql('the_geom');
@@ -289,6 +289,7 @@ describe('ol.parser.gml_v3', function() {
expect(attributes['SUB_REGION']).to.eql('E N Cen'); expect(attributes['SUB_REGION']).to.eql('E N Cen');
expect(attributes['STATE_ABBR']).to.eql('IL'); expect(attributes['STATE_ABBR']).to.eql('IL');
expect(attributes['LAND_KM']).to.eql('143986.61'); expect(attributes['LAND_KM']).to.eql('143986.61');
expect(obj.metadata.projection).to.eql('EPSG:4326');
done(); done();
}); });
}); });
@@ -307,6 +308,7 @@ describe('ol.parser.gml_v3', function() {
expect(attributes['SUB_REGION']).to.eql('E N Cen'); expect(attributes['SUB_REGION']).to.eql('E N Cen');
expect(attributes['STATE_ABBR']).to.eql('IL'); expect(attributes['STATE_ABBR']).to.eql('IL');
expect(attributes['LAND_KM']).to.eql('143986.61'); expect(attributes['LAND_KM']).to.eql('143986.61');
expect(obj.metadata.projection).to.eql('EPSG:4326');
done(); done();
}); });
}); });
File diff suppressed because one or more lines are too long