for inRow in inCur: # load input geometry pt = inRow.getValue(inShpFld).getPart(0) id = inRow.getValue(ptsIDFld) coor = (pt.X, pt.Y) # load radius radius = math.sqrt(inRow.getValue(weightFld)) * normalization print inRow.getValue(weightFld), radius, normalization ptCount = max(int(pi2 * radius / tolerance), 3) delta = pi2 / ptCount angle = 0 while angle < pi2: outRow = outCur.newRow() outRow.setValue(circShapeFld, arcpy.Point(coor[0] + radius * math.cos(angle), coor[1] + radius * math.sin(angle))) outRow.setValue(ptsIDFld, id) outCur.insertRow(outRow) angle += delta prog.move() del inCur, outCur, inRow, outRow prog.end() common.progress('building voronoi polygons') singlePolys = common.featurePath(location, TMP_ALLPOLY) mergedPolys = common.featurePath(location, outName) arcpy.CreateThiessenPolygons_analysis(circLayer, singlePolys, 'ALL') common.progress('dissolving to weighted polygons') arcpy.Dissolve_management(singlePolys, mergedPolys, ptsIDFld) common.progress('joining transfer fields') arcpy.JoinField_management(mergedPolys, ptsIDFld, points, ptsIDFld, transferFlds) common.progress('deleting temporary files') common.delete(singlePolys)
import arcpy, os, common, collections, loaders OVERLAP_FLD = 'OVERLAP' TMP_BORDS = 'tmp_borders' PTOL_LEFT_FLD = 'LEFT_FID' PTOL_RIGHT_FLD = 'RIGHT_FID' with common.runtool(7) as parameters: regions, idFld, overlapTable, idFrom, idTo, overlapFld, outBorders = parameters common.progress('creating borders') tmpBords = common.featurePath(os.path.dirname(outBorders), TMP_BORDS) arcpy.PolygonToLine_management(regions, tmpBords, 'IDENTIFY_NEIGHBORS') # dissolve to remove line duplication on shared borders common.progress('removing border duplicates') arcpy.Dissolve_management(tmpBords, outBorders, [PTOL_LEFT_FLD, PTOL_RIGHT_FLD]) common.progress('loading region identifiers') oidFld = arcpy.Describe(regions).OIDFieldName idReader = loaders.DictReader(regions, {'id' : idFld, 'fid' : oidFld}) regions = idReader.read() regIDType = type(next(regions.itervalues())) common.progress('loading region overlap values') overlapReader = loaders.OverlapReader(overlapTable, {'from' : idFrom, 'to' : idTo, 'value' : overlapFld}) overlaps = overlapReader.read() # remap to FIDs tofid = {} for id, valdict in overlaps.iteritems(): fid = regions[id]['fid'] tofid[fid] = {} for toid, toval in valdict.iteritems(): tofid[fid][regions[toid]['fid']] = {'from' : id, 'to' : toid, 'value' : toval} common.progress('writing border effects')