Strategies that request data (fixed and bbox currently) should transform geometries when the layer projection is different than the map projection. This adds reprojection support to the Fixed and BBOX strategies. Given more strategies that request data, we will likely want to extract out the common parts. r=elemoine (closes #1841)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@8804 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-02-03 00:12:27 +00:00
parent 0a5204533d
commit 3edb925487
4 changed files with 203 additions and 57 deletions

View File

@@ -13,6 +13,11 @@
options.callback.call(options.scope, {features: featureList});
}
};
// Create a dummy layer that can act as the map base layer.
// This will be unnecessary if #1920 is addressed or if base layer
// handling is changed.
var dummy = new OpenLayers.Layer(null, {isBaseLayer: true});
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
strategies: [new OpenLayers.Strategy.Fixed()],
@@ -42,7 +47,7 @@
});
var map = new OpenLayers.Map('map');
map.addLayers([layer, layerp, layer2]);
map.addLayers([dummy, layer, layerp, layer2]);
t.ok(layer2.events.listeners["visibilitychanged"][0].obj == s &&
layer2.events.listeners["visibilitychanged"][0].func == s.load,
@@ -54,6 +59,62 @@
t.ok(layer2.events.listeners["visibilitychanged"] == false,
"visibilitychanged listener unregistered");
}
function tests_merge(t) {
t.plan(4);
var strategy = new OpenLayers.Strategy.Fixed();
// create map with default projection
var map = new OpenLayers.Map("map");
// create layer with custom projection
var layer = new OpenLayers.Layer.Vector(null, {
isBaseLayer: true,
strategies: [strategy],
protocol: new OpenLayers.Protocol(),
projection: new OpenLayers.Projection("EPSG:900913")
});
map.addLayer(layer);
map.zoomToMaxExtent();
// create some features
var geometries = [
new OpenLayers.Geometry.Point(100, 200),
new OpenLayers.Geometry.Point(1000, 2000)
];
var features = [
new OpenLayers.Feature.Vector(geometries[0].clone()),
new OpenLayers.Feature.Vector(geometries[1].clone())
];
// call merge with a mocked up response
strategy.merge({features: features});
// test that feature geometries have been transformed to map projection
var from = layer.projection;
var to = map.getProjectionObject();
t.geom_eq(layer.features[0].geometry, features[0].geometry.transform(from, to), "[different proj] feature 0 geometry transformed");
t.geom_eq(layer.features[1].geometry, features[1].geometry.transform(from, to), "[different proj] feature 1 geometry transformed");
// same as above but with same map/layer projection
layer.destroyFeatures();
layer.projection = map.getProjectionObject();
features = [
new OpenLayers.Feature.Vector(geometries[0].clone()),
new OpenLayers.Feature.Vector(geometries[1].clone())
];
// call merge again with mocked up response
strategy.merge({features: features});
// test that feature geometries have not been transformed
t.geom_eq(layer.features[0].geometry, features[0].geometry, "[same proj] feature 0 geometry not transformed");
t.geom_eq(layer.features[1].geometry, features[1].geometry, "[same proj] feature 1 geometry not transformed");
}
</script>
</head>