A new update for Radian Studio is now available.
The primary focus of the update is the object model for .NET scripts, which has been significantly extended and improved. The update also adds read-only support for MrSID rasters and read-only support for any data set that can be accessed via GDAL/OGR libraries frequently used by open source mapping applications.
There are various improvements in other areas, too.
144. There is a new SID dataport for MrSID image files. The dataport uses MrSID Raster SDK. The required DLLs are included in the installation packages. There are no additional installation pre-requisites.
145. The SID dataport supports reading pixel values of arbitrary type.
146. The SID dataport supports rendering intermediate image levels.
147. The SID dataport reads EPSG coordinate system info.
148. The SID dataport supports reading multispectral images. Individual channels are split into different tile fields.
149. The SID dataport supports reading JPEG2000 files and has been made the default dataport for JPEG2000 files due to an issue in the current version of the ECW SDK.
150. There is a new GDAL dataport for reading data through GDAL / OGR. The dataport uses GDAL DLLs already installed on the machine. The DLLs have to be either in one of the Radian folders or in system path (preferable). GDAL drivers are treated as thread-unsafe by default.
151. The GDAL dataport reads coordinate system info.
152. The GDAL dataport reads raster data (in addition to vector data).
153. The GDAL dataport reads palettes for indexed color data.
154. The GDAL dataport automatically recognizes "folder" data sets as classified by GDAL (GDB, TIGER/Line) and sets up GDAL connection accordingly. (Third-party software using GDAL usually have separate dialogs for "file" and "folder" data sets. Our dataport attempts to distinguish between these two types of data sets seamlessly.)
155. The GDAL dataport exposes indexes on vector data.
156. The GDAL dataport reports used driver in the log.
157. (Fix) Converting a geometry value with coordinate system to GeoJSON using the GeomJsonGeo no longer fails to escape the coordinate system string.
158. Pasting data into the Project pane tracks progress and can be canceled.
159. Adding a new geometry object in the map window reports errors if they occur. (For example, a drawing built on the GDB table will reject an object of a wrong type. Previously, the rejection was silent.)
160. (Fix) The DWG dataport no longer sometimes produces incorrect boundaries for hatch objects.
161. The GDB dataport preserves circular arcs, ellipsoidal arcs and cubic splines when writing geometry values. Curves that can not be translated to GDB are linearized.
162. (Fix) The GDB dataport no longer sometimes misreads ellipsoidal arcs.
163. Dataports that use .MAPCACHE files allow writes to metadata. This allows formatting linked drawings and images, correcting their coordinate system in case it was missing or has not been read correctly, etc. Edits to metadata are saved in .MAPCACHE. Metadata synthesized by the dataport is provided as a read-only system MFD_META_SOURCE table.
164. (Fix) Attempting to open a data source which uses a .MAPCACHE file no longer sometimes makes the data source icon stuck in the 'discovering' state.
165. (Fix) Attempting to connect to a data source which uses a .MAPCACHE file via the ODBC driver no longer sometimes fails.
166. (Fix) Linearizing an ellipsoidal arc no longer sometimes creates an arc in the wrong direction.
167. (Fix) Writing a geometry value with an ellipsoidal arc to GDB correctly orients the arc.
168. (Fix) Prototypes for GeomNormalizeTopology, GeomIntersectLinesPair and several other geometry functions displayed in the query builder use clearer names for return values (<table> instead of <drawing>, etc).
169. (Fix) The ODBC driver no longer sometimes rejects writing geometry values from Manifold 8.
170. The ODBC driver flags special key fields such as the OBJECTID field in GDB tables as autogenerated for Manifold 8. This allows Manifold 8 to insert drawing objects into such tables. Editing or deleting the objects that have just been inserted requires refreshing the table (this is a limitation of Manifold 8).
171. The ODBC driver ignores values for computed fields provided by Manifold 8. This allows Manifold 8 to operate on tables with computed fields (their values are computed by the database, not set by client).
172. The SHP dataport no longer fails to return table data using BTREE index on the ID field if used without cache.
173. The New Data Source dialog classifies dataports for files like CSV as 'File: xxx' instead of 'Database File: xxx'. (We felt the real distinction is between 'Database:' - the user has to specify the server to open, 'File:' / 'Folder:' - the user has to specify the path to file or folder to open, and 'Web Server:' - the user has to specify the URL to open.)
174. Web dataports that have been allowed to use cache (the default) allow writes to metadata. This allows formatting drawings and images exposed by these dataports, etc.
175. The GDB dataport allows changing table schemas (to the extent supported by the ESRI's GDB SDK).
176. (Fix) Altering the schema of a GDB table increments its version to update windows that show its data.
177. The ODBC driver includes an adjustment that allows connections from R via DBI.
178. (Fix) LIMIT is no longer a reserved keyword in queries.
179. The 000 (S-57) dataport performs significantly faster.
180. The 000 dataport exposes labels and map.
181. The 000 dataport recognizes way more coordinate systems.
182. The 000 dataport automatically reads updates stored in 001, etc, files.
183. The DDF (SDTS) dataport uses significantly less memory.
184. The object model underwent a series of architectural changes which improve its performance.
185. Script services are removed. The Services pane is removed. (The object model previously needed script services to hold critical data for running scripts. Changes to the object model made script services obsolete, they are no longer needed.)
186. The object model eliminates locks on many of the key objects. This allows multiple threads of the same script to perform calls on the same object in parallel. The performance increases for multi-threaded scripts are dramatic.
187. The object model optimizes transferring data via sequences. The performance increases depend on the scenario and are frequently 2x or more.
188. The object model optimizes transferring data to and from expressions.
189. The Values script object is renamed to ValueSet.
190. New script function: Application.CreateValueSet - creates a new value set object. Creating a new value set object via 'new' is no longer possible.
191. New script function: Application.CreateExpressionParser - creates an expression parser object that can be used to create expressions.
192. New script function: Database.CreateExpressionParser - creates an expression parser object that can be used to create expressions in the context of the database.
193. New script function: ExpressionParser.CreateExpression - takes expression text and parameters, and creates an expression object to evaluate it.
194. New script function: Expression.Evaluate - evaluates the expression for the specified parameter values.
195. New script function: Expression.GetSource - returns expression parameters. Each call returns a new ValueSet object that can be used for evaluation.
196. New script function: Expression.GetTarget - returns expression results. Each call returns a new ValueSet object, similarly to Expression.GetSource.
197. New script property: Expression.Text - returns expression text.
198. New script function: ValueSet.AddValueType - takes a name and a type, and adds a value with type info and no data. The function allows conveying type information to objects like expressions without using model values.
199. New script property: Value.Type - reads the value type.
200. New script function: Value.CreateCopy - creates a copy of a value.
201. New script function: ValueSet.CreateCopy - creates a copy of a value set.
202. New script function: ValueSet.CreateLocked - creates a copy of a value set with locked structure. Attempting to add or remove a value in a locked value set will throw an error. In return, using a locked value set to pass data to functions like Table.Insert performs much faster.
203. Script functions that return ValueSet objects like Sequence.Fetch or Expression.Evaluate perform noticeably better and include optimizations for values with many items.
204. Attempting to access an item with an unknown name in a ValueSet object or in one of the schema collections returns a null object instead of throwing an error.
205. New script property: Database.CanDesign - returns true if the database supports changes to table schemas and false otherwise. The property is mainly used to determine if creating a new table in order to alter its schema later is not going to be possible.
206. New script property: Database.IsSaveAsNeeded - returns true if saving changes to the database will change its format (used to indicate when saving a MAP file will upgrade its format from Manifold 8 to Radian and make it unreadable in Manifold 8).
207. Script functions for Database and Table objects no longer reserve an opts parameter for extensibility.
208. New script function: Application.CreateSchema - creates a new schema object. Creating a new schema object via 'new' is no longer possible.
209. New script property: Schema.IndexField.IgnoreAccent - controls the use of accents for a text field in a btree index.
210. New script property: Schema.IndexField.IgnoreSymbols - controls the use of symbols for a text field in a btree index.
211. New script property: Schema.IndexField.Collation - controls collation for a text field in a btree index.
212. New script property: Schema.IndexField.TileReduce - controls the method of building intermediate levels for a tile field in an rtree index.
213. New script property: Schema.IndexField.TileSize - controls the size of tiles for a tile field in an rtree index.
214. New script property: Schema.IndexField.TileType - controls the pixel type of tiles for a tile field in an rtree index.
215. Reworked script function: Schema.DeleteItem is replaced with Schema.DeleteConstraint, Schema.DeleteField and Schema.DeleteField.
216. Composing geometry values using a script performs significantly faster.
217. Composing tile values using a script performs significantly faster.
218. Accessing tile pixel values using a script performs significantly faster.
219. Script objects representing vector values are converted to lightweight objects. This allows scripts to use arrays of such objects with much lower overhead.
220. Using script functions from queries performs significantly faster.
221. Script functions exchanging data with tables represent GEOMWKB values via a new GeomWkb object that allows accessing WKB data as an array of bytes.
222. New script function: Geom.GetBytes - retrieves a binary representation of a GEOM value.
223. New script function: Tile.GetBytes - retrieves a binary representation of a TILE value.
224. New script function: Application.CreateTypeConverter - creates a new TypeConverter object that allows converting values from one Radian type to another. The conversion is done via TypeConverter.Convert function, which takes an object and a name of the Radian type to convert to.
225. The TypeConverter.Convert function allows specifying the type to convert to as a .NET type.
226. New script function: TypeConverter.GetType - takes a name of a Radian type and returns the corresponding .NET type.
227. New script function: TypeConverter.GetTypeName - takes a .NET type and returns the name of the corresponding Radian type.
228. The ValueSet.AddValueType function allows specifying the type of a new value as a .NET type.
229. The Schema.AddField and Schema.AddFieldComputed functions allow specifying the type of a new field as a .NET type.
230. New script function: TypeConverter.ConvertTilePixels - takes a tile and converts its pixels to the specified type.
231. New script function: Database.Export - exports a component to the data source specified via technology and connection string.
232. New script function: Table.SearchBatchBTree - searches a table using a btree index similarly to SearchBatch, but allows specifying whether the search will go in ascending or descending order.
233. New script function: Table.SearchBatchRTree - searches a table using an rtree index similarly to SearchBatch, but allows specifying whether the search will return objects with any part in the specified rectangle or objects entirely within the specified rectangle.
234. New script function: Database.RunCompile - compiles a query, possibly with parameters, and returns a new Command object which can then be used to run this query multiple times without recompilation.
235. New script function: Command.GetSchema - returns the schema of a table that is going to be returned by a command.
236. New script function: Application.CreatePropertySet - creates a new PropertySet object used to access metadata properties. The PropertySet object contains a set of Property objects with names and string values. The PropertySet.SetProperty function adds a new property or overrides its value. The PropertySet.DeleteProperty function deletes a property. The PropertySet.Clear function deletes all properties. Existing properties can be accessed via an enumerator (for each), by index or by name.
237. New script function: PropertySet.ToJson - prints a property set into a JSON string.
238. New script function: Application.CreatePropertySetParse - takes a JSON string and parses it into a new PropertySet object.
239. The PropertySet.SetProperty function allows passing property value as a number, a boolean, a primitive vector (Point, Point3 or Point4 type), or as another PropertySet object in addition to a string.
240. The Database.Insert script function accepts an additional PropertySet parameter which allows specifying additional values for the schema (for example, notify the database that a specific geometry field will be used to store 3d geometry values).
241. The Table.Design script function accepts an additional PropertySet parameter which allows specifying additional values for the table schema, similarly to Database.Insert.
242. New script function: Database.Design - attempts to change the table schema of a specified table component. Any passed properties are saved to component metadata.
243. New script property: Database.Connection - returns database connection string.
244. New script property: Database.Technology - returns database technology.
245. New script property: Database.TechnologyResolved - returns resolved database technology. For example, an ODBC data source might return 'oracle' if it detects that the target database is Oracle.
246. New script function: Database.GetProperty - returns the value of the specified metadata property for a component.
247. New script function: Database.GetProperties - returns all metadata properties for a component, or a set of specified metadata properties.
248. New script function: Database.SetProperty - changes the value of the specified metadata property for a component.
249. New script function: Database.SetProperties - changes the values of the specified metadata properties for a component.
250. Launching a script reclaims memory in undisposed objects at the end. The change has little effect for well-written scripts, but makes for a big difference for less-well-written ones where it helps to conserve memory and pinpoint coding errors.
The update is available on the Product Downloads page.