def ConvertGDB(sourceFilePath, outputGDBPath, serverName, templatePath, x, y, sourceFileFields, fileEncode, convertSr): try: logger.info('insertGDB ** all convert GDB sourceFile:%s' % sourceFilePath) gdbPath = os.path.join(outputGDBPath, serverName + '.gdb') if os.path.exists(gdbPath): shutil.rmtree(gdbPath) ac.createFileGDB(outputGDBPath, serverName) if os.path.exists(gdbPath) is not True: logger.warning('insertGDB ** not exists GDB:%s,create first!' % gdbPath) return False # 临时GDB图层目录 layerPath = os.path.join(gdbPath, serverName) ac.copyLayers(templatePath, layerPath) # 复制模板图层 # 插入记录到gdb ac.insertRow_Point(layerPath, sourceFilePath, x, y, sourceFileFields, fileEncode, convertSr, logger) return True except Exception as e: logger.warning(e.message) logger.warning(traceback.format_exc()) return False
def ConvertGDB(sourceFilePath, outputGDBPath, serverGDBPath, serverName, templatePath, x, y, uniqueId, updateModel, sourceFileFields, fileEncode, convertSr): try: logger.info('insertUpdate ** update GDB soucefile:%s' % sourceFilePath) # 临时gdb目录 gdbPath = os.path.join(outputGDBPath, serverName + ".gdb") gdbServerPath = os.path.join(serverGDBPath, serverName + ".gdb") # 图层目录 layerPath = os.path.join(gdbPath, serverName) if os.path.exists(gdbPath): shutil.rmtree(gdbPath) # 将旧的GDB拷贝到临时gdb路径 shutil.copytree(gdbServerPath, gdbPath) # 删除旧的要素,重新插入新的纪录 if updateModel == "update": ac.deleteRow(layerPath, sourceFilePath, uniqueId, sourceFileFields[uniqueId]) # 插入记录到gdb ac.insertRow_Point(layerPath, sourceFilePath, x, y, sourceFileFields, fileEncode, convertSr, logger) return True except Exception as e: logger.warning(e.message) logger.warning(traceback.format_exc()) return False
def mapProcess(targetFile, serverName, x, y, sourceFileFields, gdbWorkspace, fileEncode, convertSr): try: fileIndex = os.path.basename(targetFile).split('.')[0].split('_')[-1] fileName = "%s%s" % (serverName, fileIndex) logger.info('insertLarge_GDB ** convert file:%s' % (fileName)) layerPath = os.path.join(gdbWorkspace, fileName) # 插入记录到gdb extent = ac.insertRow_Point(layerPath, targetFile, x, y, sourceFileFields, fileEncode, convertSr, logger) return [fileName, os.path.split(outputGDBPath)[1] + os.path.sep + fileName, extent, fileIndex] except: logger.warning(traceback.format_exc()) raise
def ConvertGDB(sourceFilePath, outputGDBPath, serverGDBPath, serverName, x, y, uniqueId, updateModel, sourceFileFields, fileEncode, convertSr): try: logger.info('Step 1: insertUpdate ** update GDB soucefile:%s' % sourceFilePath) gdbPath = os.path.join(outputGDBPath, serverName + ".gdb") gdbServerPath = os.path.join(serverGDBPath, serverName + ".gdb") gdbPath_temp = os.path.join(outputGDBPath, "tempdata.gdb") tempSpatialJoinPath = os.path.join(gdbPath_temp, "spatialjoin") tempLayerPath = os.path.join(gdbPath_temp, "tempdata") tableViewPath = os.path.join(gdbPath, "tableview") # 拷贝服务使用的gdb数据 if os.path.exists(gdbPath): shutil.rmtree(gdbPath) if os.path.exists(gdbPath_temp): shutil.rmtree(gdbPath_temp) # 将旧的GDB拷贝到临时gdb路径 shutil.copytree(gdbServerPath, gdbPath) #更新模式,先删除gdb、tableview里旧的记录 if updateModel == "update": logger.info('Step 2: update gdb...') tableTemp = serverName + "tabletemp" # 获取需要更新的记录具体图层位置并删除 ac.makeTableView(tableViewPath, tableTemp) sqlStrs = buildSQLStr(sourceFilePath, tableViewPath, uniqueId) rowGroup = {} for sqlStr in sqlStrs: ac.selectLayerByAttribute(tableTemp, "NEW_SELECTION", sqlStr) searchCursor = ac.searchData(tableTemp, ("CID", "NAME")) for row in searchCursor: if rowGroup.has_key(row[1]) is not True: rowGroup[row[1]] = [] rowGroup[row[1]].append(row[0]) del searchCursor ac.deleteRows(tableTemp) logger.info('Step 3: update gdb layer include : %s' % '|'.join(rowGroup.keys())) for key in rowGroup.keys(): deleteFeaturesBySelected(gdbPath, key, rowGroup[key]) logger.info('Step 4: update gdb complate') # 构建临时存储gdb logger.info('Step 5: build temp gdb and insert row...') ac.createFileGDB(outputGDBPath, "tempdata.gdb") layerFields = ac.getLayerFields(os.path.join(gdbPath, "clientdata130")) fieldsMap = {} for layerField in layerFields: if layerField["name"] == "SHAPE@": continue fieldsMap[layerField["name"]] = layerField["type"] proNum = 3857 if convertSr.upper() != "NONE" and convertSr != "": proNum = int(convertSr.split(",")[1]) ac.createLayer(gdbPath_temp, "tempdata", proNum, "POINT", fieldsMap) ac.insertRow_Point(tempLayerPath, sourceFilePath, x, y, sourceFileFields, fileEncode, convertSr, logger) logger.info('Step 6: temp gdb spatial join extent...') ac.spatialJoin(tempLayerPath, os.path.join(gdbPath, "extent"), tempSpatialJoinPath, "JOIN_ONE_TO_ONE", "KEEP_COMMON", None, "INTERSECT", "", "") # 插入记录到对应的图层 logger.info('Step 7: temp gdb append to gdb...') fields = [] for layerField in layerFields: if layerField["name"] == "SHAPE@": continue fields.append(layerField["name"]) fields.append("SHAPE@X") x = (len(fields) - 1) fields.append("SHAPE@Y") y = (len(fields) - 1) fields.append("CID") fields.append("name") tempCursor = ac.searchData(tempSpatialJoinPath, fields) insertTableCursor = ac.getInsertCursor(tableViewPath, ["CID", "NAME"]) rowGroup = {} for row in tempCursor: id = row[-2] layerName = row[-1] strValue = "" for fieldValue in row: if type(fieldValue) == int or type(fieldValue) == float: fieldValue = str(fieldValue) strValue += (fieldValue.encode('utf-8') + FIELD_DEL) strValue += FIELD_DEL + "\n" if rowGroup.has_key(layerName) is not True: rowGroup[layerName] = [] rowGroup[layerName].append(strValue) insertTableCursor.insertRow([id, layerName]) del tempCursor del insertTableCursor for layerName in rowGroup.keys(): tempFilePath = os.path.join(outputGDBPath, layerName) tempFileObj = file(tempFilePath, 'wb') for lineStr in rowGroup[layerName]: tempFileObj.write(lineStr) tempFileObj.close() ac.insertRow_Point(os.path.join(gdbPath, layerName), tempFilePath, x, y, fields, 'utf-8', "None", logger) os.remove(tempFilePath) shutil.rmtree(gdbPath_temp) logger.info( 'Step 8: insertUpdate ** update GDB soucefile:%s complate!' % sourceFilePath) return True except Exception as e: logger.warning(e.message) logger.warning(traceback.format_exc()) return False
def ConvertGDB(sourceFilePath, outputGDBPath, serverGDBPath, serverName, x, y, uniqueId, updateModel, sourceFileFields, fileEncode, convertSr): try: logger.info('insertUpdate ** update GDB soucefile:%s' % sourceFilePath) # 临时gdb目录 gdbPath = os.path.join(outputGDBPath, serverName + ".gdb") gdbServerPath = os.path.join(serverGDBPath, serverName + ".gdb") # 拷贝服务使用的gdb数据 if os.path.exists(gdbPath): shutil.rmtree(gdbPath) # 将旧的GDB拷贝到临时gdb路径 shutil.copytree(gdbServerPath, gdbPath) if updateModel == "update": ac.setWorkSpace(gdbPath) for sn in ac.getFeaturesList(): if sn == "extent": continue layerPath = os.path.join(gdbPath, sn) # 删除旧的要素,重新插入新的纪录 ac.deleteRow(layerPath, sourceFilePath, uniqueId, sourceFileFields[uniqueId]) # 字典图层路径,循环图层要素,将新增的数据按范围插入到对应的图层 extentLayerPath = os.path.join(gdbPath, "extent") extentCursor = ac.searchData(extentLayerPath, ["name", "SHAPE@"]) try: inSr, outSr = None, None if convertSr.upper() != "NONE": v = convertSr.split(',') inSr = ac.getSpatialReference(int(v[0])) outSr = ac.getSpatialReference(int(v[1])) for extentRow in extentCursor: polyGeo = extentRow[1] name = extentRow[0] sourceObj = file(sourceFilePath, 'rb') fileObj = file(os.path.join(outputGDBPath, name), 'wb') rowCount = 0 logger.info('analysis %s!' % (name)) try: while True: lineStr = sourceObj.next() values = lineStr.split(FIELD_DEL) if str(values[x]) != '' and str(values[y]) != "" and str(values[x]) != "0" and str( values[y]) != "0" and is_num_by_except(values[x]) and is_num_by_except(values[y]): geo = ac.createPoint(float(values[x]), float(values[y])) if convertSr.upper() != 'NONE': p = ac.createPointGeometry(geo, inSr) geo = p.projectAs(outSr) # 输出到文件 if polyGeo.contains(geo): rowCount += 1 fileObj.write(lineStr) except StopIteration: fileObj.close() sourceObj.close() pass if rowCount>0: logger.info('start insert %s' % (name)) ac.insertRow_Point(os.path.join(gdbPath, name), os.path.join(outputGDBPath, name), x, y, sourceFileFields, fileEncode, convertSr, logger) logger.info('insert %d row to "%s" layer!' % (rowCount, name)) os.remove(os.path.join(outputGDBPath, name)) except: pass return True except Exception as e: logger.warning(e.message) logger.warning(traceback.format_exc()) return False
def ConvertGDB(sourceFilePath, outputGDBPath, serverGDBPath, serverName, x, y, uniqueId, updateModel, sourceFileFields, fileEncode, convertSr): try: logger.info('insertUpdate ** update GDB soucefile:%s' % sourceFilePath) gdbPath = os.path.join(outputGDBPath, serverName + ".gdb") gdbPath_temp = os.path.join(outputGDBPath, "tempdata.gdb") gdbServerPath = os.path.join(serverGDBPath, serverName + ".gdb") tempLayerPath = os.path.join(gdbPath_temp, "tempdata") tableViewPath = os.path.join(gdbPath, "tableview") # 拷贝服务使用的gdb数据 if os.path.exists(gdbPath): shutil.rmtree(gdbPath) if os.path.exists(gdbPath_temp): shutil.rmtree(gdbPath_temp) # 将旧的GDB拷贝到临时gdb路径 shutil.copytree(gdbServerPath, gdbPath) # 构建临时存储gdb logger.info('build tempGDB...') ac.createFileGDB(outputGDBPath, "tempdata.gdb") layerFields = ac.getLayerFields(os.path.join(gdbPath, "clientdata130")) fieldsMap = {} for layerField in layerFields: if layerField["name"] == "SHAPE@": continue fieldsMap[layerField["name"]] = layerField["type"] proNum = 3857 if convertSr.upper() != "NONE" and convertSr != "": proNum = int(convertSr.split(",")[1]) ac.createLayer(gdbPath_temp, "tempdata", proNum, "POINT", fieldsMap) ac.insertRow_Point(tempLayerPath, sourceFilePath, x, y, sourceFileFields, fileEncode, convertSr, logger) ac.splitLayer(tempLayerPath, os.path.join(gdbPath, "extent"), "name", gdbPath_temp) ac.deleteLayer(tempLayerPath) if updateModel == "update": logger.info('update layer...') tableTemp = serverName + "tabletemp" # 获取需要更新的记录具体图层位置并删除 ac.makeTableView(tableViewPath, tableTemp) sqlStrs = buildSQLStr(sourceFilePath, tableViewPath, uniqueId) rowGroup = {} for sqlStr in sqlStrs: ac.selectLayerByAttribute(tableTemp, "NEW_SELECTION", sqlStr) searchCursor = ac.searchData(tableTemp, ("CID", "NAME")) for row in searchCursor: if rowGroup.has_key(row[1]) is not True: rowGroup[row[1]] = [] rowGroup[row[1]].append(row[0]) del searchCursor ac.deleteRows(tableTemp) logger.info('update layer include : %s' % '|'.join(rowGroup.keys())) for key in rowGroup.keys(): deleteFeaturesBySelected(gdbPath, key, rowGroup[key]) # 插入记录到对应的图层 logger.info('insert tempGDB to gdb...') insertTableCursor = ac.getInsertCursor(tableViewPath, ["CID", "NAME"]) ac.setWorkSpace(gdbPath_temp) for sn in ac.getFeaturesList(): ac.appendLayers(os.path.join(gdbPath_temp, sn), os.path.join(gdbPath, sn)) # 与正式图层合并,完成新增插入 searchCursor = ac.searchData(os.path.join(gdbPath_temp, sn), ["CID"]) for row in searchCursor: insertTableCursor.insertRow([row[0], sn]) del searchCursor del insertTableCursor shutil.rmtree(gdbPath_temp) logger.info('insertUpdate ** update GDB soucefile:%s complate!' % sourceFilePath) return True except Exception as e: logger.warning(e.message) logger.warning(traceback.format_exc()) return False