- Allow skipping event triggers on removeAnnotation and removeAllAnnotations (#13521)
- Add addMultipleAnnotations method (#1351)
- Switch to more native functions (#1345)
- Make adding and removing annotations somewhat more efficient (#1343)
- Stop using jquery extend (#1342)
- Change how webpack builds some libraries (#1341)
- Speed up adding annotations (#1340)
- Improve encoding html for screenshots (#1334)
- Expose original event as part of click events (#1329)
- Attempt to reinitialize the webgl context when restored (#1327)
- Zero out uniform arrays by default (#1327)
- Update to modern d3 (#1309)
- Fix textureHandle accessor (#1308)
- Ensure compatibility with older systems (#1305)
- Never include vtkjs in the bundle (#1304)
- Skip rendering empty text values (#1300)
- Ensure compatibility with older systems (#1293)
- Change default back to OSM (#1292)
- Fix the name of one of the tile map options (#1277)
- Remove debug statement (#1276)
- Add mouseup and mousedown events (#1275)
- Add an action where the middle mouse button pans (#1269)
- When binding an array of events, don't duplicate (#1265)
- Improve quad cropping to zero (#1258)
- Fix an issue cropping large canvas quads (#1250)
- Fix setting nearest pixel on texture creation (#1246)
- Speed up converting polybool segments to polygons (#1239)
- Easier map debugging (#1240)
- Uncross polygon annotations (#1236)
- Allow using the rdp functions on non-feature polygons (#1234)
- Allow annotations to be created regardless of metakeys (#1235)
- Guard texture update calls (#1233)
- Guard converting an empty polygon (#1232)
- Guard accessing a quad feature (#1231)
- Reduce the time it takes to switch texture interpolation (#1230)
- Directly support nearest pixel or bicubic on quad interpolation (#1229)
- Make clamping at the end of a map transition optional (#1226)
- Add a cursor annotation mode (#1224)
- Update on meta key changes (#1221)
- Fix determining annotation correspondence (#1223)
- Speed up track feature (#1220)
- Explicitly have annotation defaults (#1214)
- Changed how one module was referenced in package dependencies (#1213)
- Explicitly have annotation defaults (#1212)
- Added a uniformLine property to speed up line rendering (#1211)
- Fix a bug introduced in #1207 (#1210)
- Reduce polygon and position function calls (#1208)
- Add some code paths to reduce transform calls (#1207)
- Allow constraining rectangle and ellipse annotations to a list of fixed sizes (#1205)
- Optimize reordering fetch queue (#1203)
- Support polygon annotations with holes through geojson (#1201)
- Adjust queue track size based on number of tile layers (#1202)
- Support polygon annotations with holes (#1200)
- Reduce tile layer updates (#1196)
- Reduce memory copy on pixelmap layer creation (#1194)
- Square, circle, and ellipse annotations, plus a way to constrain rectangle and ellipse annotations to a list of aspect ratios (#1192)
- Emit layerMove event when changing a lyer's z-index (#1185)
- Tile layers with keepLower: false purged tiles on high zoom (#1178)
- Reduce texture memory check (#1175)
- Support tiled pixelmaps (#1153)
- Add support for webgl pixelmaps (#1152)
- Fix spelling of collinear (#1173)
- Fix the priority of styles used for tracks (#1169)
- Update option for addAnnotation (#1161)
- Do not name osm layers based on the tile source (#1154)
- Build for older browsers (#1145)
- Switch to webpack v5 and update build tooling (#1132)
- Harden checking for optional dependencies (#1143)
- Add scaleWithZoom option to heatmaps (#1125)
- Removed wikimedia from the map source list (#1109)
- Added more tile sources to the default list (#1107)
- Add a continuousCloseProximity option to annotations (#1106)
- Add a gridFeature (#1082)
- Allow sharing queues between tile layers (#1100)
- Allow removing promises from the idle monitor (#1101)
- Improve when tile layers are idle (#1101)
- Added a geoOnce handler for events (#1097)
- Have semantic release publish artifacts to the GitHub release (#1094)
- The primary map div now has overflow hidden set on it (#1088)
- Contours with continuous (unstepped) data can specify the same number of values in
rangeValues
andcolorRange
(#1079)
- Screenshots now handle mix-blend-mode settings on top level divs (#1074)
- More flexible default position accessors (#1066)
- Fixed an issue with affine transforms and polygons (#1073)
- Added a marker feature (#1035)
- The mapInteractor cancelOnMove option can now take a movement threshold (#1058)
- GCS can now be specified in pointSearch, boxSearch, and polygonSearch (#1051)
- Added a track feature (#1040)
- Added a geo.gui.scaleWidget.formatUnit utility function (#1048)
- The pointInPolygon2D function is faster (#1052)
- On markers, updateStyleFromArray optimizes certain updates and exposes a faster way to change symbol and symbol value (#1049)
- Line segments with zero width or zero opacity won't be found by pointSearch or polygonSearch (#1041)
- Removed extra calls to sceneObject constructors (#1039)
- Fixed an issue with rendering on hidden tabs in Chrome (#1042)
- The osmLayer now has predefined
tileSources
that can be used with thesource
method or property to switch multiple parameters at once (#1020)
- Points with small radii or thin strokes are rendered better (#1021)
- When only updating point styles, don't recompute geometry transforms (#1022)
- Optimized a transform code path for pixel coordinates (#1023)
- WebGL point features automatically use the most memory-efficient primitive shape for the point sizes used based on the system's graphics capabilities (#1031)
- Less data is transferred to the GPU when only styles have changed in webgl line or polygon features (#1016)
- Switched the default tile server to Stamen Design's toner-lite (#1020)
- Mouse wheel events didn't recompute gcs coordinates, so a wheel event without a previous move event could list the wrong location (#1027)
- Original event data was not included with actionwheel events (#1030)
- Added a polygonSearch method to features (#1014)
- The feature boxSearch function now uses map input gcs coordinates consistently and returns results in the same format as pointSearch (#1014)
- The pointTo2DTriangleBasis utility function was renamed to pointToTriangleBasis2d (#1014)
- Fetch queues can have an initial size different from their regular size (#1000)
- Autoshare renderers now has three states, with the default being more likely to not change anything visually (#1011)
- More response zooming via mouse wheel (#993)
- Explicitly exit retired renderers when autosharing renderers (#1007)
- If a point has no stroke or fill, don't return it from pointSearch (#1003)
- WebGL point, line, polygon, and contour features use a localized origin for improved precision at high zoom levels. This reduces panning jitter in zoom levels 19 and up (#1005)
- When doing a point search on a line feature, report which line segment is found (#1008)
- Include source event information in some feature events (#1009)
- Idle handlers no longer defer to scene-graph parents. Parents still wait for all children to be idle (#1001)
- Better handling of tiles with overlap (#997)
- Shared tile layers stack properly by clearing quads on layer addition and removal (#1010)
- Speed up rebuilding webgl point features (#994)
- Layers that use webgl renderers automatically share contexts when possible. Layers can switch renderers manually as well. This largely avoids the limitation of number of webgl contexts in a browser (#975)
- Support affine transforms in the proj4 string (#986)
- Speed up rendering geojson features by using constant values for constant geojson styles (#987)
- The point clustering radius value is now in display pixels (#983)
- Fixed drawing partial fixed-scale canvas quads (#985)
- Make fewer function calls when computing polygon strokes (#980)
- Speed up coordinate transforms that only switch y-axis (#979)
- Polygon annotations can be drawn in the same continuous smooth manner as line annotations. (#976)
- Rename the d3 renderer to svg. d3 still works as an alias (#965)
- Rename the vgl renderer to webgl. vgl still works as an alias (#965)
- Feature selection API is now enabled automatically if any event handlers are bounds to the feature (#921)
- Added a VTK.js renderer which supports a point feature (#893, #953)
- Coordinate transforms on flat arrays are now faster (#939)
convertColor
is memoized to speed up repeated calls (#936)- All features have a
featureType
property (#931) - When changing geometry sizes, buffers are reallocated less (#941)
- Initial rendering webGL features is somewhat faster (#943)
- WebGL point and polygon features no longer clip by z coordinates (#963)
- Removed the dependency on the vgl module for the
object
andtimestamp
classes (#918) - CSS color names are obtained from an npm package rather than being defined in the util module (#936)
- Updated several npm modules (#944)
- Report the unmasked renderer used with webgl (#947)
- Width and height are now in the base renderer class (#962)
- Fixed some minor issues with layers (#949)
- Improve documentation (#922, #928, #929, #930, #932, #948, #950, #951, #956, #960, #961)
- Added a point cluster example (#957)
- Editor tutorials keep history in browser (#926)
- Fixed an issue with the annotation key handler (#923)
- Added an idle property to objects (#894)
- Better handling and changing of camera clipbounds (#899)
- File readers (the geojsonReader) now returns a Promise. The layer will report that it is not idle until this promise is finalized (#905)
- Fixed an issue with overlapping, cropped tiles on old browsers (#901)
- Fixed an issue where a
geo.gl.polygonFeature
could be updated after it was deleted (#913)
- Changed build process: optional dependencies are now included in the bundle by default (#890)
- Transpile with Babel to support old browsers and new language features (#900, #903)
- The geojsonReader has been renamed from
jsonReader
togeojsonReader
. The old name still works as an alias (#905) - Catch errors in animation frame callbacks (#911)
- Add multi-color support to the continuous color legend (#810)
- Warn when trying to create an unsupported feature (#823)
- Expose registries (#830)
- Add all proj4 projections (#840, #873)
- Trigger an event when an annotation's coordinates change (#841)
- Add an option to limit text feature rendering (#834)
- Calculating min and max of array is now a utility function (#835)
- Generalized meshes (#817)
- Added a
wrapAngle
utility function (#836) - Isolines (#838)
- Ensure GL polygons are built once before their strokes so that the strokes are always on top (#806)
- Work around
atan
bugs in openmesa and swiftshader WebGL renderers (#816) - Fix text alignment on the scale widget (#828)
- Ignore z values in
vgl.lineFeature
(#833) - Don't modify geojson object coordinates (#848)
- Ensure all point position calls pass the data index (#852)
- Test with a muted video (#811)
- Use Firefox headless (#818)
- Use karma-spec-reported for better output (#829)
- Upgrade jasmine (#837)
- Refactor how external data is fetched (#851)
- Add more support for testing examples, similar to tutorial tests (#866)
- Refactored the server script to allow serving the website and build directories as well as the dist directory (#868)
- Improve tutorial page layout (#809)
- Improve documentation (#819, #825, #824, #839, #844, #849, #859, #858, #867, #872)
- Update tutorials when text is deleted (#827)
- Added a rainfall example with isolines and contours (#869)
- Change the Deep Zoom example to make it more generic and use a public data source (#875)
- Automate website deployment (#877)
- Events allow changing feature order on mouse over and mouse click (#807)
- Multiple UI layers can be active at once (#802)
- Clear animation queue when the map is destroyed (#801)
- Handle dereferencing errors in screenshots more gracefully (#803)
- Line style function parameters are more consistent (#804)
- Polygon strokes were sometimes drawn under polygon fills (#806)
- Added a line tutorial (#805)
- Allow specifying the map's initial maximum bounds in a different GCS (#794)
- Improve setting widget positions (#796)
- Add methods to simplify line geometries (#791)
- Add functions computing spherical and Vincenty distances (#797)
- Add a scale widget (#798)
- Improve the screenshot function by dereferencing CSS urls (#799)
- Enable the color legend example (#790)
- Add a new editor tutorial with HTML and CSS panes (#783)
- Use https urls for openstreetmap tiles in all examples and tutorials (#793)
- Use resemblejs for testing rather than node-resemble (#785)
- Resolve hammerjs by it's name on npm in addition to the global variable
Hammer
(#787)
- Individual annotations can be edited (#769)
- Sped up updating line features (#779)
- Added an
object.geoIsOn
function to check if an event is bound (#768) - Use the average perimeter for the center of a polygon or line (#761)
- Allow display to/from gcs conversion functions to handle arrays of points (#766)
- When drawing a line annotation, don't create intermediate collinear points (#759)
- Improve exiting and reloading maps (#750)
- Various minor improvements (#767, #760)
- Refactored importing optional dependencies so webpack makes them truly optional (#770)
- Upgraded to jQuery 3.x (#772, #773)
- Updated npm packages (#756)
- Reduce packaging effects (#763, #751)
- Include stroke widths when doing a point search on polygons (#762)
- Fixed
pointSearch
when the feature used a non-default gcs (#758) - Fixed unbinding keyboard events (#757)
- Added a new video quad feature (#745)
- Annotation id's are now persevered when reloading geojson (#747)
- Fixed setting rotation on map creation (#740)
- Fixed polygon fill and opacity interaction (#744)
- Fixed handling GCS in geojson annotation imports (#748)
- Updated GeoJS's website (#729)
- Improved the API documentation (#738)
- Added an "editor" tutorial (#742)
- Updated some examples (#743)
- Added a new color legend widget (#731)
- Fixed
z-index
bug on new layers (#732) - Improved testing infrastructure (#735, #737)
- Removed some boiler plate code from the examples (#733)
- Added annotation labels (#719)
- Added text feature (#719)
- Added tutorial infrastructure and some simple tutorials (#725, #727, #728)
- Handle tap-touch actions (adds support for some tablet styluses) (#730)
- Started revamping our API documentation with a new template (#704, #706, #708, #710, #713)
- Several minor API improvements (#707)
- Added subdomain template parameters for tile layer urls (#715)
- Fix bugs in rectangle annotations (#693, #694)
- Add new optimized methods for updating styles of features for animations and a new example (#687)
- Fix checks for optional dependencies (#696)
- Change the template for our apidocs to jaguarjs-jsdoc (#697)
- Fix a bug in applying polygon stroke styles (#700)
- Handle basic touch interactions using hammerjs (#675)
- Increase testing coverage (#676, #677, #684)
- Support additional line styling options in the json reader (#680)
- Add the ability to draw line annotations (#681)
- Add
visible
andselectionAPI
methods to layers (#682) - Replace custom quad tree implementation with kdbush (#685)
- Remove several unused utility methods (#686)
- Move vgl mocking function into
utils
for use in upstream testing (#688)
- Added a
map.screenshot
method to take screenshots of the current map view (#665, #667) - Added a screenshot button on the example pages (#669)
- Made it easier to disable or replace keyboard actions in the interactor (#670)
- Refactored GL line feature with a number of new styling options available. See our blog post and the new line example for more details. (#649, #662)
- Added keyboard shortcuts for map navigation. (#661)
- Most DOM styling is now done with a CSS file rather than setting inline styles. (#660)
- Added GCS options to the annotation interface. (#654)
- Added headless unit testing for GL code and examples. (#651, #658).
- Removed unused source files. (#656, #657)
- Made annotation states more consistent (#643)
- Reduced lag between layers (#644)
- Fixed gaps between tiles (#648)
- Fixed map jumping after certain transitions (#650)
- Added a pixelmap feature and example (#637)
- The location with a quad is reported in mouse events and point search functions (#635)
- Canvas elements can be rendered in quads on the canvas renderer (#634)
- Most features support visibility (#632)
- Colors can be specified with a greater variety of css methods, such as
rgb()
andrgba()
(#636) - Point annotations can scale with zoom (#628)
- Fixed a bug in getting the visible bounds using a custom map projection (#625)
- Slider widgets can now be repositioned and resized (#619)
- Improved the annotation API with the ability to import and export GeoJSON (#617)
- Add a closed flag for line features (#602)
- Minor changes and bug fixes in the interactor (#603, #604, #605)
- Allow showing partial tiles on edges (#606)
- Minor fixes to geojson rendering (#609)
- Update to VGL 0.3.10 (#608, #612)
- Reduce flickering in point cluster rendering (#621)
- Beta support for interactive annotations and a new example (#613, #616)
- Fixed a bug preventing deletion of stroked polygons (#601)
- 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)
- 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)
- 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)
- 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)
- 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)
- Fixed several bugs related to map animations and transitions
- Fixed a tile layer performance bug when
keepLower=false
- 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
- 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.
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 |
- 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.
- 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
- Unit tested code coverage is now up to 62% from 42% at version 0.6.
- 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
- 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
- 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
- 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% |
- 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.
- 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
- 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
- @aashish24
- @danlamanna
- @dcjohnston
- @jbeezley
- @manthey
Huge thanks to all of the contributors, and the many others who tested, created issues, and gave feedback during the development of this release.
- 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"
- Zoom level is now consistent with other mapping libraries
- Removed
geo.latlng
- Changed default feature colors
- Map nodes are now created as
position: relative
- 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
- Fixes the built library included in the repository so that it contains vgl
- Updated to 0.4.0 because npm versions are immutable (the previous geojs was published up to 0.3.x)
- Minor changes to the build process to make
npm install
work
- First Release