diff --git a/examples/synthetic-data.html b/examples/synthetic-data.html
new file mode 100644
index 0000000000..5cb953179f
--- /dev/null
+++ b/examples/synthetic-data.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+ Synthetic data example
+
+
+
+
+
+
+
+
+
+
+
+
+
Synthetic data example
+
Synthetic data example.
+
+
vector
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/synthetic-data.js b/examples/synthetic-data.js
new file mode 100644
index 0000000000..30af5b0377
--- /dev/null
+++ b/examples/synthetic-data.js
@@ -0,0 +1,80 @@
+goog.require('ol.Map');
+goog.require('ol.Overlay');
+goog.require('ol.RendererHint');
+goog.require('ol.View2D');
+goog.require('ol.expr');
+goog.require('ol.layer.Tile');
+goog.require('ol.layer.Vector');
+goog.require('ol.parser.GeoJSON');
+goog.require('ol.proj');
+goog.require('ol.source.MapQuestOpenAerial');
+goog.require('ol.source.Vector');
+goog.require('ol.style.Fill');
+goog.require('ol.style.Rule');
+goog.require('ol.style.Shape');
+goog.require('ol.style.ShapeType');
+goog.require('ol.style.Stroke');
+goog.require('ol.style.Style');
+
+
+var raster = new ol.layer.Tile({
+ source: new ol.source.MapQuestOpenAerial()
+});
+
+// build up some GeoJSON features
+var count = 20000;
+var features = new Array(count);
+var e = 18000000;
+for (var i = 0; i < count; ++i) {
+ features[i] = {
+ type: 'Feature',
+ properties: {
+ i: i,
+ size: i % 2 ? 10 : 20
+ },
+ geometry: {
+ type: 'Point',
+ coordinates: [
+ 2 * e * Math.random() - e, 2 * e * Math.random() - e
+ ]
+ }
+ };
+}
+
+var vector = new ol.layer.Vector({
+ source: new ol.source.Vector({
+ projection: ol.proj.get('EPSG:3857'),
+ parser: new ol.parser.GeoJSON(),
+ data: {
+ type: 'FeatureCollection',
+ features: features
+ }
+ }),
+ style: new ol.style.Style({rules: [
+ new ol.style.Rule({
+ symbolizers: [
+ new ol.style.Shape({
+ type: ol.style.ShapeType.CIRCLE,
+ size: ol.expr.parse('size'),
+ stroke: new ol.style.Stroke({color: '#666666'}),
+ fill: new ol.style.Fill({color: '#bada55'})
+ })
+ ]
+ })
+ ]})
+});
+
+var popup = new ol.Overlay({
+ element: document.getElementById('popup')
+});
+
+var map = new ol.Map({
+ layers: [vector],
+ renderer: ol.RendererHint.CANVAS,
+ target: 'map',
+ view: new ol.View2D({
+ center: [0, 0],
+ zoom: 2
+ }),
+ overlays: [popup]
+});