
Changes The list of layers in the Layers pane uses a single column. Pressing Enter or doubleclicking a layer starts editing it. Pressing Space toggles the active layer as well as all other selected layers if the active layer is selected. Selecting layers in the Layers pane follows group hierarchy. Selecting or unselecting a layer with children selects or unselects all children. Unselecting a layer with parents unselects all parents (to preserve the invariant that if a layer is selected, all its children are selected as well). Moving layers in the Layers pane follows group hierarchy. Moved layers never change their group level, layers never move between groups. Grouping layers in the Layers pane preserves group selection. Actions that create groups with selected parent and unselected children are denied. The Layers pane includes a filter box that allows filtering layers using parts of their names. Applying a filter disables moving and grouping commands as their effect could be invisible. Deleting / editing / toggling selected layers can affect layers hidden by the filter (this is similar to how the selection works in tables). Selecting or unselecting layers can affect layers hidden by the filter as well (eg, selecting a layer will select all its children, including those that are hidden). The Layers pane allows expanding and collapsing layer groups (Plus / Right Arrow expand, Minus / Left Arrow collapse). Switching between windows preserves collapsed states of layers perwindow. Moving or grouping commands automatically expand groups that contain selected layers to make the effect of commands visible. Clicking a + /  icon of a layer in the Layers pane expands or collapses the layer. Command windows mark their log messages with '(Command : CREATE ...)' or '(Command : [datasource]::[datasource] : CREATE ...)' instead of with '(adhoc)' to help distinguish commands from each other. (Fix) The definition of 'Spain Grid' (a builtin coordinate system carried from Manifold 8) uses correct value for X scale adjustment. Parsing coordinate system from WKT (PRJ) has been extended to recognize a number of new coordinate systems. New query functions for coordinate systems:  ComponentCoordSystemScaleXY  takes a component object, returns an x2 value for local scales for X and Y.
 CoordSystemScaleXY  takes a coordinate system definition, returns an x2 value for local scales for X and Y.
 CoordSystemBase  takes a coordinate system definition, returns the base lat/lon coordinate system.
 CoordSystemForceXY  takes a coordinate system definition, returns the same coordinate system with axes forced to XY order. If the original coordinate system definition is an EPSG or SRID code, the new coordinate system is the same code with overrides.
 CoordSystemPlain  takes a coordinate system definition, returns the same coordinate system with local offsets set to 0 and local scales set to 1.
 CoordSystemWkt  takes a coordinate system definition and a strict boolean flag, returns the WKT (PRJ) representation. If the coordinate system cannot be represented as WKT, the function returns a NULL value. If the strict flag is false, the function maps some coordinate systems that cannot be represented as WKT to close variants (eg, the Lambert conformal conic variant for Michigan is mapped to Lambert conformal conic).
New query functions for measurements, lowlevel:  GeomAreaGeo  takes a geometry value and values for major axis, eccentricity, tolerance, returns geodetic area. The geometry value must be an area in lat/lon, with X (lon) and Y (lat) expressed in degrees. The returned value is in the squared units of major axis (typically, meters).
 GeomBearing  takes a geometry value, returns projected bearing. The geometry value must be a line with a single branch, the bearing is computed from the first to last coordinate of the line. The returned value is in degrees.
 GeomBearingGeo  takes a geometry value and values for major axis, eccentricity, returns geodetic bearing. The geometry value must be a line with a single branch in lat/lon, with X (lon) and Y (lat) expressed in degrees, the bearing is computed from the first to last coordinate of the line. Geodetic bearing is computed using Vincenty's formulae. The returned value is in degrees.
 GeomBearingPoint  takes a pair of point (x2) values, returns bearing. The returned value is in degrees.
 GeomBearingPointGeo  takes a pair of point (x2) values and values for major axis, eccentricity, returns geodetic bearing. The point values must be in lat/lon, with X (lon) and Y (lat) expressed in degrees. Geodetic bearing is computed using Vincenty's formulae. The returned value is in degrees.
 GeomDistancePointGeo  takes a pair of point (x2) values and values for major axis, eccentricity, returns geodetic distance. The point values must be in lat/lon, with X (lon) and Y (lat) expressed in degrees. Geodetic distance is computed using Vincenty's formulae. The returned value is in the units of major axis.
 GeomLengthGeo  takes a geometry value and values for major axis, eccentricity, tolerance, returns geodetic length. The geometry value must be an area or a line in lat/lon, with X (lon) and Y (lat) expressed in degrees. Geodetic distance is computed using Vincenty's formulae. The returned value is in the units of major axis.
New query functions for measurements, highlevel:  CoordMeasureMake  takes a coordinate system definition, a unit name and a geodetic boolean flag, returns a measure object (similar to coordinate converter) that can be used to perform measurements.
If the coordinate system is lat/lon and the unit is lat/lon, measurements are Euclidean, performed in the specified lat/lon coordinate system. If the coordinate system is lat/lon and the unit is metric, measurements are geodetic. If the coordinate system is metric and the unit is lat/lon, measurements are Euclidean, performed in the base lat/lon coordinate system of the specified coordinate system. The geometry values are converted to lat/lon as part of the process. If the coordinate system is metric, the unit is metric, and the geodetic flag is false, measurements are Euclidean, performed in the specified metric coordinate system. If the coordinate system is metric, the unit is metric, and the geodetic flag is true, measurements are geodetic. The geometry values are converted to lat/lon as part of the process.  CoordMeasureArea  takes a measure object and a geometry value, returns area. The geometry value must be an area in the coordinate system of the measure object. The returned value is in the squared units of the measure object.
 CoordMeasureBearing  takes a measure object and a geometry value, returns bearing. The geometry value must be a line with a single branch in the coordinate system of the measure object, the bearing is computed from the first to last coordinate of the line. The returned value is in degrees.
 CoordMeasureBearingPoint  takes a measure object and a pair of point (x2) values, returns bearing. The point values must be in the coordinate system of the measure object. The returned value is in degrees.
 CoordMeasureDistancePoint  takes a measure object and a pair of point (x2) values, returns distance. The point values must be in the coordinate system of the measure object. The returned value is in the units of the measure object.
 CoordMeasureLength  takes a measure object and a geometry value, returns length. The geometry value must be an area or a line in the coordinate system of the measure object. The returned value is in the units of the measure object.
Removed query functions: GeomScaleToSystem, GeomScaleToSystemCff, GeomScaleToUnits, GeomScaleToUnitsCff. These functions have been superceded by functions in the CoordMeasureXxx family. New query functions for watersheds:  TileWatershedAreas / TileWatershedAreasPar  take an image and a number for minimum flow, return a table of watershed areas. The XxxPar variant takes an additional parameter for thread configuration. The image must be singlechannel.
 TileWatershedLines / TileWatershedLinesPar  take an image and a number for minimum flow, return a table of watershed lines (streams). The XxxPar variant takes an additional parameter for thread configuration. The image must be singlechannel.
Watershed functions return a table with the geometry values as well as values for stream ID (int64), target stream ID (int64), Shreve order (float64), Strahler order (float64), flow (float64), total flow with children (float64). Watersheds are computed using a new algorithm that is radically different from the algorithm used by 8. Due to differences in algorithms, watersheds computed by 8 and 9 are similar, but frequently not equal. Most of the differences come from plateaus, where the behavior of streams is wide open to interpretation. The algorithm used in 9 is much faster than that in 8 and can handle vastly more data. New transform templates: Watershed Areas, Watershed Lines. (Transforms and functions to fill sinks to specified level / trace upstream lines are coming.) End of list.
