Releases: OpenGeoscience/geojs
Releases · OpenGeoscience/geojs
Version 0.10.0
Breaking changes
- Removed the
planeFeature
class in favor of the faster and more powerfulquadFeature
(#583) - Changed the callback signature for the
fill
style, which turns on or off rendering the polygon fill (#597)
Additions and improvements
- Improved heatmap feature and example (#574, #577, #578, #579)
- Replaced grunt build tasks with webpack and npm scripts (#580)
- Added a d3 rendered
quadFeature
(#581) - Added selection-based zoom (#582)
- Added an interface for
createLayer
to request renderers by feature support (#590) - Improved polygon rendering performance (massively) and added a usage example (#594)
- Added an example of customizing the style of WMS layers (#595)
- Added stroking to the polygon feature (#597)
Bug fixes
- Fixed a bug in box selection with map rotation (#582)
- Fixed the
draw
method on GL and canvas features (#585) - Fixed a rendering bug in GL line features (#597)
- Removed the now unavailable mapquest tile servers from the examples (#598)
Version 0.9.1
Changes
- Added a new heatmap feature (#557)
- Switched to earcut for triangulating polygons (#555)
- Added methods on
geo.transform
to load EPSG projections from epsg.io (#561) - Recorded the git SHA at build time as
geo.sha
(#562) - Made
tileLayer.tilesAtZoom
configurable to support rectangular images (#568) - Added caching to proj4 transform objects (#570)
- Added jQuery to the distributed bundle (#572)
Version 0.9.0
New features
- Added a canvas renderer for tile layers and quad features
- Added new marker styles for d3 rendered vectors
- Zooming with the mouse wheel now supports animation and momentum (see the updated Tiles example)
- All files have been converted into CommonJS modules and are built with webpack
- PhantomJS tests are now executed with the Karma test runner
- Unit test coverage information is collected by istanbul and reported to codecov
- Performance results are submitted to CDash during testing as a JSON-encoded "notes" file (example)
Bug fixes
- Fixed several bugs related to map animations and transitions
- Fixed a tile layer performance bug when
keepLower=false
Breaking changes
- The global
inherit
function has moved togeo.inherit
- The released bundle (
geo.js
) now includes pnltri, proj4, and gl-matrix internally - The external bundle (
geo.ext.js
) now contains only jQuery and d3 - All sources in
src/core/
have moved up a directory to be consistent with the namespaces in the module - The jQuery plugin has moved to OpenGeoscience/geojs-jquery-plugin and geojs-jquery-plugin on npm
Version 0.8.0
Major changes
- Quad features have been created as a replacement for plane features. They can draw multiple convex quadrilaterals with images or solid colors as textures within a single feature instantiation. These features also support default styles or images that display while asynchronous resources load.
- A new quad example demonstrates the new capabilities of the quad feature.
- A new reprojection example demonstrates how quad features can be used to reproject a standard tile layer. It also provides an additional example of using mouse events on point features to display textual information in a popup box and to recenter the map on click.
- UI Layers will now automatically remain on top when adding new layers.
- Migrated to ESLint from jshint/jscs for style checking.
Performance improvements
Migrating from the plane feature to the new quad feature provides major performance gains for the GL tile layer. @manthey provided some benchmarks in his PR demonstrating how much this improves performance on a variety of platforms. Here is an summary of the improvements he measured:
Test | Average frame (ms) | Slow frames (%) | Worst frame (ms) |
---|---|---|---|
desktop-chrome-plane | 12.69 | 24.59 | 84.9 |
desktop-chrome-quad | 3.31 | 0.44 | 20.74 |
destop-firefox-plane | 55.25 | 55.52 | 1316.73 |
destop-firefox-quad | 7.5 | 3.82 | 41.04 |
laptop-chrome-plane | 25.55 | 60.21 | 157.15 |
laptop-chrome-quad | 3.89 | 3.31 | 62.62 |
laptop-firefox-plane | 130.04 | 95.71 | 1126.31 |
laptop-firefox-quad | 21.92 | 91.1 | 67.21 |
Version 0.7.0
New features
- Maps can now be rotated either through the javascript API or by pressing
Ctrl
while dragging or using the mouse wheel. - The Tile Layer example allows turning on or off rotations or restricting rotations to specific orientations.
- A new renderer fallback API supports querying support for a renderer and falling back to a different supported renderer. The default OSM layer now supports this mechanism falling back to a raw HTML interface when webGL is not available.
Bug fixes
- The Deepzoom example was mistakenly using the HTML renderer.
- Fixed several race conditions involved in loading and purging tiles
- The tile cache will now automatically grow when it is not large enough to contain all of the tiles in use
Testing
- Unit tested code coverage is now up to 62% from 42% at version 0.6.
Version 0.6.0
Release Notes
New features and API additions
- Completely new tile layer class that moves formally GL specific code into core
- Maps no longer require GL or even a base layer
- Support for SVG and HTML rendering for tile layers
- Support for arbitrary PROJ4 projection strings
- Support wrapping tiles both horizontally and vertically for periodic images
- Tiles can be an arbitrarily sized rectangle
- Hooks for dynamically generated tiles rather than just static images
- The definition of "zoom level" is now consistent with the use in other libraries
- New camera class used to keep track of the visible area and world to image space conversions
- General support for image pyramids through the tile layer (including medical imaging)
- Choropleth feature type
- New API for widgets
- New example showing off the features available for tile layers
- GeoJSON reader now supports Polygon and Multipolygon geometries
- Layers can now be reordered dynamically
- Added a new mouse event (
click
) that detects mouse clicks on the map canvas - The map interactor can be disabled temporarily to cede control of the mouse and keyboard events to external handlers
- Support for subdomains in tile url template strings
- Opacity controls are now supported by all layer types
- Map "origin" parameter provides a fixed offset for world coordinates to support higher precision at high zoom levels
- New map option (
clampZoom
) to limit zoom levels to a given range - New
osmLayer
option (tileRounding
) to control which tiles are loaded at non-integer zoom levels
API changes
- Web mercator (
EPSG:3857
) coordinates are now in units of meters rather than degrees - Lower resolution tiles are loaded before high resolution tiles
- Creates the perception of faster load times
- Greatly reduces the occurrence of background visibility while tiles load
- Removed the per-layer geographic projection attribute (
layer.gcs
) that was never fully implemented- Every layer is now expected to render in the map's world coordinate system
- Feature layers can define a "local" coordinate system that is used internally
- Tile layers have an additional coordinate system defined for each displayable zoom level
- Removed
geo.mercator
in favor of a generic projection class based on PROJ4 - Tile URL template strings now use the more common curly brackets (
{x}
) rather than angle brackets (<x>
) - Nearly all of the internals of the
osmLayer
Performance
- A tile fetch queue now prioritizes downloaded tiles by what is currently in view
- Mouse event handlers are now throttled to fire at most every 30 ms
- Compiled GL shaders are now cached and shared between features
- Configurable tile cache size
Testing
- A new library of "mocked" classes has been started to mock interfaces between the classes inside unit tests.
- All new core classes have unittest coverage over 80% and many more classes now have coverage over 50%
File | Cov | File | Cov | File | Cov |
---|---|---|---|---|---|
event.js | 100.0% | tileLayer.js | 96.2% | mapInteractor.js | 79.7% |
osmLayer.js | 100.0% | tile.js | 96.1% | renderer.js | 71.4% |
tileCache.js | 100.0% | object.js | 90.4% | layer.js | 70.8% |
timestamp.js | 100.0% | sceneObject.js | 87.3% | featureLayer.js | 69.0% |
version.js | 100.0% | planeFeature.js | 87.0% | init.js | 66.3% |
fetchQueue.js | 100.0% | imageTile.js | 81.8% | map.js | 55.7% |
camera.js | 97.7% |
Infrastructure and building
- Continuous coverage reporting of unit tests submitted to CDash
- VGL submodule removed in favor of inclusion via bower
- Support for installing as the
root
user - Data used for testing and examples are now hosted at data.kitware.com
- The library is no longer built automatically after
npm install
to fix downstream build problems.
Bug fixes
- Setting camera bounds now uses the correct coordinate system
- GeoJSON polygon features no longer rendered as lines
- Discrete zoom now works with touch-like devices
- The
planeFeature
now handles coordinate transformations - Rendering operations (such as loading new tiles) now occur during map navigation and transition events
Known issues
- Several performance problems have been exposed by rendering new tiles during map navigations
- Many garbage collections occur during mouse handlers due to excessive memory allocations
- Shader programs are not shared among tiles so they need to be linked for each tile
Contributors
Huge thanks to all of the contributers, and the many others who tested, created issues, and gave feedback during the development of this release.
Version 0.6.0 Release Candidate 1
v0.6.0-rc.1 Preparing version 0.6.0-rc.1
Version 0.5.0
New features
- Contour feature for generating contour plots from gridded data
- Hierarchical data clustering with an experimental option for clustered point features
- Multipolygon support in the GeoJSON reader
- Support for rendering with parallel projection along with discrete zooming and image to device pixel alignment
- Per layer attribution notices as well as default attributions for OpenStreetMap
- Support for drawing multiple maps on a single web page
- Support for authenticated tile servers via
crossOrigin = "use-credentials"
Breaking changes
- Zoom level is now consistent with other mapping libraries
- Removed
geo.latlng
- Changed default feature colors
- Map nodes are now created as
position: relative
Version 0.4.2
- New examples added showing map transitions and data animation
- Large performance improvement for point feature mouse handler setup
- Removed jquery-mousewheel dependency
- Toggling feature visibility now toggles mouse handlers as well
- JQuery plugin will now accept constant values for point sizes and will no longer reset the global gl variable
Version 0.4.1
- Fixes the built library included in the repository so that it contains vgl