Share |

Convert GPS coordinates to UTM using Borland Delphi

Dowload Eye4Software GPS Toolkit free trial Download the Eye4Software GPS Toolkit fully functional 30 day trial version for free
Browse through the Eye4Software GPS Toolkit for Windows manual Browse through the Eye4Software GPS Toolkit manual

UTM

UTM stands for Universal Transverse Mercator. It is a Transverse Mercator map projection which can be used at any place on the globe. To cover the whole earth, the system is divided into multiple grids, using 60 zones, each covering 6 degrees which is about 800 kilometers in width.

Each zone is defined for both the northern and southern hemisphere. Therefore the zones are called zone 1N - zone 60N for the northern hemisphere and zone 1S - zone 60S for the southern hemisphere.

This document is going to explain, how you can add support for UTM coordinates to your Borland Delphi projects.

UTM Zones

The following table describes which UTM zone should be used on any given location on the earth, and its associated UTM parameters:

Zone Longitude Range Hemisphere False Northing False Easting Latitude Origin Longitude Origin Scale Factor
1N 180W - 174W N 0 500000 0 -177 0.9996
1S 180W - 174W S 10000000 500000 0 -177 0.9996
2N 174W - 168W N 0 500000 0 -171 0.9996
2S 174W - 168W S 10000000 500000 0 -171 0.9996
3N 168W - 162W N 0 500000 0 -165 0.9996
3S 168W - 162W S 10000000 500000 0 -165 0.9996
4N 162W - 156W N 0 500000 0 -159 0.9996
4S 162W - 156W S 10000000 500000 0 -159 0.9996
5N 156W - 150W N 0 500000 0 -153 0.9996
5S 156W - 150W S 10000000 500000 0 -153 0.9996
6N 150W - 144W N 0 500000 0 -147 0.9996
6S 150W - 144W S 10000000 500000 0 -147 0.9996
7N 144W - 138W N 0 500000 0 -141 0.9996
7S 144W - 138W S 10000000 500000 0 -141 0.9996
8N 138W - 132W N 0 500000 0 -135 0.9996
8S 138W - 132W S 10000000 500000 0 -135 0.9996
9N 132W - 126W N 0 500000 0 -129 0.9996
9S 132W - 126W S 10000000 500000 0 -129 0.9996
10N 126W - 120W N 0 500000 0 -123 0.9996
10S 126W - 120W S 10000000 500000 0 -123 0.9996
11N 120W - 114W N 0 500000 0 -117 0.9996
11S 120W - 114W S 10000000 500000 0 -117 0.9996
12N 114W - 108W N 0 500000 0 -111 0.9996
12S 114W - 108W S 10000000 500000 0 -111 0.9996
13N 108W - 102W N 0 500000 0 -105 0.9996
13S 108W - 102W S 10000000 500000 0 -105 0.9996
14N 102W - 096W N 0 500000 0 -99 0.9996
14S 102W - 096W S 10000000 500000 0 -99 0.9996
15N 096W - 090W N 0 500000 0 -93 0.9996
15S 096W - 090W S 10000000 500000 0 -93 0.9996
16N 090W - 084W N 0 500000 0 -87 0.9996
16S 090W - 084W S 10000000 500000 0 -87 0.9996
17N 084W - 078W N 0 500000 0 -81 0.9996
17S 084W - 078W S 10000000 500000 0 -81 0.9996
18N 078W - 072W N 0 500000 0 -75 0.9996
18S 078W - 072W S 10000000 500000 0 -75 0.9996
19N 072W - 066W N 0 500000 0 -69 0.9996
19S 072W - 066W S 10000000 500000 0 -69 0.9996
20N 066W - 060W N 0 500000 0 -63 0.9996
20S 066W - 060W S 10000000 500000 0 -63 0.9996
21N 060W - 054W N 0 500000 0 -57 0.9996
21S 060W - 054W S 10000000 500000 0 -57 0.9996
22N 504W - 048W N 0 500000 0 -51 0.9996
22S 054W - 048W S 10000000 500000 0 -51 0.9996
23N 048W - 042W N 0 500000 0 -45 0.9996
23S 048W - 042W S 10000000 500000 0 -45 0.9996
24N 042W - 036W N 0 500000 0 -39 0.9996
24S 042W - 036W S 10000000 500000 0 -39 0.9996
25N 036W - 030W N 0 500000 0 -33 0.9996
25S 036W - 030W S 10000000 500000 0 -33 0.9996
26N 030W - 024W N 0 500000 0 -27 0.9996
26S 030W - 024W S 10000000 500000 0 -27 0.9996
27N 024W - 018W N 0 500000 0 -21 0.9996
27S 024W - 018W S 10000000 500000 0 -21 0.9996
28N 018W - 012W N 0 500000 0 -15 0.9996
28S 018W - 012W S 10000000 500000 0 -15 0.9996
29N 012W - 006W N 0 500000 0 -9 0.9996
29S 012W - 006W S 10000000 500000 0 -9 0.9996
30N 006W - 000W N 0 500000 0 -3 0.9996
30S 006W - 000W S 10000000 500000 0 -3 0.9996
31N 000E - 006E N 0 500000 0 3 0.9996
31S 000E - 006E S 10000000 500000 0 3 0.9996
32N 006E - 012E N 0 500000 0 9 0.9996
32S 006E - 012E S 10000000 500000 0 9 0.9996
33N 012E - 018E N 0 500000 0 15 0.9996
33S 012E - 018E S 10000000 500000 0 15 0.9996
34N 018E - 024E N 0 500000 0 21 0.9996
34S 018E - 024E S 10000000 500000 0 21 0.9996
35N 024E - 030E N 0 500000 0 27 0.9996
35S 024E - 030E S 10000000 500000 0 27 0.9996
36N 030E - 036E N 0 500000 0 33 0.9996
36S 030E - 036E S 10000000 500000 0 33 0.9996
37N 036E - 042E N 0 500000 0 39 0.9996
37S 036E - 042E S 10000000 500000 0 39 0.9996
38N 042E - 048E N 0 500000 0 45 0.9996
38S 042E - 048E S 10000000 500000 0 45 0.9996
39N 048E - 054E N 0 500000 0 51 0.9996
39S 048E - 054E S 10000000 500000 0 51 0.9996
40N 054E - 060E N 0 500000 0 57 0.9996
40S 054E - 060E S 10000000 500000 0 57 0.9996
41N 060E - 066E N 0 500000 0 63 0.9996
41S 060E - 066E S 10000000 500000 0 63 0.9996
42N 066E - 072E N 0 500000 0 69 0.9996
42S 066E - 072E S 10000000 500000 0 69 0.9996
43N 072E - 078E N 0 500000 0 75 0.9996
43S 072E - 078E S 10000000 500000 0 75 0.9996
44N 078E - 084E N 0 500000 0 81 0.9996
44S 078E - 084E S 10000000 500000 0 81 0.9996
45N 084E - 090E N 0 500000 0 87 0.9996
45S 084E - 090E S 10000000 500000 0 87 0.9996
46N 090E - 096E N 0 500000 0 93 0.9996
46S 090E - 096E S 10000000 500000 0 93 0.9996
47N 096E - 102E N 0 500000 0 99 0.9996
47S 096E - 102E S 10000000 500000 0 99 0.9996
48N 102E - 108E N 0 500000 0 105 0.9996
48S 102E - 108E S 10000000 500000 0 105 0.9996
49N 108E - 114E N 0 500000 0 111 0.9996
49S 108E - 114E S 10000000 500000 0 111 0.9996
50N 114E - 120E N 0 500000 0 117 0.9996
50S 114E - 120E S 10000000 500000 0 117 0.9996
51N 120E - 126E N 0 500000 0 123 0.9996
51S 120E - 126E S 10000000 500000 0 123 0.9996
52N 126E - 132E N 0 500000 0 129 0.9996
52S 126E - 132E S 10000000 500000 0 129 0.9996
53N 132E - 138E N 0 500000 0 135 0.9996
53S 132E - 138E S 10000000 500000 0 135 0.9996
54N 138E - 144E N 0 500000 0 141 0.9996
54S 138E - 144E S 10000000 500000 0 141 0.9996
55N 144E - 150E N 0 500000 0 147 0.9996
55S 144E - 150E S 10000000 500000 0 147 0.9996
56N 150E - 156E N 0 500000 0 153 0.9996
56S 150E - 156E S 10000000 500000 0 153 0.9996
57N 156E - 162E N 0 500000 0 159 0.9996
57S 156E - 162E S 10000000 500000 0 159 0.9996
58N 162E - 168E N 0 500000 0 165 0.9996
58S 162E - 168E S 10000000 500000 0 165 0.9996
59N 168E - 174E N 0 500000 0 171 0.9996
59S 168E - 174E S 10000000 500000 0 171 0.9996
60N 174E - 180E N 0 500000 0 177 0.9996
60S 174E - 180E S 10000000 500000 0 177 0.9996

The Eye4Software GPS Toolkit

The Eye4Software GPS toolkit is a GPS SDK (Software Developers Kit) which allows software developers to add GPS functionality to their own programs without the need to have any knowledge on serial communications and GPS protocols like RS-232 and NMEA0183.

The product can be used in many programming environments, such as Visual Basic, Visual C++, Visual Basic .NET, Visual C# .NET, Borland C++ Builder, Borland Delphi and VBA, but also web oriented applications such as ASP, ASP.NET and PHP, and all other programming environments that support ActiveX controls.

Prerequisites

First you must have Borland Delphi and the Eye4Software GPS Component installed on your computer. We will use Borland Delphi 7.0 in this document, but other versions from 6.0 and up can be used. You can download the Eye4Software GPS Component here.

Creating the project

For this demo, a console application is used. To create a simple console application project in Delphi, follow the next steps: Select the "Other..." option from the "File" => "New" Menu and select the "Console Application" option, and click "OK".

Performing geodetic datum transformations using Borland Delphi

Declare and create the object(s)

To use ActiveX controls in a Delphi Console Application project, you first have to specify some units to add ActiveX support. Modify the "uses" block at the top of the code like this:

uses SysUtils, OleServer, ComObj, ActiveX;

Declare the objects like this:

var
  objGpsProjection    : Variant;
  objGpsDatum         : Variant;

Before the program is able to load OLE objects, we have to initialize OLE/COM, otherwise an exception is thrown when we try to execute the program:

  OleInitialize ( nill );

It is now time to create the objects:

  objGpsProjection  := CreateOleObject ( 'Eye4Software.GpsProjection' );
  objGpsDatum       := CreateOleObject ( 'Eye4Software.GpsDatumParameters' );

The UTM conversion code

The source code below demonstrates how to add latitude / longitude to UTM transformation functionality to your program using the GPS Toolkit. In this example a position is transformed from WGS84 to UTM ED50. Using the 'ToUTM' function, the software will automatically calculate the UTM zone for the given position. To perform a inverse calculation use the 'FromUTM' function.

program UTM;

{$APPTYPE CONSOLE}

uses
  SysUtils, OleServer, ComObj, ActiveX;

{Declare the GPS Toolkit objects}

var
  objGpsProjection    : Variant;
  objGpsDatumSrc      : Variant;
  objGpsDatumDst      : Variant;
  objGpsGridSrc       : Variant;
  objGpsGridDst       : Variant;
  objGpsConstants     : Variant;

begin

  { Initialize ActiveX }
  OleInitialize ( nil  );

  { Create the ActiveX Objects }
  objGpsProjection  := CreateOleObject ( 'Eye4Software.GpsProjection' );
  objGpsDatum       := CreateOleObject ( 'Eye4Software.GpsDatumParameters' );
 
  { Set Source Datum }
  objGpsDatum.LoadFromID ( 4230 );
  
  { Set Source Latitude and Longitude }
  objGpsProjection.Latitude     := 42.00;
  objGpsProjection.Longitude    :=  3.00;

  { Display the result }
  WriteLn ( 'Latitude  (WGS84) : ' + FloatToStr ( objGpsProjection.Latitude  ) );
  WriteLn ( 'Longitude (WGS84) : ' + FloatToStr ( objGpsProjection.Longitude ) );

  { Transform }
  objGpsProjection.ToUTM ( objGpsDatum );

  WriteLn ( 'Northing  (UTM ED50) : ' + FloatToStr ( objGpsProjection.Northing ) );
  WriteLn ( 'Easting   (UTM ED50) : ' + FloatToStr ( objGpsProjection.Easting  ) );

end.