#coding: UTF-8

importarcpyimportosimporttypesimportstringimportshutilimportsysimportreimportopenpyxl#ws是一个xls的工作表#mode是替换模型,1完全替换,2模糊替换,3 追加替换

defreplacexls(ws,mode, text, replaceText):

rows=ws.max_row

cols=ws.max_column

changeCells=0if (mode <0):return -1

elif (mode>3):return -1

for row in range(1, rows + 1):for col in range(1, cols + 1):try:

content= ws.cell(row=row, column=col).valueif (content !=None):#mode1: fullmatch replacement

if (mode == 1):if (content ==text):

ws.cell(row=row, column=col).value =replaceText

changeCells+= 1

#mode2: partial replacement

elif (mode == 2):if (type(content) ==str):

ws.cell(row=row, column=col).value = content.replace(text, replaceText, 1)

changeCells+= 1

#mode3: partialmatch and filling

elif (mode == 3):if (type(content) ==str):

ws.cell(row=row, column=col).value = content.replace(text, text + replaceText, 1)

changeCells+= 1

exceptException as e:print(traceback.format_exc())returnchangeCellsdefchangeData(file, mode, text, replaceText):#load the file(*.xlsx)

wb =openpyxl.load_workbook(file)#! deal with one sheet

ws=wb.worksheets[0]

replacexls(ws, mode, text, replaceText)definitProgress(hint,num):

arcpy.SetProgressor("step", hint,0,num,1)defstep():

arcpy.SetProgressorLabel(u"waiting....")

arcpy.SetProgressorPosition()deffreeProgress():

arcpy.ResetProgressor()defAddLayer(mxd,inFeature):

df=arcpy.mapping.ListDataFrames(mxd)[0]

addLayer=arcpy.mapping.Layer(inFeature)

arcpy.mapping.AddLayer(df, addLayer,"TOP") #AUTO_ARRANGE�?BOTTOM",TOP#######

defgetLayer(layername):

layername=layername.upper()

mxd= arcpy.mapping.MapDocument("CURRENT")try:for lyr inarcpy.mapping.ListLayers(mxd):if lyr.name.upper()==layername:returnlyrreturnNonefinally:delmxd###

defmidFill(sumn,mystr,Fill):

n=getlength(mystr)if n>=sumn:returnmystr

leftn=int((sumn-n)/2)

s=""lefts=s.ljust(leftn,Fill)

s=""rightn=sumn-n-leftn

rights=s.ljust(rightn,Fill)return lefts+mystr+rights#获得一个表的记录数

defgetCount(inFeature):

result=arcpy.GetCount_management(inFeature)

count=int(result.getOutput(0))returncountdefclearSelect(inFeature):

mylyr="mylyr"arcpy.MakeFeatureLayer_management (inFeature, mylyr)

arcpy.SelectLayerByAttribute_management (mylyr,"CLEAR_SELECTION")defvalidate_sheet_name(sheet_name):"""Validate sheet name to excel limitations

- 31 character length

- there characters not allowed : \ / ? * [ ]"""

importreif len(sheet_name) > 31:

sheet_name= sheet_name[:31]#Replace invalid sheet character names with an underscore

r = re.compile(r'[:\\\/?*\[\]]')

sheet_name= r.sub("_", sheet_name)returnsheet_name#把内多边形,分解出来

defsplitNgeometry(mgeometry):

num=mgeometry.count

Sumarray=arcpy.Array()

parray=arcpy.Array()for i inrange(num):

pt=mgeometry[i]ifpt:

parray.add(pt)else:#内边形

Sumarray.add(parray)

parray.removeAll()

Sumarray.add(parray)returnSumarraydefgetJZDH(pgeometry):

mylayer="mylayer"arcpy.MakeFeatureLayer_management(JZDFeature, mylayer)

arcpy.SelectLayerByLocation_management (mylayer,'intersect',pgeometry )

num=getCount(mylayer)

cur=arcpy.da.SearchCursor(mylayer,[JZDHFieldName])

myJZDH=""i=1

for row incur:

myJZDH=row[0]ifcur:delcurreturnmyJZDH

startrow=4

#获得点的距离

defpointDistance(pt1,pt2):return math.sqrt((pt1.X-pt2.X)*(pt1.X-pt2.X)+(pt1.Y-pt2.Y)*(pt1.Y-pt2.Y))defwriteonexls(partgeometry,ws):globalstartrow

num=partgeometry.countfor i inrange(num):

pt=partgeometry[i]

x=pt.X

y=pt.Y

arcpy.AddMessage(str(x)+":"+str(y))

xstr="%.3f" %x

ystr="%.3f" %y

ws.cell(row=startrow, column=3).value=ystr

ws.cell(row=startrow, column=4).value=xstr

pointGeometry=arcpy.PointGeometry(pt)

JZDH=getJZDH(pointGeometry)

ws.cell(row=startrow, column=1).value =JZDHif (i < num - 1):

pt2= partgeometry[i+1]

linelen=pointDistance(pt,pt2)

ws.cell(row=startrow+1, column=2).value = "%.2f" %linelen

startrow=startrow+2

defwriteXLS(ZDH,geometry):

scriptPath=sys.path[0]

toolSharePath=scriptPath #os.path.dirname(scriptPath)

myxls="界址点2000国家大地坐标系.xlsx" ##encode("GBK")

sFile=toolSharePath+u"/xls/"+myxls

tFile=outpath+"/"+ZDH+".xlsx"arcpy.AddMessage(u"sFile"+sFile+","+tFile)

shutil.copyfile(sFile,tFile)

wb=openpyxl.load_workbook(tFile)

ws=wb.worksheets[0]

replacexls(ws,2, "[宗地号]", ZDH)

area=geometry.area

replacexls(ws,2, "[平方米]", '%.2f'%area)

area=area/10000replacexls(ws,2, "[公顷]", '%.4f' %area)

linelen=geometry.length

replacexls(ws,2, "[总长]", '%.2f' %linelen)globalstartrow

startrow= 4part_count= geometry.partCount #有几部分

pointcount=geometry.pointCount

replacexls(ws,2, "[总节点]", '%d' % (pointcount+part_count-1) )

Sumarray=arcpy.Array()for i inrange(part_count):

partgeometry=geometry.getPart(i)

SpliArray=splitNgeometry(partgeometry)

N=SpliArray.count#arcpy.AddMessage("NNNNN=====:"+str(N))

for j inrange(N):

Splitgeometry=SpliArray[j]

writeonexls(Splitgeometry,ws)

wb.save(tFile)defmain():

num=getCount(ZDFeature)if num<1:

arcpy.AddMessage(u"宗地没有数据")returnclearSelect(JZDFeature)

num=getCount(JZDFeature)if num<1:

arcpy.AddMessage(u"宗地没有数据")return

for row in arcpy.da.SearchCursor(ZDFeature, ["OID@", "SHAPE@",ZDHFieldName]):

FID=row[0]

pgeometry=row[1]

ZDH=row[2]

writeXLS(ZDH,pgeometry)defprintauthor(toolname):

titlestr=""sumn=60Fill='*'titlestr=titlestr.ljust(sumn,Fill)

arcpy.AddMessage(titlestr)

arcpy.AddMessage(midFill(sumn,u"欢迎使用:"+toolname,Fill))

mystr=u"本工具闫磊编写QQ:276529800,电话:18987281928"arcpy.AddMessage(midFill(sumn,mystr,Fill))

mystr=u"使用前请做好数据备份,工具产生的不良后果请自行承担!"arcpy.AddMessage(midFill(sumn,mystr,Fill))

arcpy.AddMessage(titlestr)

ZDFeature= arcpy.GetParameterAsText(0) #宗地

ZDHFieldName=arcpy.GetParameterAsText(1) #宗地号字段

JZDFeature=arcpy.GetParameterAsText(2) #输出数据

JZDHFieldName=arcpy.GetParameterAsText(3) #界址点号字段

outpath=arcpy.GetParameterAsText(4) #路径

arcpy.env.overwriteOutput=True#printauthor(u"部标准坐标导入")

if notos.path.exists(outpath):

os.makedirs(outpath)

main()

arcgis出界址点成果表_界址点成果表打印相关推荐

  1. 除留余数法构造哈希表_哈希表算法原理

    基本概念 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 哈 ...

  2. 数据透视表和数据交叉表_数据透视表的数据提取

    数据透视表和数据交叉表 Consider the data of healthcare drugs as provided in the excel sheet. The concept of piv ...

  3. 查询列名在哪张表_探索SQL-多表查询

    一.表的加法(Union) 1.用法:将两个表合并成一个表 2.语句: select 查询结果 from 从哪张表查询 union select 查询结果 from 从哪张表查询 *需保留重复行* s ...

  4. thinkphp mysql分表_数据库分表和分库的原理及基于thinkPHP的实现方法

    为什么要分表,分库: 当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类 ...

  5. java hash 分库分表_分库分表方案

    摘自:Java技术栈 一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值. 在业务Service来看就是,可用数据库连接少 ...

  6. java 跳表_数据结构跳表学习并用Java实现

    前面学习很多类的源码过程中,底层基本都是数组和链表,今天学习第三种结构跳表(SkipList). 跳表解决的问题 一个有序的数组如果我们要判断一个数据是否存在可以通过二分查找法非常快速的判断出来,但是 ...

  7. python 哈希表_哈希表哪家强?编程语言找你来帮忙!

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自编程技术宇宙 哈希表华山论剑 比特宇宙编程语言联合委员会准备举办一次大会,主题为哈希 ...

  8. 表3.5 文章管理测试用例表_本地管理表空间管理机制

    表空间是一种为段(表,索引等)提供空间的逻辑结构,所以,当在表空间中增加,删除段的时候,数据库就必须跟踪这些空间的使用. 如下例所示,假定一个新创建的表空间包含了五个表 表一--表二--表三--表四- ...

  9. mysql frm ibd 创建表_通过.frm表结构和.ibd文件恢复数据

    整个恢复过程其实可以总结为下面几步: (1):恢复表结构 (2):复制出来创建表的sql语句 (3):恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要 ...

最新文章

  1. Asp.net中多项目共享Session
  2. [转]OpenStack的网络模式
  3. Android 网络图片浏览器( ImageView )【网络访问、线程、handler(消息处理器)、Internet权限、Get请求、输入流转图片】
  4. 连载:阿里巴巴大数据实践—实时技术
  5. getsockname与getpeername用法与区别
  6. 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe
  7. java ee jsp_EE JSP:Servlet的反向外套
  8. 关于更改当前公司(一)--ChangeCompany
  9. Go语言开发设置代理Goproxy,提高Go安装模块速度
  10. 三维数学基础(一)坐标系、向量、矩阵
  11. 谈谈计算机专业职业技能,计算机专业职业技能论文
  12. 《Word排版艺术》读后感——兼谈与LaTeX的比较
  13. 【大数据24小时】“天智一号”卫星将在太空计算数据;“电子身份证”亮相支付宝
  14. Intellij idea 最新版永久破解
  15. Matlab系统辨识工具箱
  16. 原生JS调取PC端摄像头源码记录
  17. Live800:如何拯救客服的烦恼,让服务和营销更简单?
  18. Ubuntu20.04实时显示CPU、内存、网速
  19. ABAP 销售订单创建BAPI:BAPI_SALESORDER_CREATEFROMDAT2总结
  20. 将MongoDB添加到windows服务中

热门文章

  1. matlab knnsearchidx,matlab查找最临近搜索knnsearch
  2. java atlas mysql_使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
  3. python模糊图像清晰化_视频模糊图像处理
  4. 野火stm32呼吸灯程序_说一说STM32启动过程
  5. Real提示“作为受限用户,您无足够的windows操作权限”的解决办法
  6. W3C近期要闻:W3C战略重点报告新版发布
  7. 公众号 -「前端攻略 开光篇」
  8. SharePoint CAML In Action——Part I
  9. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...
  10. JAVA中的命令模式实例教程