[Thread Prev][Thread Next][Index]

[ferret_users] Re: How to Integrate Ferret with KML?



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:

To whom this may concern,

I am a graduate student in McGill University, Canada. I am writing to ask if ferret support visualize climate data in 3D spatial earth browser, for example Google Earth.

As you know, we can visualize climate data in 2D images with the aid of ferret. However, I am wondering how can I visualize these climate data in 3D earth browser. One current way is to generate 2D images first and then make KML files thus visualize these images in 3D earth browser. However, I am wondering if there are tools or scripts that integrate Ferret with KML so that we can visualize climate data directly in 3D?

I hope I describe my problem clearly and look forward to hearing from you! Thanks!

Sincerely,

--
Jian Zhou
Master of Science
Department of Geography, McGill University

[Thread Prev][Thread Next][Index]

Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement