2010-11-24 15 views
4

長方形の左上点と右下点が2つあり、Google Maps APIを使用して、この長方形の衛星画像を取得したいと考えています。Google Static Maps APIの長方形の画像を取得

ズームレベルが整数なので、この正確な矩形を得ることができないかもしれないが、私がlatlongのピクスマップのバウンディングボックスを計算できるのであれば、大きなピクスマップを取得しても問題ありません座標。

ピクスマップのサイズは固定されているので(640x640と言う)、中心にあるので、適切なズームレベルを見つけてピックスマップの境界ボックスを計算する方法は?

答えて

2

CalculateBoundsZoomLevel関数を提供する古いGoogle Maps APIブログにリンクされたPythonリファレンスが見つかりました。

ソースファイルは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 
関連する問題