[GIS] Plotting a point within a bounding box as a percentage of X/Y

convertcoordinatesextents

I have two pairs of lat/long coordinates that represent the top left and bottom right corners of a bounding box.

I have a third pair of lat/long coordinates representing a point within this bounding box.

How might I go about converting this point to a percentage of the X/Y position within the bounding box? For example, a point at X=50% and Y=50% would be bang in the centre of the bounding box.

It does of course need to take into account positive and negative coordinates.

Any guidance appreciated!

Best Answer

To solve this, you need to determine the ratio of the point's location (relative to the starting origin) to the length of the rectangle. The length is just the absolute difference of the x and y coordinates. In order to determine the point's location relative to the origin, just subtract the lower left coordinates from the point's coordinates. Finally, just divide the two to compute the percentage.

Here is a python function that should solve what you are looking for, where coord1, coord2, coord3 are tuples of the coordinates:

def center(coord1, coord2, coord3):
    x1,y1 = coord1
    x2,y2 = coord2
    x3,y3 = coord3    

    dx = float(abs(x1 - x2))
    dy = float(abs(y1 - y2))

    px = (x3 - x1)/dx
    py = (y3 - y1)/dy

    return px,py

Or, if you prefer

def center2(coord1, coord2, coord3):
    px = (coord3[0] - coord1[0])/float(abs(coord1[0] - coord2[0]))
    py = (coord3[1] - coord1[1])/float(abs(coord1[1] - coord2[1]))
    return px,py

The results:

>>>center((-15,10), (10,18), (7.36, 12.9))
(0.8944, 0.36250000000000004)
Related Question