Map window disallows editing, picking and selecting records in hidden layers.
Map window displays focused pixel in a picked tile. Clicking a pixel in a picked tile moves focus to that pixel and scrolls it into view in the list of pixels in the Record pane.
(Fix) Map window no longer sometimes paints a "the picked record is too small" box around the corner of a picked tile if other corners are off-screen.
The Layers pane includes an option to display field type (instead of the default field width) for table fields in the dropdown menu on the filter button.
The Layers pane allows editing pick mode for map layers. The default is to allow picks. Alt-click in map window tries to pick a record from the active layer. Shift-Alt-click tries to pick a record from all layers that allow picks, preferring layers that are higher in the display stack.
Alt-click in map window is reworked to never clear the cursor mode. Using Alt-click in the default cursor mode picks records. Using Alt-click in other cursor modes (eg, tracker) works like click would, the Alt modifier is ignored.
Alt-clicking a record that is already picked in map window no longer re-picks the record, abandoning all changes made to it. Alt-clicking a stack of records keeps the picked record if it is in the stack.
Ctrl-click and Ctrl-drag in map window are reworked to never clear the cursor mode or the edited record. Using Ctrl-click and Ctrl-drag in the default cursor mode with no edited record selects records. Using Ctrl-click or Ctrl-drag with an edited record with editable geometry selects coordinates.
Selecting records using Ctrl-drag in map window no longer slightly extends the selection box to make the single pixel box work as Ctrl-click would. Instead, Ctrl-click continues to select data within some distance of the click, but Ctrl-drag is allowed to make the selection box as thin as possible (the window only starts tracking the box if the cursor is dragged far enough from the initial click point).
Clicking a coordinate or pixel of a picked record in map window switches the Record pane to the Coordinates / Pixels tab if it is not already in that tab. Clicking some distance away from all coordinates or pixels switches the Record pane to the Values tab. (This allows starting or stopping the process of editing coordinates of a picked record: Alt-click a record to pick it, click a coordinate handle to make coordinate handles writable, do some editing, click "far" away from the record to make coordinate handles read-only again or take a peek at the field values, etc.)
Clicking a segment of a picked record in map window sets the focus coordinate to the beginning of the segment.
The context menu for an edited record in map window no longer includes commands to commit or cancel changes if the record is read-only.
Editing geometry in map window allows switching the edit mode between Insert Coordinates (keyboard shortcut: I) and Move Coordinates (M) using the context menu. (The Insert key formerly used to create / move / delete the insert point in the map window or in the list of coordinates in the Record pane, which behaved somewhat similarly to the new edit modes, no longer works.)
New edit mode in map window: Move Coordinates + Split (P). While in this mode, clicking a coordinate handle sets focus to that coordinate, clicking a segment inserts a new coordinate at the clicked location and sets focus to that coordinate, dragging a focused coordinate handle moves that coordinate (plus other selected coordinates if the dragged coordinate is selected, or all coordinates if the Shift key is pressed - similar to Move Coordinates).
Editing line or area geometry in map window adds new commands that work with branches to the context menu: Begin New Branch, Continue Last Branch (shown if there is an unfinished branch), End Current Branch (shown if there is an unfinished branch that is currently being added to).
Clicking a segment of an edited line or area in map window allows changing the segment type using new commands in the context menu: Convert to Line, Convert to Circle, Convert to Ellipse, Convert to Spline. (To convert a curve segment back to a line one currently has to right-click a coordinate handle for one of the curve control points, right-clicking the curve itself does not work.)
The Layers pane allows editing snap mode for map layers. The default is to allow snaps. Editing geometry in map window allows switching between snapping to the active layer and snapping to all eligible layers (A, the default is to snap to the active layer), as well as toggling snap on and off (Space) using the context menu.
Editing geometry in map window allows snapping while dragging coordinates. Keyboard shortcuts for snap modes work during dragging as well.
New snap mode in map window: Snap to Grid (G). There is a new Snap Parameters command (found in the main menu, in the toolbar selector for the cursor mode, and in the context menu for an edited record) that allows specifying grid size and grid unit (the default grid step is 10x10 units of the coordinate system). Snap parameters can be edited outside of an editing session. (We do not currently save snap parameters to component properties, but we likely will.)
New snap mode in map window: Snap to Bearing (B). The Snap Parameters command allows specifying the number of bearing divisions (the default is 4, which means that there are 4 fixed directions: 0, 90, 180, 270 degrees, this is frequently called "ortho mode" where only horizontals or verticals are allowed).
Editing geometry of an existing record in map window no longer snaps to the old version of the geometry. Instead, editing snaps to the edited coordinates. Snapping to coordinates of an edited object uses a smaller snap distance than snapping to coordinates of other objects (50 pixels instead of 150) and is disabled if the edited object is a point. (This is done to help avoid creating empty segments and walkbacks.)
The Table.SearchBatchRTreeThin method in the object model accepts a new boolean parameter to return data either touching or completely within the search rectangle.
There is a new dataport for JSON data that is not GeoJSON. Top-level structures in JSON data that look like lists of records are exposed as tables. Other top-level structures are exposed as comments. *.JSON files are remapped from GeoJSON to JSON.
There is a new dataport for web JSON data.
Web CSV / JSON / GeoJSON dataports allow refreshing tables to re-read them from the web.
(Fix) CSV dataport correctly parses data that uses a whitespace character as the field delimiter.
Web CSV dataport uses a more sophisticated content type check (blacklist instead of whitelist) to allow custom content types.
Oracle dataport optimizes bulk reads. (Reading big tables in 9 should be at least on par with 8.)
GDB dataport supports storing MFD_META properties inside the geodatabase. This allows overriding coordinate systems, setting up styles, etc.
GDB dataport allows creating (also renaming and deleting) components of all types, storing component definitions inside the geodatabase.
GDAL dataport supports GDAL 2.3, 2.4, 3.0.
MySQL dataport no longer creates virtual drawings for tables with geometry fields.
GPKG dataport provides its own versions of spatial functions required to enable writes to spatial indexes when SpatiaLite or similar extensions that normally provide these functions cannot be loaded. This allows operating GPKG databases in full read-write mode with just SQLITE3.DLL.
LAS / LAZ dataport optimizes spatial queries to perform significantly faster (4x or so).
LAS / LAZ dataport uses significantly less memory when creating spatial indexes.
Dataports for databases allow tables to have virtual computed fields. This allows having, say, a field with virtual geoms composed from X and Y values stored in the database. Computed fields on databases cannot refer to other computed fields and cannot participate in indexes.
Web image server dataport uses new URLs for Yandex maps.
There is a new dataport for PDS files. (Currently we support tables and images.) *.XML files are mapped to PDS. (*.XML files were not mapped to any particular dataport before even though many formats use them. There is no better extension to map to PDS, however, so we are going to map *.XML to PDS first and remap to other dataports later as part of automatic detection where it will make sense to do so.)
The API doc has been updated to include latest changes to the object model. Topics for several existing calls have been extended. There is a new VBScript example for ValueSet.CreateLocked (mostly provided for completeness because the performance gain from using ValueSet.CreateLocked for VBScript is minimal).
End of list.