Merge pull request #530 from ahocevar/srs-dimension
Respect the srsDimension attribute. r=@bartvde
This commit is contained in:
@@ -241,6 +241,9 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
*/
|
*/
|
||||||
readers: {
|
readers: {
|
||||||
"gml": {
|
"gml": {
|
||||||
|
"_inherit": function(node, obj, container) {
|
||||||
|
// To be implemented by version specific parsers
|
||||||
|
},
|
||||||
"featureMember": function(node, obj) {
|
"featureMember": function(node, obj) {
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
},
|
},
|
||||||
@@ -309,6 +312,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiPoint": function(node, container) {
|
"MultiPoint": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
container.components = [
|
container.components = [
|
||||||
new OpenLayers.Geometry.MultiPoint(obj.components)
|
new OpenLayers.Geometry.MultiPoint(obj.components)
|
||||||
@@ -319,6 +323,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"LineString": function(node, container) {
|
"LineString": function(node, container) {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
if(!container.components) {
|
if(!container.components) {
|
||||||
container.components = [];
|
container.components = [];
|
||||||
@@ -329,6 +334,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiLineString": function(node, container) {
|
"MultiLineString": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
container.components = [
|
container.components = [
|
||||||
new OpenLayers.Geometry.MultiLineString(obj.components)
|
new OpenLayers.Geometry.MultiLineString(obj.components)
|
||||||
@@ -339,6 +345,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"Polygon": function(node, container) {
|
"Polygon": function(node, container) {
|
||||||
var obj = {outer: null, inner: []};
|
var obj = {outer: null, inner: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
obj.inner.unshift(obj.outer);
|
obj.inner.unshift(obj.outer);
|
||||||
if(!container.components) {
|
if(!container.components) {
|
||||||
@@ -350,6 +357,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"LinearRing": function(node, obj) {
|
"LinearRing": function(node, obj) {
|
||||||
var container = {};
|
var container = {};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, container]);
|
||||||
this.readChildNodes(node, container);
|
this.readChildNodes(node, container);
|
||||||
obj.components = [new OpenLayers.Geometry.LinearRing(
|
obj.components = [new OpenLayers.Geometry.LinearRing(
|
||||||
container.points
|
container.points
|
||||||
@@ -357,6 +365,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"MultiPolygon": function(node, container) {
|
"MultiPolygon": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
container.components = [
|
container.components = [
|
||||||
new OpenLayers.Geometry.MultiPolygon(obj.components)
|
new OpenLayers.Geometry.MultiPolygon(obj.components)
|
||||||
@@ -367,6 +376,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"GeometryCollection": function(node, container) {
|
"GeometryCollection": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
container.components = [
|
container.components = [
|
||||||
new OpenLayers.Geometry.Collection(obj.components)
|
new OpenLayers.Geometry.Collection(obj.components)
|
||||||
|
|||||||
@@ -90,11 +90,20 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
*/
|
*/
|
||||||
readers: {
|
readers: {
|
||||||
"gml": OpenLayers.Util.applyDefaults({
|
"gml": OpenLayers.Util.applyDefaults({
|
||||||
|
"_inherit": function(node, obj, container) {
|
||||||
|
// SRSReferenceGroup attributes
|
||||||
|
var dim = parseInt(node.getAttribute("srsDimension"), 10) ||
|
||||||
|
(container && container.srsDimension);
|
||||||
|
if (dim) {
|
||||||
|
obj.srsDimension = dim;
|
||||||
|
}
|
||||||
|
},
|
||||||
"featureMembers": function(node, obj) {
|
"featureMembers": function(node, obj) {
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
},
|
},
|
||||||
"Curve": function(node, container) {
|
"Curve": function(node, container) {
|
||||||
var obj = {points: []};
|
var obj = {points: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
if(!container.components) {
|
if(!container.components) {
|
||||||
container.components = [];
|
container.components = [];
|
||||||
@@ -135,7 +144,10 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
this.regExes.trimSpace, ""
|
this.regExes.trimSpace, ""
|
||||||
);
|
);
|
||||||
var coords = str.split(this.regExes.splitSpace);
|
var coords = str.split(this.regExes.splitSpace);
|
||||||
var dim = parseInt(node.getAttribute("dimension")) || 2;
|
// The "dimension" attribute is not part of the spec, it is
|
||||||
|
// only used in an example (OGC 03-105r1, page 235).
|
||||||
|
var dim = obj.srsDimension ||
|
||||||
|
parseInt(node.getAttribute("srsDimension") || node.getAttribute("dimension"), 10) || 2;
|
||||||
var j, x, y, z;
|
var j, x, y, z;
|
||||||
var numPoints = coords.length / dim;
|
var numPoints = coords.length / dim;
|
||||||
var points = new Array(numPoints);
|
var points = new Array(numPoints);
|
||||||
@@ -172,6 +184,7 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
},
|
},
|
||||||
"MultiCurve": function(node, container) {
|
"MultiCurve": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
if(obj.components.length > 0) {
|
if(obj.components.length > 0) {
|
||||||
container.components = [
|
container.components = [
|
||||||
@@ -184,6 +197,7 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
|||||||
},
|
},
|
||||||
"MultiSurface": function(node, container) {
|
"MultiSurface": function(node, container) {
|
||||||
var obj = {components: []};
|
var obj = {components: []};
|
||||||
|
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||||
this.readChildNodes(node, obj);
|
this.readChildNodes(node, obj);
|
||||||
if(obj.components.length > 0) {
|
if(obj.components.length > 0) {
|
||||||
container.components = [
|
container.components = [
|
||||||
|
|||||||
@@ -201,11 +201,16 @@ var cases = {
|
|||||||
|
|
||||||
"v2/box-coord.xml": new OpenLayers.Bounds(1, 2, 3, 4),
|
"v2/box-coord.xml": new OpenLayers.Bounds(1, 2, 3, 4),
|
||||||
|
|
||||||
"v2/box-coordinates.xml": new OpenLayers.Bounds(1, 2, 3, 4)
|
"v2/box-coordinates.xml": new OpenLayers.Bounds(1, 2, 3, 4),
|
||||||
|
|
||||||
|
"v3/linestring3d.xml": new OpenLayers.Geometry.LineString([
|
||||||
|
new OpenLayers.Geometry.Point(1, 2, 3),
|
||||||
|
new OpenLayers.Geometry.Point(4, 5, 6)
|
||||||
|
])
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// cases for v3 use the same geometries
|
// some cases for v3 use the same geometries
|
||||||
OpenLayers.Util.extend(cases, {
|
OpenLayers.Util.extend(cases, {
|
||||||
"v3/point.xml": cases["v2/point-coordinates.xml"],
|
"v3/point.xml": cases["v2/point-coordinates.xml"],
|
||||||
"v3/linestring.xml": cases["v2/linestring-coordinates.xml"],
|
"v3/linestring.xml": cases["v2/linestring-coordinates.xml"],
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
"v2/linestring-coord.xml", "v2/linestring-coordinates.xml",
|
"v2/linestring-coord.xml", "v2/linestring-coordinates.xml",
|
||||||
"v2/multipoint-coord.xml", "v2/multipoint-coordinates.xml",
|
"v2/multipoint-coord.xml", "v2/multipoint-coordinates.xml",
|
||||||
"v2/multilinestring-coord.xml", "v2/multilinestring-coordinates.xml",
|
"v2/multilinestring-coord.xml", "v2/multilinestring-coordinates.xml",
|
||||||
"v3/point.xml", "v3/linestring.xml", "v3/curve.xml",
|
"v3/point.xml", "v3/linestring.xml", "v3/linestring3d.xml",
|
||||||
"v3/polygon.xml", "v3/surface.xml",
|
"v3/curve.xml", "v3/polygon.xml", "v3/surface.xml",
|
||||||
"v3/multipoint-singular.xml", "v3/multipoint-plural.xml",
|
"v3/multipoint-singular.xml", "v3/multipoint-plural.xml",
|
||||||
"v3/multilinestring-singular.xml", "v3/multilinestring-plural.xml",
|
"v3/multilinestring-singular.xml", "v3/multilinestring-plural.xml",
|
||||||
"v3/multicurve-singular.xml", "v3/multicurve-curve.xml",
|
"v3/multicurve-singular.xml", "v3/multicurve-curve.xml",
|
||||||
@@ -332,6 +332,11 @@
|
|||||||
<gml:posList>1 2 3 4</gml:posList>
|
<gml:posList>1 2 3 4</gml:posList>
|
||||||
</gml:LineString>
|
</gml:LineString>
|
||||||
--></div>
|
--></div>
|
||||||
|
<div id="v3/linestring3d.xml"><!--
|
||||||
|
<gml:LineString xmlns:gml="http://www.opengis.net/gml" srsName="foo" srsDimension="3">
|
||||||
|
<gml:posList>1 2 3 4 5 6</gml:posList>
|
||||||
|
</gml:LineString>
|
||||||
|
--></div>
|
||||||
<div id="v3/curve.xml"><!--
|
<div id="v3/curve.xml"><!--
|
||||||
<gml:Curve xmlns:gml="http://www.opengis.net/gml" srsName="foo">
|
<gml:Curve xmlns:gml="http://www.opengis.net/gml" srsName="foo">
|
||||||
<gml:segments>
|
<gml:segments>
|
||||||
|
|||||||
Reference in New Issue
Block a user