diff --git a/scripts/perl/examples/find_elevations.pl b/scripts/perl/examples/find_elevations.pl new file mode 100755 index 000000000..6b7093aef --- /dev/null +++ b/scripts/perl/examples/find_elevations.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +# +# Written by Curtis L. Olson, started January 2003 +# +# This file is in the Public Domain and comes with no warranty. +# +# $Id$ +# ---------------------------------------------------------------------------- + + +# This script will calculate the flightgear ground elevation for a +# serious of lon/lat pairs, given one per line via stdin. Result it +# written to stdout. Lon/lat must be specified in decimal degrees, +# i.e. "-110.2324 39.872" +# +# This requires a copy of flightgear running with "--fdm=null" on the +# specified "$server" host name, at the specified "$port". + +use strict; + +use Time::HiRes qw( usleep ); + +require "telnet.pl"; + +my( $server ) = "localhost"; +my( $port ) = 5401; +my( $timeout ) = 10; + + +# open the connection to the running copy of flightgear +my( $fgfs ); +if ( !( $fgfs = &connect($server, $port, $timeout) ) ) { + die "Error: can't open socket\n"; +} +&send( $fgfs, "data" ); # switch to raw data mode + + +# elevate ourselves only to make the view more interesting, this +# doesn't affect the results +set_prop( $fgfs, "/position/altitude-ft", "5000" ); + +# iterate through the requested coordinates +while ( <> ) { + my( $lon, $lat ) = split; + set_prop( $fgfs, "/position/longitude-deg", $lon ); + set_prop( $fgfs, "/position/latitude-deg", $lat ); + + # wait 1 second for scenery to load + usleep(500000); + + # then fetch ground elevation + my( $elev ) = get_prop( $fgfs, "/position/ground-elev-m" ); + + print "$lon $lat $elev\n"; +} + + +# shutdown our connection (this leaves FG running) +&send( $fgfs, "quit"); +close $fgfs;