Expand on a patch by Edgemaster to support non-XML vector formats via the

current XML layer. This patch rearranges the reading of the document from XML
so that it is done later on, building on the work in #1575. It also adds tests
for the two cases that aren't currently tested: 

 * Vector Mode with non-XML format
 * non-vectormode with XML DOM passed in

Tests continue to pass, confirmed via manual inspection as well as the tests.

(Closes #1575) 


git-svn-id: http://svn.openlayers.org/trunk/openlayers@7416 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2008-06-21 14:23:33 +00:00
parent 45b87bc02d
commit b8d81e7917
2 changed files with 44 additions and 4 deletions

View File

@@ -133,13 +133,17 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, {
if (this.features) {
var doc = request.responseXML;
if (!doc || !doc.documentElement) {
doc = OpenLayers.Format.XML.prototype.read(request.responseText);
doc = request.responseText;
}
if (this.layer.vectorMode) {
this.layer.addFeatures(this.layer.formatObject.read(doc));
} else {
var resultFeatures = OpenLayers.Ajax.getElementsByTagNameNS(
doc, "http://www.opengis.net/gml", "gml", "featureMember"
var xml = new OpenLayers.Format.XML();
if (typeof doc == "string") {
doc = xml.read(doc);
}
var resultFeatures = xml.getElementsByTagNameNS(
doc, "http://www.opengis.net/gml", "featureMember"
);
this.addResults(resultFeatures);
}

View File

@@ -128,7 +128,43 @@
tile.requestSuccess({'requestText': '<xml><foo /></xml>'});
t.ok(true, "Didn't fail after calling requestSuccess on destroyed tile.");
}
function test_nonxml_format(t) {
t.plan(1);
var data = '{"type":"Feature", "id":"OpenLayers.Feature.Vector_135", "properties":{}, "geometry":{"type":"Point", "coordinates":[118.125, -18.6328125]}, "crs":{"type":"OGC", "properties":{"urn":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}'
var position = new OpenLayers.Pixel(10,20);
var bounds = new OpenLayers.Bounds(1,2,3,4);
var url = "bobob";
var size = new OpenLayers.Size(5,6);
var tile = new OpenLayers.Tile.WFS({
vectorMode: true,
formatObject: new OpenLayers.Format.GeoJSON(),
addFeatures: function(features) {
t.eq(features.length, 1, "GeoJSON format returned a single feature which was added.")
}
}, position, bounds, url, size);
tile.requestSuccess({responseText: data});
}
function test_xml_string_and_dom(t) {
t.plan(2);
var data = '<?xml version="1.0" encoding="ISO-8859-1" ?><wfs:FeatureCollection xmlns:bsc="http://www.bsc-eoc.org/bsc" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengeospatial.net//wfs/1.0.0/WFS-basic.xsd http://www.bsc-eoc.org/bsc http://www.bsc-eoc.org/cgi-bin/bsc_ows.asp?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=OWLS&amp;OUTPUTFORMAT=XMLSCHEMA"> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>-94.989723,43.285833 -74.755001,51.709520</gml:coordinates> </gml:Box> </gml:boundedBy> <gml:featureMember> <bsc:OWLS> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>-94.142500,50.992777 -94.142500,50.992777</gml:coordinates> </gml:Box> </gml:boundedBy> <bsc:msGeometry> <gml:Point srsName="EPSG:4326"> <gml:coordinates>-94.142500,50.992777</gml:coordinates> </gml:Point> </bsc:msGeometry> <bsc:ROUTEID>ON_2</bsc:ROUTEID> <bsc:ROUTE_NAME>Suffel Road</bsc:ROUTE_NAME> <bsc:LATITUDE>50.9927770</bsc:LATITUDE> <bsc:LONGITUDE>-94.1425000</bsc:LONGITUDE> </bsc:OWLS> </gml:featureMember></wfs:FeatureCollection>';
var position = new OpenLayers.Pixel(10,20);
var bounds = new OpenLayers.Bounds(1,2,3,4);
var url = "bobob";
var size = new OpenLayers.Size(5,6);
var tile = new OpenLayers.Tile.WFS({
}, position, bounds, url, size);
tile.addResults = function(results) {
t.eq(results.length, 1, "results count is correct when passing in XML as a string into non-vectormode");
}
tile.requestSuccess({responseText: data});
tile.addResults = function(results) {
t.eq(results.length, 1, "results count is correct when passing in XML as DOM into non-vectormode");
}
tile.requestSuccess({responseXML: OpenLayers.Format.XML.prototype.read(data)});
}
</script>
</head>
<body>