使用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,,1

#生成的shp图形存放目录

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

fc = "ck.shp"

# 如果工作空间下不存在该FeatureClass,那么新建FeatureClass

isexist = arcpy.Exists(fc)

if not isexist:

print fc + " 要素类不存在!"

# 创建插入游标,txt坐标文件名称就是项目名称

# cursor = arcpy.da.InsertCursor(fc, ["XMMC", "DKID", "DKMC", "MJ", "[email protected]"])

cursor = arcpy.da.InsertCursor(fc, ["XMMC", "[email protected]"])

# 遍历所有坐标文件

dirpath = r"F:\ck\\"

txtlist = os.listdir(dirpath)

txtname = ""

try:

# 遍历文件夹目录下所有的txt文件

for txtpath in txtlist:

txtname = txtpath.split(".")[0]

txt = fileinput.input(dirpath + txtpath)

rowstr = txt.readline()

fieldlist = []

# 外圈坐标,即外圈矿山

_xypolylist = []

# 挖空坐标,即挖空矿山

_wkpolylist = []

# 临时坐标

_tempxylist = arcpy.Array()

# 遍历单个txt坐标文件的坐标值

while rowstr:

fieldlist = rowstr.split(",")

fieldcount = len(fieldlist)

# 跳过txt坐标文件前面部门的属性描述

if fieldcount == 5:

isend = fieldlist[0]

iswk = fieldlist[4].replace("\n", "")

# 如果以*开头,标明该行是一个矿山(外圈或者内圈)结束

if isend == r"*" and (iswk == "1" or iswk == "0" or iswk == ""):

_xytemppolygon = arcpy.Polygon(_tempxylist)

_xypolylist.append(_xytemppolygon)

_tempxylist.removeAll()

print rowstr.replace("\n", "")  # 一行末尾有换行符

rowstr = txt.readline()

continue

# 挖空矿山的标识是-1

elif isend == r"*" and iswk == "-1":

_wktemppolygon = arcpy.Polygon(_tempxylist)

_wkpolylist.append(_wktemppolygon)

_tempxylist.removeAll()

print rowstr.replace("\n", "")  # 一行末尾有换行符

rowstr = txt.readline()

continue

# 读取坐标值

pnt = arcpy.Point()

# 依次为坐标点编号、纵坐标、横坐标

bh = fieldlist[0]

x = fieldlist[2].replace("\n", "")

y = fieldlist[1]

pnt.ID = bh

pnt.X = x

pnt.Y = y

_tempxylist.append(pnt)

print "第{0}个坐标是:{1},{2}".format(bh, y, x)

rowstr = txt.readline()

xypolynum = len(_xypolylist)

wkpolynum = len(_wkpolylist)

# 如果外圈矿山只有1个,挖空矿山1个或者多个,则执行裁剪,即交集取反

if xypolynum == 1 and wkpolynum >= 1:

poly = _xypolylist[0]

for j in range(wkpolynum):

poly = poly.symmetricDifference(_wkpolylist[j])

cursor.insertRow([txtname, poly])

continue

# 对于多个外圈矿山,1个或者多个挖空矿山,无法判断对哪个外圈矿山挖空

if xypolynum > 1 and wkpolynum >= 1:

print txtpath.decode("gbk") + ",无法判断挖空矿山!"

continue

# 遍历形成外圈地块

for i in range(xypolynum):

cursor.insertRow([txtname, _xypolylist[i]])

print txtpath.decode("gbk") + " is finished!"

except Exception as err:

# print (err.args[0]).decode("gbk")

print "请检查坐标格式是否正确,或者坐标存在自相交!"

else:

print "全部生成!"

del cursor

效果图如下:

测试数据:

1,3271945.18,38561194.99

2,3272376.19,38562246.99

3,3271873.19,38562717.99

4,3271443.19,38561634.99

*,400,0,,1

5,3271928.18,38561662.99

6,3271928.18,38561782.99

7,3271808.18,38561783.00

8,3271808.18,38561662.99

*,400,0,,-1

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

时间: 2024-10-11 06:29:11

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

python读取txt大文件

直接上代码: import easygui import os s4 = [] s6 = [] path = easygui.fileopenbox() if path: b = os.path.splitext(path) c = [b[0], '_trace', '.xyz'] d = ''.join(c) with open(d, 'w+') as f1: with open(path, 'r', encoding='utf-8') as f: for line in f: s1 = li

Python读取txt文件

Python读取txt文件,有两种方式: (1)逐行读取 1 data=open("data.txt") 2 line=data.readline() 3 while line: 4 print line 5 line=data.readline() (2)一次全部读入内存 1 data=open("data.txt") 2 for line in data.readlines(): 3 print line

python读取txt、csv和excel文件

一.python读取txt文件:(思路:先打开文件,读取文件,最后用for循环输出内容) fp = open('test.txt','r') lines = fp.readlines() fp.close() for line in lines: username = line.split(',')[0] password = line.split(',')[1] 注:第一句是以只读方式打开文本文件:第二个是读取所有行的数据(read:读取整个文件:readline:读取一行数据):最后一定要关

Python读取txt文件报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0

Python使用open读取txt中文内容的文件时,有可能会报错,报错内容如下:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0. 这里举一个例子:txt=open("threekingdoms.txt","r",encoding="utf-8").read(),在运行时就会报错. 要处理这个问题有两个办法,如下: 第一个办法,将编码方式由utf-8改为g

Python读取jsonlines格式文件

Python读取jsonlines格式文件 json lines文件是一种便于存储结构化数据的格式,可以一次处理一条记录.可以用作日志文件或者其他.每条json数据之间存在一个"\n"分隔符. 具体信息可以查看http://jsonlines.org/ 之前爬虫存储数据,使用了这个格式文件,但是在读取的时候,Python内置的json函数,会进行报错: 在网上找到了两个库: 1.jsonlines,文档:https://jsonlines.readthedocs.io/en/lates

使用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]"])

python——读取MATLAB数据文件 *.mat

鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题.以下代码可以解决python读取.mat文件的问题.主要使用sicpy.io即可.sicpy.io提供了两个函数loadmat和savemat,非常方便. # adapted from http://blog.csdn.net/rumswell/article/details/8545087 import scipy.io as sio #import matplotlib.p

Python读取和处理文件后缀为".sqlite"的数据文件

最近在弄一个项目分析的时候,看到有一个后缀为”.sqlite”的数据文件,由于以前没怎么接触过,就想着怎么用python来打开并进行数据分析与处理,于是稍微研究了一下. SQLite是一款非常流行的关系型数据库,由于它非常轻盈,因此被大量应用程序采用. 像csv文件一样,SQLite可以将数据存储于单个数据文件,以便方便的分享给其他人员.许多编程语言都支持SQLite数据的处理,python语言也不例外. sqlite3是python的一个标准库,可以用于处理SQLite数据库. 用sqlite

python读取txt文件以空行作为数据的切分处理

先举个例子,如下test.txt文件数据,需要提取每条数据的title和content, 单独保存到文件中: spiderTime:{'num':'12223'} title:中国保险1xxx summary: 请在xxx content: 当事人11sfdffghfhgfjjd tag:1 spiderTime:{'num':'12224'} title:中国保险2xxx summary: 请在xxx content: 当事人22sfdfffdffghfjd tag:2 spiderTime: