Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图(一个图斑一个jpg,一条数据一个jpg)

Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图

主要功能:按图斑批量出图

实际应用案例:有一个卫片图斑层(1、2、3卫片图斑),按1 2 3每个图斑出一个JPG图

主要参考文档:https://www.cnblogs.com/sunnyeveryday/p/6506347.html

功能准备:

第一 Arcgis10以上 9不行

第二 用 Data Driven Pages (数据页面驱动)

主要两个步骤

第一 用Data Driven Pages 配置好

第二 用python程序 实现批量出图

前提条件:

1. 安装了Arcgis10.2

2. 不安装notepad++,完全可以,按txt打开编辑就行,或者把下面的代码复制到txt,然后保存,把后缀改为.py,然后双击执行就可以。

执行前确定,存的文件夹存在,路径没有错误

如果安装个notepad++ 文本编辑器,执行python程序方便一点,下面是一点python的教程

其实没必要看后面的教程

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

下面是具体步骤

1. Data Driven Pages 这个自己看看,基本很好设置

打开ArcMap的Customize->Toolbars->Data Driven Pages,设置好图层、名称字段

(不能重复mxd.dataDrivenPages.pageNameField.name后面用到了,重复会发现图片缺失,因为文件名一样,前面被覆盖了;

)、排序字段、显示范围和比例尺,保存地图

mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)

这个是文件名,先in range(1,mxd.dataDrivenPages.pageCount+1): 这里改成in range(1,6):

出个6个试试看

2.layout 设置

这边可以 设置 动态文本,看看动态文本的帮助,就是说可以在界面上 显示当前图斑的,其他信息,比如 当前图斑行的,其他字段,比如所在村,卫片图斑的面积,卫片图斑的类型,卫片的图斑的其他信息 都可以

3. 在记事本打开( notepad++文本编辑器,有执行按钮),编辑两个路径 把下面这个文件另存为py后缀的文件,然后执行就行了。

# coding:utf-8

import arcpy

mxd=arcpy.mapping.MapDocument(r"F:\GeoData\ChinaArea\ChinaVector.mxd")

for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):

         mxd.dataDrivenPages.currentPageID=pageNum

         mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)

         print mapName

         arcpy.mapping.ExportToPNG(mxd,r"F:\GeoData\ChinaArea\Province\\"+mapName+".png")

print 'ok'

# 可以修改文件名称 ExportToPNG 可以看其他类似的ExportToXXX函数,设置jpg的大小等,参数,程序里边不要出现中文,中文可能失败,比如文件路径等最好不要有中文

4 到相应文件夹 查看这批JPG或者png格式的文件

F:\GeoData\ChinaArea\ChinaVector.mxd  这个是mxd存的地方 F:\GeoData\ChinaArea\Province\ 这个文件夹必须存在,

可以简单一点F:\GeoData f盘搞个文件夹GeoData

 range(1,mxd.dataDrivenPages.pageCount) 应该是mxd.dataDrivenPages.pageCount+1,以前不懂,现在看python是包括1,不包括后面的range(1,6) 只取到5

----20201010更新了下面的程序,多了个过滤  应用场景,就是一个图版一个图(相邻图版不显示,过滤掉了)

特别适合多个图斑相邻,图斑又很小的时候;或者分村出图的时候;

比如 30个村 每个村出一个图,把不是本村的过滤掉

--# coding:utf-8
import arcpy
mxd=arcpy.mapping.MapDocument(r"G:\lin.mxd")
for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.startswith("cun12"):
      dlyr=lyr
    if lyr.name.startswith("lz01"):
      dlyr01=lyr
for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):#mxd.dataDrivenPages.pageCount+1
  mxd.dataDrivenPages.currentPageID=pageNum
  mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
  print '[XZQMC] ='+"'"+mapName+"'"
  dlyr.definitionQuery ='[XZQMC] ='+"'"+mapName+"'"
  dlyr01.definitionQuery ='"LB_NAME" ='+"'"+mapName+"'"
  # shap文件这么过滤"TBYBH" ='XZ10065' 如果是数据库文件,过滤方式不一样的数据库格式[TBYBH] = 'XZ10009'
  # 数据库格式 dlyr.definitionQuery ='[TBYBH] ='+"'"+str(mapName)+"'"
  # shap格式 dlyr.definitionQuery ='"TBYBH" ='+"'"+str(mapName)+"'"
  arcpy.mapping.ExportToPNG(mxd,r"G:\lin500\\"+mapName+".png",resolution=500)
print 'ok'

---这个是开了2个动态过滤,在cun12和lz01两个层里边开的过滤,可以开一个;

----2021.8.24 增加红色的地方(支持中文),改了紫色的地方,否则文件名如果mapName是数字会报错

# coding:utf-8
import arcpy

import sys 
reload(sys) 
sys.setdefaultencoding('utf8')

mxd=arcpy.mapping.MapDocument(r"D:\gd.mxd")
for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):
         mxd.dataDrivenPages.currentPageID=pageNum
         mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
         print mapName
         arcpy.mapping.ExportToPNG(mxd,r"D:\FKWT\\"
+str(mapName)+"da22.png",resolution=200)
----

  • 15
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
可以使用 ArcPy 库来批量出图。首先,你需要编写一个 Python 脚本来导入 ArcPy 库和设置出图参数。然后使用 for 循环来遍历每个要素或层,并为每个要素或层生成一个文档 (mxd) 文件,并调用 ExportToPDF 或 ExportToJPEG 方法将地为 PDF 或 JPG 文件。 下面是一个简单的代码示例,其中假设有一个名为“layers”的层列表,每个层都需要出图: ``` import arcpy # 设置出图参数 output_folder = "C:/output/" output_format = "PDF" dpi = 300 # 遍历层列表 for layer in layers: # 创建一个新的地文档 mxd = arcpy.mapping.MapDocument("C:/map_template.mxd") # 切换到当前层 df = arcpy.mapping.ListDataFrames(mxd, "*")[0] lyr = arcpy.mapping.Layer(layer) arcpy.mapping.AddLayer(df, lyr) # 导 output_file = output_folder + layer + "." + output_format.lower() arcpy.mapping.ExportToPDF(mxd, output_file, resolution=dpi) # 清除临时层 arcpy.mapping.RemoveLayer(df, lyr) # 释放地文档资源 del mxd ``` 在上面的代码中,我们使用了 MapDocument、ListDataFrames、Layer、AddLayer、ExportToPDF 和 RemoveLayer 方法来创建和操作地文档。如果需要导 JPG 文件,只需将 output_format 设置为“JPEG”,并将 ExportToPDF 方法更改为 ExportToJPEG 即可。 对于安图斑出图,你可以使用安图斑提供的 API 来实现批量出图。具体步骤如下: 1. 登录安图斑开发者平台,创建一个应用程序。 2. 获取应用程序的 API key 和 secret。 3. 编写 Python 脚本来调用安图斑的 API,生成地并下载导的文件。 下面是一个简单的代码示例,其中假设有一个名为“layers”的层列表,每个层都需要出图: ``` import requests import json # 设置 API 访问参数 url = "https://api.anzhuo.cn/zh-cn/export/map" api_key = "your_api_key_here" api_secret = "your_api_secret_here" template_id = "your_template_id_here" output_folder = "C:/output/" # 遍历层列表 for layer in layers: # 构造 API 请求参数 payload = { "template_id": template_id, "data": { "layers": [layer] } } headers = { "Content-Type": "application/json", "x-api-key": api_key } # 发送 API 请求并获取响应 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 解析响应内容并保存导的文件 output_file = output_folder + layer + ".pdf" with open(output_file, "wb") as f: f.write(response.content) ``` 在上面的代码中,我们使用 requests 库来发送 API 请求,并使用 json 库来构造请求参数。在收到响应后,我们将导的文件保存到本地文件系统中。 需要注意的是,安图斑的 API 有使用限制,具体请参考安图斑开发者平台的文档。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值