def load_img(f, fzip): import geo_raster_c as ge _prj = ge.proj_from_epsg(3857) _reg = ge.open(fzip.unzip(f)).extent().to_polygon().segment_ratio(30).project_to(_prj) return _reg.extent()
def load_shp(f): from osgeo import ogr import geo_base_c as gb _shp = ogr.Open(f) if _shp == None: raise Exception('Failed to load shapefile ' + f) _lyr = _shp.GetLayer() _objs = [] _area = None for _f in _lyr: _obj = gb.geo_polygon(_f.geometry().Clone()) _ext = _obj.extent() _objs.append(_obj) if _area == None: _area = _ext else: _area = _area.union(_ext) import geo_raster_c as ge _prj = ge.proj_from_epsg(3857) _reg = _area.to_polygon().segment_ratio(30).project_to(_prj) return _reg.extent()
def decode(self, text): import re _m = re.match('\s*EPSG\s*\:\s*(\d+)\s*', text) if _m: import geo_raster_c as ge return ge.proj_from_epsg(int(_m.group(1))) import model_utility return model_utility.proj_from_proj4(str(text))
def __init__(self): import math import geo_raster_c as ge self.b = 6378137.0 self.s = 256 self.p = self.b * math.pi self.prj = ge.proj_from_epsg(3857)
def main(): _opts = _init_env() _f_inp = _opts.input _d_out = _opts.output _f_clr = _opts.color import config import os os.path.exists(_d_out) or os.makedirs(_d_out) import file_unzip with file_unzip.file_unzip() as _zip: # detect the extent of input file _ext = load_shp(_f_inp) if _opts.input.endswith('.shp') else load_img(_f_inp, _zip) logging.info('detected extent %s' % str(_ext)) print 'detected extent', _ext _ps = [] for _lev in xrange(_opts.levels[0], _opts.levels[1]+1): print ' - checking level', _lev for _lev, _num, _col, _row in tiles().list(_lev, _ext): _ps.append((_f_inp, _lev, _num, _col, _row, _opts.percent, _f_clr, _d_out)) logging.info('found %s task' % len(_ps)) print 'found %s tasks' % len(_ps) print 'write map.html' if _opts.instance_pos == 0: import geo_raster_c as ge _ext_geo = _ext.to_polygon().segment_ratio(30).project_to(ge.proj_from_epsg()).extent() _f_out = os.path.join(_d_out, 'map.html') with open(config.cfg.get('conf', 'openlayers_temp'), 'r') as _fi, open(_f_out, 'w') as _fo: _fo.write(_fi.read() % { 'title': os.path.basename(_f_inp), 'xmin': _ext_geo.minx, 'xmax': _ext_geo.maxx, 'ymin': _ext_geo.miny, 'ymax': _ext_geo.maxy, 'zmin': _opts.levels[0], 'zmax': _opts.levels[1] }) import multi_task multi_task.Pool(make_tile, [_ps[i] for i in xrange(_opts.instance_pos, len(_ps), _opts.instance_num)], _opts.task_num, True).run()