class BackImporter: def __init__ (self, model, grid): self.__model = model self.__grid = grid self.__cutter = ClipHelper(grid) self.__preprocessor = Preprocessor() def process (self, filename, minlevel, maxlevel): self.__minlevel = minlevel self.__maxlevel = maxlevel cursize = 0 progress = Progress(filename, 0, os.stat(filename)[6]) for ln in open(filename): if ln.startswith('AF'): self.processAF(ln) elif ln.startswith('LF'): self.processLF(ln) elif ln.startswith('LM'): self.processLM(ln) elif ln.startswith('PF'): self.processPF(ln) cursize += len(ln) progress.update(cursize) def processAF(self, af): #if len(af) > 64*1024: # return grp = af.split(';') transtype = transform_af(grp) if transtype: themecode, featcode = transtype priority = int(grp[3]) name = self.__preprocessor.nominalizeName(grp[6]) polylist = [] for poly in grp[2].split('|'): points = poly.split(',') poly = [(int(points[i]), int(points[i+1])) for i in range(0, len(points), 2)] # polyList = [poly] for level in range(self.__maxlevel-1, self.__minlevel-1, -1): newPolyList = [] for poly in polyList: for mesh, clipPoly in self.__cutter.clipPolygon(poly, level): area = XBackArea() area.priority = priority area.themecode = themecode area.featcode = featcode area.name = name area.polylist = [clipPoly] # save model = self.__model[level] parcel = model.get(mesh) if not parcel: parcel = XParcel() parcel.back_area_list.append(area) model.put(mesh, parcel) newPolyList.append(clipPoly) polyList = newPolyList themecode = 0 featcode = 0 def processLF (self, lf): grp = lf.split(';') transtype = transform_lf(grp) if transtype: themecode, featcode = transtype priority = int(grp[3]) name = self.__preprocessor.nominalizeName(grp[6]) points = grp[2].split(',') poly = [(int(points[i]), int(points[i+1])) for i in range(0, len(points), 2)] for level in range(self.__minlevel, self.__maxlevel): for meshcode, segment in self.__cutter.clipPolyline(poly, level): edge = XBackEdge() edge.themecode = themecode edge.featcode = featcode edge.polyline = segment edge.name = name model = self.__model[level] parcel = model.get(meshcode) if not parcel: parcel = XParcel() parcel.back_edge_list.append(edge) model.put(meshcode, parcel) def processLM (self, lm): grp = lm.split(';') transtype = transform_lm(grp) if transtype: point = tuple([int(x) for x in grp[2].split(',')]) name = self.__preprocessor.nominalizeName(grp[3]) for level in range(self.__minlevel, self.__maxlevel): meshcode = self.__grid.getPointMesh(point, level) node = XBackNode() node.themecode = transtype[0] node.featcode = transtype[1] node.point = point node.name = name model = self.__model[level] parcel = model.get(meshcode) if not parcel: parcel = XParcel() parcel.back_node_list.append(node) model.put(meshcode, parcel) def processPF (self, pf): grp = pf.split(';') transtype = transform_pf(grp) if transtype: themecode, featcode = transtype point = tuple([int(x) for x in grp[2].split(',')]) name = self.__preprocessor.nominalizeName(grp[6]) for level in range(self.__minlevel, self.__maxlevel): meshcode = self.__grid.getPointMesh(point, level) node = XBackNode() node.themecode = themecode node.featcode = featcode node.point = point node.name = name model = self.__model[level] parcel = model.get(meshcode) if not parcel: parcel = XParcel() parcel.back_node_list.append(node) model.put(meshcode, parcel)