本文以打印宗地图为例,展示在arcgis下使用数据驱动工具生成和打印宗地图

最后展示初步的效果图:图框可以修改和自定义

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_字段

一、标注出每个面的界址点号

1、打开宗地地块需要标注各个拐点的坐标,面状图形暂时不知道如何直接标注出各拐点,因此使用数据管理工具——要素——折点转点,创建拐点;

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_无法访问_02

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_数据驱动_03

2、但是由于该工具会将J1 计算两次,以下参考图,会显示的拐点数目为5,所以我们先对面状图形进行计算拐点数目,新建个字段,名称为拐点数,运用字段计算器计算出来:

代码块:

def MySub(feat):    
  partnum = 0
  partcount = feat.partCount
  pntcount = 0
  while partnum < partcount:
   part = feat.getPart(partnum)
   pnt = part.next()
   while pnt:
    pntcount += 1   
    pnt = part.next()
    if not pnt: 
     pnt = part.next()
   partnum += 1
  return pntcount下面的表达式:MySub(!shape!)
3、然后执行折点转点工具,并对点要素进行从1开始的编号:并将多出的一个点剔除将其标出来000000,同样使用字段计算器:
Dict1 = {}             #新建字典
 def func(inValue,x):     #新建函数
   Dict1.setdefault(inValue,0)   #设置字典的默认值从0开始
   Dict1[inValue]= Dict1[inValue]+1  #值+1
   if Dict1[inValue]==int(x):
      return "00000"  #返回值
   else:
      return Dict1[inValue]

inValue为各个面的转换前的ID值,X为刚才计算的拐点数

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_数据驱动_04

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_数据驱动_05

 这里我队转点后的点要素中ORIG_FID字段进行计算,在预逻辑里面贴入公式,运行func函数,传入OBJECTID和拐点数两个参数变行了

最后便可以标注出各个拐点的坐标如图,然后使用数据驱动,设置拐点图层的显示,在属性的页面定义查询,只显示属性值一致的拐点

二、在页面布局中制作动态的表格

1、制作表格必须要有垂直线和水平线,arcpy下无法访问绘图工具,因此只能手动绘制一条水平线和一条垂直线并命名为(horzLine(水平线)和vertLine(垂直线))和一个文本txt 取名为tableText,文本锚点设置在正中,字体大小根据情况自定,我设置为5左右

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_无法访问_06

 

 

 

下面是定义制止表格的代码

mxd = arcpy.mapping.MapDocument(r"current")
horzLine = arcpy.mapping.ListLayoutElements(mxd, "GRAPHIC_ELEMENT", "horzLine")[0]
vertLine = arcpy.mapping.ListLayoutElements(mxd, "GRAPHIC_ELEMENT", "vertLine")[0]
tableText = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "TableText")[0]
def maketable(horzLine,vertLine,tableText,numRow):
    numRows =numRow
    rowHeight = 0.2
    fieldNames = ["X", "Y", "编号"]
    numColumns = 4
    colWidth = 2
    upperX = 1.0
    upperY = 1.0
    vertLine.elementPositionX = upperX
    vertLine.elementPositionY = upperY
    vertLine.elementHeight =  (rowHeight * numRows) + rowHeight  #纵线的长度
    x=1
    for vert in range(1, numColumns+1):
       x = x + colWidth
       vert_clone = vertLine.clone("_clone")
       vert_clone.elementPositionX = x
    horzLine.elementPositionX = upperX
    horzLine.elementPositionY = upperY
    horzLine.elementWidth = numColumns * colWidth
    y=1
    for horz in range(1, numRows+2):
       temp_horz = horzLine.clone("_clone")
       y = y + rowHeight
       temp_horz.elementPositionY = y
    tableText.elementPositionY=rowHeight * (numRows+1)-0.1+1
    tableText.elementPositionX=2
    tableText.text=fieldNames[2]
    tableText.clone("_clone")
    tableText.elementPositionX=tableText.elementPositionX+2
    tableText.text=fieldNames[0]
    tableText.clone("_clone")
    tableText.elementPositionX=tableText.elementPositionX+2
    tableText.text=fieldNames[1]
    tableText.clone("_clone")
    tableText.elementPositionX=tableText.elementPositionX+2
    tableText.text="备注"
    tableText.clone("_clone")

运行maketable(horzLine,vertLine,tableText,numRow) ,其中numRow为需要的行数在右下角生成表格

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_字段_07

 然后需要将各拐点的坐标值写入该表格内:贴入代码,这段代码先访问数据驱动的页面,然后获取到该页面的地块,计算其XY坐标值然后插入表格内,导出该页的JPG,并删除表格,继续下一页,再次创建表格,计算坐标,写入坐标,导出JPG

rowHeight = 0.2
colWidth = 2
for pageNum in range(8, 12):
  mxd.dataDrivenPages.currentPageID = pageNum
  a=mxd.dataDrivenPages.pageRow.getValue ("ID")
  for elm in arcpy.mapping.ListLayoutElements(mxd, wildcard="*_clone*"):
             elm.delete()
  with arcpy.da.SearchCursor('E:\xx\xx\ZD\ZD.shp', ["SHAPE@","ID"]) as cursor: 
     for row in cursor:
        if a == row[1]:
          for pts in row[0]:
             numRows=pts.count
             maketable(horzLine,vertLine,tableText,numRows)
             n=0
             tableText.elementPositionY=rowHeight * (numRows+1)-0.1+1
             tableText.elementPositionX=2
             m=rowHeight * (numRows+1)-0.1+1
             list1=[]
             
             for pt in pts:
                 n=n+1
                 if n < pts.count:
                   textBH='J'+str(n)
                   textX=str(pt.X)
                   textY=str(pt.Y)
                 else:
                   textBH='J1'
                   textX=str(pt.X)
                   textY=str(pt.Y)
                 
                 #print(textX,textY)
                 
                 z=2
                 m=m-rowHeight
                 tableText.elementPositionY=m
                 tableText.text=textBH
                 tableText.clone("_clone")
                 tableText.elementPositionX=tableText.elementPositionX+2
                 tableText.text=textX
                 tableText.clone("_clone")
                 tableText.elementPositionX=tableText.elementPositionX+2
                 tableText.text=textY
                 tableText.clone("_clone")
 
                 z=2
                 tableText.elementPositionX=z
                 arcpy.mapping.ExportToJPEG(mxd, path_2+str(a) + ".jpg",resolution=400)

效果如下:

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_数据驱动_08

arcgis JavaScript 动态改变graphic图片样式 arcgis动态表格怎么编辑_字段_09