我是靠谱客的博主 羞涩滑板,最近开发中收集的这篇文章主要介绍arcgis出界址点成果表_ArcGIS生成界址点成果表Excel的主要实现方法(arcpy),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

帮别人写了两个地方的界址点成果表制作工具,实现下面两张图片的样式。

使用arcpy获取要素界址点信息;使用pywin32操作Excel com输出界址点成果表。

其主要的代码片段有3部分。

第一部分,从要素类获取每个要素的界址点信息,包括点号、坐标、距离,把这些信息装入List,注意在每个部分的起点位置距离标记为None。

第二部分,使用PyWin32库通过操作Excel COM,目的是被第三部分调用。

第三部分,将List的信息写入到Excel模板,注意根据模板中每页的行数计算所需的Sheets个数。

前两部分的代码贴到下面,第三部分的代码需要根据实际情况写实现代码。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import arcpy

import os

import math,numpy

import win32com.client

import win32api

class ExcelWriter:

def __init__(self,filename=None):

if os.path.exists(filename):

self.xlApp=win32com.client.DispatchEx('Excel.Application')

self.filename=filename

self.xlWb=self.xlApp.Workbooks.open(filename)

def setCurrentSheet(self,index):

self.xlWs=self.xlWb.Worksheets(index)

def createNewSheetFromSheet1(self,nameofcopy):

lastSheet=self.xlWb.Worksheets(self.xlWb.Worksheets.Count)

templateSheet=self.xlWb.Worksheets(1)

templateSheet.Copy(None,lastSheet)

newSheet=self.xlWb.Worksheets(self.xlWb.Worksheets.Count)

newSheet.Name=nameofcopy

def deleteSheetsExceptSheet1(self):

self.xlApp.DisplayAlerts = False

sheetsCount=self.xlWb.Worksheets.Count

if sheetsCount>1:

for i in range(sheetsCount,1,-1):

self.xlWb.Worksheets(i).Delete()

def clearContentsOfSheet(self,index):

self.xlWb.Worksheets(index).Range("A10:G58").ClearContents()

def setCell(self,row,col,val):

self.xlWs.Cells(row,col).Value=val

def mergeCell(self,startRow,startCol,endRow,endCol):

self.xlWs.Range(self.xlWs.Cells(startRow,startCol),self.xlWs.Cells(endRow,endCol)).Merge()

def saveAs(self,savePath):

self.xlWb.SaveCopyAs(savePath.decode('utf-8'))

def close(self):

self.xlWb.Close()

self.xlApp.Quit()

def getDistance(pointStartX,pointStartY,pointEndX,pointEndY):

p1=numpy.array([pointStartX,pointStartY])

p2=numpy.array([pointEndX,pointEndY])

p3=p2-p1

p4=math.hypot(p3[0],p3[1])

return round(p4,2)

def getPointListOfPolygon(row):

lst=[]

startNum=1

for part in row[0]:

countNum=startNum

for point in part:

if point:

if countNum==startNum:

lst.append(['J%s'%countNum,round(point.X,3),round(point.Y,3),None] )

countNum+=1

else:

lastIndexOflst=len(lst)-1

beforeX=lst[lastIndexOflst][1]

beforeY=lst[lastIndexOflst][2]

thisX=round(point.X,3)

thisY=round(point.Y,3)

lst.append(['J%s'%countNum,thisX,thisY,getDistance(beforeX,beforeY,thisX,thisY)] )

countNum+=1

else:

lastIndexOflst=len(lst)-1

lst[lastIndexOflst][0]='J%s'%startNum

countNum-=1

startNum=countNum

lastIndexOflst=len(lst)-1

lst[lastIndexOflst][0]='J%s'%startNum

return lst

欢迎关注本人博客,如需源码或定制,可通过博客获取本人联系方式。yzhyingcool的主页 - 博客园​home.cnblogs.com

最后

以上就是羞涩滑板为你收集整理的arcgis出界址点成果表_ArcGIS生成界址点成果表Excel的主要实现方法(arcpy)的全部内容,希望文章能够帮你解决arcgis出界址点成果表_ArcGIS生成界址点成果表Excel的主要实现方法(arcpy)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部