Get images for a rectangle in the Google Static Maps API

I have two LatLong points: the upper left and lower right points of the rectangle, and I would like to use satellite imagery for this rectangle using the Google Maps API.

I understand that since the zoom level is an integer, I may not be able to get this exact rectangle, but there is no problem if I get a large pixmap while I can calculate the bounding box for pixmap in latlong coordinates.

Since the pixmap size is fixed (for example, 640x640), and I have a center, how can I find the appropriate zoom level and calculate the bounding box for pixmap?

+4
source share
1 answer

Found a python link linked in an old Google Maps API blog that provides a CalculateBoundsZoomLevel function.

The source file is here .

def CalculateBoundsZoomLevel(self, bounds, view_size): """Given lat/lng bounds, returns map zoom level. This method is used to take in a bounding box (southwest and northeast bounds of the map view we want) and a map size and it will return us a zoom level for our map. We use this because if we take the bottom left and upper right on the map we want to show, and calculate what pixels they would be on the map for a given zoom level, then we can see how many pixels it will take to display the map at this zoom level. If our map size is within this many pixels, then we have the right zoom level. Args: bounds: A list of length 2, each holding a list of length 2. It holds the southwest and northeast lat/lng bounds of a map. It should look like this: [[southwestLat, southwestLat], [northeastLat, northeastLng]] view_size: A list containing the width/height in pixels of the map. Returns: An int zoom level. """ zmax = 18 zmin = 0 bottom_left = bounds[0] top_right = bounds[1] backwards_range = range(zmin, zmax) backwards_range.reverse() for z in backwards_range: bottom_left_pixel = self.FromLatLngToPixel(bottom_left, z) top_right_pixel = self.FromLatLngToPixel(top_right, z) if bottom_left_pixel.x > top_right_pixel.x : bottom_left_pixel.x -= self.CalcWrapWidth(z) if abs(top_right_pixel.x - bottom_left_pixel.x) <= view_size[0] \ and abs(top_right_pixel.y - bottom_left_pixel.y) <= view_size[1] : return z return 0 
+2
source

All Articles