I am a begginner to OpenLayers, and my question is about making things more efficient. My work is about displaying time-dependent weather elements on several point locations on the map. All these are initially stored in a MySQL database, and I use a PHP file to convert a (parameterized) query result into GeoJSON format. All the features are points with a pair of coordinates, but many properties (like name, temperature, dewpoint, wind direction, wind strength etc.) With a refreshing strategy, I manage to keep the elements up-to-date. Each property is supposed to be displayed in a different layer on the map, so that the user can show or hide whatever finds or not necessary. There are a names' layer, a temperatures' layer, a dewpoints' layer and so on. The way to create two of these layers can be presented at the last lines of the following code: var wgs84 = new OpenLayers.Projection("EPSG:4326"); var mercator = new OpenLayers.Projection("EPSG:900913"); var myURL="http://localhost:8080/wxproj/wx-json.php"; var clustering = new OpenLayers.Strategy.Cluster({distance:40}); var refreshing = new OpenLayers.Strategy.Refresh({interval:1000}); var clusters = new OpenLayers.Layer.Vector("LIGHTNINGS", { strategies: [clustering, refreshing, new OpenLayers.Strategy.Fixed()], styleMap: myLightningStyles, protocol: new OpenLayers.Protocol.HTTP({ url: myURL, format: new OpenLayers.Format.GeoJSON({ 'internalProjection': mercator, 'externalProjection' : wgs84 }), async: false }) }); var stations = new OpenLayers.Layer.Vector("STATIONS", { strategies: [new OpenLayers.Strategy.Fixed()], styleMap: myStationStyles, protocol: new OpenLayers.Protocol.HTTP({ url: myURL, format: new OpenLayers.Format.GeoJSON({ 'internalProjection': mercator, 'externalProjection' : wgs84 }), async: false }) }); map.addLayers([clusters, stations]); The obvious drawback is that I have to call the same file "wx-json.php" several times, one for each layer, getting in almost all cases the same GeoJSON-formatted result exactly. While it is sufficient to call it once, every time needed, and then distribute the properties (and its values) to the layers (and their features, accordingly). One thought about bypassing this result, is appending parameters to the URL, so that I get the GeoJSON-formatted features with one property at each call: var myURL="http://localhost:8080/wxproj/wx-json.php?property=station"; var stations = new OpenLayers.Layer.Vector("STATIONS", { ... }); var myURL="http://localhost:8080/wxproj/wx-json.php?property=lightnings"; var clusters = new OpenLayers.Layer.Vector("LIGHTNINGS", { ... }); But I find it also consuming. Is there any more efficient way to get the GeoJSON data only once and then create the layers with features according to each property? Edit: I found a similar [question][1] that restates my own demand, that is a single GeoJSON file backing multiple Vector Layers. But, there is no code to understand how this is being done. [1]: http://gis.stackexchange.com/questions/11027/openlayers-geojson-data-store