New vector rendering for better performance and less renderer specific limitations. r=elemoine (closes #1675, closes #1656, closes #1631, closes #1431, closes #1709)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@7930 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>SVG inValidRange Test Case</title><link
|
||||
href="../../theme/default/style.css"
|
||||
rel="stylesheet" type="text/css">
|
||||
<style>
|
||||
#map {
|
||||
width: 512px;
|
||||
height: 512px;
|
||||
border: 1px solid #4B3624;
|
||||
background: White;
|
||||
}
|
||||
.olControlAttribution { bottom: 0px!important }
|
||||
</style>
|
||||
<script src="../../lib/OpenLayers.js"
|
||||
type="text/javascript"></script>
|
||||
<script type="text/javascript">var map;
|
||||
|
||||
// avoid pink tiles
|
||||
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
|
||||
OpenLayers.Util.onImageLoadErrorColor = "transparent";
|
||||
|
||||
var vectorLayer;
|
||||
var markerLayer, boxes, newPoint;
|
||||
|
||||
function init(){
|
||||
var options = {
|
||||
projection: new OpenLayers.Projection("EPSG:900913"),
|
||||
units: "m",
|
||||
numZoomLevels: 19,
|
||||
maxResolution: 156543.0339,
|
||||
maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
|
||||
20037508, 20037508.34)
|
||||
};
|
||||
map = new OpenLayers.Map('map', options);
|
||||
|
||||
map.addControl(new OpenLayers.Control.MousePosition());
|
||||
|
||||
vectorLayer = new OpenLayers.Layer.Vector("Trails", {isBaseLayer: true});
|
||||
markerLayer = new OpenLayers.Layer.Markers("WayPoints");
|
||||
|
||||
map.addLayers([vectorLayer,markerLayer]);
|
||||
|
||||
var style_trail = OpenLayers.Util.extend({},
|
||||
OpenLayers.Feature.Vector.style['default']);
|
||||
style_trail.strokeColor = "green";
|
||||
style_trail.strokeWidth = 5;
|
||||
|
||||
var pointList = [];
|
||||
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653735.8487833,5726045.3578081);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653731.3960036,5726056.5070679);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653730.8394062,5726044.7207079);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653743.1958697,5726043.9243328);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653754.1051798,5726046.9505586);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653760.4503907,5726056.5070679);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653767.4635187,5726065.5857612);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653830.136392,5726052.2066375);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-13653846.5003571,5726042.3315828);
|
||||
pointList.push(newPoint);
|
||||
|
||||
var lineFeature = new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.LineString(pointList));
|
||||
lineFeature.fid = 52730;
|
||||
vectorLayer.addFeatures(lineFeature);
|
||||
|
||||
pointList = [];
|
||||
|
||||
newPoint = new OpenLayers.Geometry.Point(-12250153.3626406,4852001.6114048);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-12194315.5060664,4800503.5113048);
|
||||
pointList.push(newPoint);
|
||||
newPoint = new OpenLayers.Geometry.Point(-12180445.0975155,4873109.008858);
|
||||
pointList.push(newPoint);
|
||||
|
||||
lineFeature = new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.LineString(pointList),null,style_trail);
|
||||
lineFeature.fid = 52751;
|
||||
vectorLayer.addFeatures([lineFeature]);
|
||||
|
||||
var size = new OpenLayers.Size(15, 15);
|
||||
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
|
||||
var icon = new OpenLayers.Icon('../../img/marker.png', size, offset);
|
||||
markerLayer.addMarker(new OpenLayers.Marker(
|
||||
new OpenLayers.LonLat((newPoint.x + 400), (newPoint.y - 400)), icon));
|
||||
|
||||
map.setCenter(new OpenLayers.LonLat(newPoint.x, newPoint.y), 13)
|
||||
}
|
||||
|
||||
function zoomToScale(zoom) {
|
||||
if (zoom == 8) map.zoomToScale(3385.5001275);
|
||||
else if(zoom == 7) map.zoomToScale(6771.000255);
|
||||
else if (zoom == 6) map.zoomToScale(13542);
|
||||
else if (zoom == 5) map.zoomToScale(27084.001020);
|
||||
else if (zoom == 4) map.zoomToScale(54168.001020);
|
||||
else if (zoom == 3) map.zoomToScale(108337);
|
||||
else if (zoom == 2) map.zoomToScale(3466752.1306573446);
|
||||
else if (zoom == 1) map.zoomToScale(13867008.522629378);
|
||||
else if (zoom == 0) map.zoomToScale(55468034.09051751);
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onLoad="init()">
|
||||
<h1 id="title">SVG inValidRange Clipping Test Case</h1>
|
||||
<p>Behavior before fixing #1631: Push Zoom 5. You see lines. Push
|
||||
Zoom 6. No lines.</p>
|
||||
<div id="map">
|
||||
</div>
|
||||
<button onClick="zoomToScale(5);">Zoom 5</button>
|
||||
<button onClick="zoomToScale(6);">Zoom 6</button>
|
||||
<button onClick="zoomToScale(7);">Zoom 7</button>
|
||||
<button onClick="zoomToScale(8);">Zoom 8</button>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,58 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<link rel="stylesheet" href="../../theme/default/style.css" type="text/css" />
|
||||
<style type="text/css">
|
||||
#map {
|
||||
width: 512px;
|
||||
height: 512px;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="../../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
var map, point;
|
||||
|
||||
function init(){
|
||||
var options = {
|
||||
projection: new OpenLayers.Projection("EPSG:900913"),
|
||||
displayProjection: new OpenLayers.Projection("EPSG:4326"),
|
||||
units: "m",
|
||||
maxResolution: 20, //0.07464553542137146,
|
||||
maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
|
||||
20037508, 20037508.34)
|
||||
};
|
||||
map = new OpenLayers.Map('map', options);
|
||||
var vector = new OpenLayers.Layer.Vector(
|
||||
"Vectors",
|
||||
{isBaseLayer: true}
|
||||
);
|
||||
map.addLayer(vector);
|
||||
|
||||
var x = -20000;//4.33791754;
|
||||
var y = 20000;
|
||||
point = new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.Point(x, y)
|
||||
);
|
||||
|
||||
map.addLayer(vector);
|
||||
vector.addFeatures([point]);
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), 5);
|
||||
}
|
||||
|
||||
function pan(){
|
||||
map.panTo(point.geometry.getBounds().getCenterLonLat());
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
<h3 id="title">SVG inValidRange Redraw Test Case</h3>
|
||||
<p>Before fixing #1631, after klicking Go! no point would have appeared. The Go! button
|
||||
pans the map over a long distance. Before dragging, the point would have been
|
||||
outside the valid range, and the pan operation would not have triggered the SVG
|
||||
coordinate system to be recreated. The new vector rendering takes care of all this. </p>
|
||||
<div id="map"></div>
|
||||
<input type="button" value="Go!" onclick="pan();"></input>
|
||||
</body>
|
||||
</html>
|
||||
@@ -73,7 +73,7 @@
|
||||
}
|
||||
|
||||
function vectorTestNew() {
|
||||
vectorLayer.renderer.drawFeature = drawFeature;
|
||||
vectorLayer.renderer.drawFeature = OpenLayers.Renderer[vectorLayer.renderer.CLASS_NAME.split(".")[2]].prototype.drawFeature;
|
||||
|
||||
console.time("addFeatures");
|
||||
vectorLayer.addFeatures(features);
|
||||
@@ -89,17 +89,25 @@
|
||||
map.addControl(new OpenLayers.Control.MousePosition());
|
||||
map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 3);
|
||||
|
||||
drawFeature = vectorLayer.renderer.drawFeature;
|
||||
|
||||
vectorLayer.events.register("featuresadded", this, nextRun);
|
||||
|
||||
features = new Array(100);
|
||||
features = new Array(200);
|
||||
var x, y
|
||||
for (var i = 0; i < 100; i++) {
|
||||
for (var i = 0; i < 200; i++) {
|
||||
x = -Math.random()*45;
|
||||
y = -Math.random()*45;
|
||||
features[i] = new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.LinearRing([
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
-Math.random()*5+x, -Math.random()*5+y),
|
||||
new OpenLayers.Geometry.Point(
|
||||
@@ -119,14 +127,16 @@
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
<h1 id="title">Vector Features Performance Test</h1>
|
||||
<h1 id="title">New Rendering - Vector Features Performance Test</h1>
|
||||
<div id="map"></div>
|
||||
<p>
|
||||
|
||||
This test examines if checking for a feature being inside the visible
|
||||
extent before rendering it has an impact on performance. Make sure that
|
||||
the Firebug console is visible when running this test to see the results.
|
||||
|
||||
extent before rendering it has an impact on performance. Open the Firebug
|
||||
console after running this test (hit F12) to see the results.
|
||||
<br/>
|
||||
After the performance test, you can drag around the map to see how the new
|
||||
vector rendering feels where features get rendered only when they are visible
|
||||
inside the map extent.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user