arcgis在配合数据驱动下制作动态表格及生成拐点坐标表

您所在的位置:网站首页 arcgis如何显示点坐标 arcgis在配合数据驱动下制作动态表格及生成拐点坐标表

arcgis在配合数据驱动下制作动态表格及生成拐点坐标表

2024-07-06 20:05| 来源: 网络整理| 查看: 265

本文以打印宗地图为例,展示在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:\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)

效果如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3