This topic provides release notes for the very latest builds. For information on different types of builds and a history of recent builds, see the Changes and Additions topic.
Build 176.1 introduces visibility scale limits (also known as scale ranges or zoom ranges) for layers in maps using the Layers pane. The build also provides improvements in Esri Geodatabase (GDB), Shapefiles (SHP), DBF, and Google KML or KMZ dataports, facilitating interchange with Google products.
Visibility Scale Limits
The Layers pane Filter button allows showing and editing visibility scale limits (zoom ranges) for map layers on a per layer basis using two new commands: Show Farthest (Max) Scale and Show Closest (Min) Scale. Maximum and minimum scale limits automatically turn layers off and on as the view in the map window zooms in and out in scale. Zooming a map window closer in than the minimum limit hides the layer. Zooming a map farther out beyond the maximum limit also hides the layer. Zooming a map into the scale range between the maximum and minimum limits will display the layer. Layers that are hidden do not participate in interactive operations such as editing, picking, selecting, or snapping. Layout windows do not currently honor layer scale ranges, neither on screen nor during printing. Scale ranges in the layout pane for both viewing on screen and printing will be added in the next build.
For readability, the Layers pane automatically shortens the listing of max and min scales for map layers to only the first two digits as in 1:nn plus k for thousands, m for millions, b for billions, and then for very large values, two digits plus exponential notation. Examples: 1:40k for a scale of 1:40000 or 1:30m for a scale of 1:30000000.
Scale limits are exposed as simple JSON text for a layer in the map's properties, making it easy to programmatically set and change visibility scale ranges.
The new capability makes it easy to create map displays that automatically show or hide layers depending on the zoom level (scale) of the map view. We can automatically turn on more detailed layers as we zoom into a map, or show different content depending on the zoom level.
Exporting data to Esri file geodatabase GDB format automatically truncates text values to 4096 characters, to protect against accidental insertions of very long text values that might impact file geodatabase performance.
Exporting data to Esri file geodatabase GDB format that resulted in the truncation of text values reports the names of fields containing truncated values as well as the total number of truncated values in the log window.
Exporting data to shapefile SHP format automatically truncates text values to the maximum allowed length and reports truncations in the log.
Exporting data to DBF format automatically truncates text values to the maximum allowed length and reports truncations in the log.
Exporting data to Google KML or KMZ format exports values of fields for drawing records as allowed by KML 2.2. Binary fields such as geoms, tiles, or varbinary data types are not exported. Name and Description fields are no longer special-cased and are exported as regular fields.
To let Google products show labels bound to areas, lines, or multipoints, exporting data to Google KML or KMZ format will export labels bound to an area as bound to a point located at the inner centroid of the area, labels bound to a line as bound to a point in the middle of the line at one half the length of the line, and labels bound to a multipoint as bound to the first point of the multipoint. Labels bound to points will continue to be bound to the point location.
Reading data from a Google KML or KMZ file reads field values.
Build 176 is a new base build, incorporating all improvements in the 9.0.175.x series of builds. It is recommended for all users. Changes since 220.127.116.11 include a 32-bit mode launch option for SQL for ArcGIS Pro, Refresh within ArcGIS Pro, mobile geodatabase support, and GPKG and SQLite layers within ArcGIS Pro support. Also added for Advanced moved are new options to specify system colors, a new dataport for Google Sheets, and enhancements to the layers pane.
Additions and Changes
The Tools - Options dialog has a new Colors tab which allows changing system colors. Changes to colors are only applied after a restart. Colors that can be modified include:
Selection - selected data,
Selection + preview - selected data with selection preview on top, used in table window,
Preview and paint progress - preview data or changed data or layer tab chevron for layers that are being painted,
Cache progress - layer tab chevron for layers that are being cached,
Invalid value - Font color used for an invalid collation, unassigned coordinate system, etc.
Unknown value - Font color used for a NULL value or an unrecognized choice.
Reading data from a LAZ file supports COPC (cloud optimized point cloud) spatial indexes. See copc.io for details and example data.
There is a new Web Server: documentserver dataport for document servers that allows accessing spreadsheet data stored on Google Docs. The dataport takes an URL for a shared spreadsheet and shows it as one or more tables. The exposed data is read-only.
The data source for a document server can be refreshed.
The table coming from a document server can be refreshed.
A table can be exported as a new SQLITE database.
Reading data from a SQLITE database supports an SRID of -1 that used by Spatialite for an unqualified coordinate system.
Table values for a field formatted as a list of choices that do not correspond to any of the specified choices are shown in grayish Unknown Value color instead of with a # prefix.
The Style dialogs with choices for table fields have a toolbar with the Delete button which deletes selected choices. More toolbar buttons will be added in the future.
The Style dialog for table fields that are numeric or vector values no longer shows a language picker button when using choices.
The Layers pane supports the following new commands for table fields:
Show Align - shows and edits field alignment,
Show Language - shows and edits field language,
Show Style - shows and edits field style, specifying a new style for multiple fields only changes the style for fields whose type is compatible with that of the active field.
SQL for ArcGIS Pro
There is a new button to open SQL in 32-bit mode: Open SQL 32-bit. The former Open SQL button has been renamed to: Open SQL 64-bit.
There is a new Refresh button that refreshes tables and table definitions for all layers in all maps, to pick up changes made outside of ArcGIS (eg, in the SQL for ArcGIS add-in).
The Open SQL buttons support the following types of layers besides GDB: GDBMOBILE, GPKG, SQLITE.
The Open SQL buttons pick up layers from all maps instead of just the active map.
((Fix) Opening a LAZ file no longer sometimes fails for files with variable-size chunks.
Build 175.7 concentrates on small adjustments, library updates, and fixes in preparation for wrapping up the current series of cutting edge builds and issuing a new base build.
Additions and Changes
The KoBo dataport automatically refreshes opened tables every 5 minutes. This feature utilizes table versions published by KoBo. Table versions do not advance for absolutely all types of changes to the underlying data, but they do advance for the most common type of changes, such as adding new records, as well as for many of the less common types, such as adding or deleting fields.
The Side box caption in the Style dialog used to format numeric table values has been renamed to Positive degrees and now uses a combo box with choices for: combo box with choices for: (none), E, e, N, n, S, s, W, and w.
Definitions for choice styles interpret value; sequences as value=value;, that is, as a choice whose display name coincides with its value. This helps shorten the definitions for choice styles designed to simply limit values for a field to a specific subset without changing the way these values are displayed.
The StringFormatAny query function supports choice styles for text values. The original text value is trimmed before matching any of the choices. The Style dialog for text values allows specifying a choice style.
Sample data in the Style dialog for vector values have been adjusted to be simpler to read.
Lists of choices in the Style dialogs have Value and Show as captions to make it clearer which column is doing what.
Editing a value formatted with a choice style sorts choices in the dropdown menu so that numbers appear before non-numbers and are sorted by a numeric, rather than a text, value. A choice is treated as a number if it starts with a number. An example of order given a variety of choices mixing text and numbers: -9999 (invalid), 1, 2, 2.5, 3 (standard), 4, 10, other. The value other has no numbers in it so it comes last. A text value like 3 (standard) which starts with a number comes between 2.5 and 4 in how the list of choices is shown.
The About dialog reports Windows 11 as Windows 11 vvvv, Windows 10 as Windows 10 vvvv and Windows Server 2016+ as Windows Server vvvv, with vvvv being a Windows 10 style version label such as 21H1.
The image server for Yandex Maps Street Map has been hidden, since at the present time it has been discontinued, apparently with a new version coming.
Third Party Updates
CUDA modules have been recompiled using CUDA 11.5.1. This adds minor performance improvements.
The WEBP dataport has been updated to use LIBWEBP 1.2.1. This fixes a couple of minor bugs in raster encoding.
The internal version of SQLITE used for all types of SQLITE data, including GPKG, has been updated to 3.37.0. This adds support for STRICT tables, improves the performance of some types of queries, and fixes a couple of bugs.
The C runtime (CRT) library has been updated to 14.30.30704.0, adding native modules for ARM64 architecture in the x64 flavor of the CRT. The portable ZIP package published for cutting edge build 175.7 does not include the new version of the CRT, but the MSI / EXE packages for the next base build will include it. You can download and install the new version of the CRT from Microsoft. You do not, however, have to do that build 175.7 and can wait for the next base build, which will install it automatically. Cutting edge build 175.7 supports both the new CRT version and the previous CRT version seamlessly.
(Fix) The URL style for text values recognizes URLs with file: and other non-web schemas.
(Fix) Replacing a text fragment using a regular expression no longer fails to ignore case when matching class character sequences such as [a-c] or [abc] if asked to ignore case.
(Fix) The LAS library dataport no longer sometimes returns incomplete results when working with more than around 500 files. This problem arose from a series of issues occurring because the library was keeping too many files opened simultaneously for prolonged periods of time, hitting various limits within itself and forcing other parts of the system into hitting these limits as well. Work on a fix began by reworking the code to limit the number of files kept open at any given moment. Effort continued to not to lose any performance when files above the limit had to be closed and reopened. In the end, thanks to a some algorithmic changes, instead of not losing too much performance, the system managed to gain a little performance.
(Fix) Computing a Voronoi diagram no longer sometimes fails to completely build shapes for some points in near-collinear point configurations, for example, a series of points following a reasonably smooth line in short steps.
(Fix) Exporting labels to DXF no longer fails if label text is defined using a text pattern.
(Fix) Exporting labels to KML no longer fails if label text is defined using a text pattern.
Build 175.6 adds even more formatting options for field values, including the ability to launch URLs from table fields in browsers. Styles also include the ability to set angular measurements, such as latitude and longitude values in degrees, in different formats. A new style also allows choice fields in tables. Styles set in tables are now automatically inherited by labels. Language options have been extended to include over 600 languages, supporting the full set of languages in Windows 10.
Build 175.6 also adds a new dataport for KoBoToolbox, a widely used open source technology for data acquisition using mobile clients or a web browser. The data can be hosted on a server provided by KoBoToolbox (there are generous free options), or on your own system with KoBoToolbox. The new capability makes it easy to acquire data in the field using survey forms and to instantly make that data available within a Manifold project.
The next build is expected to fill missing pieces for features added during the 175.x build series, add various small items based on user feedback, fix outstanding bugs, and to go public as the next base build, 176.0.
See the 10 Minute Tutorial - Lat Lon Styles · Labels · Languages video for a quick start on new style features.
Field values shown in labels are formatted according to the field style specified in the table window.
GEOMWKB values can show type, coordinate count and branch count data if requested by style.
The collation picker shows invalid collations in red.
The language combos in the Style dialogs for field values have been replaced with language pickers. A language picker shows a menu with favorite languages plus a command to select a different language using a dialog, which includes a filter box to make it easy to find a desired language-country combination, plus a command to edit favorite languages. The neutral language is the default favorite. See the new Styling Table Fields topic for an example of choosing a language and also adding a favorite language.
The list of supported languages has been extended to cover all languages supported by Windows 10. This increases the number of languages supported in table field styles from over 200 to over 600. Whew!
Field values shown in the Info pane are now automatically formatted according to the style set for each field.
There is a Style dialog for text fields and a new style for text values: u = URL. If a text field is styled as a URL, valid URL values are shown as hyperlinks, both in a table window and in the Info pane.
The context menu for cells in table windows or the Info pane for a text field styled as a URL value includes a new Open URL command which opens the URL in a web browser. See the Styling Table Fields topic for examples.
There is a new style for numeric values that can be used with the StringFormatNumber SQL function: a or A = angle, which is used to choose different formats for angular measures, such as latitude and longitude values in degrees. The style is specified as a string that concatenates a or A with optional letter codes for <subformat>, <side>, and <decimals>.
The <subformat>letter specified the overall format, and can be d or D = decimal degrees, m or M = degrees and decimal minutes, or s or S = degrees, minutes and decimal seconds. If the <subformat> letter code is empty or unrecognized, then s subformat is used, for degrees, minutes and decimal seconds.
The <side> letter code specifies which hemisphere is represented with positive numbers, with values in the other hemisphere being negative numbers. There are both N and S options as well as E and W options so that North or South latitudes can be shown as positive/negative numbers, and so that East or West longitudes can be shown as positive negative numbers. The <side> letter code can be n, N, e, E, s, S, w, or W, with the case of the code choosing whether the appended N, E, S, or W character is upper or lower case in the styled result. The usual choices for conventional positive/negative number assignments is choosing N for the <side> code for latitude numbers and E for the <side> code for longitude numbers. If the side letter code is unrecognized, no side code is used.
The <decimal> value specifies the number of decimal digits for the smallest term. If no <decimal> value is specified, the default number of decimals for the language will be used. For example, a style argument of 'adN2' will format a number as an angle (a), using a general format of decimal degrees (d), with positive numbers having an N appended and negative numbers an S appended to indicate North or South latitudes (N), with the decimal degrees limited to two decimal digits (2).
A typical use might be StringFormatNumber([Latitude], 'adN2', '') which would result in a numeric value of -6.0363 being formatted as the string 6.04º S. See the Styling Table Fields topic and the StringFormatNumber entry in the String SQL Functions topic for many more examples.
The Style dialog for formatting numeric table fields lists ad, am, and as style variants, corresponding to angle formats using decimal degrees, degrees and decimal minutes, and degrees, minutes, and decimal seconds. The style dialog allows specifying the number of decimals and the side, corresponding to settings used for the StringFormatNumber function.
Vector values formatted using the a or A style alternate the side between individual n, N, e, E, s, S, w, or W values to support the typical use of vectors to provide longitude and latitude values within the vector.
If the <side> code is specified and it is specified as e or E (easting), the first value is formatted as e and the second as n (northing). This corresponds to typical X,Y vector longitude, latitude ordering and the convention that eastern hemisphere longitudes and northern hemisphere latitudes are positive.
When n or N is specified as a <side> code for vector values, the first value is formatted as n and the second as e. That corresponds to Y,X vector latitude, longitude ordering while retaining the convention that eastern hemisphere longitudes and northern hemisphere latitudes are positive.
When w or W is specified as a <side> code for vector values, the first value is formatted as w and the second as s. This corresponds to typical X,Y vector longitude, latitude ordering but using a backwards arrangement from the usual convention by representing eastern hemisphere longitudes and northern hemisphere latitudes as negative, with western hemisphere longitudes and southern hemisphere latitudes as positive.
When s or S is specified as a <side> code for vector values, the first value is formatted as s and the second as w. This corresponds to a double backwards arrangement of Y,X vector latitude, longitude ordering while using positive numbers for western hemisphere longitudes and southern hemisphere latitudes.
If there are three values in the vector, the third value is formatted as plain floating-point (not an angle). That is a typical arrangement for a three component vector showing longitude, latitude, and Z (height).
If there are four values in total, the third value is formatted the same as the first value, and the fourth value is formatted the same as the second value. That is a typical arrangement for a vector of four values that represent two point locations, such as the beginning and end of a straight line segment.
See the Styling Table Fields topic for examples of the above..
Choice fields: a fixed set of choices for numeric fields can be specified in a list the Choice tab of the Style dialog for table fields. The list in the Choice tab is a lookup list of lookup key and value pairs, with the left column in the list being a lookup key that is an integer number, with the right column being the value specified by that key. Entering values in cells for that field will call up a drop down list of the available choice options. Choice options in the Choice tab list can be edited: add a new choice by editing cells in the last, * row of the list, or edit the key or value for any existing choice. One or more choices in the list can be deleted by selecting them with a Ctrl-click or other of the usual selection moves, and then pressing Delete. If a numeric value stored in a table does not correspond to any of the choice keys, it is shown prefixed with a # character. Upcoming builds are expected to extend this feature to support text fields and support choices stored in tables.
Editing a boolean value in a table window or in the Info pane shows a menu with choices for true and false.
Editing a numeric value formatted as a choice in a table window or in the Info pane shows a menu with available choices.
Editing a vector value formatted as a choice in a table window or in the Info pane shows a menu with available choices, with a separate submenu for each vector component.
Data Collection with KoBo
There is a new dataport for KOBO toolbox. The dataport supports the following servers: Kobo Everyone - the default, Kobo Humanitarian - a special server for humanitarian organizations where such organizations can store big data sets for free, and Custom - your own server. To connect, create a user account and enter your API key in the dialog. The dataport allows accessing all assets stored for the account, in read-only mode. Future builds are expected to allow writes as well.
The URL for a KOBO data source can be set to that for a specific asset. This is convenient when the number of assets on the account is large.
The KOBO data source can be refreshed, to pick up changes to the list of assets.
The table on a KOBO data source can be refreshed, to pick up changes to records or fields of a specific asset.
The KOBO dataport translates image / audio / video / file sentinels to URLs.
See the video versions of new example topics in the 10 Minute Tutorial - Create and Use a Survey Form and 10 Minute Tutorial - Connect to Data Collected in the Field videos.
(Fix) The PostgreSQL dataport no longer fails to determine the schema for a materialized view on PostgreSQL 12+.
Build 175.5 is a large build with many new features. It utilizes new formatting functions introduced in the prior build to provide point-and-click formatting of data displayed in tables with a very wide range of preset and custom formatting options for different data types. Upcoming builds will automatically apply formatting specified in tables to labels and other settings.
Build 175.5 also introduces new formatting functions, new utility functions, and improvements in the Schema dialog.
The Add Field, Add Index, Add Constraint, and Add Identity commands in the Schema dialog focus the last added schema item.
The Schema dialog includes a filter box to filter schema items using their name. Filtering by name automatically disables Add Field, Add Index, Add Constraint, and Add Identity commands to prevent newly added items from being immediately hidden due to not passing the filter. Editing an existing item and changing its name lets the item stay visible even if the new name no longer matches the filter.
The Schema dialog includes a filter button with a drop down menu to filter schema items using their type: All, Fields, Indexes, or Constraints. Filtering by type automatically disables Add Field, Add Index, Add Constraint, and Add Identity commands for items that will not pass the filter. For example, when setting the filter to only show fields, we can still add new fields, but we cannot add indexes and constraints until we change the filter to show indexes and constraints.
The Move to Top, Move Up, Move Down, and Move to Bottom commands in the Schema dialog have been removed. These commands could only reorder new schema items and such reordering only made sense for computed fields referencing each other. This was a case where the commands were trying to help those who already knew what they were doing at the cost of confusing everybody else, so they have been removed. Future builds will be able to handle computed fields in arbitrary order, provided there are no circular references.
Table windows allow changing the alignment of field values using Align Left, Align Center, and Align Right commands in the context menu for a field column header.
The default size for binary fields in a table window has been forced to be constant (instead of adjusting to the system font).
Table windows allow changing the format of field values using a new Style command in the field column header context menu. Fields of all data types except text support formatting, with support for text fields likely to be added in future builds. The Style command launches a dialog with controls depending on the field data type:
binary: select style from a list of available styles, with optional language specification.
boolean: select style.
datetime: select a standard style or compose a custom style from format parts, with optional language specification.
geom: select style, with optional language specification.
number: select style, specify the number of digits and decimals, with optional language specification.
tile: select style, with optional language specification.
uuid: select style.
numeric vector: select style, specify the number of digits and decimals, with optional language specification.
All styles and style parts show what kind of output will be produced in the dialog. The language is specified using an editable drop down box which allows either typing the desired value directly or picking it from several default choices, such as neutral language and languages for available localizations.
Note: There are two cases where table windows ignore field styles:
Editing a cell always uses the default style. Otherwise it is too easy to lose data. For example, suppose that a numeric field is set to show two decimal digits. This shows 3.14159 as 3.14. If we start editing the value and the edit box opens with 3.14, pressing Enter will accept 3.14 and will change the value from 3.14159 to 3.14, a possible mistake. To prevent such errors, when we start editing the value, the edit box opens with 3.14159, showing all available digits.
Filtering records by right-clicking a cell and using commands in the context menu always reports the value of the clicked cell using the default style. As with editing, applying a style would miscommunicate what the filter is going to do.
The StringFormatNumber query function now uses a language-specific decimal separator for the default format.
The StringFormatVector query function now uses a language-specific list separator for the default format.
New query function: StringFormat. The function formats an arbitrary value according to its type. GEOMWKB values are currently reported as binary to avoid conversion, similarly to previous builds. Future builds will change that to report GEOMWKB values as geometry.
New query function: StringFormatBinary. The function formats an arbitrary value using one of the following formats:
b (default) = <varbinary> -- with the type name
B = <varbinary, XXX b> -- with the number of bytes
New query function: StringFormatGeom. The function formats a geometry value using one of the following formats:
b = <geom>
B = <geom, XXX b> -- with the number of bytes
t (default) = <geom, line> -- with the type of geometry value
T = <geom, line, 200 c / 3> -- with the number of coordinates and the number of branches after a slash; if the number of branches is 1, it is not shown
The StringFormatGeom query function detects geoms with Z values and reports them as areaz, linez, or pointz.
New query function: StringFormatTile. The function formats a tile value using one of the following formats:
b = <tile>
B = <tile, XXX b> -- with the number of bytes
t (default) = <tile, 100 x 100 x 3> -- with width, height and number of channels; if the number of channels is 1, it is not shown
T = <tile, 100 x 100, float64x3> -- with width, height and pixel type, including the number of channels
Other Query Functions
New query function: StringDateTime. The function takes a string and attempts to parse it into a date time value according to the specified language.
New query function: Random. The function produces a random floating-point value between 0 and 1, with 1 excluded.
New query function: RandomInt. The function takes an integer limit and produces a random integer value between 0 and limit-1.
New query functions: RandomRef and RandomIntRef. The functions produce random values similarly to Random and RandomInt, but take an extra argument of an arbitrary type to use as a dependency.
New query function: RandomHash. The function takes an arbitrary value, composes its 64-bit hash using the Fowler-Noll-Vo FNV1a hash function, and turns that hash into a pseudo-random floating-point value between 0 and 1, with 1 excluded. The purpose of this function is to produce a value that is both uniformly random across the domain of argument values, and coincides for calls where the argument value is exactly the same.
New query function: RandomHashInt. The function takes an arbitrary value for the hash and an integer limit, composes a 64-bit hash using the Fowler-Noll-Vo FNV1a hash function, and turns that hash into a pseudo-random integer value between 0 and limit-1.
New query function: DataHash. The function takes an arbitrary value and composes its 32-bit hash using the Fowler-Noll-Vo FNV1a hash function.
The Clip transform automatically removes records with NULL geometry when producing a new table.
Error reports produced by the GDB dataport and dataports for databases like SQL Server have been extended to cite the names of relevant fields and indexes.
(Fix) The LAS dataport no longer sometimes returns incomplete data for a spatial search.
(Fix) The GDB dataport marks computed fields for length and area so that they do not prevent copy and paste of tables into a .map project. Instead, they get converted to non-computed fields.
(Fix) The table window no longer hides Unicode characters, such as the euro sign and several other characters, that are not recognized as printable in the default CRT locales.
Build 175.4 begins adding formatting options for field values. This build adds query functions that format values of various types. Subsequent builds will allow applying this formatting to fields in tables and queries, and automatically carry it over to labels. This build can be used immediately to format values in labels by using expressions in the label text pattern.
The New Labels dialog has been reworked to include a field combo for an existing drawing ;that allows selecting a field or a special (pattern) choice. Selecting a field will create labels with text taken from that field. This allows keeping workflow as simple as possible in typical, simple scenarios. Selecting (pattern) allows editing the text pattern directly. Creating labels for a drawing tries to select a field which makes the most sense to display in labels. The priority order is: a text field > a non-text field that does not have a unique index built on it (to deprioritize fields like MFD_ID or SHAPEID) > a non-text field that has a unique index built on it.
The Components tab of the Info pane no longer shows a 'Text' field for labels, since labels now use text patterns.
When a label is being added or is picked for editing in a labels component, the Info pane automatically determines fields that are referenced in the label text pattern, and shows a distinctive icon in the row handle for each referenced field in the Values tab. That makes it easy to see which fields are used in the label. Starting to add a new label or starting to edit an existing label also automatically puts the cursor onto the value of the first such field.
Query Functions and Format Patterns
Format patterns for all new functions are roughly compatible with .NET even though the functions themselves are implemented using native Windows calls. The system does not use .NET directly because there are cases where this would waste too much resources. The system does not currently use ICU, because it is only available on Windows 10 and there must be reasonable fallback behavior for non-Windows 10 systems. In the future Manifold likely allow formatting calls to use ICU, if it is available.
New query function: StringFormatDateTime. The function takes a datetime value to format, a format pattern, a language, and returns a formatted string. The language can be an empty string (neutral) or a language code like en-US or de-DE. The format pattern can be either a single letter that defines the whole format, or a combination of format parts.
Single-letter format patterns - Using an example value of 25 March 2020 13:45:00 and an example language of en-US, single-letter format patterns and their result are:
d = short date: 3/25/2020
D = long date: Wednesday, March 25, 2020
f = long date + short time: Wednesday, March 25, 2020 1:45 PM
F = long date + long time: Wednesday, March 25, 2020 1:45:00 PM
g = short date + short time: 3/25/2020 1:45 PM
G = short date + long time: 3/25/2020 1:45:00 PM
m = short month and day: 25 Mar
M = long month and day: 25 March
r or R = RFC1123. The language does not matter and is always neutral Wed, 25 Mar 2020 13:45:00 GMT
s = sortable. The language does not matter: 2020-03-25T13:45:00
t = short time: 1:45 PM
T = long time: 1:45:00 PM
u = universal sortable, the language does not matter: 2020-03-25 13:45:00Z
y or Y = year and month: March 2020
An empty format string is interpreted as G = short date + long time.
Illustrations: Simple format changes allow creating many different labels and strings from a text field and a datetime field.
If the format string differs from any of the single-letter formats and is not empty, it is interpreted as a combination of the following format parts. Two letter variations add a leading zero for one-digit numeric values and use two characters for text values, for example, 01 instead of 1, and PM instead of P.
d or dd = day: 25
ddd = short week day: Wed
dddd = long week day: Wednesday
g or gg = era: A.D.
h or hh = hour on a 12-hour scale: 1
H or HH = hour on a 24-hour scale: 13
m or mm = minute: 45
M or MM = month as a number: 3
MMM = short month: Mar
MMMM = long month: March
s or ss = second: 0
t or tt = time marker: PM
y or yy = short year: 20
yyy or yyyy or yyyyy = long year, accepts up to five letters because some languages allow up to five: 2020
Any character or any character sequence different from the above patterns, for example, x or hhh, is copied without any changes.
Example pattern: d-MMM-yy h:mm result: 25-Mar-20 1:45
The default conversion of a datetime value to a string now uses leading zeros for month, day and hour to be the same as the output of an empty format for neutral language.
Illustrations: Specifying a language-country code automatically sets the format and language used. The exact same datetime value shown using D format with language set to English using en-US, German using de-DE, Cherokee using chr-US, and Indian Kashmiri using ks-IN shown above.
New query function: StringFormatDurationDays. The function takes a number of days to format, a format pattern, a language, and returns a formatted string. The format pattern is a combination of the following format parts:
d = days
f or ff or fff or ffff or ... (up to nine f characters) = fractions of a second
h or hh or H or HH = hours
m or mm = minutes
s or ss = seconds
Format parts must be ordered from bigger to smaller, that is, days before hours, hours before minutes, and so on.
An empty format string is interpreted as s = seconds.
? StringFormatDurationDays(1.133, '', '') -- 97891 (seconds)
? StringFormatDurationDays(1.133, 'd:hh', '') -- 1:03
? StringFormatDurationDays(1.133, 'h:mm:ss', '') -- 27:11:31
New query function: StringFormatDurationSeconds. Same as StringFormatDurationDays, but the value to format is in seconds.
New query function: StringFormatNumber. The function takes a numeric value to format, a format pattern, a language, and returns a formatted string. The format pattern consists of a single-letter format and an optional integer number specifying the desired number of digits or decimal digits, depending on the format.
Using an example value of 123456.7890123 and an example language of en-US, single-letter format patterns and their result are:
c or C = currency, with an optional number of decimals: $123,456.79
d or D = decimal integer, with an optional total number of digits and optional leading zero. The language does not matter: 123457, or, for 'd08': 00123457
e or E = exponential, with an optional number of decimals. The default number of decimals is 6 regardless of the language: 1.234568e+05
f or F = fractional, with an optional number of decimals: 123456.79
n or N = fractional + digit groups, with an optional number of decimals: 123,456.79
x or X = hexadecimal integer, with an optional total number of digits and optional leading zero. The language does not matter: 1e241
If the format string is empty or invalid, the number is formatted as the shortest form that preserves all significant digits. The language does not matter: 123456.7890123
Using upper or lower case e or E or x or X specifies the case of the resulting exponent character or hexadecimal letters.
New query function: StringFormatVector. The function takes a vector value to format, a format pattern, a language, and returns a formatted string. The format pattern is the same as for StringFormatNumber. The formatted string consists of strings for the individual vector values separated using a list separator for the specified language, and enclosed in square brackets, for example, [ 2.34, 5.67 ]
New query function: StringFormatUuid. The function takes an UUID value to format, a format pattern, and returns a formatted string. The format can be either x or X. The use of upper or lower case controls the case controls the case of hexadecimal letters in the result. The default is x.
New query function: StringFormatBoolean. The function takes a boolean value to format, a format pattern, and returns a formatted string. The format can be either b or B to output TRUE as 1 and FALSE as 0, or t or T for output as true or false, with the case of the result controlled by the case of the pattern letter. The default is t.
For all format functions, using an empty format string and an empty language string produces the same string as the default conversion to a string. For example, StringFormatXxx(..., '', '') produces the same result as CAST (... AS NVARCHAR).
Other Query Functions
New query function: DateTimeCurrent. The function returns the current date and time.
New query functions: DateTimeCurrentRef and UuidMakeNewRef. Both functions take a single argument of an arbitrary type. DateTimeCurrentRef then returns the current date. UuidMakeNewRef generates and returns a new UUID. Neither function uses the value of the argument. The purpose of having an argument is to tell the query engine that it should not cache the result returned by the function between calls where the argument value might change. This is useful in multiple ways.
For example, the function allows forcing a new UUID value for each record in a SELECT. Consider the following examples:
SELECT [name], UuidMakeNew() AS [uuid] FROM [cities table];
The result of the above query is that all records ill have the same UUID. Because the query engine sees that the call to UuidMakeNew() is exactly the same for each record, it calls the function once, caches the result, and then copies the result into each record.
SELECT [name], UuidMakeNewRef([name]) AS [uuid] FROM [cities table];
In the above query, each record will have a new UUID generated. Because the calls to UuidMakeNewRef(...) are different between records, the query engine sees that and dutifully calls the function anew for each record.
The following allows creating a computed field with the current date, which will update itself after some of the fields are changed:
ALTER TABLE [cities table] (
ADD [last_edited] DATETIME AS [[
DateTimeCurrentRef([name] & [state] & CAST([population] AS NVARCHAR))
The query takes a table named cities table and adds a computed datetime field named last_edited. Adding a field populates it with the current date. If we then pick some record and change the value of one of the fields mentioned in the expression, such as name, state or population, the computed field in that record will be recomputed and set to the now-current date.
Build 175.3 reworks labels to use a text pattern instead of a text field. The new system applies to all use of labels, such as storage, rendering, printing, and so on. A text pattern is much more flexible than a text field: it can reference more than one field, and it also allows easy changes to label texts without changing the table (tables can be very big, or may not have permissions to be altered). Future builds will allow formatting field values in the pattern, and will include various improvements for rendering labels. Support for GDB is gradually being extended, and future builds will include several updates specific to SQL for ArcGIS.
Illustration above: Labels can include expressions that use almost any SQL function and feature, such as CASE. The Style pane makes it easy to edit existing label text.
Labels have been reworked to compose text from zero or more fields instead of always using a single field. The text used for labels now is specified as a pattern that may reference fields using their names within square [ ] brackets, similar to Release 8. The plain text parts of the text pattern may contain characters escaped with a backslash \ character, for example, \[, \], \\, and so on, as well as Unicode sequences beginning with a backslash \ character in the form \uxxxx. For example, \u00a9 is a copyright sign. Unknown fields are rendered in the resulting label as three asterisk *** characters.
Label text may contain expressions within double square [[ ]] brackets. Expressions can be almost any SQL expressions, including use of SQL functions and complex constructions using CASE and similar. Note that the first character of the expression following the initial [[ characters must be different from a left square bracket [ character, or otherwise the expression will be interpreted as a field name. For example, [[[a] will be interpreted as a field named [[a, the same as how that string would be interpreted in a query. To immediately refer to a field name in an expression, use a space character after the opening double square [[ brackets, for example, [[ [length]/100 ]]. White space within expressions, that is, within double square [[ ]] brackets does not matter, so we can format expressions as we like using white space for legibility. Expressions used in label text may not reference database components, the same as with Expression transform templates. Invalid expressions are rendered in the resulting label as three asterisk *** characters.
The Style pane allows editing label text for label components using a specialized dialog with a query builder.
Rendering labels optimizes the rendering of complex whitespace. Whitespace in the label text pattern outside of expressions is used in the resulting labels.
Migrating from Manifold 8 labels that are bound to a drawing no longer creates a computed field with label text. Instead, it just uses the label text pattern without any changes. If (not likely to happen frequently) the Release 8 label text pattern includes double square [[ ]] bracket text sequences, these sequences should be escaped manually to make the label text exactly what it was in Manifold 8. If need be, an automatic feature to escape such sequences might be added in future builds.
The New Labels dialog allows editing the label text pattern when creating labels for an existing drawing.
The Info pane remembers the last used view options for the Coordinates tab on a per-window basis (map window / table window). For example, if last we used traverse commands in a window, the next time the Coordinates pane will still be in Show Traverse mode.
Attempting to write into a GDB a text value that is too long for a field now shows an error message with the name of the field, the maximum length allowed by the field and the actual length of the value.
Creating a new text field in a GDB sets the maximum length of that field to 4096 characters , an increase from the previous maximum of 255.
Special fields in a GDB that cannot be edited, for example, Length and Area, are marked as read-only in Release 9 and in SQL for ArcGIS Pro.
(Fix) Attempting to open a damaged GDB no longer tries to read its structure, which previously would report annoyingly many errors.
Check out the new video providing a tutorial introduction to creating labels:
5 Minute Tutorial - Labels from Fields and Expressions - A quick look at the new label system in Manifold Release 9 that makes it easy to create labels from fields and expressions. Create label text from multiple fields and also using expressions, taking advantage of any of the hundreds of SQL functions provided in Manifold. A new addition to the Style pane for labels makes it really easy to edit label text, including a full expression builder. Works in the free Manifold Viewer, too!
Changes and Additions