return an RGB image for an area of land, with ground_width
        in meters, and width/height in pixels.

        lat/lon is the top left corner. The zoom is automatically
        chosen to avoid having to grow the tiles

def area_to_image(self, lat, lon, width, height, ground_width, zoom=None, ordered=True):
        '''return an RGB image for an area of land, with ground_width
        in meters, and width/height in pixels.

        lat/lon is the top left corner. The zoom is automatically
        chosen to avoid having to grow the tiles'''

        img = np.zeros((height,width,3), np.uint8)

        tlist = self.area_to_tile_list(lat, lon, width, height, ground_width, zoom)

        # order the display by distance from the middle, so the download happens
        # close to the middle of the image first
        if ordered:
            (midlat, midlon) = self.coord_from_area(width/2, height/2, lat, lon, width, ground_width)
            tlist.sort(key=lambda d: d.distance(midlat, midlon), reverse=True)

        for t in tlist:
            scaled_tile = self.scaled_tile(t)

            w = min(width - t.dstx, scaled_tile.shape[1] - t.srcx)
            h = min(height - t.dsty, scaled_tile.shape[0] - t.srcy)
            if w > 0 and h > 0:
                scaled_tile_roi = scaled_tile[t.srcy:t.srcy+h, t.srcx:t.srcx+w]
                img[t.dsty:t.dsty+h, t.dstx:t.dstx+w] = scaled_tile_roi.copy()

        # return as an RGB image
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        return img