从坐标文件mdb中生成图形_批量

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

import arcpy

import pyodbc

import os

# 指定工作空间

arcpy.env.workspace = r"E:\shp"

# 2000坐标系

fc_2000 = "YDBP_2000.shp"

cursor_2000 = arcpy.da.InsertCursor(fc_2000, ["FLOWSN", "XMMC", "KCID", "DKID", "COOR_TYPE", "[email protected]"])

# 80坐标系

fc_80 = "YDBP_80.shp"

cursor_80 = arcpy.da.InsertCursor(fc_80, ["FLOWSN", "XMMC", "KCID", "DKID", "COOR_TYPE", "[email protected]"])

# 未知坐标系

fc_unknown = "YDBP_unknown.shp"

cursor_unknown = arcpy.da.InsertCursor(fc_unknown, ["FLOWSN", "XMMC", "KCID", "DKID", "COOR_TYPE", "[email protected]"])

# 根据需要设置变量:流程号、项目名称、勘测定界ID、地块ID、坐标系类型

FLOWSN = ""

XMMC = ""

KCID = ""

DKID = ""

COOR_TYPE = ""

count = 0

# 遍历每个mdb文件

path = r"E:\LYMDB"

mdblist = os.listdir(path)

try:

for mdbfile in mdblist:

# 获取项目名称

XMMC = mdbfile[:-4]

print XMMC.decode("gb2312") + " is beginning..."

# 获取mdb文件的完整路径

mdbfullpath = os.path.join(path, mdbfile)

# 根据本机的驱动程序编写连接字符串

# mdbsource = r‘DRIVER={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=‘ + mdbfullpath + ‘;‘

mdbsource = r‘DRIVER={Microsoft Access Driver (*.mdb)};DBQ=‘ + mdbfullpath.decode("gb2312") + ‘;‘

with pyodbc.connect(mdbsource) as dbconn:

cur = dbconn.cursor()

# 根据勘测定界技术说明,获得勘测ID与坐标系的对应关系

xysql = "select * from DELIMITATION_TAC order by SB_SB_ID;"

cur.execute(xysql)

xyalldata = cur.fetchall()

xynum = len(xyalldata)

xydict = {}

if xynum > 0:

for xyid in range(xynum):

xydict[xyalldata[xyid][26]] = xyalldata[0][23]

# 根据勘测定界表,获取FLOWSN,勘测ID与地块ID的对应关系

kcidsql = "select * from PLOT order by PL_ID;"

cur.execute(kcidsql)

kcidalldata = cur.fetchall()

kcidnum = len(kcidalldata)

kcdict = {}

if kcidnum > 0:

FLOWSN = kcidalldata[0][14]

for id in range(kcidnum):

kcdict[kcidalldata[id][13]] = kcidalldata[id][15]

# 根据坐标点顺序升序排序,并获取界址点成果表

sql = "select * from PNT_COORD order by PL_ID,PNT_SERIAL;"

cur.execute(sql)

alldata = cur.fetchall()

# 计算成所有坐标行数,包括表头

rownum = len(alldata)

# 存放坐标点的列表

polygonarray = arcpy.Array()

# 根据需要,设置字段

PNT_SERIAL = ""

PL_ID = ""

# 遍历读取坐标表中的坐标

for i in range(1, rownum, 1):

row = alldata[i]

X_COORD = row[1]

Y_COORD = row[2]

PNT_SERIAL = row[7]

PL_ID = row[9]

# 对DKID第一次赋值

if DKID == "":

DKID = row[9]

# 生成坐标点

pnt = arcpy.Point()

pnt.ID = int(PNT_SERIAL)

pnt.X = float(Y_COORD)

pnt.Y = float(X_COORD)

# 如果地块ID发生变化,说明包含多个地块

if DKID == PL_ID:

polygonarray.add(pnt)

else:

# 生成面要素

poly = arcpy.Polygon(polygonarray)

# 根据地块ID找到对应的勘测ID

KCID = kcdict[DKID]

# 根据勘测ID获取坐标系类型

COOR_TYPE = xydict[KCID]

# 追加到要素类中

if COOR_TYPE == u"80国家大地坐标系":

cursor_80.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

elif COOR_TYPE == u"2000国家大地坐标系":

cursor_2000.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

else:

cursor_unknown.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

# 将新的地块ID赋值给fid

DKID = row[9]

# 清除掉之前的坐标点,并将当前坐标点添加到polygonarray中

polygonarray.removeAll()

polygonarray.add(pnt)

if polygonarray.count > 0:

# 生成面要素

poly = arcpy.Polygon(polygonarray)

# 根据地块ID找到对应的勘测ID

KCID = kcdict[DKID]

# 根据勘测ID获取坐标系类型

COOR_TYPE = xydict[KCID]

# 根据不同的坐标系,追加到不同的图层中

if COOR_TYPE == u"80国家大地坐标系":

cursor_80.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

elif COOR_TYPE == u"2000国家大地坐标系":

cursor_2000.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

else:

cursor_unknown.insertRow([FLOWSN, XMMC, KCID, DKID, COOR_TYPE, poly])

# 计数,便于统计

count = count + 1

print mdbfile.decode("gb2312")

# 关闭mdb连接

dbconn.close()

# 将变量初始化

FLOWSN = ""

XMMC = ""

KCID = ""

DKID = ""

COOR_TYPE = ""

print "一共上图{0}个...".format(count)

except Exception as e:

print e.args

# 删除图层游标,释放资源

if cursor_2000:

del cursor_2000

if cursor_80:

del cursor_80

if cursor_unknown:

del cursor_unknown

截图如下:

原文地址:https://www.cnblogs.com/apromise/p/11595860.html

时间: 2024-10-08 11:13:46

从坐标文件mdb中生成图形_批量的相关文章

maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两

1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在target文件夹中生成一个war包: 编译之后,target目录层级下自动生成的war包,执行 maven install命令的时候自动生成,但是将war包部署到服务器上,总是提示少页面或者模块,一系列排查依旧少东西,页面和后台的控制台报错等等,页面访问不了页面找不到错误等,一系列排查错误无果,尝试性的

OpenCV C++ 计算文件夹中对象文件数目及批量处理

1 //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 2 3 //#include <afx.h> //和windows.h是一样的作用 4 #include <opencv2/opencv.hpp> 5 #include <windows.h> 6 7 using namespace cv; 8 using namespace std; 9 10 int main() 11 { 12 int count = 1; //记录文件夹中对象数目 13 1

使用python读取txt坐标文件生成挖空矿山_采矿批量

# -*-coding:utf-8-*- import arcpy import fileinput import os # 采矿权坐标格式举例 # 1,3509447.04,37493933.70 # 2,3509447.05,37495583.71 # 3,3508597.04,37495583.72 # 4,3508597.04,37494783.71 # 5,3508336.97,37494583.71 # 6,3508247.03,37493933.70 # *,1300,-400,,

使用python从xls坐标文件中生成面要素

#根据xls文件生成图形数据,并赋值其它属性信息 # coding:utf8 import arcpy import xlrd arcpy.env.workspace = r"F:\test.gdb" fc = "polygon" cursor = arcpy.da.InsertCursor(fc, ["字段1", "字段2", "字段3", "[email protected]"])

怎么移动dwg文件查看器中的图形位置

一张图纸中包括图形和文字,图形可以让读者更加容易理解,而文字则是起到了一个解释性的作用.在电脑中打开CAD图纸,需要用到dwg文件查看器,制作过CAD的朋友们都知道CAD文件的格式是dwg格式.图纸中的图形有的时候不在适合位置,就需要把他移动到一个合适的位置上,那么,如何移动呢,来看看具体的操作方法. 如果想要将CAD图形对象移动到指定位置,那么只需要使用迅捷CAD编辑器就可以对CAD图形对象进行移动操作,这是一款专业的CAD编辑软件,软件不仅可以用来浏览和查看DWG.DXF等CAD文件格式,还

怎么用PHP在HTML中生成PDF文件

原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PHP并借助FPDF来生成PDF文件.但是如今,已经有很多函数库可以使用了,并且能够从你提供的HTML文件生成PDF文档.这让原先耗时的工作变得非常简单了. FPDF是很早就被使用的,其特点如下: FPDF FPDF是一个允许使用纯PHP生成PDF文档的PHP类,换句话说,没有使用PDFlib 函数库.

Android NDK 在eclipse中生成C/C++头文件

我们知道在Android NDK开发中,让原生函数名及参数列表与java类文件的原始定义一致是繁杂而多余的,因为JDK自带一个名为javah的命令行工具来执行任务,javah工具可以为原生方法解析Java类文件并生成由原生方法声明组成的头文件.但是在开发中如果来回切换命令终端的话,可以说是很繁琐的,今天的这篇博文就来阐述一下如何在eclipse中生成头文件. (1)打开Eclipse IDE,在顶部菜单栏选择Run|External Tools|External Tools Configurat

linux中生成考核用的FAT32文件系统结构样例(二)

实验FAT32-2说明:FAT32-2\目录下的xxx.tar.gz解压后是一个FAT32文件系统的分区镜像,其DBR及备份的一些参数错误,请使用winhex手工方式修复DBR,并回答修改后的DBR的md5 HASH值. 要求: 1.利用WINHEX手工方式读取. 2.不得使用WINHEX模板功能. 3.不得使用WINHEX文件系统解析功能. 4.出错部分仅为DBR保留扇区.FAT表份数.FAT表大小.文件系统扇区总数.每簇扇区数.有效结束标志,其余部分不得修改. 5.文件系统扇区总数为可利用的

android 中生成xml文件

在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 1.通过string写入文件 String name=mEtName.getText().toString(); String age=mEtAge.getText().toString(); String Id=mEtID.getText().toString(); File file=new F