# What's New in IDL 8.1

IDL 8.1 expands support for geospatial data visualization by supporting new file formats and allowing you to create high-quality video animations and high-resolution maps.

New graphics and image analysis upgrades simplify scientific visualization tasks and make it easier to learn the IDL language.

Note: If you are new to IDL or upgrading from an older version, see also: What's New in IDL 8.0

## High-quality Video Animations

The IDLffVideoWrite class allows you to write images to a video file, with an optional audio track. You can create .avi or .mp4 video files with the IDLffVideoWrite class.

## Graphics

### Event Handlers

In IDL 8.1, you can specify your own graphics event handlers for keyboard, mouse, and selection events in a graphic or widget_window. See the following topics for more information:

- Creating Keyboard Event Functions
- Creating Mouse Event Functions
- Creating Selection Change Event Handlers

### Programatically Control and Query Graphics

You can now programatically delete graphics.

The graphics GetData and SetData methods allow you to programatically get and set data in an IDL graphic after creation.

The Show method for WINDOW moves the specified window to the front.

The HitTest method for WINDOW returns the graphics elements at a specific location or within a defined box.

### Retrieve Data from a Graphic

The GetValueAtLocation method allows you to retrieve data from a graphic given the x,y location.

### Extend Axis Ranges for Plots

The graphics [XYZ]STYLE properties automatically extend axis ranges for plot graphics.

### Allow Line Thickness Values between 0 and 1

The THICK property for all IDLgr* objects and the [XYZ]THICK properties for graphics were changed to accept values between 0 and 10. A thickness of 0 displays a thin hairline on the chosen device. The default value is 1.

### Snap Mouse Pointer to the Nearest Plot Point

For graphics plots, the crosshair feature automatically snaps the mouse pointer to the nearest plot data point.

### Save Graphics as Multipage PDFs

You can save IDL graphics images as multipage PDFs by calling the graphic's Save method with a .pdf file extension and the APPEND keyword. The APPEND keyword keeps the file open after writing out the graphic data. The next call to the Save method appends the new graphic data onto the same file. When calling the Save method the final time, specify both /APPEND and /CLOSE.

This example shows how to create a multi-page PDF file with the APPEND keyword.

### Enter Multibyte Characters in IDL Graphics Text Annotations

When using the TEXT function to add a text annotation to an IDL graphic, you can enter multibyte characters through the Windows Input Method Manager (IMM) on Chinese, Japanese, and Korean localized Windows operating systems when an Asian language pack is installed. See Internationalizing Code for more information.

### Transform Map Coordinates between Cartesian (x, y) Coordinates and Longitude and Latitude

For graphics, the MapForward and MapInverse methods transform map coordinates from longitude and latitude to Cartesian (x, y) coordinates, using the map projection associated with the graphic.

## Mapping

### High-resolution Coastlines

You can draw high-resolution US and continental coastlines with the MAPCONTINENTS function's HIRES property. The following example draws California's Monterey Bay in both low and high resolution.

### Updated World Boundaries Shapefile

The MAPCONTINENTS COUNTRIES property uses an updated world country boundaries shapefile.

### Draw Map Symbols

You can draw points on maps using symbols with the SYMBOL function, as shown below.

### Specialized Content Assist for the MAP Graphics Function

Content Assist now provides a list of the map projections as well as a specialized list of keywords based on allowed properties for each projection.

## File Formats

### GRIB

IDL now includes routines for reading and writing GRIdded Binary (GRIB) 1 and GRIB 2 files.

### KML/KMZ

You can import IDL graphic polylines, polygons, contour lines, and images into Google Maps™ mapping service or Google Earth™ mapping service formats by saving them as Keyhole Markup Language (KML) or KMZ files (ZIP files containing KML and image files).

To generate the following image, we created a map of the world using the Mollweide projection, and overplotted that map with two 3-D contour plots (one that displays filled contour levels with different colors, and one that just shows the contour boundaries). We then called the CONTOUR function's SAVE method to create a KML file and load the file into Google Earth™ mapping service. You can read about the full example here.

## Workbench

### Use Source Control Tools Directly from the Workbench

You can now embed the following source control tools in the IDL Workbench:

- CVS
- Git
- Perforce
- Subversion

See IDL Features to Help You Develop Code for more information.

## Analysis

### Smoothing

The GAUSS_SMOOTH function smoothes data using a Gaussian kernel. Also known as a Gaussian blur, it is typically used to reduce noise and detail in an image.

The EDGE_MIRROR keyword for CONVOL and SMOOTH and the new EDGE_WRAP keyword for SMOOTH apply the smoothing function to all points. If the neighborhood around a point includes a point outside the array, a "mirrored" or "wrapped" edge point is used to compute the smoothed result.

### Convolution

The GAUSSIAN_FUNCTION function creates a Gaussian kernel used in convolution.

The CONVOL_FFT function computes the convolution of an image using a product of Fourier transforms for speed.

## Language Enhancements

### Lists and Hashes

The ToArray and ToStruct methods move elements from a list or hash to an array or structure.

A NO_COPY keyword was added to the ToArray and ToStruct methods for LIST and HASH. Set this keyword to move each element from the list or hash to the output array or structure. When finished, the original list or hash will be empty.

IDL now allows nested indexing into arrays within a list or hash.

The IsEmpty method checks whether lists and hashes are empty.

The Count method returns the number of elements in the list or hash.

For hashes, the FindValue method returns a list of all keys that contain a certain value. For lists, the FindValue method returns an array of indices for those list elements that are equal to a certain value.

### Test if a Variable is a Number

Setting the NUMBER keyword to ISA causes the function to return TRUE if Variable is a numeric type, and FALSE otherwise.

### I18N Conversion Routines

IDL provides the following internationalization routines that convert strings from one encoding to another:

- I18N_MULTIBYTETOUTF8
- I18N_MULTIBYTETOWIDECHAR
- I18N_UTF8TOMULTIBYTE
- I18N_WIDECHARTOMULTIBYTE

## Miscellaneous

### PDF Documentation Located outside the Help System

The following topics are available outside of this help system in PDF format. The files are located in your IDL installation's `help/pdf` directory:

- Advanced Math and Statistics - `advmathstats.pdf`
- IDL Connectivity Bridges - `bridges.pdf`
- Dataminer Guide - `dataminer.pdf`
- External Development Guide - `edg.pdf`
- Image Processing - `image.pdf`
- iTools Developer Guide - `itooldevguide.pdf`
- iTools User Guide - `itooluserguide.pdf`
- Using IDL - `using.pdf`

### New Options for Creating Stand-alone IDL Runtime Distributions

MAKE_RT's keywords GRIB, HIRES_SHAPEFILES, and VIDEO support new features added to IDL 8.1.

## IDL 8.0 Functionality

If you are new to IDL or upgrading from an older version, see also: What's New in IDL 8.0