Click here to Skip to main content
Click here to Skip to main content

Geo-referencing {Map Calibration}

, , 5 Feb 2006
Rate this:
Please Sign up or sign in to vote.
Defining a set of equations that transfers Longitude, Latitude to X, Y coordinate system and vice versa
Sample screenshot

Introduction

As any GPS software requires background maps in order to see where the action takes place, thus any raster image i.e. JPG or BMP file can be used as the background. However, this requires some calibration in order to have the map fitting its true position.

What Is Required?

You need a *.jpg (or *.jpeg) picture file (from a map or from a satellite picture). For this purpose, you can scan a map, or make a screenshot from, for example, GoogleMap. You also need some reference points in order to calibrate it.

Moreover, you need to determine in which hemisphere you live in, i.e. Northern or Southern and Eastern or Western. The solution might change if you are in a different hemisphere. Since we are in N/E we'll give the solution that fits our hemisphere.

Explanations

As you might already know, formats such as BMP, JPG, TIFF, etc. are called Raster Images. The reason to this is the means by which information is stored in their structures, Pixels. In other words the top left corner of the picture is (0,0) pixel i.e. its x=0 increases in the positive X axis (from left to right) and y=0 increases in the negative Y axis (from top to bottom).
In the N/E hemisphere (our hemisphere), Longitude increases in the positive x direction (left to right) and the Latitude increases in the positive y direction (bottom to top*).
* Note the direction of y has changed here.

Raster Format

Now calibrating the map means transferring from x,y coordinate system to longitude, latitude coordinate system or vice versa. This purpose can be achieved in several ways. The method we chose to go with is calculating the coordinate of the top left corner and the rate of change in both latitude and longitude.

Code Clarification

So we need to define some relationship between the two coordinate systems and the simplest method is knowing the X,Y as well as Lat, Long coordinates of one point (In this case, we take 0,0 pixel i.e. Top Left Corner). Ideally the Latitude along the X-axis should not increase if we keep y=0. For example if point (0,0) has Latitude of 10 degrees then all points in the x direction should have lat = 10 degrees. Similarly the Y-axis should obey the mentioned rule.

Rate In Each Axis

Let’s take a look at another new concept, rate in each axis. If we move 1 pixel in Y direction how many degrees/Pixels does this represent?

We know three points for which the latitude and longitude are available. So what we do is take the point with the minimum longitude (leftmost point) and the corresponding x pixel. Name this Long1 and X1.

Next, take the point with the maximum longitude (rightmost point) and the matching x pixel. Name this Long2 and X2.

Calculate the rate of change in X direction, delX as:

[1] degrees per pixel in x direction
delX= (Long2-Long1)/ (X2-X1)
// calculating the deltax
delX = (maxLONG().LONG - minLONG().LONG) / (maxLONG().X - minLONG().X);

Similarly, take the maximum latitude (topmost point) and the corresponding y pixel. Name it Lat1 and Y1, the minimum latitude and the matching y pixel, Lat2 and Y2. We calculate delY as:

[2] degrees per pixel in y direction
delY= (Lat2-Lat1)/ (Y2-Y1)
// calculating the deltay
delY = (minLAT().LAT - maxLAT().LAT) / (minLAT().Y - maxLAT().Y);

Now we're on with the calculation of the reference point (Top, Left). Note the maximum latitude (uppermost point) as Lat4 and Y4.

[3] reference latitude
lat0= Lat4+y4 * delY
lat0 = maxLAT().LAT - maxLAT().Y * dY;

Also the minimum longitude (leftmost point) Long1, X1:

[4] reference longitude
long0= Long1 -x1 * delX
long0 = minLONG().LONG - minLONG().X * dX;

Lat0 and Long0 are the geo coordinate representation of point (0,0).
Having all the above information and formulas, we can simply use the following equations to calculate the X and Y points of any given Latitude and longitude.

Conversion between Geographic and Pixel Coordinates

To convert from latitude and longitude to X and Y, you use the following equation:

[5a – 6a] X and Y Coordinates
X= (long-long0)/delx
Y= (lat-lat0)/delY 
public point LatLongtoXY(float Lat, float Long) 
{
    float X = (Long - LONG0) / dX;
        float Y = (Lat - LAT0) / dY;
        point pnt = new point(X, Y, Lat, Long);
        return pnt;
}

To convert to latitude and longitude from any X and Y point:

[5b - 6b] X and Y Coordinates
Longitude= long0 + delX * X
Latitude=lat0 + delY * Y 
public point XYtoLatLong(float X, float Y)
{
        float Lat = LAT0 + dY * Y;
        float Long = LONG0 + dX * X;
        point pnt = new point(X, Y, Lat, Long);
        return pnt;
}

As a result, equations [1 2 3 4] will only be used once to digitize (Georeference) the map. From there, you only need equations [5a 5b – 6a 6b] to handle the conversions.

Using the Code

In order for the code to work, you need to build the geoReference library and use it in your projects.

geoReference contains a class point, which represents x, y, latitude and longitude of the reference points. We first create an array of points that hold the three reference points:

geoReference.point[] p = new geoReference.point[] 
{
        new geoReference.point(3.2f,3.1f,29.77f,52.7f),
        new geoReference.point(9.8f,10.2f,29.52f,52.97f),
        new geoReference.point(18.3f,8.6f,29.57f,53.31f)
};

Then we use the geoReference’s methods to convert from x,y to lat/long and vice versa:

geoReference gr = new geoReference(p);
//converting from Lat or Long to X,Y
geoReference.point pt = gr.LatLongtoXY(29.27f, 53.22f);

float x = pt.X;
float y = pt.Y;

Conclusion

You could now load a raster map in a picture box and use the above code to calibrate it. As an outcome if you pass the x and y coordinates to the mouse move event you could see the corresponding geo coordinates.

Special thanks …

To Diego Mijelshon for his excellent article ObjectComparer. It helped us with part of the code implementation.

History

  • 5th February, 2006: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Authors

Mohammad Riazi
Technical Lead RighTel Telecom Operator
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I was born in Shiraz, Iran. A beautiful city that's famous for its weather, poets, ancient culture.
Got my high school diploma from QHS - Quebec High School.
Studied Computer Eng. at the University of New Brunswick (Canada) & Continued at Shiraz University.
Graduated from the University, school of Engineering: 2004.
Masters program, IT, e-Commerce at the electronic University of Shiraz.
Currently doing second masters in IT Management at UTM, Malaysia.

HRiazi
Engineer
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I was born in Shiraz (Iran). The city of popular poets and flowers.
Studied more than 8 years in Canada and was at UNB (University of New Brunswick) for a year.
Graduated from Shiraz University in field of Computer Eng.
MBA - Management at Khazar University
Love to play Soccer and write C# code.

Comments and Discussions

 
QuestionCompatability with WLD files Pinmemberkrisna_835-Aug-14 19:44 
GeneralI am having severe problems with the delX and dely Pinmemberkurrupter28-Dec-09 7:26 
GeneralRe: I am having severe problems with the delX and dely PinmemberMohammad Riazi4-Feb-10 8:10 
Questionproblem with x piwel and y pixel Pinmembermarti3110-Jun-09 4:12 
GeneralThumps UP Pinmembermbaocha4-May-09 16:11 
GeneralRe: Thumps UP PinmemberMohammad Riazi5-May-09 1:19 
GeneralAssemblyinfo.cs PinmemberMember 36049735-Mar-09 22:36 
hi
i tried to built the project. but it gave me Assemblyinfo.cs missing error :/
GeneralHi PinmemberCotamayor27-Jun-08 8:30 
GeneralRe: Hi PinmemberMohammad Riazi27-Jun-08 18:45 
GeneralRe: Hi PinmemberCotamayor30-Jun-08 5:30 
GeneralRe: Hi PinmemberMohammad Riazi30-Jun-08 19:39 
GeneralExcellent, you get my 5 Pinmemberjadothebest5-Jun-08 8:41 
GeneralRe: Excellent, you get my 5 PinmemberH.Riazi5-Jun-08 18:44 
GeneralTashakkor Pinmemberelectronlover28-Feb-08 11:10 
GeneralRe: Tashakkor PinmemberMohammad Riazi28-Feb-08 18:06 
Questionwhat about N/W Pinmembernokhod20-Nov-07 8:58 
GeneralThe algorithm is wrong PinmemberAdvantis6-Oct-07 11:33 
QuestionRequest Pinmemberpadamraj16-Aug-07 14:00 
GeneralStoring latitudes and longitudes in millisecond format (Int32) PinmemberPinx19-Jun-07 2:07 
QuestionConverting code to work with NW hemisphere PinmemberBubba Hawkins14-Jun-07 7:00 
QuestionHow to add size info Pinmembermiltash3-Jan-07 8:47 
GeneralMistakes !!! PinmemberMantasg22-Nov-06 20:45 
Generalyou are not taking into account unrectified images Pinmemberbbja3-Nov-06 3:48 
GeneralRe: you are not taking into account unrectified images PinmemberH.Riazi3-Nov-06 4:38 
GeneralRe: you are not taking into account unrectified images [modified] Pinmemberbbja3-Nov-06 5:41 
Generalone more question about georeference Pinmemberfadfooood30-Oct-06 12:45 
GeneralRe: one more question about georeference PinmemberH.Riazi30-Oct-06 16:33 
GeneralRe: one more question about georeference Pinmemberfadfooood31-Oct-06 0:33 
Questionwhere should the reference points be placed? Pinmemberfadfooood29-Oct-06 15:01 
AnswerRe: where should the reference points be placed? PinmemberH.Riazi29-Oct-06 19:35 
GeneralRe: where should the reference points be placed? Pinmemberfadfooood30-Oct-06 11:19 
Generalwhy PinmemberAshrafzadeh16-Jul-06 20:37 
AnswerRe: why PinmemberMohammad Riazi17-Jul-06 5:49 
Questionabout the second converter Pinmemberash4_ashish@yahoo.com23-Jun-06 10:13 
AnswerRe: about the second converter PinmemberMohammad Riazi23-Jun-06 22:20 
QuestionUsage permission? PinmemberBubba Hawkins6-Jun-06 16:02 
AnswerRe: Usage permission? PinmemberH.Riazi6-Jun-06 18:40 
AnswerRe: Usage permission? PinmemberH.Riazi6-Jun-06 18:43 
GeneralRe: Usage permission? PinmemberBubba Hawkins7-Jun-06 17:44 
Questionits excellent work but still i have prob with it Pinmemberejaz13-Jun-06 0:50 
AnswerRe: its excellent work but still i have prob with it PinmemberH.Riazi3-Jun-06 6:57 
GeneralRe: its excellent work but still i have prob with it Pinmemberejaz14-Jun-06 7:18 
QuestionRe: its excellent work but still i have prob with it PinmemberAhsaan2-Mar-07 2:44 
QuestionReference points ?? Pinmemberejaz113-May-06 2:33 
AnswerRe: Reference points ?? PinmemberMohammad Riazi13-May-06 8:39 
GeneralLeast-squares PinmemberMorten on GIS6-Feb-06 1:02 
GeneralWon't work for map projections... PinmemberWillem Fourie5-Feb-06 23:46 
GeneralRe: Won't work for map projections... PinmemberH.Riazi6-Feb-06 0:23 
GeneralRe: Won't work for map projections... PinmemberJun Du6-Feb-06 5:33 
GeneralRe: Won't work for map projections... PinmemberMohammad Riazi6-Feb-06 5:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140821.2 | Last Updated 5 Feb 2006
Article Copyright 2006 by Mohammad Riazi, HRiazi
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid