Save Images as KML Files
If you create an Image graphic by projecting a graphic file onto a map, you can convert the IDL graphic into other graphic types, including the Open Geospatial Consortium's Keyhole Markup Language (KML). KML is an XML-based schema that visualizes geographic data and annotations on Internet-based two-dimensional maps and three-dimensional Earth browsers (including the Google Earth™ mapping service).
This topic shows how to use a graphic's Save method to convert an Image graphic to a KML file.
Arctic Research Flight Example
In this example we project a portion of a JPG image of the world onto a globe, and add a line showing a research airplane's flight path between Thule Air Force Base in Greenland and Alaska's Elmendorf Air Force Base. We also add a polygon to the Image graphic showing the magnetic anomaly detected during the flight. Finally, we save this Image graphic with the added annotations to a KML file and load the file into the Google Earth™ mapping service.
This code creates a KML file that, when loaded into the Google Earth™ mapping service, creates the image shown above. You can copy the entire block and paste it into the IDL command line to run it.
; Determine the path to Day.jpg in the IDL distribution
world = FILEPATH('Day.jpg', SUBDIRECTORY=['examples','data'])
; Create the arctic Image graphic.
arctic = IMAGE(world, LIMIT=[51,-161,78,-52], $
GRID_UNITS=2, IMAGE_LOCATION=[-180,-90], $
IMAGE_DIMENSIONS=[360,180], MAP_PROJECTION='Stereographic', $
/CURRENT, NAME='Arctic Research')
; Add a polyline annotation to the graphic connecting Thule
; to Elmendorf
polyline = POLYLINE([[-149.81,61.25],[-68.70,76.53]], $
/DATA, COLOR='red', NAME='Thule to Elmendorf', $
THICK=2, TARGET=arctic)
; Add the magnetic anomaly polygon
x = [-119.017, -124.82, -129.22, -118.23, -113.03, -113.183]
y = [66.25, 64.65, 61.43, 62.3, 63.783, 65.11]
polygon = POLYGON(x, y, /DATA, COLOR='purple', $
FILL_COLOR='purple', FILL_TRANSPARENCY=0, $
NAME='Magnetic Anomaly', TARGET=arctic)
; Save the Image graphic as a KML file
arctic.SAVE, 'arctic_map.kml'
In this example we start with the two-dimensional Day.jpg
file (included in the IDL distribution):
; Determine the path to Day.jpg in the IDL distribution
world = FILEPATH('Day.jpg', SUBDIRECTORY=['examples','data'])
We then call the IMAGE function,which does the following things:
- Maps the two-dimensional
Day.jpg
using a stereographic projection - Defines a polygon on the globe using the two opposing corner coordinates
- Maps the polygon back to a two-dimensional surface
; Create the arctic Image graphic.
arctic = IMAGE(world, LIMIT=[51,-161,78,-52], $
GRID_UNITS=2, IMAGE_LOCATION=[-180,-90], $
IMAGE_DIMENSIONS=[360,180], MAP_PROJECTION='Stereographic', $
/CURRENT, NAME='Arctic Research')
Next we add a polyline annotation representing the research airplane's flight path, and a polygon showing the magnetic anomaly detected on the flight:
; Add a polyline annotation to the graphic connecting Thule
; to Elmendorf
polyline = POLYLINE([[-149.81,61.25],[-68.70,76.53]], $
/DATA, COLOR='red', NAME='Thule to Elmendorf', $
THICK=2, TARGET=arctic)
; Add the magnetic anomaly polygon
x = [-119.017, -124.82, -129.22, -118.23, -113.03, -113.183]
y = [66.25, 64.65, 61.43, 62.3, 63.783, 65.11]
polygon = POLYGON(x, y, /DATA, COLOR='purple', $
FILL_COLOR='purple', FILL_TRANSPARENCY=0, $
NAME='Magnetic Anomaly', TARGET=arctic)
The resulting Image graphic shows the polygon section of the globe projected stereographically:
Finally, we save the Image graphic as a KML file using the Image object's Save method and load the file into the Google Earth™ mapping service, where it is superimposed upon a globe.
ContourExample
In this example we create a map of the world using the Mollweide projection, and overplot 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 use the CONTOUR function's SAVE method to create a KML file and load the file into the Google Earth™ mapping service.
This code creates a KML file that creates the image shown above. You can copy the entire block and paste it into the IDL command line to run it.
; Create the contour data
; X-coordinates of the Z data (-180 to 180)
longitude = FINDGEN(360) - 180
; y-coordinates of the Z data (-90 to 90)
latitude = FINDGEN(180) - 90
; A 2-D array containing the contour data
cntrdata = SIN(longitude/30) # COS(latitude/30)
; Create a map graphic as a canvas for the contour plot
worldmap = MAP('Mollweide', LIMIT=[-90,-180,90,180])
; Overplot a ten-level contour plot, where each contour level is
; filled with a color. The levels are 50% opaque and the colors
; are taken from the Rainbow color table
cntr1 = CONTOUR(cntrdata, longitude, latitude, $
GRID_UNITS=2, N_LEVELS=10, RGB_TABLE=13, /OVERPLOT, $
/FILL, TRANSPARENCY=50)
; Overplot another contour plot, this time displaying only
; contour boundaries. These boundaries are two points thick
; and are colored with the Rainbow + White color table
cntr2 = CONTOUR(cntrdata, longitude, latitude, $
GRID_UNITS=2, N_LEVELS=10, RGB_TABLE=39, $
/OVERPLOT, C_THICK=[2])
; Save the graphic as a KML file
worldmap.SAVE, 'contour_map.kml'
At this point you can load contour_map.kml
into the Google Earth™ mapping service, and the map and overplotted contour plots are projected on a globe.