python arcgis出图,界址点成果表,生成界址点

这篇具有很好参考价值的文章主要介绍了python arcgis出图,界址点成果表,生成界址点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

-- coding: utf-8 --

import win32com.client
import xlrd, time
import xlwt, os, traceback
from site import addsitedir
from sys import executable
import sys, time
from os import path
interpreter = executable
sitepkg = path.dirname(interpreter) + “\temp\Lib\site-packages”
addsitedir(sitepkg)
import math, arcpy, shutil
import sys
reload(sys)
sys.setdefaultencoding(‘utf8’) # 设置默认编码格式为’utf-8’
#计算两点的距离
def distance1(x1, y1, x2, y2):
return math.sqrt((x2-x1)**2+(y2-y1)**2)

def distance(x1, y1, x2, y2):
return math.sqrt((x2-x1)**2+(y2-y1)**2)

#############################添加界址点成果表##############################
def line_width(horiLine, x, y, len1):
hori_Clone = horiLine.clone(“_atrr”)
hori_Clone.elementPositionX = x
hori_Clone.elementPositionY = y
hori_Clone.elementWidth = len1

def line_height(horiLine, x, y, len1):
hori_Clone = horiLine.clone(“_atrr”)
hori_Clone.elementPositionX = x
hori_Clone.elementPositionY = y
hori_Clone.elementHeight = len1

def mian_copy(horiLine, x, y, h, w):
hori_Clone = horiLine.clone(“_atrr”)
hori_Clone.elementPositionX = x
hori_Clone.elementPositionY = y
hori_Clone.elementHeight = h
hori_Clone.elementWidth = w

def text_copy(tText, x, y , text):
tText = tText.clone(“_atrr”)
tText.text = str(text)
tText.elementPositionY =y
tText.elementPositionX = x

def yess(X1, Y1, X2, Y2, tem, len_1):
w = X1 - 1
e = Y1 - 1
x1 = 1
y1 = 1
x2 = X2 - w
y2 = Y2 - e
k = ((y2-y1)/(x2-x1))*(y2-y1)/(x2-x1)

a = 1 + k
b = -2*(1+k)
c = x1*x1*(1+k) - len_1 * len_1*k
x = yes(a, b, c)[tem]
y = (x-x1)*(x2-x1)/(y2-y1) + y1
return y+w, x +e

def jzd_cgb(mapdoc, list_jzd, mj, XMin, YMin, bl):
line_h = arcpy.mapping.ListLayoutElements(mapdoc, “”, “line_h”)[0]
line_s = arcpy.mapping.ListLayoutElements(mapdoc, “”, “line_s”)[0]
text_jzd = arcpy.mapping.ListLayoutElements(mapdoc, “”, “text_jzd”)[0]
text_xy = arcpy.mapping.ListLayoutElements(mapdoc, “”, “text_xy”)[0]
mian = arcpy.mapping.ListLayoutElements(mapdoc, “”, “mian”)[0]
jzdt = arcpy.mapping.ListLayoutElements(mapdoc, “”, “jzdt”)[0]
jzdh = arcpy.mapping.ListLayoutElements(mapdoc, “”, “jzdh”)[0]
# horiLine = arcpy.mapping.ListLayoutElements(mapdoc, “GRAPHIC_ELEMENT”, “app”)[0]
sl = 0
sl_y = 2.1
z_dj = 0#点数
for xys in list_jzd:
sls = sl * 4.72
# list_jzd = list_jzd + list_jzd[:1]
a = len(list_jzd[xys])
##########################
######设置成果表的左下角坐标
#############################
sls_x = sls
sls_y = sl_y
jzd_x = 15.2555 - sls_x
jzd_y = sls_y
z_dj += a
if z_dj >= 15:
sl += 1
sl_y = 2.1
z_dj = 0
else:
sl_y = a * 0.3 + jzd_y + 0.3 + 0.7
print(z_dj)
#############################
###########添加界址点成果表##
############################

    sum_h = a * 0.3 + 0.3 + 0.7
    mian_copy(mian, jzd_x, jzd_y, sum_h, 4.72)
    sum_h = sum_h + jzd_y
    i = 1
    # 放置注记
    for xyz in list_jzd[xys]:
        xy = xyz[1:3]
        xh = xyz[0]
        text_copy(text_xy, jzd_x + 1.495, sum_h - 0.553 - 0.3 * i, '%.3f' % xy[1])  # x
        text_copy(text_xy, jzd_x + 3.005, sum_h - 0.553 - 0.3 * i, '%.3f' % xy[0])  # y
        if i != a:
            bc = round(distance(xy[0], xy[1], list_jzd[xys][i][1], list_jzd[xys][i][2]), 2)
            text_copy(text_xy, jzd_x + 0.38, sum_h - 0.553 - 0.3 * i, 'J%s' % xh)  # 序号
            output_point(xy[0], xy[1], 'J%s' % xh, XMin, YMin, bl, jzdt, jzdh, mj[xys][1])
            if list_jzd[xys][i][0] - xh < 2:
                text_copy(text_xy, jzd_x + 4.2646, sum_h - 0.553 - 0.15 - 0.3 * i, bc)  # 边长
        else:
            text_copy(text_xy, jzd_x + 0.38, sum_h - 0.553 - 0.3 * i, 'J%s' % xh)  # 序号
        line_width(line_h, jzd_x, sum_h - 0.7 - 0.3 * i, 3.72)
        line_width(line_h, jzd_x + 3.72, sum_h - 0.55 - 0.3 * i, 1)
        i += 1
    # 标题右下角的y坐标
    h = a * 0.3 + jzd_y + 0.3
    # 画边长最后一根横线
    # line_width(line_h, 25.9, 2.95, 1)
    # 画界线内面积横线
    line_width(line_h, jzd_x, jzd_y, 4.72)
    line_width(line_h, jzd_x, jzd_y + 0.3, 4.72)
    text_copy(text_xy, jzd_x + 2.402, jzd_y + 0.158, '界线内面积:%s平方米 合%s公顷' % (round(mj[xys][0], 2), round(mj[xys][0] / 10000, 4)))
    # 画标题横线
    line_width(line_h, jzd_x, h, 4.72)
    line_width(line_h, jzd_x, h + 0.3, 4.72)
    line_width(line_h, jzd_x, h + 0.7, 4.72)
    text_copy(text_xy, jzd_x + 0.38, sum_h - 0.553, '点号')
    text_copy(text_xy, jzd_x + 1.495, sum_h - 0.553, 'X')
    text_copy(text_xy, jzd_x + 2.9321, sum_h - 0.553, 'Y')
    text_copy(text_xy, jzd_x + 4.2646, sum_h - 0.553, '边长')
    text_copy(text_jzd, jzd_x + 2.3193, sum_h - 0.2004, '界址点成果表')
    # 画竖线
    height = a * 0.3 + 0.3
    line_height(line_s, jzd_x, jzd_y, height + 0.7)
    line_height(line_s, jzd_x + 0.75, jzd_y + 0.3, height)
    line_height(line_s, jzd_x + 2.27, jzd_y + 0.3, height)
    line_height(line_s, jzd_x + 3.72, jzd_y + 0.3, height)

def select_ssnyd(path_ssnyd, name_zd, value_zd, tj):
list_ssnyd = {}
if tj == 0:
#qry = ‘“FID” LIKE ’ + "’%%‘"
qry = ‘’
else:
qry = ‘“%s” LIKE ’ % name_zd + "’%s’"%value_zd
print qry
xmmc = 1
tem = 1
ye_tem = 1
list1 = {}
list_mj = {}
with arcpy.da.SearchCursor(path_ssnyd, (“SHAPE@”, “SHAPE@AREA”, “SHAPE@XY”, “FID”), qry) as cursor:#, qry
for row in cursor:
list_jzd = []
for part in row[0]:
i = 0
for point in part:
try:
if i == 0:
x = point.X
y = point.Y
list_jzd.append([tem, point.X, point.Y])
tems = tem
tem += 1
if distance1(point.X, point.Y, part[i-1].X, part[i-1].Y) > 2:
if i != len(part) - 1:
list_jzd.append([tem, point.X, point.Y])
tem += 1
except:
pass
i += 1
list_jzd.append([tems, x, y])
ye_tem += 1
mj = round(row[1],2)
list1[ye_tem] = list_jzd
list_mj[ye_tem] = [mj, row[2]]
xmmc += 1
return list1, list_mj

import math
def yes(a, b, c):
# a = float(input(“请输入a的值:”))
# b = float(input(“请输入b的值:”))
# c = float(input(“请输入c的值:”))
d=b**2-4ac
if (d<0):
print(“无解”)
else:
e = math.sqrt(d)
x1=((-b+e)/(2a))#调用math模块中sqrt开平方函数
x2=((-b-e)/(2
a))
return x1, x2

def output_point(x, y, text, XMin, YMin, bl, jzdt, jzdh, xy):
print xy
x = (x - XMin) / bl + 1
y = (y - YMin) / bl + 2.1
x1 = (xy[0] - XMin) / bl + 1
y1 = (xy[1] - YMin) / bl + 2.1
if y > y1:
tem = 0
else:
tem = 1
x1, y1 = yess(x, y, x1, y1, tem, 0.4)
text_copy(jzdh, x1, y1, text)
hori_Clone = jzdt.clone(“_atrr”)
hori_Clone.elementPositionX = x
hori_Clone.elementPositionY = y

def out_put_jpg(path, zty, ztrq, xmmc, sctj, ctgs, fbl, path_ct, list_1, list_scmj, path_adddata, name_zd, value_zd, tj, list_jpg_path):

path_mxd = os.path.join(path, '地类还原', 'rcct1.mxd')
mapdoc = arcpy.mapping.MapDocument(path_mxd)
layers = arcpy.mapping.ListLayers(mapdoc)
listdf = arcpy.mapping.ListDataFrames(mapdoc)
# 替换路径
a, b = os.path.split(path_adddata)
c, d = os.path.splitext(b)
layers[0].replaceDataSource(a, "SHAPEFILE_WORKSPACE", c)
if tj == 0:
    qry = ''
    #qry = '"%s" LIKE ' % name_zd + "'%%'"
else:
    qry = '"%s" LIKE ' % name_zd + "'%s'" % value_zd
    xmmc = value_zd
layers[0].definitionQuery = qry
arcpy.SelectLayerByAttribute_management(layers[0], "ADD_TO_SELECTION", qry)
listdf[0].zoomToSelectedFeatures()  # 缩放至图层
listdf[0].scale = int(listdf[0].scale * 1.6 / 100 + 1) * 100
Extent = listdf[0].extent
XMin = Extent.XMin
XMax = Extent.XMax
YMin = Extent.YMin
YMax = Extent.YMax
bl =(XMax-XMin)/19
jzd_cgb(mapdoc, list_1, list_scmj, XMin, YMin, bl)
arcpy.SelectLayerByAttribute_management(layers[0], "CLEAR_SELECTION")
#设置标题
bt_xmmc = arcpy.mapping.ListLayoutElements(mapdoc, "", "xmmc")[0]
bt_zty = arcpy.mapping.ListLayoutElements(mapdoc, "", "zty")[0]
bt_ztrq = arcpy.mapping.ListLayoutElements(mapdoc, "", "ztrq")[0]
bt_ztrq1 = arcpy.mapping.ListLayoutElements(mapdoc, "", "ztrq1")[0]
if len(xmmc) > 10:
    bt_xmmc.text = '%s\n土地利用总体规划(2010-2020)(局部)' % xmmc
else:
    bt_xmmc.text = '%s土地利用总体规划(2010-2020)(局部)'%xmmc
bt_zty.text = '制图员:%s'%zty
bt_ztrq.text = '制图日期:%s'%ztrq
bt_ztrq1.text = '%s'%ztrq
#输出规划图
yx_jpg = os.path.join(path_ct, 'ght_%s.jpg' % xmmc)
list_jpg_path.append(yx_jpg)
arcpy.mapping.ExportToJPEG(mapdoc, yx_jpg, resolution=int(fbl))
mapdoc.saveACopy(os.path.join(path_ct, 'ght_%s.mxd'% xmmc))

#输出现状图
#移除规划图图例
txtl = arcpy.mapping.ListLayoutElements(mapdoc, "", "txtl_ght")[0]
txtl.elementPositionX = -8
txtl.elementPositionY = 2.1
#添加现状图图例
txtl = arcpy.mapping.ListLayoutElements(mapdoc, "", "txtl_xzt")[0]
txtl.elementPositionX = 1
txtl.elementPositionY = 2.1
if len(xmmc) > 15:
    bt_xmmc.text = '%s2018年度土地利用现状(局部)' % xmmc
else:
    bt_xmmc.text = '%s\n2018年度土地利用现状(局部)' % xmmc
arcpy.mapping.RemoveLayer(listdf[0], layers[1])
layers[2].showLabels = True
yx_jpg = os.path.join(path_ct, 'xzt_%s.jpg' % xmmc)
list_jpg_path.append(yx_jpg)
arcpy.mapping.ExportToJPEG(mapdoc, yx_jpg, resolution=int(fbl))
mapdoc.saveACopy(os.path.join(path_ct, 'xzt_%s.mxd' % xmmc))
del mapdoc

def selecte_zd(path_shp, name_zd):
list1 = []
with arcpy.da.SearchCursor(path_shp, (name_zd)) as cursor:#, qry
for row in cursor:
list1.append(row[0])
return list(set(list1))

def ye_main():
list_jpg_path = []
path = os.path.join(os.path.split(os.path.split(sys.argv[0])[0])[0]).decode(“gbk”)
file2 = open(os.path.join(path, ‘process_data’, ‘output.txt’), ‘w+’)
try:
xmxx = {}
with open(os.path.join(path, ‘process_data’, ‘select_rcct.txt’)) as f:
for line in f.readlines():
list_txt = line.replace(‘\n’, ‘’).split(‘$’)
xmxx[list_txt[0]] = list_txt[1]
zty = xmxx[‘制图员’]
ztrq = xmxx[‘制图日期’]
xmmc = xmxx[‘项目名称’]
sctj = xmxx[‘输出条件’]
ctgs = xmxx[‘出图格式’]
fbl = xmxx[‘分辨率’]
path_ct = xmxx[‘保存路径’]
path_adddata = xmxx[‘出图路径’]
name_zd = xmxx[‘字段名称’]
if sctj == ‘全部输出为一张’:
list_1, list_scmj = select_ssnyd(path_adddata, ‘’, ‘’, 0)
out_put_jpg(path, zty, ztrq, xmmc, sctj, ctgs, fbl, path_ct, list_1, list_scmj, path_adddata, ‘’,‘’,0, list_jpg_path)
else:
list_name_zd = selecte_zd(path_adddata, name_zd)
for value_zd in list_name_zd:
list_1, list_scmj = select_ssnyd(path_adddata, name_zd, value_zd, 1)
out_put_jpg(path, zty, ztrq, xmmc, sctj, ctgs, fbl, path_ct, list_1, list_scmj, path_adddata, name_zd, value_zd, 1, list_jpg_path)
file2.write(‘\n’.join(list_jpg_path))
except:
file2.write(‘出错了’.encode(‘gbk’))
file2.write(‘%s’%traceback.format_exc())

file2.close()

if name == ‘main’:
ye_main()文章来源地址https://www.toymoban.com/news/detail-437869.html

到了这里,关于python arcgis出图,界址点成果表,生成界址点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AI绘画】秒级出图 快速生成大师级画作

    最近闲来无事,在网上体验了一下各种AI绘画工具。 根据输入的描述语快速生成自己想要的图片,听着还是很不错的!想要啥图片就可以生成啥图片?于是,期待满满的搞起来了~ 可是真当体验了一下之后… 这生成的啥呢?有的生成器生成的图片简直不忍直视,不过好在我锲

    2024年02月13日
    浏览(37)
  • 51.pyinstaller打包后,打开exe程序提示SyntaxError: Non-UTF-8 code starting with '\x90' in file的问题

    问题: 最后开发了一款小工具,然后确定一切测试没有问题,想通过pyinstaller将其打包成exe,像类似的打包以前也经常打包的,复杂一点的也都是打包成功的,但这里感觉程序很简单,打包居然出现了以下错误。 我的python版本是3.8.9,然后pyinstaller版本是5.9.0,不知道会不会是

    2024年02月11日
    浏览(38)
  • 【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

    使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。  如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和

    2024年02月06日
    浏览(47)
  • ArcGIS Pro怎么生成高程点

    一般情况下,我们从公开渠道获取到的高程数据都是DEM数据,但是如果要用到CAD等软件内则需要用到高程点,那么如何从DEM提取高程点呢,这里为大家介绍一下生成方法,希望能对你有所帮助。 本教程所使用的数据是从水经微图中下载的DEM数据,除了DEM数据,常见的GIS数据都

    2024年02月06日
    浏览(41)
  • 如何使用ArcGIS Pro生成等高线

    无论在制图还是规划中,经常会使用到等高线,大多数情况下,从网上获取的高程数据都是DEM文件,我们可以通过ArcGIS Pro来生成等高线,这里为大家介绍一下生成方法,希望能对你有所帮助。 教程所使用的数据是从水经微图中下载的DEM数据,除了DEM数据,常见的GIS数据都可

    2024年02月22日
    浏览(39)
  • 【ArcGIS微课1000例】0072:如何生成空间权重矩阵

    严重声明:本文来自专栏《ArcGIS微课1000例:从点滴到精通》,为CSDN博客专家刘一哥GIS原创,原文及专栏地址为:(https://blog.csdn.net/lucky51222/category_11121281.html),谢绝转载或爬取!!! 构建一个空间权重矩阵 (.swm) 文件,以表示数据集中各要素间的空间关系。 空间统计并不意味

    2024年02月11日
    浏览(35)
  • Axes3D绘制3d图不出图解决办法【Python】

    运行下面一段代码​: ​ 可能出现的结果是:(版本问题导致) ​解决办法: 添加一条代码: ​全部完整代码如下: ok.

    2024年02月09日
    浏览(37)
  • python3.10 Axes3D绘制3d图不出图解决办法

    这是网上大多都这样写的,执行发现一片空白不出图。 百度之后,有说降到3.8就可以了,结论是3.9以上已经不支持此绘图了。 继续查找,随后有说加fig.add_axes(ax) 试了试,出图了

    2024年02月11日
    浏览(43)
  • SQ工具|5|界址点顺时针编号

    顺时针编码工具,是 以宗地节点的起始点为起点 ,沿着宗地的边,对界址点进行顺时针编码。 点击顺时针编码工具,界面如图所示  界面介绍: 1.首尾去重,当同属于一个宗地的界址点在起始点存在重复时,勾选此功能可去除重复点编号。 2.编号带\\\'J\\\':为界址点的编号前加一

    2024年02月13日
    浏览(40)
  • 基于 OpenCV 的 Code128 条码识别与生成

    最近有一个项目需要识别 Code128 条码, 本来想用 OpenCV 里面现成的 barcode 库来实现, 可一用发现只能定位到条码位置, 并不能解码, 看了原码才知道不能解码 Code128 类型的条码, 所以就只有自己弄一个了 下图是本文用来当实例的条码 灰度拉伸(主要是为了增强图像对比度, 这一个

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包