[GIS] How to calculate a new bounding box that is 80% of the actual bounding box returned by google map

extentsgoogle maps

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?

Is there any better way of doing this?

Check the image, 1/2 of the marker is hidden. (top)
enter image description here

Best Answer

First I suggest you to take a look at the docs of the geometry library

Then here are the steps that are recommended:

  1. Measure the horizontal and vertical dimensions of the bounds.
  2. Multiply both of them by 0.1 thus you will get the 10% value of each.
  3. 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.
  4. 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°
  5. 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.

I think it will be exactly what you need.