First, drawing the gridlines is pretty easy.

You need to add a Picturebox control to your form, let's say you name this picMap. Set the AutoRedraw property to True, Set the ScaleMode property to 0 - User, Set the ScaleLeft property to -180, set the ScaleWidth property to 360, set the ScaleTop property to 90, set the ScaleHeight to -180. That should set up your picturebox to plot various lines and points.

If the Form resizes, you have to resize the height and width of the picturebox, however, the coordinates inside of the picturebox will always remain the same.

To draw the axis lines, you would simply say:

' Draw the X axis

picMap.Line (picMap.ScaleLeft, 0) - ((picMap.ScaleWidth + picMap.ScaleLeft), 0)

' Draw the Y axis

picMap.Line (0, picMap.ScaleTop) - (0, (picMap.ScaleHeight + picMap.ScaleTop))

Or, you can hardcode the dimensions

' Draw the X axis

picMap.Line (-180, 0) - (180, 0)

' Draw the Y axis

picMap.Line (0, 90) - (0, -90)

To keep a constrained aspect ratio when sizing the form, you need to calculate the ratios for both the width and the height.

In your form's General Declarations section, define a couple of variables.

Dim width_ratio as Single

Dim height_ratio as Single

In your form's Load event, populate them

width_ratio = picMap.width/picMap.height

height_ratio = picMap.height/picMap.width

Now, the tricky part is that when your form is resized, you have to decide whether to stretch the picture box to fit the width of the form or the height of the form. You can do this by calculating what will fit. If the ratio of the windows width/height is less than the ratio of the pictureboxes width/height then you have to set the width of the picturebox to fit in the form, then set the height to the ratio.

Let's say that you placed the upper left corner of your picture box at location 100, 100 on the form, and then stretched it out so that the right side is 100 from the right edge of the form and down so that the bottom edge is 100 from the bottom of the form.

For example, in the Form's Resize event you might say:

if Me.width/Me.height < width_ratio Then

picMap.Width = Me.Width - 200

picMap.Height = picMap.Width * height_ratio

else

picMap.Height = Me.Height - 200

picMap.Width = Me.Height * width_ratio

end if

I'm not sure what is meant by convert the XY to lat/lon mercator projection... any X coordiate between -180 and +180 is a valid longitude and any Y coordinate between 90 and -90 is a valid latitude.

Zooming probably just means changing the ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight values in your picturebox, but, I'm not exactly sure how this is supposed to be implemented.

Hopefully, that gets you started!