I need to show a marker for each user that falls within the visible portion of google map. To do so, I get the bounding box from google map, and send it down to the database and I receive a list of users that fall within the box. Then loop through the list of users and place a marker on the map for each user.

All works well, however, if the lat/lng falls just bellow the top border, then only the bottom of the marker is visible. If the lat/lng falls next to the side borders, then only 1/2 of the marker is visible.

One way to tackle this problem is to send a reduced version of the bounding box to the database. This way, you'd have a bounding box with margins, but you don't show anything within the margins.

Now, what is the best way of shrinking down the bounding box before sending it down to the database?

I don't understand your question or its context, can you elaborate - perhaps with a diagram of what you're attempting to achieve?
– nagytechMar 3 '13 at 6:16

Take 2. Hope this better explains the problem I am trying to solve. All I need is to calculate a new bounding box that is smaller than what I get from google and fits within it.
– un33kMar 4 '13 at 15:02

We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.

Calculate the distance you will use to offset the new bounds' corner coordinates by calculating the hypotenuse of the triangle where the two legs are the two 10% values.
So it will look like leg1 to the pwr of 2 + leg2 to the pwr of 2 = hypotenuse to the pw of 2
Simple pithagoras theorem.

Now that you have the hypotenuse value, you can use that as an offset distance from the two corners of the bounds: the southwestern and northeastern. Use > computeOffset(from:LatLng, distance:number, heading:number, radius?:number) from the google library i referenced above. When calculating the offset by the southwestern corner, use a heading value of 45° and by the northeastern, use 225°

The above steps will result in having two new latlngs that you can use to form your new, reduced bounds object. You can test the functionality by drawing rectangle objects, using these bounds.

This isn't very efficient, there's simply no need to bring Math.pow into the equation.
– nagytechMar 11 '13 at 10:28

1

Personally, I don't think that two dead simple pithagoras theorem could seriously make this approach inefficient. Do you have any other approach to share?
– EZMapdesignMar 11 '13 at 11:24

It's not efficient because there's no need to go on a tangent, literally. It may not be relevant to this exact problem, but if you follow the path of least resistance in computing science and you won't go very far - demand in applications can scale quite quickly without warning. I already have provided my solution. Feel free to down vote it for arbitrary reasons of your own. Also, google.com.au/search?q=pithagoras
– nagytechMar 11 '13 at 22:59

If the root of this question is to avoid the margin used by Google Map API's fitBounds() function then I suggest to look at Google Maps V3 - How to calculate the zoom level for a given bounds question on StackOverflow. It gives you a function to directly calculate the zoom level you need to use to fit the given bounds into the visible area of the map. This is a better trick, than reducing the bounding box to counteract the effect of the mandatory margin used fitBounds().