<?php
/*------------------------------------------------------------------------------
** File: gPointDemo.php
** Description: Simple demo & documentation of gPoint class capabilities
** Version: 1.1
** Author: Brenor Brophy
** Email: brenor dot brophy at gmail dot com
** Homepage: www.brenorbrophy.com
**------------------------------------------------------------------------------
** COPYRIGHT (c) 2005, 2006 BRENOR BROPHY
**
** The source code included in this package is free software; you can
** redistribute it and/or modify it under the terms of the GNU General Public
** License as published by the Free Software Foundation. This license can be
** read at:
**
** http://www.opensource.org/licenses/gpl-license.php
**
** This program is distributed in the hope that it will be useful, but WITHOUT
** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
** FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
**------------------------------------------------------------------------------
**
** A gPoint object is a point on the Earth's surface. Its location is defined
** by a Longitude and a Latitude coordinate. These coordinates define a point
** on the surface of a sphere. However, computer screens like paper are flat
** surfaces and so we face a problem if we wish to represent data whose location
** is defined by Lat/Longs onto a such a surface. For example, you have an
** array of Lat/Long points that you want to plot on an image of a map. So how
** do you calculate the X/Y pixel on the image to plot your point? What you
** need is a transformation from a Lat/Long coordinate to an X/Y coordinate.
** This is called a map projection. There are many different types of projection.
** This class provides functions for working with two of the most useful;
** Universal Transverse Mercator (UTM) and Lambert Conformal Conic. The class
** also supports a varient of UTM, that I call Local Transverse Mercator. It
** is very useful when you just need to plot a few points on an arbitary image
** that covers a modest amount of the Earth (10x10 degrees) and you don't have
** to deal with UTM zones.
**
** At a high level converting a Long/Lat coordinate in degrees thru a
** projection will return an Easting/Northing coordinate in meters. That is
** meters measured on the 'flat' ground that you can convert to pixels and
** plot on an image. Broadly speaking Transverse Mercator (and UTM) is useful
** for modest sized areas of about 10x10degrees or less. Lambert is useful for
** large areas in the mid latitudes (Like the whole USA or Europe for example).
** Neither projection works well for areas near the poles.
**
** The key methods provided by the class are:
**
** setLongLat Set the Long/Lat of the point
** Long, Lat Get the Long/Lat of the point
** setUTM Set UTM coordinates of the point
** E,N,Z Get UTM coordinates
** configLambertProjection Sets up a bunch of required parameters
** setLambert Set Lambert coordinates
** lccE, lccN Get Lambert coordinates
** setXY Set X/Y - can be used for pixel coordinates
** Xp, Yp Gets the X/Y coordinates
**
** convertLLtoTM Convert Long/Lat to Universal/Local Transverse Mercator
** convertTMtoLL Convert Universal/Local Transverse Mercator to Long/Lat
** convertLLtoLCC Convert Long/Lat to Lambert Conformal Conic
** convertLCCtoLL Convert Lambert Conformal Conic to Long/Lat
**
** distanceFrom Calculates Great Circle distance from gPoint to a Lat/Long
** distanceFromTM Same function using Pythagoras's theorm and TM coordinates
** gRef Geo-Reference converts TM coordinates to a pixel X/Y given
** The Lat/Long of the center pixel and the scale (meters/pixel)
** of the image.
**
** printLatLong
** printUTM
** printLambert
*/
//error_reporting ( E_ALL ); // For debug
require ('gPoint.php');
//
// The example shows how a single point on the earth can be converted between
// Latitude/Longitude coordinates and the three map projections supported by
// the gPoint class.
//
$myHome =& new gPoint(); // Create an empty point
//
// We start by setting the points Longitude & Latitude.
//
$myHome->setLongLat(-121.85831, 37.42104); // I live in sunny California :-)
echo "I live at: "; $myHome->printLatLong(); echo "<br>";
//
// Calculate the coordinates of the point in a UTM projection
//
$myHome->convertLLtoTM();
echo "Which in a UTM projection is: "; $myHome->printUTM(); echo "<br>";
//
// Set the UTM coordinates of the point to check the reverse conversion
//
$myHome->setUTM( 601034, 4142188, "10S"); // Easting/Northing from a GPS
echo "My GPS says it is this: "; $myHome->printUTM(); echo "<br>";
//
// Calculate the Longitude Latitude of the point
//
$myHome->convertTMtoLL();
echo "Which converts back to: "; $myHome->printLatLong(); echo "<br>";
//
// Now lets try the same conversion, only this time we will user a "Local"
// Transverse Mercator projection. -122 degrees longitude is close to the
// area of interest so lets use that as our Longitude of Origin
//
$longOrigin = -122;
$myHome->convertLLtoTM($longOrigin);
echo "In a Local TM projection centered at longitude $longOrigin it is: "; $myHome->printUTM(); echo "<br>";
//
// Now check the reverse conversion
//
$myHome->convertTMtoLL($longOrigin);
echo "Converting back gives us: "; $myHome->printLatLong(); echo "<br>";
//
// Lets setup a Lambert Conformal Conic projection for Northern California
//
// falseEasting = 20000000
// falseNorthing = 0
// Longitude of origin = -122
// First Standard Parallel = 33 20'
// Second Standard Parallel = 38 40'
//
$myHome->configLambertProjection(2000000, 0, -122, 35.5, 33.33333, 38.6666);
$myHome->convertLLtoLCC();
echo "In a Lambert Projection: "; $myHome->printLambert(); echo "<br>";
//
// And convert back to Longitude / Latitude
//
$myHome->convertLCCtoLL();
echo "And is still: "; $myHome->printLatLong(); echo "<br>";
?>
|