8.1 KiB
Upgrade notes
v3.6.0
ol.interaction.Draw changes
- The
minPointsPerRingconfig option has been renamed tominPoints. It is now also available for linestring drawing, not only for polygons. - The
ol.DrawEventandol.DrawEventTypetypes were renamed tool.interaction.DrawEventandol.interaction.DrawEventType. This has an impact on your code only if your code is compiled together with ol3.
ol.tilegrid changes
- The
ol.tilegrid.XYZconstructor has been replaced by a staticol.tilegrid.createXYZ()function. Theol.tilegrid.createXYZ()function takes the same arguments as the previousol.tilegrid.XYZconstructor, but returns anol.tilegrid.TileGridinstance. - The internal tile coordinate scheme for XYZ sources has been changed. Previously, the
yof tile coordinates was transformed to the coordinates used by sources by calculating-y-1. Now, it is transformed by calculatingheight-y-1, where height is the number of rows of the tile grid at the zoom level of the tile coordinate. - The
widthsconstructor option ofol.tilegrid.TileGridand subclasses is no longer available, and it is no longer necessary to get proper wrapping at the 180° meridian. However, forol.tilegrid.WMTS, there is a new optionsizes, where each entry is anol.Sizewith thewidth('TileMatrixWidth' in WMTS capabilities) as first and theheight('TileMatrixHeight') as second entry of the array. For other tile grids, users can now specify anextentinstead ofwidths. These settings are used to restrict the range of tiles that sources will request. - For
ol.source.TileWMS, the default value ofwarpXused to beundefined, meaning that WMS requests with out-of-extent tile BBOXes would be sent. NowwrapXcan only betrueorfalse, and the new default istrue. No application code changes should be required, but the resulting WMS requests for out-of-extent tiles will no longer use out-of-extent BBOXes, but ones that are shifted to real-world coordinates.
v3.5.0
ol.Object and bindTo
-
The following experimental methods have been removed from
ol.Object:bindTo,unbind, andunbindAll. If you want to get notification aboutol.Objectproperty changes, you can listen for the'propertychange'event (e.g.object.on('propertychange', listener)). Two-way binding can be set up at the application level using property change listeners. See #3472 for details on the change. -
The experimental
ol.dom.Inputcomponent has been removed. If you need to synchronize the state of a dom Input element with anol.Object, this can be accomplished using listeners for change events. For example, you might bind the state of a checkbox type input with a layer's visibility like this:var layer = new ol.layer.Tile(); var checkbox = document.querySelector('#checkbox'); checkbox.addEventListener('change', function() { var checked = this.checked; if (checked !== layer.getVisible()) { layer.setVisible(checked); } }); layer.on('change:visible', function() { var visible = this.getVisible(); if (visible !== checkbox.checked) { checkbox.checked = visible; } });
New Vector API
-
The following experimental vector classes have been removed:
ol.source.GeoJSON,ol.source.GML,ol.source.GPX,ol.source.IGC,ol.source.KML,ol.source.OSMXML, andol.source.TopoJSON. You now will useol.source.Vectorinstead.For example, if you used
ol.source.GeoJSONas follows:var source = new ol.source.GeoJSON({ url: 'features.json', projection: 'EPSG:3857' });you will need to change your code to:
var source = new ol.source.Vector({ url: 'features.json', format: new ol.format.GeoJSON() });See http://openlayers.org/en/master/examples/vector-layer.html for a real example.
Note that you no longer need to set a
projectionon the source!Previously the vector data was loaded at source construction time, and, if the data projection and the source projection were not the same, the vector data was transformed to the source projection before being inserted (as features) into the source.
The vector data is now loaded at render time, when the view projection is known. And the vector data is transformed to the view projection if the data projection and the source projection are not the same.
If you still want to "eagerly" load the source you will use something like this:
var source = new ol.source.Vector(); $.ajax('features.json').then(function(response) { var geojsonFormat = new ol.format.GeoJSON(); var features = geojsonFormat.readFeatures(response, {featureProjection: 'EPSG:3857'}); source.addFeatures(features); });The above code uses jQuery to send an Ajax request, but you can obviously use any Ajax library.
See http://openlayers.org/en/master/examples/igc.html for a real example.
-
Note about KML
If you used
ol.source.KML'sextractStylesordefaultStyleoptions, you will now have to set these options onol.format.KMLinstead. For example, if you used:var source = new ol.source.KML({ url: 'features.kml', extractStyles: false, projection: 'EPSG:3857' });you will now use:
var source = new ol.source.Vector({ url: 'features.kml', format: new ol.format.KML({ extractStyles: false }) }); -
The
ol.source.ServerVectorclass has been removed. If you used it, for example as follows:var source = new ol.source.ServerVector({ format: new ol.format.GeoJSON(), loader: function(extent, resolution, projection) { var url = …; $.ajax(url).then(function(response) { source.addFeatures(source.readFeatures(response)); }); }, strategy: ol.loadingstrategy.bbox, projection: 'EPSG:3857' });you will need to change your code to:
var source = new ol.source.Vector({ loader: function(extent, resolution, projection) { var url = …; $.ajax(url).then(function(response) { var format = new ol.format.GeoJSON(); var features = format.readFeatures(response, {featureProjection: projection}); source.addFeatures(features); }); }, strategy: ol.loadingstrategy.bbox });See http://openlayers.org/en/master/examples/vector-osm.html for a real example.
-
The experimental
ol.loadingstrategy.createTilefunction has been renamed tool.loadingstrategy.tile. The signature of the function hasn't changed. See http://openlayers.org/en/master/examples/vector-osm.html for an example.
Change to ol.style.Icon
- When manually loading an image for
ol.style.Icon, the image size should now be set with theimgSizeoption and not withsize.sizeis supposed to be used for the size of a sub-rectangle in an image sprite.
Support for non-square tiles
The return value of ol.tilegrid.TileGrid#getTileSize() will now be an ol.Size array instead of a number if non-square tiles (i.e. an ol.Size array instead of a number as tilsSize) are used. To always get an ol.Size, the new ol.size.toSize() was added.
Change to ol.interaction.Draw
When finishing a draw, the drawend event is now dispatched before the feature is inserted to either the source or the collection. This change allows application code to finish setting up the feature.
Misc.
If you compile your application together with the library and use the ol.feature.FeatureStyleFunction type annotation (this should be extremely rare), the type is now named ol.FeatureStyleFunction.
v3.4.0
There should be nothing special required when upgrading from v3.3.0 to v3.4.0.
v3.3.0
-
The
ol.events.condition.mouseMovefunction was replaced byol.events.condition.pointerMove(see #3281). For example, if you useol.events.condition.mouseMoveas the condition in aSelectinteraction then you now need to useol.events.condition.pointerMove:var selectInteraction = new ol.interaction.Select({ condition: ol.events.condition.pointerMove // … });