Hi everyone, Jian wrote yesterday asking about Ferret and KML. We've done some simple things to write a gif image and create a kml file that contains it. Using Ferret's gif mode and the /TRANSPARENT qualifier on the FRAME command means that the images can be transparent - showing the topography/bathymetry of Google Earth, for instance, where the data field is missing. This feature is used in LAS, and a KML file displayed on Google Earth is one of the options for displaying data there. A version of the script image_to_kml.jnl has been in the Ferret distribution for the last couple of releases. Here is an update to that script, with simpler syntax than what was in the original script: ! image_to_kmz.jnl \cancel mode verify ! ! ACM 7/1/2009 -- created ! ATW 7/2/2009 -- minor modifications ! ACM 2/17/2010 -- bug fix ! ! Write a kml file containing a Ferret image for use in Google Earth. ! The tags that are written to the file are take from the documentation ! at http://code.google.com/apis/kml/documentation/kmlreference.html ! and comments in this script are take from that document. ! ! The image is made as a gif image with any missing data set to be ! transparent, so that the Google Image map will show through it. ! say START FERRET WITH ferret -gif SO THAT THE IMAGE CAN BE MADE WITH TRANSPARENCY ! ! Usage: ! ! > ferret -gif ! ! arg 1 arg 2 arg 3 arg 4 arg 5 arg 6 !Usage: GO image_to_kml gifFile kmlFile plot_command variable [xcoordVar] [YcoordVar] ! ! gifFile gif file to be saved ! kmlFile kml file to write ! plot_command 2D plot command including palette, levels etc ! variable variable to plot, must be 2D in longitude/latitude ! xcoordVar For curvilinear grids, the longitude coordinate variable ! xcoordVar For curvilinear grids, the latitude coordinate variable ! ! !Examples: ! > ferret -gif ! ! yes? USE etopo20 ! yes? GO image_to_kml rose.gif rose.kml SHADE/Y=-60:60/pal=dark_land_sea/lev=c rose ! ! ! or for a variable with curvilinear coordinates geolon,geolat: ! ! yes? use my_curvilinear_data.nc ! yes? GO image_to_kml curv.gif curv.kml FILL/MOD/HLIM=-180:180 var[t=1-jan-2005] geolon geolat query/ignore $1%Argument 1 is a gif file name% query/ignore $2%Argument 2 is a kml file name% query/ignore $3%Argument 3 is the plot comand% query/ignore $4%Argument 4 is the variable in XY% DEFINE SYMBOL pcommand = $3 DEFINE SYMBOL var = $4 IF $5"0|*>1" THEN DEFINE SYMBOL var ($var),$5"0" ENDIF IF $6"0|*>1" THEN DEFINE SYMBOL var ($var),$6"0" ENDIF DEFINE SYMBOl gifFile = $1 IF `STRINDEX("($gifFile)","gif") EQ 0` THEN SAY Argument 1 is a gif file name EXIT/SCRIPT ENDIF DEFINE SYMBOL kmlname = $2 IF `STRINDEX("($kmlname)","kml") EQ 0` THEN SAY Argument 2 is a kml file name EXIT/SCRIPT ENDIF DEFINE SYMBOL dispname = FerretPlot DEFINE VIEW/AXES/XLIM=0:1/YLIM=0:1 WMSview SET VIEW WMSview ($pcommand) ($var) FRAME/TRANS/FORMAT=gif/FILE=($gifFile) DEFINE SYMBOL kml_write LIST/QUIET/nohead/norowhead/file="($kmlname)"/format=(a) ! Header lines !<kml> ! The root element of a KML file. This element is required. ! It follows the xml declaration at the beginning of the file. ($kml_write)/clobber {"<?xml version='1.0' encoding='UTF-8'?>"} ($kml_write)/append {"<kml xmlns='http://earth.google.com/kml/2.1'>"} !<Folder> ! A Folder is used to arrange other Features hierarchically ! (Folders, Placemarks, NetworkLinks, or Overlays). A Feature is visible ! only if it and all its ancestors are visible. ($kml_write)/append {" <Folder>"} !<GroundOverlay> ! This element draws an image overlay draped onto the terrain. The ! <href> child of <Icon> specifies the image to be used as the overlay. ! This file can be either on a local file system or on a web server. ($kml_write)/append {" <GroundOverlay>"} !<name> ! User-defined text displayed in the 3D viewer as the label for ! the object (for example, for a Placemark, Folder, or NetworkLink). ($kml_write)/append {" <name>($dispname)</name>"} !<LookAt> ! Defines a virtual camera that is associated with any element ! derived from Feature. ($kml_write)/append {" <LookAt>"} ($kml_write)/append {" <longitude>180</longitude>"} ($kml_write)/append {" <latitude>20</latitude>"} ($kml_write)/append {" <range>3035000.36838438907</range>"} ($kml_write)/append {" <tilt>0</tilt>"} ($kml_write)/append {" <heading>0</heading>"} ($kml_write)/append {" </LookAt>"} !<visibility> ! Boolean value. Specifies whether the feature is drawn in the 3D viewer when it ! is initially loaded. In order for a feature to be visible, the <visibility> ! tag of all its ancestors must also be set to 1. In the Google Earth LIST/QUIET View, ! each Feature has a checkbox that allows the user to control visibility of the Feature. ($kml_write)/append {" <visibility>1</visibility>"} !<Icon> ! Defines an image associated with an Icon style or overlay. ! (For this script this is a simple gif image file.) ($kml_write)/append {" <Icon>"} ($kml_write)/append {" <href>($gifFile)</href>"} ($kml_write)/append {" </Icon>"} !<LatLonBox> ! Specifies where the top, bottom, right, and left sides of a bounding box for the ground overlay are aligned. ! ! * <north> Specifies the latitude of the north edge of the bounding box, in decimal degrees from 0 to ±90. ! * <south> Specifies the latitude of the south edge of the bounding box, in decimal degrees from 0 to ±90. ! * <east> Specifies the longitude of the east edge of the bounding box, in decimal degrees from 0 to ±180. (For overlays that overlap the meridian of 180° longitude, values can extend beyond that range.) ! * <west> Specifies the longitude of the west edge of the bounding box, in decimal degrees from 0 to ±180. (For overlays that overlap the meridian of 180° longitude, values can extend beyond that range.) ! * <rotation> Specifies a rotation of the overlay about its center, in degrees. Values can be ±180. The default is 0 (north). Rotations are specified in a counterclockwise direction. ($kml_write)/append {" <LatLonBox>"} ($kml_write)/append {" <north>($ppl$ymax)</north>"} ($kml_write)/append {" <south>($ppl$ymin)</south>"} ($kml_write)/append {" <east>($ppl$xmin)</east>"} ($kml_write)/append {" <west>($ppl$xmax)</west>"} ($kml_write)/append {" <rotation>0</rotation>"} ($kml_write)/append {" </LatLonBox>"} ! Close the remaining tags ($kml_write)/append {" </GroundOverlay>"} ($kml_write)/append {" </Folder>"} ($kml_write)/append {"</kml>"} cancel symbol kml_write set mode/last verify ! --- end of image_to_kmz.jnl --- jian zhou wrote:
|