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 181.0 is a Base Build that is recommended for all users. It implements a huge new GetFeatureInfo request capability that opens the door to WMS based click-to-get-data websites and OGC tools. It incorporates all improvements from the 9.0.180.x series of builds. Build 181.0 also introduces a new policy to remove expiration dates for Cutting Edge builds. That prevents websites from timing out when Cutting Edge builds are used for production sites, and it positions builds for planned developmental projects.
Base Build - Manifold Base builds incorporate all improvements from the previous few months of Cutting Edge builds. While Cutting Edge builds can include experimental facilities, Base builds are fully supported product configurations that define the standard product going forward. New Cutting Edge builds will add features and bug fixes to the current Base build for those users who want to work with the latest and greatest. After a few months a new Base build is issued that incorporates changes and the cycle starts again. Base builds are also published as full Windows Installer installations in addition to portable installations.
GetFeatureInfo - A GetFeatureInfo request in a WMS URL launches a query to fetch data for whatever object is under the specified cursor position in the specified WMS bounding box and image size. It provides a key OGC capability to fetch data when users click on a spot of interest in a web site or WMS-using tool.
Automatic Integration with Server - Manifold's GetFeatureInfo capability is automatically integrated with Manifold Server's WMS and HTTP serving capability. Publish a map from your project with Server and automatically you get GetFeatureInfo capability.
Automatic Defaults - Following Server's WYSIWYG (What You See Is What You Get) design, GetFeatureInfo capability exactly matches the interactive Web user interface shared by Server for HTTP pages. Configure your maps just once using the Layers pane in the Manifold desktop, arranging the layers in the stack you want, clicking any layers to set as pickable for data display or not, and that works for both the regular HTTP web pages Server creates and also for GetFeatureInfo querying through WMS. It all works automatically with just a few clicks in the desktop authoring environment.
Automatic Layers - No need to specify QUERY_LAYERS and LAYERS parameters: Server takes care of that automatically. A map can have dozens of layers and the same precedence and pickable status used for the desktop and regular Web pages also applies in WMS GetFeatureInfo requests. That simplifies URL strings for WMS and reduces errors from wrongly-specified layer names.
JSON Output - Server's GetFeatureInfo output uses INFO_FORMAT=application/json to generate neatly formatted data using JSON format. JSON has emerged as a modern format for web sites, being easily consumed by web text and data styling engines, and also easily imported into many data tools.
Easy to Test - URL strings to connect to Server using WMS to get feature info can be entered into browsers, to easily test URLs.
No Expiration - Starting with build 180.0, all future Cutting Edge builds will no longer expire 90 days after issue. That allows developers to keep using Cutting Edge builds for as long as they want, to compare new builds and to test experimental facilities that will be issued in future builds. Cutting Edge builds have proven so reliable that many users deploy them in production web servers, so removing expiration dates also prevents web sites from halting if admins do not remember to update a server to newer builds.
Build 180.8 adds WMS server capability to Manifold Server's HTTP server capability. The support is automatic and does not need any additional configuration.
The HTTP server now supports OGC WMS 1.3.0, generating a WMS page.
WMS support is automatic and does not need any additional configuration. To connect to the WMS server, add /wms to the end of the URL for the web page served by the HTTP server for the WMS URL. For example, if Server is serving an HTTP page to http://127.0.0.1:8080, the WMS URL will be http://127.0.0.1:8080/wms.
The published component is served to WMS as a single layer. Future builds will likely expose multiple layers to allow turning them on and off via the WMS API.
If the published component's coordinate system is an EPSG coordinate system, the coordinate system of the WMS layer wil be that coordinate system. If the published component's coordinate system is not an EPSG coordinate system, the coordinate system of the WMS layer will be the default pseudo-Mercator coordinate system, with the published component's coordinate system reprojected on the fly into pseudo_Mercator.
Images produced by the WMS interface are always PNG with transparent background. Future builds will allow specifying a solid background with desired background color via the WMS API.
Rendering images for WMS does not render virtual layers such as North arrows, scale bars, legends or the Layers pane background color. This is done to support WMS clients (first and foremost 9 itself) that cache rendered WMS tiles and stitch final screens from cached data.
REST Endpoints - New HTTP server endpoint:
/wms - OGC WMS entry point.
The number of choices in drop-down lists has been increased from 1000 to 4000. The increase primarily was made to support extremely long lists of field names when working with tables with huge numbers (over 1000) of fields.
(Fix) Drop-down lists for fields or components no longer fail to limit the number of choices to the maximum limit.
(Fix) When rendering legends in Server generated web pages, the Javascript control (web UI) no longer ignores changes to on/off layer states. Previously, turning layers on/off in the layers button of the web UI toolbar would turn layers on/off but if a legend was shown the legend would not be updated to turn those layers on/off.
(Fix) Attempting to filter or to join a table with an RTREE index on x, y, or tile fields and no BTREE indexes no longer sometimes fails, returning no records.
Build 180.7 adds conveniences to the desktop user interface as well as more information in the web user interface. Access keys in Windows provide keyboard shortcuts to launching commands from menus. Those shortcuts can now be used whether access keys are displayed or not.
Access keys are also turned on for automatic menus that are generated in Manifold dialogs and panes, for example, in the lists of fields that can be picked when choosing a field in the Transform pane. That makes it easy to pick a field in the Transform pane field picker dropdown: click on the picker box and enter the first letter in the field name desired. That will jump to the fields that start with that letter, and then the up/down arrow keys will move between the fields to pick exactly the field desired.
In the web user interface, if a description has been entered for a location or a layer, that description will automatically appear just before the location or layer entry in the web UI's menu tools for picking a location or turning a layer on and off.
Menus always use access keys for menu commands, even if access keys are hidden.
Automatically generated menu commands have access keys set to the first alphanumeric character in the command name. This allows quickly selecting, for example, a field name in a long drop-down list of many fields by typing the first character. If there are multiple names that start with the same character, using an up or down arrow will move the cursor between them.
(Fix) Parsing command names no longer interprets && as an access key (&& denotes a single & character. Previously, that was erroneously interpreted as an access key set to &).
The Info pane allows pinging the picked record in a map window. Pinging shows a sequence of circles with decreasing radius centered at the record. Pinging helps locate the record on a big and / or busy screen.
The Info pane allows pinging the picked record in a layout window.
The Javascript control (web UI) shows descriptions for locations.
The Javascript control (web UI) shows descriptions for layers.
Build 180.6 expands the Info Tool in the Manifold Server web user interface to launch email and URL text values as hyperlinks in a new browser window. The Info tool has also gained a dropdown list control that allows specifying the layer from which Info tool clicks show field data. Build 180.6 also fixes quirks in the prior experimental build to create a robust cutting Edge build suitable for production use.
The Info tool in the Javascript control (web UI) shows text fields that have been styled as email or URL styles as hyperlinks. When clicked in the Info tool display, the hyperlinks launch in a new browser tab.
The Info tool's pane provides a dropdown list that allows specifying the layer from which an Info tool click picks data. The available choices are limited to layers that can be turned on or off that also can be picked. The dropdown list provides a list of layers, plus an auto choice (the default) that picks data from the topmost visible layer. If only one layer in the displayed map is visibule and can be picked, the dropdown list box does not appear.
REST Endpoints - New HTTP server endpoint:
/info - Now supports an optional layer=xxx parameter, which specifies the ID of the layer to pick data from, as returned in the layers=[...] configuration section.
(Fix) The Info tool in the Javascript control (web UI) no longer picks wrong objects on a non-square map, that is, where the cx and cy pixel extents are different.
(Fix) The Info tool now checks the click location against object geometries instead of object bounding boxes, which eliminates inaccurate clicks for complex geometries.
(Fix) In the web UI for touchscreen devices such as telephones and other mobile devices, touching a scrollbar area in lists for the Locations tool, Layers tool, or Info Tool no longer sometimes misinterprets the touch as a command to recenter the map.
(Fix) In a desktop session, opening a map window for a persistent or virtual map with a layer that references an unknown table no longer shows an error. Instead, the layer is ignored silently.
(Fix) Exporting a component bound to a query to GPKG / SQLITE no longer fails.
Build 180.5 is an experimental, cutting Edge build that adds an Info tool to the web server user interface. The Info tool reports attributes (field values) for a clicked object.
The Javascript control (web UI) used by the HTTP server includes a new Info tool. Clicking the Info tool changes the cursor into a cross cursor. Clicking on the map with the Info tool active takes one of the objects under the cursor and shows attribute field values for that object. Retrieving field values from the server is performed asynchronously without reloading the page.
The Info tool picks the topmost layer that has a Layers pane pick mode other than "no pick" and which is currently visible, excluding layers that are currently hidden, for example, dynamically hidden by min / max scale settings, explicitly hidden by the layers button in layers in the web UI toolbar, or implicitly hidden in the map and not appearing in the layers button list.
The Info tool shows all fields in the order specified by the schema except binary fields, which are not reported.
The Info tool formats field values according to the styles set in the table window.
The Info tool works on touch screens.
REST Endpoints - New HTTP server endpoints:
/info - Returns data for the Info tool as JSON, supporting the following parameters: bounds, size and layermod with the same meanings as in the /map endpoint, center=XX,YY specifying click coordinates in pixels (the default is the center of the screen), and radius=RR specifies search radius in pixels (the default is 6, same as on the desktop).
Build 180.4 is a cutting Edge build that adds new web server capabilities, upgrades use of optional GDAL file import capabilities, adds useful capabilities when working with Z values, and provides fixes.
Zoom on Cursor Position - Zooming using the mouse wheel in the Javascript control (web UI) centers on the location under the initial cursor position, the same as in the desktop Manifold UI.
URL base - The HTTP server supports a new -urlbase:xxx command-line option to specify the URL base. The default is /. The option is useful when the HTTP server is used together with a general-purpose web server.
REST Endpoints - New HTTP server endpoints:
/version - Returns server version and server start date and time in plain text.
Compatibility with New GDAL Builds - The GDAL dataport now supports GDAL 3.4.x, GDAL 3.5.x and 64-bit raster data, GDAL 3.6.x, and GDAL 3.7.x and signed 8-bit raster data.
Raster GDB - GDAL 3.7.x allows reading raster geodatabases.
Retain Z Values - The GeomNormalize, GeomToShapes, and GeomToShapesEsri query functions retain Z values instead of discarding them.
SHP Export with Z values - Exporting areas with Z values to SHP no longer discards Z values.
(Fix) Zooming using the mouse wheel in the Javascript control (web UI) disables panning until zooming finishes.
(Fix) Exporting DBF / SHP no longer fails on large negative integer values (-1 billion or more negative).
(Fix) Reading vector data using GDAL no longer sometimes misapplies the rectangle in the spatial filter if it is specified. That might have happened when showing data coming from a live GDAL data source on a map.
(Fix) Exporting areas with Z values to GDB no longer fails.
Build 180.3 is a cutting Edge build that extends Manifold Server capabilities for HTTP map serving, including automatic adjustment of the default web page user interface for mobile devices, the ability to turn layers off and on, support for locations, and the ability to set display image size.
The ODBC driver supports extra connection options required by newer versions of Excel 365.
Set web map size - The HTTP server allows -cx:xxx and -cy:xxx command line options to specify the image size in pixels. The maximum allowed value for each option is 4096. If neither CX nor CY is provided, the image size is 800 x 800 pixels. If both CX and CY are provided, the image size is CX by CY. If only CX or CY is provided, the image size is CX by CX or CY by CY, providing a quick way to set square image sizes by specifying only one parameter.
Invalid requests - The HTTP server more efficiently handles invalid requests with attached content. (Previously they were being rejected later than they could have been.)
One instance - Attempting to create a second instance or to reinitialize an existing instance of the Javascript control provided by the HTTP server does nothing. There can currently be only one instance of the Manifold Javascript control per web page. This limitation will be removed in a future build.
Safety first - The HTTP server provides safeties if the image size is specified to be very small: If the size of the Javascript control (the web UI) provided by the HTTP server is less than 200 x 200 pixels, the control reduces to a static image and the toolbar will be turned off for lack of space. Panning and zooming using the cursor also will be turned off for lack of a way to get back to the original extent (also, because the image might be too small to do panning and zooming in general).
Descriptions - The HTTP server shows the description of the served component below its name. When providing the description for a map, make sure to edit the description of the map component instead of the description of the active layer.
Flush toolbar - The Javascript control (web UI) provided by the HTTP server puts the toolbar directly onto the top edge of the map without any gaps, to better use available space.
Cache priorities - The HTTP server uses the following priorities for the image cache: full view is prioritized over any other view, and views showing default layers are prioritized over views with some layers turned on or off.
Adapt to mobile devices - The Javascript control (default web page) provided by the HTTP server adjusts the UI for devices with a touch screen such as phones: toolbar buttons are made bigger to make them easier to tap with a finger, hover effects for toolbar buttons are turned off, and panning and zooming the map using the cursor is turned off. Tapping or clicking on the map re-centers it to that spot.
Locations Toolbar Button - The HTTP server includes available locations in the configuration data for the Javascript control (web UI). The Javascript control shows locations provided via the configuration data in a drop down menu and allows zooming to those locations.
Turn Layers On and Off - The HTTP server includes layers that can be turned on or off in the configuration data for the Javascript control (web UI) . The Javascript control layers toolbar button shows layers provided via the configuration data in a drop down pane with check boxes and allows turning them on or off and then saving changes using an Apply button. The default list of layers that be turned on or off is composed according to the following rules:
Hide layer groups - If the served component is a map, top level layers can be turned on or off but layers inside layer groups cannot. The distinction allows maps to have both layers that can be controlled via the web UI and layers that cannot be turned on and off via the web UI.
Last layer stays -If the served component is not a map, its only layer cannot be turned on or off.
REST Endpoints - Changes to HTTP server endpoints:
/config - A new endpoint: returns the configuration data for the served component as plain text, this is useful as a reference when setting up a web site.
/map - Supports a new parameter: layermod=hXXsYY... to turn layers on or off, the value of the parameter is a string of hXX and sYY commands where hXX forces a layer with an ID equal to XX to be hidden, and sYY forces a layer with an ID equal to YY to be shown unless it is oherwise hidden due to the current scale being outside of the layer's min-max scale range. h is a mnemonic for hide and s is a mnemonic for show. Layer IDs are found in the configuration data for the component.
Build 180.2 is a cutting Edge build that introduces many optimizations and improvements for Manifold Server when used as a TCP server to share data to Manifold clients or as an HTTP Server for Internet map serving to any browser. Rendering enhancements increase performance for desktop use as well as map serving performance. A new setting for resampling allows zooming in to see individual pixel boundaries in rasters, a useful feature for pixel based editing.
New caching capabilities for web server sources often used as backgrounds in maps served to the web by Server can result in dramatically faster performance, especially when many users are browsing maps on a Server-enabled web site.
A dramatic increase in the number of connections allowed, even in the limited map server built into inexpensive Manifold Universal licenses, allows sophisticated use of many connections from web browsers for an enhanced user interface. Command buttons in the default web interface have been reworked to be more compact and easier to use.
The Style pane Options tab allows specifying the resample method for an image. Available choices are bilinear (the default) or nearest neighbor. Choosing bilinear results in "square pixels" when zoomed far into the map, to show individual pixel positions. See the Style: Resample topic for illustrations.
Rendering a map with image layers that are completely offscreen performs faster. This enhances performance in desktop use as well as in map serving when maps have large image layers, by eliminating any rendering overhead for layers that are not visible in the current view.
Web maps served now put the manifold.net watermark into the middle bottom. This keeps corner positions free in the display for use by legend, North arrow or scale bar.
Web data sources tunneled by either TCP or HTTP servers now may use persistent cache if their parent is a database such as PostgreSQL, SQLite or similar. Web data sources such as image servers might be created either directly within .map files or within database data sources like PostgreSQL. The Save cached data between sessions option when creating a web data source can be used to let web data sources save all downloaded data in their parent data source so that future requests for the same data do not have to re-request it. That parent data source can be a data source such as a PostgreSQL or other database.
When projects are used by TCP servers or HTTP servers, web data sources created in the .map file will not be able to save cached tiles in the project because TCP servers and HTTP servers open the .map file in read-only mode. However, if the web data source has been created within an intermediate data source that is a read/write database like PostgreSQL or some other database, the web data source will now be able to write to the cache in that database. This significantly improves the performance of web data sources, albeit at the cost of the storage space required for cached web data source tiles.
The manifoldsrv.exe executable (used for TCP servers and HTTP servers) ignores the amount of memory to use for system cache specified as a user option in Tools - Options. Instead, it allows specifying the amount of memory to use for cache via a new -memory:xxx command-line parameter, specifying the amount of memory to use in gigabytes. The default is 4 GB. (Servers ignore the value specified in Tools - Options because server instances frequently run under specialized user accounts, and accessing user options for these accounts might be difficult or impossible.)
The startup database operated by a TCP server or HTTP server has been made available for scripts. Scripts can access the startup database using Application.GetDatabaseRoot().
TCP servers allow controlling server scripts via a new -scripts:xxx command-line parameter. Available choices:
-scripts:on - Allows running scripts (currently applies to calling script functions in queries, computed fields and constraints. In the future will also apply to running script components).
-scripts:off - Disallows running scripts (the default).
The query engine always runs queries from data sources for TCP servers on the server. See comments below.
Buttons in the web map user interface use PNG icons and also show tooltips.
Buttons in the web map user interface have been grouped into a toolbar placed at the center of the top edge of the map. The toolbar can be collapsed and expanded.
The default number of connections for HTTP servers has been increased from 20 to 100, to account for web browsers creating multiple connections to the server for the same client. The maximum number of connections for an HTTP server for a Universal edition of Manifold has also increased from 20 to 100.
Pages served by HTTP servers now declare compliance with HTML 5. They also now have a viewport meta tag and a UTF-8 charset meta tag.
The HTTP server caches rendered map images for performance.
The amount of memory to use for cache can be decreased below 4 GB, down to 1 GB. The default is still 4 GB.
Click the illustration at right for a full resolution view of the new default user interface for web maps served by Server.
As is well known, Manifold allows accessing data from data sources other than the main .map file within a query. An example:
--SQL9
SELECT * FROM [server]::[data];
The above will return records from the table named data on the data source named server.
If data is a query, however, the logic is more complicated. All data sources may run queries using the Manifold query engine, with Manifold syntax. Some data sources, for example, databases like PostgreSQL or SQL Server, may also run queries using their own query engine, with their own syntax.
If the data source for server has its own query engine, the system checks whether data should be run using the server's native query engine or using the Manifold query engine. (The system does that by inspecting the text of the query and looking for a $manifold$ directive.)
If data is a native query, the system dispatches it to the server to run it. If data is a Manifold query, the system runs it on the Manifold client, since the server does not know how to run a Manifold query (only the Manifold client does).
The same logic also applies to:
--SQL9
EXECUTE [[ SELECT * FROM [data]; ]] ON [server];
In the above, it looks like the query asks the server to run SELECT * FROM [data]; - that is superficially true, but to be precise, the system is asking the data source. The data source then follows the same logic as above: it checks whether data is a native query or a Manifold query, and then either asks the server to run it if it is not a Manifold query, or if it is a Manifold query, runs it on the Manifold client. That makes sense if one assumes that only Manifold clients know how to run Manifold queries written in Manifold's implementation of SQL.
All of the above is generally desired. But if the data source is Manifold Server running as a TCP server, then both of the above example queries will run on the server even if the query was a Manifold query. That is because, unlike other types of server data sources, Manifold Server can run Manifold queries. The general logic used by data sources to decide where a query should be run has been updated in build 180.2 to incorporate the exception that Manifold Server can run Manifold queries.
Before the enhancement in build 180.2, Manifold Server data sources already were running queries on the server in many circumstances. For example, if the served .map file had a query component, connecting to the server and then opening and running that query would run it on the server. Connecting to the server with a Manifold client and then opening a command window for the server and running statements in that command window would also run those statements on the server.
But opening a command window for the main .map file and running one of the above two example queries, or queries similar to those, would run the query on the client because of the previous logic that a data source should always run a Manifold query on the Manifold client. That logic has now been updated in build 180.2 so attempting to run queries on a Manifold Server data source will now always run them on the
Build 180.1 is a cutting Edge build that introduces Internet map serving capability to Manifold Server within Manifold Release 9 Universal edition and Manifold Release 9 Server edition. This allows Manifold users to create a GIS-enabled web page without any need for either a web server like Internet Information Server or Apache, or a map server. The web server and map server are now built in parts of Manifold. If you have a static IP address reachable from Internet, you can create GIS-enabled web pages. No programming required.
Internet map serving uses the same Manifold Server internal engine proven through massive multiuser project and data sharing using Manifold clients. Build 180.1 now adds HTTP (web) serving of GIS powered map displays to standard Internet browsers as well, with Manifold itself acting as its own map server and web server and automatically generating default web pages for browsing maps.
Build 180.1 is a first release of HTTP serving in Server with a focus on keeping it simple. Future builds will add many additional features, such as many extensions to the map UI with new REST endpoints, support for WMS and other protocols, and other features.
The HTTP server can be launched and run as a service from the Tools - Manage Services command in Manifold Release 9 Server edition or from a command prompt in either Manifold Release 9 Server edition or Manifold Release 9 Universal edition.
The Server executable, manifoldsrv.exe, launched from a command prompt allows specifying the server type using a -type:xxx command line option. Specifying -type:http runs the HTTP server and specifying -type:tcp runs the TCP server (the default).
Manifold Release 9 Universal edition is limited to a single server instance regardless of its type. For example, it can run a single TCP server or a single HTTP server, but not both simultaneously. Manifold Release 9 Server edition provides an unlimited number of Server instances per server machine, allowing a mix of TCP and HTTP servers running simultaneously.
The HTTP server serves a single map, drawing, image, or labels component. The name of the served component is specified using the -component:xxx command line option. The default component name used is Main if no component name is explicitly specified.
The HTTP server implements HTTP/1.1. Supported methods are GET and HEAD. All text is returned as UTF-8. All images are returned as PNG.
The HTTP server accepts multiple HTTP requests queued to the same connection without waiting until any prior requests are processed.
The HTTP server does not use the -workers:xxx command line option. Threads used by the HTTP server are organized differently from threads used by the TCP server: the number of threads for the HTTP server is managed automatically.
The HTTP server does not use the -user:xxx and -password:xxx command line options. Future builds might support them for HTTP authentication, but that is not a priority as it is generally better to use client-side authentication.
The HTTP server defaults to port 80. Using the default port allows any browser to connect by just using the IP address as the URL, for example, http://192.168.1.99. You can use other ports by specifying the -port:xxx command line option, for example, -port:8080 to use port 8080. Using the non-default port will require use of a URL that specifies the port, such as http://192.168.1.99:8080. The TCP server continues to default to port 9099.
The Server executable, manifoldsrv.exe, shows the server type (HTTP or TCP) in the window caption when running in a console window.
Map images rendered by the HTTP server have a manifold.net watermark in the right bottom corner. In future builds this will be moved to the center bottom position to avoid conflicting with use of the right bottom corner for scale bars, legends, or North arrows.
The web page served by the HTTP server has been organized so the map UI (user interface) is inside a Javascript control and the page itself merely creates and initializes that control. This allows putting the map served by the HTTP server into an existing web site with minimal changes. For details see the comments for web developers below.
The web page served by the HTTP server shows the name of the served component in the page title above the map.
The map UI used by the HTTP server allows panning the map using the mouse cursor with a click and drag motion. Pressing Escape while panning cancels the operation.
The map UI used by the HTTP server allows zooming the map using the mouse wheel. Multiple rapid zooms, that is, multiple clicks, using the wheel are combined together with the map being updated after the wheel has not been scrolled for 1 second.
The map UI used by the HTTP server shows buttons in the left top corner of the map for zoom in, zoom out, and zoom to fit. The extent used by zoom to fit ignores layers for web images such as Google or Bing unless all other layers in the map are empty.
Launching Manifold in the context of an external application via ODBC, COM or .NET no longer places any restrictions onto the COM threading model of the calling thread. Previously, the calling thread must have been using COM STA, otherwise attempting to launch Manifold would fail.
It is easy to put the map served by the HTTP server into an existing web site. The HTML code to do so looks like this:
<script src="webscript.js"></script>
<script>
window.onload = function () {
let config = {
bounds: { xmin: xxx, ymin: xxx, xmax: xxx, ymax: xxx, },
cx: 800,
cy: 800,
urlbase: "/",
};
manifold.createMap(document.querySelector("#map"), config);
};
</script>
...
<div id="map"></div>
The above can be put into an existing web site served by some other web server, like Microsoft Internet Information Server (IIS) or Apache. The URL for the script and the urlbase config parameter will have to be adjusted to point to an appropriate instance of the Manifold HTTP server.
When the web page loads, the script defines the manifold object and the call to manifold.createMap will create all necessary HTML elements for the map UI in the specified div, style them and wire them to events. The content of the div will then display the map served by the Manifold HTTP server and allow operating it. Future extensions to the map UI will only affect the config section in the inserted code.
Build 180 is a base build that is recommended for all users. It provides a number of conveniences requested by the user community and incorporates all improvements from the 9.0.179.x series of builds.
The Layers pane shows none overlap mode as 'none', not as an empty string. This helps distinguish label layers with none overlap mode from non-label layers.
Re-projecting a component into a new component, for example, when re-projecting an image, copies style into the new component.
Re-projecting a component into a new component selects the new component in the Project pane.
The Style pane saves in style data the method used to produce intervals for thematic formatting, thus remembering the method.
Dragging and dropping a single .mxb file into the Project pane opens it instead of importing the contents, the same as dragging and dropping a single .map file into the project.
Map windows allow centering the view to specified coordinates, automatically panning the view, using the new Center command in the context menu for the Position status bar pane. The center coodinates can be specified as:
latitude / longitude, or
pixels / stored coordinates, or
projected coordinates.
Layout windows also allow centering the view for the active layout frame to specified coordinates, automatically panning the view, using the Center command for the Position status bar pane. If the layout is read-only, the command is not shown.
(Fix) Rendering a layout frame with italic text aligned left or right no longer sometimes slightly clips the first or last letter.
Build 179.4 is a technical build that updates third party libraries, improves label performance, and introduces some user conveniences from the wishlist.
Automatic table names: Entering the name of a new, destination drawing or image in the Transform pane automatically will generate a corresponding name for the new table. The name of the new table will be adjusted as required by the database within which it is created. For example, if the destination database does not allow names that contain spaces, spaces will be replaced by underscore characters.
Reading coordinate system data from an IMG ERDAS file preserves the datum name.
Exporting data to TIFF produces TIFFW (world file) and PRJ files. Manifold always writes TIFF with GeoTIFF tags, so the world file and PRJ files are redundant when using GIS packages that understand GeoTIFF format. Adding them results in an export ensemble of files that preserve projection information when using packages that do not understand GeoTIFF format.
Label layers support a new overlap mode: none, for no overlap clipping. In this mode, the system always renders all labels, even if they overlap. This is a great way to check if desired labels have been clipped. Rendering layers with a huge number of labels in this mode may take noticeably longer than it does in other modes since the system is forced to render every label.
Rendering label layers with overlap mode set to none only stores click data for the first million labels. This avoids wasting large amounts of resources on data that is of very limited use.
Rendering label layers in high resolution with overlap mode set to layer or map, for example, during during printing, performs faster.
VCREDIST (Microsoft Visual C++ runtime) has been updated to 14.34.31938.0. This is a minor update with several fixes.
LIBWEBP has been updated to 1.3.0. This is a minor update with several fixes, particularly for use from multiple threads.
The MRSID SDK has been updated to 9.5.5.5244. This adds support for generation 4 SID files.
SQLITE has been updated to 3.41.0. This adds several performance improvements for queries. The update also adds support for canceling long operations, a capability that might be used in future builds for canceling long operations when using SQLite.
Build 179.3 introduces new capabilities for controlling the display of contents within layout frames by setting scale using new capabilities for setting scale as absolute values, by pixel sizes, or by the size of the view within the frame. The new scale controls also work for map, drawing, image, and labels windows.
The Scale status bar pane supports new modes:
absolute - Show scale as an absolute value, for example, 1:24000. This is the default mode.
pixel size - Show scale as pixel size in coordinate system units, for example, 5 m / px.
view size - Show scale as view size in coordinate system units, for example, 500 x 300 m.
The Scale dialog launched from the Scale status bar pane's context menu allows specifying the scale either as an absolute value, a pixel size or a view size.
The Position status bar pane reports the coordinates under the cursor for any active layout frame that shows a component (map, drawing, image, labels).
The Scale status bar pane reports the scale for any active layout frame that shows a component. Reporting the scale of a layout frame in pixel size mode reports the number of coordinate system units per millimeter. If the layout that contains the frame is writable, the scale can also be changed.
(Fix) Commands switching between different modes for the Position status bar pane show their descriptions in the status bar.
(Fix) Reading data from a TIFF file no longer sometimes incorrectly places pixels in the last row of tiles, pushing some pixels down and making a horizontal strip of pixels invisible.
Illustration at right: The scale readout shows the size of the view in the Map window, 205 meters by 161.982 meters. Right click it to show the scale in meters per pixel like 0.529 m / px, or in absolute scale like 1:2000.
Build 179.2 is a quick update that incorporates community requests for the new Save as Image capability introduced in the prior build, 179.1. See the 5 Minute Tutorial - DPI in Save as Image video and the 5 Minute Tutorial - Custom Views in Save as Image video for two essential Save as Image capabilities added in 179.2. See also the new Edit - Save as Image topic.
The Save as Image dialog shows the approximate size of the produced image in bytes as a reference. This helps gauge whether the produced image will be the right size various uses, such as fitting into an email as an attachment, small enough to print, big enough for the desired level of detail, and so on.
The Save as Image dialog allows specifying the render DPI (dots per inch). The default is 96, which is the default screen DPI on Windows. The render DPI is used to scale styles for vector shapes and text. Rendering web images such as Bing retrieves image data as if the DPI was at most 96, to render vector shapes and text in retrieved data at a size similar to other layers.
The Save as Image dialog in full view mode sets the render area to include all layers that are turned on, instead of all layers whether they are turned on or off. This avoids producing images with empty space near borders.
The Save as Image dialog includes a new view named custom view. The extent of the custom view can be edited by pressing an Edit button which opens the Edit View dialog. The Edit View dialog allows entering the minimum and maximum X and Y coordinates of the view as projected coordinates, in units used by the coordinate system with local offsets removed. The Edit View dialog also allows setting the extent of the view to that of the current view or to the extent of the full view, or to the extent of a specific data-containing layer in a drop down list (layers that contain no data are not listed in the dialog). By default, the extent of the custom view is set to that of the current view.
TileRenderXxx query functions include a new parameter to specify the render DPI. The render DPI must be greater than zero.
New GeomCoordX, GeomCoordY, and GeomCoordZ functions: These take a geom and a coordinate index, and return the X, Y, or Z value of the specified coordinate.
(Fix) Reading a TIFF file reads local offsets from tiepoints even if the file contains no pixel scales.
(Fix) The TileRenderXxx query functions used by Save as Image correctly restore RGB values for semi-transparent pixels. This gets rid of multiple rendering issues over transparent background: semi-transparent layers looking darker than they should, light halos for drawing objects or labels having dark edges, etc.
(Fix) Saving an image using the Save as Image dialog in full view mode on a drawing whose bounding box has zero width or height (usually happens when the drawing contains a single point or a single horizontal or vertical line) no longer produces no tiles.
Build 179.1 is a cutting edge build that introduces technology for high performance creation of raster images that capture visual displays in map windows (including drawing, image, and labels windows). The new technology can be used from a user friendly Edit - Save as Image command, or from SQL functions. Capabilities delivered in this build are just the visible tip of extensive technology inside the system that provides a foundation for fast generation of rendered views for use in upcoming new features, such as web serving.
See the First Look - Save Map Views as Images video for a quick introduction to new Save as Image capabilities.
Map windows (map, drawing, image, and label windows) support a new Edit - Save as Image command which allows rendering the contents of the window into an image of the specified size. The image is created in the data source of the map. The default name for the image is <window name> Image. Available modes:
centered view at current scale - Renders data from the center of the current view at the current scale out to the given extents
current view - Renders data within the rectangular area shown in the window into an image of the specified number of pixels horizontally and vertically. Increasing the number of pixels increases the resolution and thus detail.
full view - Renders data in the rectangular area that covers all layers except base maps (the same area that Zoom to Fit would show) with the desired level of detail.
The centered view at current scale mode allows editing both the X and Y size of the produced image. The current view and full view modes only allow editing the X size, with Y size automatically being set to be proportional to the dimensions of the render area. The maximum size of the produced image by either X or Y is 25 million pixels (this is not a technical limitation, but a sanity check).
A Current Window button in centered view at current scale and current view modes allows setting the size of the produced image to that of the current window.
A Current Scale button in full view mode allows setting the size of the produced image to cover all layers at the current scale.
Big images are rendered in parts. Rendering an image with multiple parts adjusts label placement logic to avoid part boundaries, to protect from rendering artifacts. Labels placed on a part boundary try moving to alternative locations. If that fails, for example due to overlap control, the label is suppressed.
Rendering an image tracks progress and reports the name of the currently rendered layer. This allows seeing which layers take a long time to render. Usually, the layers that are slowest to render are web images such as Bing, since those images have to be loaded through the web. Rendering can be canceled at any moment. When rendering is canceled, the system waits for in progress database and web requests to either complete or fail.
The Save as Image dialog includes a Render virtual layers option to render virtual layers, that is, the Background, Grid, Legend, North Arrow and Scale Bar virtual layers in the Layers pane for a map window. If the option is turned on, the system renders any virtual layers that are currently shown in the window. If the option is turned off, the system ignores the on/off settings for virtual layers, with the background of the produced image imade transparent regardless if the Background virtual layer is off or on. By default, the Render virtual layers option is off.
The Save as Image dialog includes an Edit Query button that composes the rendering query that implements the dialog's settings and allows customizing or saving the query.
The Save as Image dialog shows the name of the data source that the new image will be created in if that data source is not the currently opened MAP file.
After the rendering process completes the Save as Image dialog selects the created image in the Project pane.
TileRender - Takes a component, the rectangle to render, the render size in pixels, the tile size in pixels, and a boolean value that controls whether to render virtual layers, and then renders data in the specified rectangle and returns the result as a table of BGRA tiles. The component must be a map or a component that can participate in a map as a layer. The rectangle is specified in the coordinate system of the component. If the proportions of the rectangle do not match the render size, the rectangle is increased to avoid vertical or horizontal distortion. For example, attempting to render a 7000 x 8000 rectangle into a 200 x 200 image will increase the rectangle to 8000 x 8000 to match the proportions of the result. The coordinate system of the result is shifted to the left bottom corner of the render rectangle. If virtual layers are rendered, their parameters are taken from the component's properties. If virtual layers are not rendered, the background will be transparent and grid, legend, north arrow and scale bar virtual layers will be turned off.
TileRenderWindow - Same as TileRender, but instead taking the name of a component, takes the name of a window and renders data from that window. If the window shows a virtual map, the parameters for virtual layers are taken from the window.
TileRenderSingle - Takes a component, the rectangle to render, the render size in pixels, and a boolean value that controls whether to render virtual layers, and then renders data in the specified rectangle and returns the result as a BGRA tile of the specified size. The component must be a map or a component that can participate in a map as a layer. The rectangle is specified in the coordinate system of the component. If the proportions of the rectangle do not match the render size, the rectangle is increased to avoid vertical or horizontal distortion. If virtual layers are rendered, their parameters are taken from the component's properties. If virtual layers are not rendered, the background will be transparent, and grid, legend, north arrow and scale bar virtual layers will be turned off.
TileRenderSingleWindow - Same as TileRenderSingle, but instead of taking the name of a component, takes the name of a window and renders data from that window. If the window shows a virtual map, the parameters for virtual layers are taken from the window.
TileRender and TileRenderWindow are optimized for rendering big images, such rendering a map into a static image using the Save as Image command. TileRenderSingle and TileRenderSingleWindow are optimized for rendering small images, such as rendering a single tile of a map for a web request.
All TileRenderXxx query functions require the render rectangle to be non-empty. When computing the render rectangle from component data, be alert for cases where the rendered component is empty. The Save as Image dialog sets the render rectangle to [ 0, 0, 1, 1 ] in such cases so that an empty component still renders and produces an image.
(Fix) Editing the legend style for a layout frame no longer resets the Position parameter in the Legend dialog to center horizontally and center vertically, losing changes made previously.
(Fix) The Merge dialog generates a name for the new component so that it is unique in the data source of the map. Previously, the dialog always generated a name that was unique in the currently opened MAP file even if the data source of the map was different.
(Fix) The CoordSystemOverride query function no longer fails to apply overrides to an incomplete coordinate system, for example, such as an empty string.
Build 179 is a new Base build, incorporating all improvements in the 9.0.178.x series of builds. It is recommended for all users. The main changes since the prior cutting edge build, 9.0.178.6, is the provision of quick choices for which map layers are incorporated into the legend, as well as quick and easy customization of formatting for different legend entries. See the First Look - Legends in Maps and Layouts video for a quick introduction to new legend capabilities.
The Legend dialog allows specifying the vertical position of the legend within a legend layout frame. The default is center.
Layout frames with text that is too long to fit into a frame trim the legend text to the first words that fit.
The Layers pane filter button allows showing and editing Legend Mode for map layers:
full - always legend the layer.
short - always legend the layer, reducing thematic formatting to a single sample using the main title, such as the name of the layer.
auto full - legend the layer if it is currently visible, that is, not turned off explicitly, not in a folder that is turned off explicitly, and not hidden due to the current scale. This is the default.
auto short - legend the layer if it is currently visible, reducing thematic formatting to a single sample using the main title, such as the name of the layer.
none - never legend the layer.
The Legend dialog allows specifying separate font and text size for different types of legend items:
text - header items for thematic formatting.
single - sample items for non-thematic formatting, which typically appear in a single legend entries.
multiple - sample items for thematic formatting, which typically appear in multiple legend entries.
The Legend dialog allows specifying the text alignment for each type of legend item. Defaults are: text items use right alignment, single items use right alignment, and multiple items use left alignment.
Opening a MAP file created by Manifold 8 converts legend, north arrow, and scale bar layout frames.
Dropping a component into a layout copies the background color of the component into the created layout frame. Creating a virtual layout for a component using File - Print Preview does the same.
Dropping a component into a layout or creating a virtual layout for a component using File - Print Preview copies grid parameters into the created layout frame.
VCREDIST (Visual C++ runtime) has been updated to 14.34.31931.0.
LASZIP has been updated to 3.5.0. This fixes a small memory leak when reading v3 LAZ files.
SQLITE has been updated to 3.40.1. This fixes several obscure bugs and adds some performance optimizations.
Cutting edge build 178.6 is a large build with many new features and improvements for legends, including a dynamic Legends virtual layer for map windows. The build also includes significant improvements in automatic label placement and overlap resolution and improvements in Style. Build 178.6 is the last cutting edge build in the current series focused on the cartography features and the last build for 2022. It will be the basis for the next base build early in 2023.
The Style dialog for labels includes new options for placing labels near points:
label - either one label per coordinate or one label per record. Specifies how many labels to place for points with multiple coordinates (multi-points). The default is one label per coordinate,
move to avoid overlap - if turned on, allows trying multiple label positions in case of overlaps. The default is off.
Placing labels near lines in one per branch or one per record modes tries multiple label positions in case of overlaps. Positions near centers of visible branches are given preference.
In Style pane buttons, dropdown lists for sizes highlight choices that map to whole pixels at 96 DPI. 96 DPI is the default screen resolution. Using sizes that map to whole pixels at that DPI, for example, setting point size to 4.5 points and stroke size to 0.75 points, helps make vector shapes look crisper.
Dropdown lists of sizes have been adjusted to include more choices that map to whole pixels at 96 DPI.
Editing area, line, point, or text style shown in the Style pane using the Style dialog allows applying changes via an Apply button to the edited style without closing the dialog.
Using Tally for unique values in the Style pane keeps formatting for existing values.
Using Tally for numeric intervals in the Style pane copies formatting from closest values. For example, going from two breaks of 10 = red, 20 = green to four breaks of 8, 13, 18, and 23 will produce intervals and styles of 8 = red, 13 = red, 18 = green, 23 = green.
The North arrow and scale bar in a map window may overlap each other and are only auto-hidden when the window is too small to fit them (with margins).
The Layers pane for a map window provides a virtual layer for a Legend, similar to how the Layers pane provides virtual layers for a North arrow and a scale bar. The layer can be turned on or off. The default is off. Double-clicking the Legend layer edits its parameters using the Legend dialog.
Legend parameters:
foreground color - Default is black,
background color -Default is white,
style - Legend style, there currently is only one style. More styles will be added in the future,
stroke - Stroke width for the border. Default is 1 pt,
text font - Font for text. Default is Tahoma,
text size - Size of font for text. Default is 8 pt,
position - Horizontal and vertical position relative to the map window. Default is left bottom,
margin - Horizontal and vertical margin within the map. Default is 8 x 8 pt,
size - Horizontal size. Default is 180 pt. The vertical size varies with the number of items and is computed automatically,
padding - Padding between the border and the legend items. Default is 3 pt.
The Legend dialog includes a preview of the legend style, which updates after changes to the parameter values.
The Legend dialog includes an Apply button which allows applying changes to the legend style without closing the dialog.
Legends ignore images with no thematic formatting.
Legends ignore drawings and labels with no records.
Legends for drawings with a spatial index provided by Manifold ignore formatting for geometry types that do not exist in the drawing.
Legends with too many items render the first items that fit into the legend frame (instead of increasing the frame size offscreen). Legends with no items do not render at all (instead of rendering an empty frame).
Legends no longer have separate items for component names. If a component uses thematic formatting, the component name is shown next to the field name that controls the formatting using Component : Field style. If a component does not use thematic formatting, the component name is shown next to constant formatting using the component name instead of, for example, 'Points'. This makes legends shorter and easier to read.
Layouts support legend frames. To add a legend frame, use the new Create Legend cursor mode. Keyboard shortcut: Shift-E.
Legend layout frames use data from the next component frame below the legend in the display stack, or, if there are no such frames, from the topmost component frame. This is similar to how north arrow and scale bar layout frames derive their context.
The Info pane for a legend layout frame shows the legend style and allows editing it.
The context menu for a legend layout frame in the Layers pane includes a new Split into Samples command which splits the legend into individual frames for formatting samples and adds them to the layout. The new frames are put into a separate folder on the same level as the legend frame, right above it in the display order. The original legend frame is not deleted, but is hidden. The old View - Mode - Create Legend command used to create similar legends from individual frames for formatting samples has been removed.
(Fix) A failed read or write of JPEG format no longer sometimes reports a generic 'can't read / write data' message instead of a specific error.
(Fix) Selecting north arrow and scale bar virtual layers for a map window in the Layers pane and turning them on or off together no longer sometimes copies the style for the north arrow to the scale bar or the reverse.
Cutting edge build 178.5 provides label overlap management between layers in maps, as well as some technical improvements to multi-threaded rendering of layouts.
The filter button in the Layers pane includes a new Overlap Mode command which shows the overlap mode for label layers and allows changing the overlap mode.
Available overlap modes:
layer - labels in the layer may not overlap each other, but may overlap labels from other layers. This is the default mode.
map - labels in the layer may not overlap each other and may not overlap labels from other layers whose overlap mode is also set to map. Labels from lower layers are given priority over labels from higher layers.
Overlap modes work in map windows, in layout windows, and during printing.
Using map overlap mode only makes sense for multiple label layers. Editing a label layer set to map overlap or turning that layer on or off will re-render other label layers set to map overlap above it. Rendering label layers set to map overlap decreases parallelism as such layers must be rendered in sequence. However, in practice, this does not necessarily decrease rendering performance, as the final number of labels to render also tends to decreases.
Layout windows limit the number of rendering threads for a map frame. This significantly improves performance when rendering maps that contains many layers: instead of trying to render all layers at the same time, the window now starts rendering a few layers and only starts rendering new layers after previous layers finish rendering. This rendering plan was originally introduced for map windows, so now layout windows use the same strategy.
Layout windows limit the number of rendering threads across multiple frames. This helps render layouts with multiple maps.
Layout windows dynamically increase the number of rendering threads if the window becomes active and decrease the number of threads if the window becomes inactive. Map windows also dynamically increase/decrease rendering threads the same way.
The dynamic adjustment of rendering threads has been tuned to work more smoothly for systems with many CPUs.
(Fix) Reading TIFF files with data stored in strips with heights that are not powers of 2 no longer sometimes fails.
(Fix) Performing an EXECUTE [[ ... ]] on a SQL Server data source with a command that returns multiple results no longer returns the number of affected rows instead of the first result table.
Cutting edge build 178.4 provides a variety of conveniences and user interface improvements for grids, North arrows, scale bars, Style, and layouts. It also provides new query functions to work with interactive selections from SQL, a command line option to help manage serial numbers, and important updates to third party software used by Manifold, notably a migration to the latest Visual C++ environment from Microsoft.
Preview controls for styles for areas, lines, points, and text use a single shared preview background color, which persists per Manifold session. The preview color can be changed using the color picker box in the right top corner of the preview panel. This makes it easier to set a desired background color just once without having to set it for each use of style. Previously each control started with the background color of the map which could then be changed interactively, with the changes only persisting until the dialog was closed.
The default preview background color has been set to light blue. The new default makes it easier to see Style effects using white color.
Preview controls for Style dialogs for grids, north arrows, and scale bars use the new, shared preview background color. The preview color can be changed using the color picker box in the right top corner of the preview panel.
The North Arrow and Scale Bar dialogs use a better caption for position options: the Align caption has been renamed to Position.
The Scale Bar dialog allows specifying the desired scale bar length in scale bar units. If the space allocated for the scale bar is too small to show the desired length, the length is computed automatically from the visual size of the scale bar, rounding down to the first two significant digits (same as in the previous builds). The default is to always compute the length automatically.
The Grid, North Arrow, and Scale Bar dialogs include a new Apply button which allows applying changes to the map without closing the dialog, which makes interactive tinkering fast and easy. The button is currently only shown when the dialog is used to edit the style of a virtual layer in the Layers pane for a map. In the future, the Apply button might also be used when the dialog is used to edit the style of a layout frame in the Info pane.
Snapping to a grid in a map window now snaps to the virtual grid layer. Snapping does not require the virtual grid layer to be turned on. Snapping to a grid always uses the base grid step for the virtual grid layer. The Snap Parameters dialog no longer contains means to specify the grid step and grid unit, as there is no longer a separate grid used for snapping.
The Layers pane has new filters for layout frames: North Arrows, Scale Bars, and Samples. The Text Frames filter has been renamed to Text.
When showing data for a layout frame, the Info Pane's Update Record button has been renamed to Update Frame.
The Create Area Sample command for layouts has a new icon.
The Create North Arrow and Create Scale Bar commands for layouts have new icons. The cursor modes for those commands have new cursors as well.
The manifold.exe executable supports a new -showserial command line option:
manifold -showserial
That launches a Manifold session that in the Log window pane shows the first 8 characters of the serial number. The first characters of the serial number are not written into the log file and are only shown in the Log window. This option allows administrators to see what serial number has been used on a given machine. The new command line option works for all editions of Manifold, SQL for ArcGIS Pro, and Release 8, but not for Manifold Viewer (which does not use serial numbers).
The Microsoft Visual C++ (also called MSVC or simply VC) environment used has been updated to 14.34.31933. The VC runtime has been updated to 14.32.31332.0. This adds many minor performance improvements and makes Manifold modules use the same version of the runtime as the latest modules from Microsoft and other major vendors, saving resources that would otherwise be spent on keeping multiple versions of the runtime in memory.
NVIDIA CUDA has been updated to 11.8. GPGPU modules for sm_50 and sm_60 architectures now use slightly fewer GPGPU resources.
The ECW SDK has been updated to 5.5.0.2268. This fixes a couple of minor SDK bugs related to the reading of ECW and JPEG2K images.
Google LIBWEBP has been updated to 1.2.4. This improves the visual quality of compressed WEBP images and fixes several Google bugs related to transparency, etc.
SQLITE has been updated to 3.39.4. This adds support for RIGHT and FULL outer joins (SQLITE did not have them until 3.39) as well as several minor performance improvements. This also fixes a number of SQLite bugs, most notably with join optimizations and with the UPSERT statement.
New query function: SelectionReplace. Takes a table to select records in, a table with keys to select and a flag whether records with the passed keys should be selected or unselected. The keys table should contain fields from the result table of the SelectionKeys function, with compatible types. The keys table may contain other fields as well, which will be ignored if present. The returned value for SelectionReplace is the number of unique keys fetched from the keys table. Since some of the keys might not exist in the table, replacing the selection using this function marks the selection as not knowing the exact number of selected records. To determine the exact number of selected records, click the ? button in the Info pane.
New query function: SelectionReplaceWindow. Same as SelectionReplace, but also takes a window name and a layer name, which allows this function to replace the selection for a dynamic layer based on a query.
In addition to manipulating selections in tables that have been opened, the SelectionReplace and SelectionReplaceWindow query functions will automatically create a selection even within a table that has never been opened as long as it is static (that is, not the result table of a query) and it belongs to a database opened in the Manifold user interface or one of its child databases (that is, not to an arbitrary database opened by a script).
To use the following examples, create a new .map file, open the mfd_meta table, open a new command window, then dock the new command window below the mfd_meta table (right-click the tab for the command window and select Dock Down) so that you can run the example queries and immediately see what they do.
--SQL9
-- example 1
VALUE @a FLOAT64 =
SelectionReplace(mfd_meta, (VALUES (2) AS (mfd_id)), TRUE);
-- example 2
VALUE @a FLOAT64 =
SelectionReplace(mfd_meta, (VALUES (2), (3) AS (mfd_id)), TRUE);
-- example 3
VALUE @a FLOAT64 =
SelectionReplace(mfd_meta, (VALUES (2), (3) AS (mfd_id)), FALSE);
-- example 4
VALUE @a FLOAT64 =
SelectionReplace(mfd_meta, (SELECT * FROM mfd_meta WHERE name='mfd_root'), TRUE);
(Fix) The automatically computed length of a scale bar in a layout frame may no longer round to different values depending on the zoom or print resolution (was caused by incorrect handling of rounding errors).
(Fix) A lattitude / longitude grid for a component in a non-lattitude/longitude coordinate system no longer sometimes uses the wrong unit for the grid step if the grid unit is set to auto.
(Fix) Using the Selection query function to return unselected records in a table that was never opened in a window now correctly returns a full table instead of an empty table.
(Fix) Using the SelectionWindow query function to return unselected records for a table in a window or layer that no longer exists now correctly returns a full table instead of an empty table.
Cutting edge build 178.3 extends North arrow and scale bar capability to layouts. North arrow and scale bar frames can now be added to layouts, with automatic context for those frames taken from component frames in the layout. Grids have also been extended with more options. North arrows, scale bars, and grids have been integrated into the Info pane.
Layouts support North arrow frames. To add a North arrow frame, use the new Create North Arrow cursor mode (keyboard shortcut: Shift-N).
Layouts support scale bar frames. To add a scale bar frame, use the new Create Scale Bar cursor mode (keyboard shortcut: Shift-S).
North arrow frames and scale bar layout frames use data from the topmost component frame below the frame in the display stack, or, if there are no such frames, from the topmost component frame in the layout.
A North arrow layout frame with auto bearing turned on checks if the center of the north arrow shape is inside the component frame used by the North arrow. If the center of the North arrow shape is inside the component frame, the bearing is computed for the geographic location at that center. Otherwise, the bearing is computed for the geographic center of the component frame.
Grids are available for component frames that appear in layouts. Alt-click the component frame, and in the Info pane's Style tab a Grid check box will allow turning on a grid. A preview panel in the Info pane shows the grid style and allows editing it. Click the [...] browse button to launch the Grid dialog to configure the grid. Note: In the current build, if the grid step is allowed to change, the layout window might use different grid steps at different zoom levels. Printing the layout, however, will always use the same step. In future builds, the layout window will also set the grid step to whatever step will be used during printing.
If a map has a grid turned on for the map, dropping that map into a layout as a component frame will not show that same grid in the layout. Instead, Alt-click the component frame, and in the Info pane's Style tab a Grid check box will allow turning on a grid. Using a different grid in layout makes it possible to show a grid that is styled and configured to look good in the layout for printing, while a different grid can be used in the map for interactive work on the computer desktop.
The Grid dialog allows specifying grid step by X and Y. The default is a single step in X and Y using whatever is the coordinate system unit for the map. Grid cells never become smaller than the specified step.
The Grid dialog allows specifying whether the grid step is increased during rendering. The default is on, to allow increasing the grid step. If the option is turned off, the grid step is locked to the specified step and grid cells never become larger than the specified step. If the visible size of grid cells becomes too small the grid is not rendered. The spacing parameter has been removed and has been replaced with internal logic to automatically manage spacing.
Rendering a grid for a latitude / longitude system restricts parallels to the -90 to 90 range. If the Use latitude / longitude option is turned on, rendering a grid also restricts meridians to the -180 to 180 range, otherwise meridians are not restricted.
The Grid dialog allows specifying the unit of measure for the grid step. The default is to use whatever is the unit of measure for the coordinate system in use.
The Layers pane shows icons for grid, north arrow, and scale bar layers in a map.
The Info pane for a North arrow layout frame or a scale bar layout frame shows the North arrow or scale bar style and allows editing it.
Cutting edge build 178.2 introduces virtual layers that provide North arrows, scale bars, and grids in maps. See the First Look - North Arrows video for a quick introduction.
The Layers pane for a map window shows virtual layers for a north arrow, scale bar and grid. Virtual layers can be turned on and off (by default they are turned off). The position of the virtual layers in the display stack cannot be changed. Double-clicking a virtual layer edits its parameters using a dialog.
The state and parameters of the virtual layers are saved in the map component. If the window is not a map component but a drawing, image, or labels window, the virtual layers still work, but changes to their state and parameters are lost when the window is closed. To save these changes, save the window as a map using Edit - Save as Map.
Dialogs that edit parameters for north arrows, scale bars, and grids include a preview that immediately updates after any changes to parameter values.
Configure a North arrow by double-clicking the North Arrow virtual layer. The North Arrow dialog allows setting the following parameters:
(Foreground color) - Foreground and stroke color for shapes and text. Default: black.
(Background color) - Fill color and the color for halos. Some north arrow shapes may use colors that are mixes of foreground and background colors. Default: white.
(Shapes gallery) - Choose a North arrow shape from a gallery of popular shapes. Default: compass. Hovering the mouse over a shape will show the name of that shape in a tooltip.
Stroke - Stroke width for the shape. Default: 1 pt.
Text - Check to show text (captions) near north arrow shapes for NESW directions. Some shapes can show captions in all four directions, some only two directions or one direction. Default: off (do not show text).
NESW - Four boxes for text to use for each of the four directions. Default: empty strings.
(Text font) - Font for text. Fully configurable for typeface, effects, bold, etc. Default: Tahoma.
(Text size) - Font size for text. Default: 8 pt.
Align - Horizontal and vertical position of the North arrow shape relative to the map. Default: right top.
Margin - Horizontal and vertical margins between the North arrow shape and the map's edges. Default: 8 pt margins.
Size - Size of North arrow shape. Default: 96 pt.
Halo - Width of background color halo for shape and text. Default: 1pt. Setting Halo to 0 turns off the halo.
Bearing - The direction of the North arrow, if the Auto box is not checked. Default: 0 (North up).
Auto - When checked (the default), compute the North arrow's bearing automatically. Bearings are first computed using the center of the north arrow shape, and then, if that fails because the north arrow is outside of the coordinate system domain, based on the center of the map.
Configure a scale bar by double-clicking the Scale Bar virtual layer. The Scale Bar dialog allows setting the following parameters:
(Foreground color) - Foreground and stroke color for shapes and text. Default: black.
(Background color) - Fill color. Default: white.
(Shapes gallery) - Choose a scale bar shape from a gallery of popular shapes. Default: rect. Hovering the mouse over a shape will show the name of that shape in a tooltip.
Stroke - Stroke width for the shape. Default: 1 pt.
Text - Check to show text (a caption) with the number of units. Default: on (show text).
(Text font) - Font for text. Fully configurable for typeface, effects, bold, etc. Default: Tahoma.
(Text size) - Font size for text. Default: 8 pt.
Align - Horizontal and vertical position of the scale bar shape relative to the map. Default: right bottom.
Margin - Horizontal and vertical margins between the scale bar shape and the map's edges. Default: 8 pt margins.
Size - Approximate desired size of the scale bar shape in horizontal and vertical dimensions. The actual size is computed based on the units and current scale. Default: 144 pt x 8 pt.
Halo - Width of halo for shape and text. Default: 1pt. Setting Halo to 0 turns off the halo.
Unit - Unit of measure shown in the text caption. Default: coordinate system unit for the map window.
The length of the scale bar is computed automatically based on the specified size, unit and the current scale. The width of the scale bar is slightly reduced so that the reported length is rounded to no more than two significant digits.
Configure a grid by double-clicking the Grid virtual layer. The Grid dialog allows setting the following parameters:
(Foreground color) - Stroke color for grid styles. Default: black.
(Background color) - Fill color. Default: white.
(Styles gallery) - Choose a grid style from the gallery. Default: line. Hovering the mouse over a style will show the name of that style in a tooltip.
Dashes - Dash pattern for lines, using the same conventions as the Dashes parameter for line styles. Default: 3,3 for a 3pt dash and 3 pt space.
Stroke - Stroke width for line and point styles. Default: 0.75 pt.
Point size - Size for point styles. Default: 5 pt,
Halo - Width in points of halo for line and point styles. Default: 0. Setting Halo to 0 turns off the halo.
Spacing - Minimum size of a grid cell. The actual size is computed based on the scale of the map and the units used (either native map units or latitude / longitude). Default: 72 pt. The minimum allowed value is 36 pt.
Use latitude / longitude - Check to create a latitude / longitude grid. Default: off, meaning to use the projection of the map.
The grid step is selected automatically based on the specified spacing and the current scale. The grid step in the units used (either the projection of the map or latitude / longitude) is rounded up to the closest power of 10 multiplied by 1, 2 or 5, resulting in grid steps such as 100, 200, 500, 1000, and so on.
Connections to SQL Server try using specific versions of the MSOLEDBSQL driver if the generic version fails to start due to being misconfigured.
Renamed in the Scales dialog: closest scale to Minimum scale, farthest scale to Maximum scale. The new names help prompt which of the two numbers should be greater.
Exporting a data source to a .map file or to an .mxb file writes tables with an invalid schema as tables with a single default field and no records. Tables with invalid schemas can occur when linking from data sources where a table schema cannot be read due to insufficient permissions for the user role used.
(Fix) Going back and forward between views in a map window no longer fails to update the scale readout in the status bar.
(Fix) The table window showing a table from a MAP file no longer suggests unnecessary refreshes to data after changes to values in non-key fields. Tables from MAP files show such changes immediately without any need to refresh.
Cutting edge build 177.8 provides a variety of user interface conveniences, including the ability to Copy from tables and to Paste into third-party applications like Excel and Notepad.
There is a new style for text fields: c = command line. The table window and the Info pane show command line text values in blue highlight color and allow running them using the context menu. This allows putting Windows command lines into a field, which can then be executed by right-clicking a cell and choosing Run Command.
Refreshing data in the table window either manually or automatically, for example, after deleting records or changing the table schema, keeps filters and orders for fields that did not change.
Table windows sort fields by name in the View - Order submenu.
Table windows showing records for a table from a data source other than MAP mark records that have been deleted in that window as deleted. Previously, deleting records from such a table only suggested refreshing data using the bar at the bottom of the window. Now the window also shows records that it tried to delete.
The status bar includes a new Counts pane (a section in the status bar) that shows the total number of records and the number of selected records in the active component. This shows the number of selected records at all times without needing to switch to the Info pane.
The record counts shown in the Counts status bar pane can be refreshed by right-clicking the section and choosing Refresh in the context menu. That is useful when working with data sources that are stored outside the .map project where the record count might change independently of any work done in the Manifold session.
The Info pane and the Counts status bar pane show the total number of frames and the number of selected frames for a layout.
Copying records from a table window now copies them to the Windows clipboard in both binary format suitable for pasting back into Manifold and in text format suitable for pasting into third-party applications like Excel or Notepad. Copy records by selecting the desired records and then choosing the Edit-Copy menu command. Copying records in text format copies only visible fields. It copies fields in the order they appear in the table window, and formats field values according to field styles. The visible order of records is not preserved. The amount of copied text data is limited to 32 million characters because many third-party applications can only handle limited amounts of text coming from the clipboard. If there are more records than fit into the limit, extra records past the limit do not appear in text data and only appear in binary data (for pasting into Manifold).
The context menu on column heads (right-click on a column head) now includes a Copy command which copies field values in that column from selected records to the clipboard. Copying field values copies them in text format only. The copied values are formatted according to the field style. Empty values are omitted.
(Fix) The Edit - Select Inverse command for a layout window adjusts the final selection for groups in the Layers pane. (Previously the selection could produce a selected group with an unselected child.)
(Fix) Selecting frames using the mouse cursor in a layout window adjusts the final selection for groups in the Layers pane. (Previously the selection could produce a selected group with an unselected child.)
Build 178 is a new Base build, incorporating all improvements in the 9.0.177.x series of builds. It is recommended for all users. The main changes since the prior cutting edge build, 9.0.177.4, are a new system for specifying zoom ranges in maps and also for rendering to a fixed scale. Base builds starting with 9.0.178 for Release 9 and 8.0.34 for Release 8 are now exclusively 64-bit.
Layers pane readouts for opacity, min / max scale,, and field width have been aligned left. The color picker sample box for the virtual background layer has been made wider to be similar to color pickers in the Style pane.
A new, single Min / Max Scale mode readout in the Layers pane replaces the former Closest (Min) Scale and Farthest (Max) Scale modes for map layers. The new Min / Max Scale mode readout shows both scale settings together, to make it easier to compare zoom scales between different layers.
Editing zoom scales is now done using a new Scales dialog: double-click into a Min / Max Scale cell in the Layers pane to launch the dialog. The dialog shows the current scale for reference and allows setting the closes, minimum scale, the farthest, maximum scale, and also a new Render scale value. The dialog allows direct entry of any scale value and also provides a pull-down list that includes even scale values in factors of ten (1, 10, 100, 1000, 10000, etc.) as well as uneven scales used as limits in other layers. That makes it easy to match scales used in other layers.
The Scales dialog shows scales with thousand separators for readability, and accepts scales entered with thousand separators by the user.
Applying scale limits to a layer keeps the layer visible at a zoom scale exactly equal to the closest scale, but hides it at a zoom scale exactly equal to the farthest scale. This allows showing exactly one layer out of a sequence of layers with matching scale boundaries, for example, +10k, 10k-50k, 50k+.
The Layers pane using the Scales dialog allows specifying a Render scale value for map layers that show vector data (drawings and labels). Render scale is applied during rendering in windows and during printing. When a render scale value is specified for a layer, the vector objects and labels in that layer are rendered as if the scale were fixed at that value, so zooming in will make the labels and objects bigger, while zooming out will make them smaller.
Rendering labels and objects with render scale will not render anything if the specified render scale is too small (10 times smaller than the current scale) or too big (100 times bigger than the current scale).
Layout windows render drawings and labels at true scale: zooming in and out will change the visual size of drawing objects and labels. Label placement algorithms may still produce slightly different results on screen vs. on page, or for different zooms on screen, due to different tolerances.
Editing a text style for Labels allows specifying whether the system should prefer placing labels following a line with left / right offset above or below the line. The default is above.
Editing a text style for Labels allows specifying a smooth tolerance factor to be applied to a line for labels following lines. The default is 50% of the font height.
(Fix) Labels following lines no longer sometimes apply bend spacing a little too early.
(Fix) Applying bend spacing to labels following nearly straight lines no longer sometimes (rarely) packs label glyphs into the same location.
(Fix) Placing labels following a line with left / right offset in repeat mode always tries to place labels along all left or all right parts of a branch, instead of stopping after successfully placing labels along one such part.
Build 177.4 provides many controls for line labels and label overlap spacing. It also adds an export control to Manifold Commander and two fixes.
See the updated Style: Labels topic for examples of new label style controls in action.
Editing a text style allows specifying how many labels to place onto a line:
one per branch - (default) The system will try to place a single label for each visible branch of each record. This applies to visible branches, that is, the visible parts of branches, not physical branches. For example, if a physical branch goes off screen and then returns back on screen, it will produce multiple visible parts and the system will try to put a label onto each such part.
one per record - The system will try to place a single label for each record.
repeat - the system will try to place as many labels as will fit into each visible branch of each record given the specified spacing between labels on the same branch. Spacing can be specified either in absolute units, for example, 40, meaning 40 points, or in relative units for example, 800%, the default, meaning 8 times the font size.
Editing a text style allows specifying how to place labels onto a line:
curve - (default) Bend label text to follow the shape of the line.
straight - Place labels without any bends in the direction of the line in the region of the center of the text.
straight horizontal - Place labels without any bends. aligned horizontally.
straight perpendicular - Place labels without any bends aligned perpendicular to the direction of the line in the region of the center of the text.
Placing labels onto lines preprocesses the line metric to make it smoother.
Placing labels onto lines in one per branch or one per record modes prefers positions near the visual center of the line.
Placing labels onto lines produces a tighter and more accurate overlap shape. This improves the accuracy of clicking into labels. This also allows showing more labels in that labels that are close to each other start conflicting later than they did with less accurate overlap shapes.
Editing a text style allows specifying overlap spacing, which controls how close individual labels can be to each other. The default is 1 pt.
Editing a text style allows specifying bend spacing to apply to labels following lines. With bend spacing, placing text onto a line adds small amounts of space between individual letters at each bend to improve readability. The amount of added space depends on the bend angle: sharper turns get more space. Bend spacing defines the maximum amount of space to add to a single bend. The default is 50%, adding up to half of the font size at each bend.
There is a new -export:xxx command for Commander. The command exports the specified component in the input file to the output file. The specified component can be in a nested data source. When using this command the input file is always opened in read-only mode and the value of the -open:xxx option is ignored. For example:
manifoldcmd "c:\world.map" -export:"Main Map" -out:"c:\world_map.gdb"
Sample positions and shapes for layout frames have been localized.
Reading MIF format allows duplicate field names and automatically renames duplicates to make all field names unique, thus automatically dealing with problems that can happen from encoding issues in MIF format files.
(Fix) Writing MIF removes unsupported characters from field names.
(Fix) Clicking a label no longer sometimes picks a wrong label or does nothing.
Build 177.3 adds new capabilities to Manifold Commander, improves labels along lines, provides a vertical text alignment style in layouts, adds new dataports, and provides fixes.
The -runscriptfile:xxx command for Commander works in the context of a data file. The command will open the specified data file and then run the script from the specified script file.
There is a new -runqueryfile:xxx command for Commander. The command is similar to -queryrun:xxx, but the text of the query is taken from the specified file. That allows writing new queries to do workflow using SQL without opening Manifold interactively, including parametrized queries.
There is a new -runquerytext:xxx command for Commander. The command is similar to -queryrun:xxx, but the text of the query is taken directly from the command line. For example:
manifoldcmd data.map -runquerytext:"SELECT * FROM blocks WHERE state='CA'" -out:out.jsonl
Editing a text style allows specifying an offset number for labels following lines. The default is 0 for placing a label for each visible branch directly on top of the line. If the offset is not 0, the system will try to place a label for each visible branch on each side of the line until it succeeds on one side or the other. For example, if the system first succeeds in placing a label on the left side of a particular branch, it will not try to place a label on the right side of that branch.
Editing a text style allows specifying the vertical alignment of the text. Vertical alignment is used when rendering text in layout frames.
Many progress messages have been simplified from mmm (xxx) format to mmm: xxx format for readability and consistency.
Printing geometry to GeoJSON no longer prints optional bounding box data. This reduces output size, particularly for points. In the future, if there emerges a need to include bounding box data, an explicit option will be added to do so.
There is a new dataport for JSONL files. JSONL files are line-delimited JSON, a simple format designed to be friendly to streaming data. A JSONL file contains a single table. Reading a JSONL file parses it dynamically. Each line must be 2 GB or less of text, but the file itself can be any size.
There is a new option to export tables to JSONL files. Binary fields are ignored. The export tracks progress and can be canceled.
There is a new dataport for GEOJSONL files. GEOJSONL files are line-delimited JSON, similar to JSONL, but with GeoJSON data. A GEOJSONL file contains a single drawing. Reading a GEOJSONL file parses it dynamically. Each line must be 2 GB or less of text, but the file itself can be any size. The Geom and Geom_x field names are reserved: properties with these names are ignored.
There is a new option to export drawings to GEOJSONL files. Binary fields except for the geometry field used by the drawing are ignored. Exported geometry is automatically converted to Latitude Longitude WGS84, curves are linearized, and areas are normalized to OGC rules. The export tracks progress and can be canceled.
(Fix) Table windows for a tables, queries, and command windows, for .map files served by Manifold Server fetch and show the number of records specified in the Initial number of records to show (non-MAP) option in the Tools - Options dialog, instead of automatically showing all records.
(Fix) Table windows for tables stored in the .map project no longer autorefresh data after changes to a big table if there is a filter applied and the number of records that pass the filter is small.
(Fix) Writing a TIFF file with FLOAT64 values correctly writes missing pixels as NaN.
(Fix) Writing a TIFF file with INT8U values and a palette no longer fails to write the palette.
(Fix) Writing a JSON file escapes component and field names.
(Fix) Writing a GEOJSON file escapes component and field names.
(Fix) Writing a DBF file no longer sometimes miswrites boolean values.
(Fix) Tracking progress when writing DBF or SHP files no longer sometimes counts every written record twice.
Build 177.2 is a historic build in that it drops support for 32-bit versions of Manifold projects. All Manifold products are now 64-bit and require 64-bit Windows operating systems.
Build 177.2 expands the display viewport size in table windows to 2 billion records. That is way more than anybody can read through, but together with Manifold speed plus reasonable safety measures now built in, increasing the number of records that can be interactively displayed in a table window greatly expands the reach of interactive procedures to very large tables.
Build 177.2 supports ArcGIS Pro 3.x for SQL for ArcGIS Pro, and also adds features to various dataports and provides bug fixes.
Release 8, Release 9, Manifold Viewer, and SQL for ArcGIS Pro no longer include 32-bit modules. Users who require 32-bit versions should use build 9.0.177 for Release 9 and build 8.0.33 for Release8, which are base builds that include 32-bit modules and which never expire.
Manifold 9 products no longer use the Bin or Bin64 folders. DLL and EXE modules are placed directly within the install folder. The Shared folder has been renamed to Extras.
SQL for ArcGIS Pro no longer includes an Open SQL 32-bit button. The Open SQL 64-bit button has been renamed to Open SQL.
Discussion
Manifold was one of the first software companies to ship 64-bit products. Despite being one of the first to move to 64-bit, for over 20 years Manifold has maintained both 64-bit and 32-bit versions of all Manifold products.
Over time most, if not all, Manifold users naturally moved to primarily use the 64-bit versions of the products. At the same time, maintaining obsolete 32-bit code has become a limiting factor for adding new features. Manifold is therefore going exclusively 64-bit from build 177.2 onward. That will make it more efficient to add new features, and will remove limits on how those new features must be designed. That will make many things simpler for new users. The first example of such a new feature is providing 2 billion record displays in table windows, which would have been limited by 32-bit restrictions. Going exclusively 64-bit also reduces the size of the Manifold download to less than 31 megabytes.
There are several areas users may be relying on 32-bit code directly or indirectly:
If you are currently relying on 32-bit code in any way, you don't have to switch immediately. The move to 64-bit only can be gradual. You can use the new 64-bit only builds of Release 8 and Release 9 as portable installs in parallel with the last base builds that still include 32-bit code. Eventually, you may be able to transition to using 64-bit builds all of the time, with only occasional use of legacy portable installs that have 32-bit code.
The maximum number of records that can be shown in a table window is now 2 billion. Tables can contain more records, but only up to 2 billion can be displayed for interactive browsing in a table window.
The table window can either show all records in a table (up to 2 billion) or show a first sample of records. Showing a first sample of records instead of all records is useful when working with external data sources like PostgreSQL, or, say, Manifold Server: not fetching all records immediately protects against wasting server resources and network traffic needlessly. Tables from .map files show all records by default, while tables from other data sources show a first sample of records. This also applies to the result tables of queries, including ad-hoc queries in command windows. The "show a sample from non-.map data sources" is not absolutely bulletproof. For example, a query stored in a .map file may access records in a table stored on SQL Server. When the user runs such a query, the table window will try to fetch all records in the result table, because the query itself is stored in a .map file, even though the records come from SQL Server. In cases like this, the responsibility for not overloading the server for no good reason is on whoever writes or runs the query.
The Tools - Options dialog includes an Initial number of records to show (non-.map) option to specify the size of a first sample of records fetched for non-.map data sources. The available values are: auto (default), all, or a specific number of records. The auto value is currently set to 5000 records. The previous default was as high as 50000 records because it applied to tables in .map files as well. 5000 records is much friendlier to database servers. If 5000 records is too low for the data sources you are working with, you can always change the option to a higher value in the Options dialog.
The Info pane shows the number of fetched records in the table window. If there are more records available, the Info pane also shows a (+) notation. If the table window is showing a first sample of records instead of all records, the Info pane also shows a button to fetch all records. Once a table window has been told to fetch all records for the displayed table, it will keep fetching all records for all further operations that refresh or replace the table.
The Info pane shows the number of displayed records in the table window. That number will be the same as the number of fetched records that pass any filter.
The Info pane shows the Component tab for a command window with a table.
Table windows detect changes to displayed data from a non-.map data source and show an action bar below the record list with a prompt to refresh data manually. To refresh data, use the View - Refresh Data command or click the prompt in the action bar.
A table window displaying data from a .map file does not automatically refresh data after changes to the data if the number of records in the table exceeds 64k. Instead, the window shows an action bar with a prompt to refresh data manually. For example, if a drawing's table is open and the table shows 100000 records, and in the drawing some of the object are deleted, the table will not automatically refresh. Instead it will show an action bar with a prompt to refresh. That allows convenient interactive editing of drawings while their table windows are open without the table window (which might display up to 2 billion records) refreshing itself on every small change in the drawing.
A table window showing over 64k records detects deleted records and shows them in gray background color, with an X icon on the record handle. For example, deleting objects in a drawing window that has 100000 objects when the drawing's table is open will show empty gray rows in the table for the deleted objects. Pressing the refresh prompt in the action bar will refresh the table so those empty rows will be deleted. This provides fast means to delete objects in maps without fully refreshing tables, while still showing which records have been deleted.
The context menu for the fill record in the table window no longer includes a Stop Reading Records command.
The table window always applies filters only to the fetched records. The Filter Fetched Records Only command has been removed. Now that table windows can show up to 2 billion records, always using only the fetched records is no longer a limitation in the vast majority of cases. Tables bigger than 2 billion records can still be filtered using a query composed with the Filter using Query command.
Table windows always apply sort order only to the fetched records. If the table window shows a first sample of records instead of all records and you want to sort the entire table, fetch all records first. The maximum allowed size of field values used for sort ordering is 16 GB.
Watch the new 10 Minute Tutorial - Very Big Table Windows video to see 1.295 million records displayed in a table window. Fast!
SQL for ArcGIS Pro tries to locate manifold.exe using a dialog if it cannot be found automatically. The location of manifold.exe is then saved in an environment variable for future reference.
SQL for ArcGIS Pro supports ArcGIS 3.x. The install packages include two versions of the add-in: a version for ArcGIS 2.x in the ArcGis2 folder and a version for 3.x in the ArcGis3 folder. The EXE and MSI install packages detect the installed version of ArcGIS and register the corresponding version of the add-in.
Failed attempts to connect to a data source are recorded. Subsequent attempts to connect to the same data source are throttled. The delay starts at 1 second and gradually increases to 15 seconds. Errors for failed attempts to connect to a data source are logged with repeat errors (same error message) omitted.
Exporting ECW or JPEG2K tracks progress and can be canceled.
Exporting ECW or JPEG2K aligns reads to tile boundaries for better performance.
Exporting ECW or JPEG2K automatically adjusts internal buffer sizes when exporting very big images for performance (and, in very rare cases, to allow the export to succeed where it previously was failing due to exceeding one of the internal limits on temporary data).
Reading XYZ with a non-space delimiter allows whitespace both before and after the delimiter.
Reading XYZ with integer values that do not fit into INT32 converts all values to FLOAT64.
Reading XYZ skips NaN values. Records with such values have no business being in the file, but they might technically be there and some software packages apparently produce files with them.
Reading XYZ tracks progress and can be canceled.
Reading XYZ supports files bigger than 4 GB.
Reading XYZ protects from tiny drift in XY values to handle regular grids more reliably.
Reading XYZ / NC performs significantly faster, 4-5 times faster, and even faster with big files.
Writing XYZ performs significantly faster, 5-6 times faster, and even faster with big files.
(Fix) Exporting the result of a query with computed fields to MDB, SQLITE, or similar formats no longer fails.
(Fix) Printing geometry to WKT prints points with Z values as POINT Z or MULTIPOINT Z instead of POINT orMULTIPOINT.
(Fix) Printing geometry to WKT no longer ignores Z values for areas.
(Fix) Reading FLT with a malformed HDR may no longer erroneously set pixel scales to zero.
(Fix) Attempting to use components from a data source that fails to connect, for example, because it is referencing a file that does not exist, no longer disrupt the user interface, such as map windows, layout windows, or panes.
(Fix) Reading XYZ no longer ignores the first record if the file starts with UTF8 BOM.
(Fix) Reading NC creates an RTREE index on tiles.
(Fix) Writing XYZ prints all values with full precision. Previously, values that were very small or very large could lose some of the digits.
Build 177.1 introduces in Universal and Server editions a new version of Manifold: Manifold Commander is a console application version of Manifold that provides the full range of Manifold query and scripting capabilities from a command line, making it easy to automate almost any GIS, DBMS, or ETL job.
Commander is provided as a manifoldcmd.exe executable file within the Manifold installation hierarchy. The manifoldcmd.exe executable file launches from a command line such as in a Windows Command Prompt window, or in a .bat batch file, or from a Windows PowerShell script and so on. Commander can run either queries or scripts from within a specified .map file, and Commander also can run scripts from a specified script file stored outside a Manifold project. When Commander is used in conjunction with Windows Task Scheduler, you can launch command lines to have Manifold automatically do work on a regular schedule, such as updating a CSV file every night that is served via a CSV server.
Build 177.1 also extends interactive selection capabilities, makes it easy to switch licenses, and provides bug fixes as well as improvements in the MapInfo MIF dataport.
Install packages for Manifold Release 9 (not Manifold Viewer and not SQL for ArcGIS Pro) include a new executable: manifoldcmd.exe, called Manifold Commander in these release notes. Commander is a console application that can be launched from a command line to automate common tasks.
Commander is limited to Universal and Server editions. When launched on a machine activated with Professional edition, nothing happens.
Commander log files use a -cmd postfix, to distinguish them from log files for other Manifold applications.
Commander can run queries within .map files, and can run scripts either within .map files or within script files that contain the desired script text.
Syntax:
manifoldcmd <command> [<options>] [<file>]
Commands:
-runquery:xxx - Open the file and run the specified query component. The component can be in a nested data source.
Supported options: -logfilter:xxx, -logfolder:xxx, -open:xxx, -out:xxx
-runscript:xxx - Open the file and run the specified script component. The component can be in a nested data source.
Supported options: -logfilter:xxx, -logfolder:xxx, and -open:xxx
-runscriptfile:xxx - Run the specified script file.
Supported options: -logfilter:xxx and -logfolder:xxx
Options:
-logfilter:min - Skip dates and prefixes when logging to console
-logfilter:minscript - Skip dates and prefixes, skip non-error non-script messages when logging to console, useful to limit output for further processing with command-line tools
-logfilter:none - Log full data to console (default)
-logfolder:xxx - Folder for log files
-open:readonly - Open file in read-only mode (default)
-open:readwrite - Open file in read-write mode
-open:readwritesave - Open file in read-write mode, save file after operation completes, this includes saving all nested data sources
-out:xxx - Output file, for example, a CSV or JSON. The type is determined by the file extension, .csv or .json, used.
Examples:
A .map project called Mexico.map contains a query called MexQuery that from a linked table generates a result table of all provinces in Mexico with a population greater than 3000000. To run the query and save the result to a CSV file called Mex.csv:
manifoldcmd -runquery:MexQuery -out:"C:\Projects\Mex.csv" "C:\Projects\Mexico.map"
Save the result to a SQLite file called Mex.sqlite:
manifoldcmd -runquery:MexQuery -out:"C:\Projects\Mex.sqlite" "C:\Projects\Mexico.map"
Save the result to a Manifold .map file called Mex.map:
manifoldcmd -runquery:MexQuery -out:"C:\Projects\Mex.map" "C:\Projects\Mexico.map"
Save the result to an Esri file geodatabase within a folder hierarchy C:\Projects\Mex\gdb.gdb\ and create the Mex and gdb.gdb sub-folders:
manifoldcmd -runquery:MexQuery -out:"C:\Projects\Mex\gdb" "C:\Projects\Mexico.map"
Double-quotes around arguments like the names of files are not necessary if there are no spaces in the argument. If the output file already exists, the above will overwrite it with the new version.
The Info pane shows the number of selected records in a table window (this includes table windows opened for query components, but not command windows for ad-hoc queries) or for the current layer in a map window, if that number is known.
There are two scenarios in which the number of selected records is unknown:
The total number of records in a table is unknown and the selection is inverted. This happens with streaming tables. Prime examples are the result tables of queries: such tables compute their data as they are being read so that you can start working with the returned records without waiting until all records are computed. An inverted selection stores keys of the unselected records, so while the system knows how many records are unselected, it cannot compute how many are selected.
The total number of records in a table is known, but the table has changed in a way that could affect the selection after the last selection operation. Examples of changes that can affect the selection are adding or removing records, or changing values in the key fields.
If the total number of records is unknown, the number of records is shown as a question mark, ?. If the number of selected records is unknown, the number of selected records s shown as a question mark, ?. If either of these numbers is unknown, the Info pane shows a Refresh button next to them. Pressing the Refresh button will scan the table and update numbers that are currently unknown. The scan tracks progress and can be canceled.
Manifold Server reports the total number of records in a served table, if the table knows the total number of records.
Combining the results of a selection template with an existing selection performs faster.
The Help - About dialog includes a new Switch License button that allows switching the current license to a different serial number, for example, to upgrade to a different edition of Manifold. The dialog prompts the user to restart the application after the license is switched.
Writing MapInfo MIF format now exports xN and UUID fields as CHAR data type.
(Fix) The Clear Filter command in a table window no longer fails to uncheck the selection filter button in the toolbar.
(Fix) Copying a table with mixed geometry into a database (eg, PostgreSQL) using copy and paste or drag and drop no longer sometimes fails because the new geometry field is wrongly limited to a specific geometry subtype.
(Fix) The Spatial select template that selects data based on a spatial overlay no longer fails to clear the selection when the overlay is empty and the selection mode is replace or intersect.
(Fix) The result tables of SelectionXxx query functions no longer sometimes fail to return data.
(Fix) Reading MapInfo MIF format no longer sometimes ignores the last object.
(Fix) Reading MapInfo MIF format correctly parses DATE, DATETIME, and TIME values.
(Fix) Writing MapInfo MIF format exports INT16U as INTEGER data type (was SMALLINT) and INT32U as FLOAT data type (was INTEGER), to avoid potential data loss.
Build 177 is a new base build, incorporating all improvements in the 9.0.176.x series of builds. It is recommended for all users. The main change since the prior cutting edge build, 9.0.176.7, is the expansion from a single Release 9 Universal edition into three new licensing levels: Professional, Universal, and Server. The three different editions are distinguished by the availability and configuration of Manifold Server. Over time, it is likely that other differentiations will emerge, with higher end features in the higher end editions.
Includes all features and functions of the former Manifold 9.00 Universal license, except Manifold Server.
Manifold 9.00 Professional can connect to Manifold Server as a client and Professional can create project files for sharing by Server installations, but Professional edition does not include Manifold Server to serve data outbound.
Includes all features and functions of the former Manifold 9.00 Universal license, and also includes a limited version of Manifold Server.
Manifold Server in Universal edition is limited to one Server instance on a server machine, it must be launched from a Command Prompt window, and the Server instance is limited to 20 connections.
A Manifold 9.00 Universal license includes simultaneous interactive use of Manifold 9 on the server machine, which makes it easy to configure project files that are served.
Manifold 9.00 Universal is designed to support sharing files via Manifold Server in smaller workgroups, where each user will be running a Universal license that allows running a Server instance as well as an unlimited number of interactive sessions on the user's machine. When most users in the workgroup are hosting Server instances, the total number of Server instances makes it easy for the workgroup to share many files.
Includes all features and functions of the former Manifold 9.00 Universal license, and also includes a unlimited version of Manifold Server.
The unlimited version of Server has no limit to the number of connections, no limit to the number of Server instances on a server machine, and the ability to launch and to manage Server instances as Windows services.
A Manifold 9.00 Server license includes simultaneous interactive use of Manifold 9 on the server machine, which makes it easy to configure project files that are served and also to launch and to manage Server instances as Windows services using the Manage Services dialog.
Manifold 9.00 Server is perfect for serving data from read-only projects to larger workgroups or, with more powerful server hardware, to entire organizations. The ability to launch many instances makes it easy to organize access to different communities of users based on access URLs and credentials. An unlimited number of connections is perfect for taking advantage of cost-efficient, many core CPUs that can provide very many threads on server machines at low cost.
Pressing F1 in the Tools - Manage Services dialog opens the Manifold Server topic in the default web browser.
There is a new style for text fields in tables: file = absolute path to a file. When text fields are formatted using that style, table windows and the Info pane will highlight text in blue color and will show a new Open File command in the context menu when a cell is clicked. If a specific value is a well-formed path, but the file referenced by it does not exist, the Open File command is disabled. The Open File command opens the file using whatever is the default Windows handler for that file type. That makes it easy to have fields in tables that contain file names that are images, PDF files, saved RDP files, or anything else that Windows can open, and to be able to open those files instantly from within Manifold.
Build 176.7 delivers small improvements to the user interface and a set of really convenient additions to Manifold Server. Server can now run as a Windows service. The next build will likely be 9.0.177, a new base build.
Watch the new 10 Minute Tutorial - Manage Services video to see the new Manage Services dialog in action.
Illustration: The new Service dialog makes it easy to create new Server instances on a server machine, without having to launch a Command Prompt window and configure new instances using command lines.
Server binds to the network interface in exclusive mode for security purposes.
When launched in a Command Prompt window, Server sets the console title to Server - addr:port - filename. This hides sensitive information like usernames and passwords and it also shows connection information even if that was not spelled out in the command line.
Server supports a new -logfolder:xxx command-line option to redirect logs.
Server supports a new -service command-line option to run as a service. There can be multiple Server services running on the same machine. If a particular service is configured to run under one of the non-interactive system accounts, such as SYSTEM, running it requires installing the Manifold license for all users. The default location for log files for a service is in the common application data folder, C:\ProgramData\Manifold\v9.0.
There is a new Tools - Manage Services command that lists Server services on the system. For each service, the command shows its name, path to the served file, network address and port, start type (auto, manual, or disabled), status (starting, running, paused, stopping, or stopped) and process ID. This command is not available in Viewer or in SQL for ArcGIS.
The Manage Services dialog allows double-clicking a service in the list of services to show service parameters: service name, path to the Server executable, path to the served file, network address, network port, start type, additional command-line options.
The Manage Services dialog allows refreshing the list of services.
The Manage Services dialog allows adding a new service, editing the parameters of an existing service and deleting selected services. Adding, editing and deleting services requires administrator rights. If the current user has no administrator rights, the dialog disables relevant functionality and shows a prompt to run the program as administrator.
Adding a new service in the Manage Services dialog suggests a network address (the first registered network address) to use and a network port (the first unused port between all listed Server services, starting with the default 9099 and going up) to use. For convenience, it provides a list of all registered and loopback network addresses to select from.
The Manage Services dialog allows starting and stopping selected services. Starting and stopping services requires administrator rights.
Tech Tips: When running Manifold Server on a machine, launch Manifold with administrator rights: right-click the manifold.exe file and choose Run as Administrator. When Manifold launches, in Help - About, press the Install button to install the license for all users if it has not yet been installed for all users. To manage Server services, always launch Manifold with administrator rights.
Illustration: The new Manage Services dialog makes it a lot easier to manage Manifold Server instances running as services, without needing to hassle with Windows services dialogs. Click the New toolbar button to add a new Server instance. Ctrl-click a row to select it, and then press start, stop, or delete buttons as desired. Double-click a row to change settings like auto or manual launch on system reboot.
There is a new View - Panes - Fit to Screen command that puts all undocked panes and windows onto the screen. If there are multiple monitors, the command chooses the nearest monitor for each pane or window and puts the pane or window onto that monitor. The command helps locating panes and windows that have been accidentally moved nearly offscreen using the cursor or ended up being completely offscreen due to changes in monitors (may happen with remote desktop connections, among other scenarios).
The Register pane shows automatically placed control points with a distinctive icon. Any editing done to an autoplaced control point removes the autoplaced flag.
Alt-clicking a control point in the Register pane pans the map window to that control point.
Creating a new RTREE index for tiles suggests using fields starting with x and y for XY values.
Editing a traverse allows entering a traverse command for the insert coordinate. This allows entering geometry data as a sequence of traverse commands, with visual feedback at every step.
(Fix) The TileGeomOverlayCount query function on longer allows specifying a non-numeric field as an argument. Either specify either no field by passing an empty string, or specify a numeric field.
Build 176.6 introduces dramatically faster spatial overlay functions and faster LiDAR performance with LAZ files. Big jobs that previously took over two and a half hours now can be done in six minutes.
GeomOverlayXxx (non-topology) query functions can be canceled in the initial data collection phase.
GeomOverlayXxx (non-topology) query functions optimize cases where a big source table has a small overlap area with an overlay table, as long as the source table has a spatial index.
GeomOverlayXxx (non-topology) query functions optimize cases where a source table has a small overlap area with a big overlay table, as long as the overlay table has a spatial index and the source table can determine its bounds without being read in full (this usually means that the source table also has a spatial index and is static, that is, not a query).
GeomOverlayXxx (non-topology, non-filter) query functions now only return pairs of records for the actual overlay incidents. Previously they were also returning a single record for each record in the source table which had no corresponding records from the overlay table, similarly to a LEFT JOIN. We changed the behavior to be similar to an INNER JOIN, because otherwise the functions have to return at least as many records as there are in the source table, which is frequently undesired and just makes processing the result slower. If there is a need to obtain records from the source table that have no overlay incidents, that can be done separately after.
GeomOverlayXxxFilter query functions perform proportionally to the number of records that have overlay incidents. Previously, fetching all records of the overlay filter required going through all records of the source table. This and other changes to GeomOverlayXxx functions apply to various UI tools that use them, eg, they apply to the spatial overlay select templates and to the Join dialog when it transfers data between drawings.
SelectionXxx query functions perform proportionally to the number of selected records. Previously, fetching all selected records of a table required going through all records of that table. The change applies to various UI tools that work with selections, eg, copying a few selected records from a large table now performs much faster. The only exception is that selections that have been inverted continue to perform proportionally to the size of the table, not to the size of the selection.
Opening a LAZ file with a COPC index validates index data and turns off the index if its data is invalid.
Reading a LAZ file no longer progressively caches uncompressed data on disk and instead uses multiple reading heads. This significantly improves performance.
Performing a spatial search on a LAS or LAZ file with a COPC or .mapindxp index works faster.
The above improvements significantly improve the performance of spatial overlays when input data sets are not similar in size or do not significantly overlap. That is a very common situation since often a smaller data set, such area objects for a particular town or parcel, is used to extract data of interest from a very much larger data set, which might cover an entire county or province. The exact performance gains depend on the overlap size, and can easily be 5x, 10x or more. For LAZ, the improvements are even bigger. A test example used a LAZ file 375 million points with a COPC index and fetched 3.5 million points covered by an area in a different drawing using GeomOverlayTouchingFilter. The time to complete the job in prior builds was two hours and 38 minutes (9230 seconds). Using build 176.6 the time dropped to only six minutes (363 seconds), 25 times faster. If the area was even smaller, extracting fewer points from the LAZ file, the task would have taken even less time.
(Fix) Selecting records in a table with an identity index on text fields with external collates (for example, as in an external database) no longer sometimes fails to work.
(Fix) Writing a BIL, FLT, GRD, IMGERDAS, or TIFF file with pixel scale expressed in units other than meters no longer writes wrong local offsets to the accompanying .MAPMETA accessory file.
(Fix) Rendering a LAZ file with a COPC index no longer sometimes prunes search too aggressively.
Build 176.5 expands the license activation system to add an option for enabling installation of a license for all users on a machine at once. That simplifies use for some organizations, for server use, and for IMS use in Release 8, which uses the same activation system.
Build 176.5 also introduces a new, integrated, parallel Download Manager, Manifold's new, high speed, parallel system for downloading tiles from web servers such as image servers, TMS servers, WMTS servers and ArcGIS REST servers. The download manager is a built-in feature within Manifold that works automatically in background. There is no need to install, configure, or administer any modules or other software. Just use Manifold the way you always do and web servers seem to be much faster and more responsive.
This build also provides conveniences such as persistent data types in the Schema dialog remembering the last-used type, Drag and Ctrl-Shift-Drop to link data sources read-only (which facilitates creating projects for Manifold Server and other shared use), a new email style in tables for rapid emailing, and a Suggest Locations toolbar button in the Register pane for faster georeferencing. A variety of other features and a few fixes are also in the new build.
Manifold licenses optionally can be installed (activated) for all users on the same system. The About dialog shows whether the license in use has been installed for all users, and it allows installing or removing the license for all users. Installing or removing the license for all users requires administrative privileges and will prompt the user for administrative credentials.
The Activate dialog includes an option to install (activate) a Manifold license for all users on the same system. The option requires administrative privileges and will prompt the user for administrative credentials.
Manifold licenses installed for all users on the same system work for restricted user accounts for web applications managed by IIS. This allows using Manifold 8 IMS in web applications served by Windows 10+ IIS without any extra configuration for the application pools.
The download manager caches downloaded data in an application-wide cache which is only cleared when the running application, such as desktop Manifold, Manifold Server, or a third-party application using Manifold through the scripting API, is closed. That allows the system to reuse downloaded data between multiple dataports connecting to the same server even across different MAP files.
The download manager allows the user interface to cancel outstanding downloads in the middle of those downloads without waiting for the network. This prevents freezes when a map window that shows a web image is getting panned or scrolled or closed in cases when requests for tiles being downloaded could take a long time to determine if they will complete or fail.
The image server dataport uses the new application-wide download manager.
The TMS dataport downloads tiles using the new download manager.
The WMTS dataport downloads tiles using the new download manager.
The ArcGIS REST dataport downloads tiles using the new download manager. Note that ArcGIS REST servers can be configured to serve some images as screens rather than tiles. Such servers and images will work, but without the benefits of parallel downloads and reliable cancels provided by the download manager.
The Field dialog in the Schema dialog saves and restores the last used data type when creating a new field. This allows quickly adding multiple fields of the same type, for example, quickly adding a series of fields that are all text fields when altering a table's schema.
Drag and Ctrl-Shift-Drop - Dragging and dropping files into the Project pane with both the Ctrl and Shift buttons pressed will link those files in read-only mode. That makes it easy to create projects with read-only data sources, a great convenience when creating projects that will be shared by other users or served by Manifold Server.
The Project pane shows disconnected data sources that are linked in read-only mode using a lock icon. That makes it easy to see which data sources are read-only even before they are used.
Tables now provide a new style for text fields that are email addresses. Email addresses are shown using the same color as URLs. Right-clicking an email address shows a new Send Email command in the context menu, which automatically launches your mail client, such as Outlook, with the email address loaded in a new email message. That makes it very easy to compose and send an email to the right-clicked address.
New query function: StringEmailValid - takes a string and returns true if the string is a valid email address. The validation is permissive and should only be used to filter out strings that are certainly not email addresses.
New query function: StringUrlValid - takes a string and returns true if the string is a valid URL.
The Manifold ODBC driver allows connecting to a new temporary database using DRIVER=...;DBTYPE=TEMP; in the connection string.
The SQL Server dataport supports DATETIMEOFFSET and DATETIME2 data types. DATETIMEOFFSET values are automatically converted to the timezone for the current user on both read and write. Reading a date with a timezone converts data to the timezone for the current user. Entering a date without a timezone will use the timezone for the current user.
(Fix) Importing a TIFF file no longer sometimes fails to create an RTREE index on x-y-tile fields (a regression).
(Fix) Alt-clicking a tile in an image in a linked TIFF file no longer sometimes fails to show pixel values.
Build 176.4 introduces Manifold Server, Manifold's new, high speed, fully parallel, multiuser spatial database. Server provides very powerful new technology for sharing vast amounts of data from Manifold .map project files, enabling many users at once to use data in projects shared by Server. Server is a built in part of Manifold Release 9 Universal edition, build 176.4 or more recent. Build 176.4 also includes new features for the Manifold ODBC driver, improvements to ArcGIS REST, GDB, ECW and TIFF dataports, as well as fixes.
Manifold Server, called Server for short, is a read-only spatial database server that shares the contents of a Manifold project to one or more Manifold clients. Clients are regular Manifold desktop sessions, or even free. Because .map projects can contain nested links to other .map projects, the project shared by Server can be the top level entry point to a hierarchy that shares the contents of thousands of .map projects, containing many terabytes of data.
Manifold Server is automatically installed when installing Release 9 Universal. Server can run on a machine at the same time as a regular Manifold session, and multiple Server instances can run at the same time on the same machine, with each Server instance sharing out a different .map file.
See details in the new Manifold Server topic. See also the First Look - Manifold Server video.
Easy to Launch, Load, Administer - Server is the easiest to administer multiuser database server around. Simply launch Server in a command line with the Manifold project file containing data to use. No need to mess around with loaders. Change the data in the database? Stop the server and then launch it again with an edited project, or an entirely different project. Share the contents of the database with someone else? Send the .map project file and you're done. Same with backups - easy!
Many Clients and Many Servers - Many Manifold client sessions can run on the same machine, with each such session connecting to many different Server instances on that same machine or on other machines. Many Server instances can run on the same server machine, with each Server instance using a different port and/or IP address, and each Server instance can serve many Manifold clients from other machines or from the same machine.
Parallel Connections - Manifold client sessions connect to Server using asynchronous, multithreaded, parallel connections for significantly better performance than narrow technology like ODBC. Many threads are balanced on the fly to handle both large and small threads.
Server-Side Rendering Pipeline - When rendering big layers most of the work is setting up the rendering task. Server prepares layers for rendering server-side with full parallelism with only the final stages of rendering happening in the client. That allows very large data in Server to be browsed by clients almost as fast as if it were local. Server-side rendering eliminates the need to send tens or hundreds of gigabytes through the network connection to a client for rendering. You can pan and zoom through a 100 GB vector project through a Server connection almost as fast as if it were local.
Server-Side Execution - Queries in projects shared by Server are executed on the server machine, sending only results to clients. Queries can be executed within the Server, within the client, or in a mix of both. Executing queries within Server avoids sending large amounts of data through network connections.
Distributed Parallel Computation - Manifold clients can connect to many different Server installations at the same time, pulling layers from those different Server installations to use together in maps. If a map includes three different layers from three different Server installations on three different machines, when that map is panned and zoomed each of the three different layers will be prepared for rendering and otherwise serviced by the Server machine sharing that layer, so that the computational resources of three different machines will be utilized. Instead of parallel processing on a single computer handling all three layers, parallel processing on four different machines, the three Server machines plus the client machine, will be used to speed up the rendering pipeline for the map. That can result in visibly faster response with big layers.
Database / Data Source Tunneling - Tunneling allows users to reach through Server to utilize data sources within Server. If a project shared by Server contains data sources that are databases, such as SQL Server, Oracle, PostgreSQL and others, a Manifold session connecting to Server can open those data sources in the Server hierarchy and reach down into them to use their contents. Other data source content, such as linked files, linked Manifold .map projects, linked Esri geodatabases, and other data sources is also automatically tunneled. Web sources like Bing or Google image servers or ArcGIS REST servers reachable through Internet is not tunneled, but instead automatically set up for direct connections from the Manifold client session to the web source. In both cases layers and data sources shared through Server can simply be used without users worrying about the details of whether they are tunneled or not.
Servers Nested within Servers - Projects shared by Server can contain Manifold Server data sources, with nested Server data sources automatically setting up pass-through tunneling. For example, a project shared by Server on machine A might include Server data sources using Server installations on machines B and C. A Manifold client connecting to Server A will see the Server B and Server C data sources within that project and will be able to open them and use the data and links they contain. Server A will automatically arrange pass-through tunneling to Servers B and C, which will in turn automatically arrange pass-through tunneling to the data sources they share.
Automatic Version Negotiation - Different build levels can be used for a Server installation and for Manifold clients connecting to that Server installation. When the connection is formed the different versions will negotiate to use a common feature set despite different build levels.
Easy User Interface - Both Server and client user interfaces have been kept as simple as possible. Server launches in a simple command line, with a few simple configuration options. Connections to Server within Manifold clients use the same New Data Source interface used for other databases and data sources.
Copy / Paste Server Data Source - Server data sources in a Manifold project are just like any other data source. They can be saved as Favorites for one-click addition to any new projects, they can be copied from one Manifold session and pasted into a different Manifold session, and they are saved as part of the project whenever a Manifold client project is saved, with automatic reconnection when the saved project is opened.
Secure Access - Server can be launched with a user login and password required, to control access when accessible from public Internet.
manifoldsrv [<options>] <file>
The file is required and can be of any type supported by 9. If no file is provided, Server prints the command line syntax and exits. If the file is provided, Server opens it and starts serving connections to it.
-addr:xxx -- network interface to listen on, the default is the primary network interface.
-port:xxx -- port to listen on, the default is 9099, currently unassigned by IANA.
-user:xxx -- user required to connect, the default is none.
-password:xxx -- password required to connect, the default is none, ignored if user required to connect is not specified.
-connections:xxx -- maximum number of connections, the default is 20, use 0 to remove the limit.
-workers:xxx -- number of worker threads to process requests, the default is 4, the number can vary between 1 and 128.