我是靠谱客的博主 明亮悟空,最近开发中收集的这篇文章主要介绍arcgis在配合数据驱动下制作动态表格及生成拐点坐标表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

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

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

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为刚才计算的拐点数

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

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

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

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

 

 

 

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

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为需要的行数在右下角生成表格

 然后需要将各拐点的坐标值写入该表格内:贴入代码,这段代码先访问数据驱动的页面,然后获取到该页面的地块,计算其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:xxxxZDZD.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在配合数据驱动下制作动态表格及生成拐点坐标表的全部内容,希望文章能够帮你解决arcgis在配合数据驱动下制作动态表格及生成拐点坐标表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部