Login   Register  
PHP Classes

File: gPointDemo.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Brenor Brophy  >  gPoint  >  gPointDemo.php  >  Download  
File: gPointDemo.php
Role: Example script
Content type: text/plain
Description: Example Code
Class: gPoint
Convert geographic coordinates between projections
Author: By
Last change: Added license information and updated some header information. Nothing critical changed.
Date: 8 years ago
Size: 6,105 bytes


Class file image Download
** 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 
** 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.8583137.42104);    // I live in sunny California :-)
echo "I live at: "$myHome->printLatLong(); echo "<br>";
// Calculate the coordinates of the point in a UTM projection 
"Which in a UTM projection is: "$myHome->printUTM(); echo "<br>";
// Set the UTM coordinates of the point to check the reverse conversion
$myHome->setUTM6010344142188"10S");    // Easting/Northing from a GPS
echo "My GPS says it is this: "$myHome->printUTM(); echo "<br>";
// Calculate the Longitude Latitude of the point
"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;
"In a Local TM projection centered at longitude $longOrigin it is: "$myHome->printUTM(); echo "<br>";
// Now check the reverse conversion
"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(20000000, -12235.533.3333338.6666);
"In a Lambert Projection: "$myHome->printLambert(); echo "<br>";
// And convert back to Longitude / Latitude
"And is still: "$myHome->printLatLong(); echo "<br>";