Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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

share|improve this question
    
I don't understand your question or its context, can you elaborate - perhaps with a diagram of what you're attempting to achieve? –  Geoist Mar 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. –  Val Neekman Mar 4 '13 at 15:02

2 Answers 2

I would try the fitBounds method in the API first: https://developers.google.com/maps/documentation/javascript/reference#Map

The way you suggest would work, but the math to do it is not going to be that easy.

share|improve this 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.

share|improve this answer
    
This isn't very efficient, there's simply no need to bring Math.pow into the equation. –  Geoist Mar 11 '13 at 10:28
    
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? –  Tamas Mar 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 –  Geoist Mar 11 '13 at 22:59

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.