Source code for pygrass.modules.grid.split

# -*- coding: utf-8 -*-
"""
Created on Tue Apr  2 19:00:15 2013

@author: pietro
"""
from __future__ import (nested_scopes, generators, division, absolute_import,
                        with_statement, print_function, unicode_literals)
from grass.pygrass.gis.region import Region
from grass.pygrass.vector.basic import Bbox


[docs]def get_bbox(reg, row, col, width, height, overlap): """Return a Bbox :param reg: a Region object to split :type reg: Region object :param row: the number of row :type row: int :param col: the number of row :type col: int :param width: the width of tiles :type width: int :param height: the width of tiles :type height: int :param overlap: the value of overlap between tiles :type overlap: int """ north = reg.north - (row * height - overlap) * reg.nsres south = reg.north - ((row + 1) * height + overlap) * reg.nsres east = reg.west + ((col + 1) * width + overlap) * reg.ewres west = reg.west + (col * width - overlap) * reg.ewres return Bbox(north=north if north <= reg.north else reg.north, south=south if south >= reg.south else reg.south, east=east if east <= reg.east else reg.east, west=west if west >= reg.west else reg.west,)
[docs]def split_region_tiles(region=None, width=100, height=100, overlap=0): """Spit a region into a list of Bbox. :param region: a Region object to split :type region: Region object :param width: the width of tiles :type width: int :param height: the width of tiles :type height: int :param overlap: the value of overlap between tiles :type overlap: int >>> reg = Region() >>> reg.north = 1350 >>> reg.south = 0 >>> reg.nsres = 1 >>> reg.east = 1500 >>> reg.west = 0 >>> reg.ewres = 1 >>> reg.cols 1500 >>> reg.rows 1350 >>> split_region_tiles(region=reg, width=1000, height=700, overlap=0) # doctest: +NORMALIZE_WHITESPACE [[Bbox(1350.0, 650.0, 1000.0, 0.0), Bbox(1350.0, 650.0, 1500.0, 1000.0)], [Bbox(650.0, 0.0, 1000.0, 0.0), Bbox(650.0, 0.0, 1500.0, 1000.0)]] >>> split_region_tiles(region=reg, width=1000, height=700, overlap=10) # doctest: +NORMALIZE_WHITESPACE [[Bbox(1350.0, 640.0, 1010.0, 0.0), Bbox(1350.0, 640.0, 1500.0, 990.0)], [Bbox(660.0, 0.0, 1010.0, 0.0), Bbox(660.0, 0.0, 1500.0, 990.0)]] """ reg = region if region else Region() ncols = (reg.cols + width - 1) // width nrows = (reg.rows + height - 1) // height box_list = [] #print reg for row in range(nrows): row_list = [] for col in range(ncols): #print 'c', c, 'r', r row_list.append(get_bbox(reg, row, col, width, height, overlap)) box_list.append(row_list) return box_list
[docs]def get_overlap_region_tiles(region=None, width=100, height=100, overlap=0): """Get the Bbox of the overlapped region. :param region: a Region object to split :type region: Region object :param width: the width of tiles :type width: int :param height: the width of tiles :type height: int :param overlap: the value of overlap between tiles :type overlap: int """ reg = region if region else Region() ncols = (reg.cols + width - 1) // width nrows = (reg.rows + height - 1) // height box_list = [] #print reg for row in range(nrows): row_list = [] for col in range(ncols): #print 'c', c, 'r', r row_list.append(get_bbox(reg, row, col, width, height, -overlap)) box_list.append(row_list) return box_list