arcgis TXT转shp文件
# -*- coding: UTF-8 -*-
import arcpy, os, sys
import pythonaddins
class ButtonClass1(object):
"""Implementation for txt_shp_addin.button (Button)"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
path_txt = pythonaddins.OpenDialog(u'选择要转成shp的txt文件', False, "D:")
a, b = os.path.split(path_txt)
a, b = os.path.splitext(b)
path_shp = pythonaddins.SaveDialog(u'选择shp保存路径', a, "D:", filter_label=['Shapefile'])
if path_shp[-4:] != '.shp':
a, b = os.path.split(path_shp)
path_shp = os.path.join(a, '%s.shp'%b)
print path_shp
txt_shp(path_txt, path_shp)
pythonaddins.MessageBox(u'完成', 'INFO', 0)
def setect_txt(path_txt):
list1 = {}
list2 = {}
with open(path_txt, "r") as f:
i = 1
ii = 1
for line in f:
#if i >33:
list_xy1 = list(line.strip('\n').split(','))
if '@'in line:
ii += 1
if len(list_xy1) == 4:
# ii += 1
list1.setdefault(str(ii) + '$' + list_xy1[1], []).append([str(list_xy1[3]), str(list_xy1[2])])
if len(list_xy1) == 9:
jzds, mj, dkbm, dkmc, m, thf, yt, a, b = list_xy1
list2.setdefault(ii, []).append(list_xy1)
i += 1
return list1, list2
def txt_shp(path_txt, path_shp):
list_txt, list2 = setect_txt(path_txt)
# a, b = os.path.split(path_shp)
# arcpy.CreateFeatureclass_management(a, b, "Polygon", "", "DISABLED",
# "DISABLED")
list_txts = {}
#print list_txt
for i in list_txt:
list_txts.setdefault(i.split('$')[0], []).append(list_txt[i])
features = []
ii = 2
for i in list_txts:
list1 = []
for list_xy in list_txts[str(ii)]:
print list_xy
list11 = []
for p in list_xy:
list11.append(arcpy.Point(*p))
print p
list1.append(arcpy.Array(list11))
features.append(arcpy.Polygon(arcpy.Array(list1), arcpy.SpatialReference(4526)))
# 调用复制要素工具,将内存中的features列表创建为shapefile
ii += 1
arcpy.CopyFeatures_management(features, path_shp)
arcpy.AddField_management(path_shp, "界址点数", "TEXT", 10)
arcpy.AddField_management(path_shp, "地块面积", "FLOAT", 15, 5)
arcpy.AddField_management(path_shp, "地块编码", "TEXT", 50)
arcpy.AddField_management(path_shp, "地块名称", "TEXT", 50)
arcpy.AddField_management(path_shp, "图幅号", "TEXT", 20)
arcpy.AddField_management(path_shp, "用途", "TEXT", 10)
cur = arcpy.da.UpdateCursor(path_shp, ("界址点数", "地块面积", "地块编码", "地块名称", "图幅号", "用途"))
i = 2
#print list2
for row in cur:
jzds, mj, dkbm, dkmc, m, thf, yt, a, b = list2[i][0]
row[0] = jzds
row[1] = mj
row[2] = dkbm
row[3] = dkmc
row[4] = thf
row[5] = yt
array = arcpy.Array()
point1 = arcpy.Point()
id = 1
# for part in row[6]:
# for point in part:
# point1.ID = id
# point1.X = round(point.X,3)
# point1.Y = round(point.Y,3)
# array.add(point1)
# id += 1
# polygon = arcpy.Polygon(array)
cur.updateRow([row[0], row[1], row[2], row[3], row[4], row[5]])
i += 1
del cur
if __name__ == '__main__':
path_txt = r"E:\微信\WeChat Files\wxid_z5ik6og9uvs421\FileStorage\File\2022-11\糖厂\44162120100048.txt"
path_shp = r"E:\微信\WeChat Files\wxid_z5ik6og9uvs421\FileStorage\File\2022-11\糖厂\3.shp"
#txt_shp(path_txt, path_shp)
# coding=utf-8
# import arcpy
#
# # 3个环的组成点集合
points1 = [[38571226.061,2603762.019],[38571219.268,2603737.175],[38571214.804,2603712.72],[38571216.163,2603706.897],[38571220.433,2603702.045],[38571226.137,2603696.217],[38571206.368,2603681.38],[38571201.212,2603677.906],[38571190.454,2603672.443],[38571187.26,2603661.264],[38571177.904,2603657.995],[38571170.183,2603652.392],[38571163.775,2603645.036],[38571142.422,2603664.716],[38571141.918,2603670.842],[38571136.42,2603675.22],[38571132.636,2603677.651],[38571130.012,2603679.343],[38571114.309,2603696.384],[38571093.319,2603707.355],[38571092.093,2603707.832],[38571086.947,2603708.617],[38571087.093,2603708.838],[38571091.557,2603717.184],[38571105.92,2603758.525],[38571108.443,2603763.571],[38571112.13,2603766.094],[38571131.54,2603768.812],[38571150.56,2603765.9],[38571184.332,2603757.748],[38571189.767,2603757.749],[38571196.172,2603759.884],[38571200.635,2603763.571],[38571207.817,2603767.259],[38571214.61,2603769.394],[38571220.239,2603769.394],[38571225.091,2603766.677],[38571226.061,2603762.019]]
points2 = [[38570769.756,2603963.483],[38570771.696,2603961.736],[38570772.861,2603958.631],[38570774.996,2603953.39],[38570779.848,2603949.509],[38570788.388,2603947.568],[38570797.899,2603947.374],[38570804.692,2603946.209],[38570809.738,2603942.91],[38570814.978,2603939.416],[38570821.966,2603933.593],[38570825.265,2603927.577],[38570830.506,2603915.737],[38570834.194,2603910.885],[38570837.105,2603910.108],[38570840.987,2603910.108],[38570845.256,2603911.661],[38570849.72,2603918.454],[38570848.556,2603927.383],[38570847.392,2603930.682],[38570847.974,2603934.176],[38570850.691,2603936.117],[38570854.185,2603936.117],[38570857.29,2603935.34],[38570859.813,2603932.235],[38570860.59,2603926.412],[38570855.349,2603900.21],[38570853.602,2603891.282],[38570854.379,2603886.236],[38570856.32,2603883.324],[38570863.113,2603880.025],[38570880.387,2603881.966],[38570885.821,2603886.236],[38570889.315,2603890.7],[38570918.622,2603935.923],[38570945.018,2603989.298],[38570949.871,2603991.432],[38570960.158,2603989.686],[38570961.322,2603987.163],[38570964.816,2603984.251],[38570967.727,2603982.31],[38570968.309,2603978.816],[38570965.786,2603970.277],[38570963.845,2603954.944],[38570960.934,2603950.091],[38570955.5,2603945.627],[38570951.23,2603933.4],[38570945.795,2603923.307],[38570941.913,2603914.573],[38570942.302,2603910.497],[38570945.795,2603908.556],[38570956.664,2603904.286],[38570963.263,2603902.151],[38570966.175,2603898.075],[38570968.31,2603888.177],[38570965.592,2603855.958],[38570961.516,2603825.874],[38570960.74,2603813.452],[38570961.711,2603806.853],[38570964.816,2603803.942],[38570971.804,2603801.224],[38570987.913,2603801.612],[38570996.064,2603801.613],[38570998.588,2603801.224],[38571000.335,2603798.701],[38571001.887,2603791.326],[38571005.381,2603787.444],[38571008.486,2603786.668],[38571009.845,2603784.144],[38571010.233,2603779.68],[38571007.516,2603775.993],[38571001.111,2603772.499],[38570996.647,2603769.394],[38570989.66,2603757.36],[38570985.39,2603753.09],[38570975.491,2603751.926],[38570966.369,2603749.985],[38570961.323,2603744.744],[38570961.323,2603740.668],[38570962.293,2603737.757],[38570961.323,2603720.483],[38570957.829,2603704.762],[38570957.829,2603703.164],[38570942.89,2603695.531],[38570924.703,2603696.256],[38570895.861,2603697.703],[38570878.45,2603695.071],[38570860.942,2603687.538],[38570846.994,2603642.577],[38570846.593,2603626.086],[38570823.153,2603622.522],[38570823.327,2603625.332],[38570823.481,2603625.999],[38570824.885,2603637.792],[38570825.14,2603642.398],[38570833.549,2603667.174],[38570834.496,2603673.429],[38570832.916,2603683.364],[38570828.514,2603683.211],[38570823.2,2603693.97],[38570823.2,2603700.692],[38570822.638,2603707.431],[38570820.672,2603712.204],[38570815.899,2603719.505],[38570804.284,2603733.08],[38570800.559,2603739.188],[38570791.382,2603751.982],[38570783.184,2603757.794],[38570779.242,2603762.418],[38570770.638,2603776.405],[38570763.846,2603781.135],[38570753.561,2603793.918],[38570753.524,2603793.956],[38570743.8,2603809.97],[38570726.159,2603823.34],[38570723.577,2603826.192],[38570714.796,2603844.056],[38570709.812,2603847.164],[38570705.136,2603852.534],[38570690.769,2603875.516],[38570689.21,2603876.84],[38570686.73,2603880.404],[38570672.971,2603893.04],[38570653.586,2603905.266],[38570651.25,2603907.442],[38570651.2,2603907.497],[38570627.948,2603951.943],[38570627.671,2603956.108],[38570631.836,2603960.552],[38570652.109,2603970.272],[38570655.719,2603974.159],[38570656.552,2603979.991],[38570649.609,2604028.034],[38570650.998,2604034.699],[38570654.33,2604037.476],[38570680.157,2604041.642],[38570701.818,2604044.974],[38570713.759,2604047.196],[38570721.535,2604047.196],[38570730.192,2604044.958],[38570729.221,2604042.1],[38570712.884,2604014.503],[38570712.222,2604005.893],[38570713.326,2604002.139],[38570718.183,2603999.49],[38570726.572,2603997.282],[38570731.429,2603997.062],[38570739.478,2603986.774],[38570748.017,2603973.188],[38570751.899,2603969.306],[38570764.127,2603965.23],[38570769.756,2603963.483]]
points3 = [[38570693.183,2603953.717],[38570694.898,2603902.935],[38570745.76,2603904.109],[38570746.542,2603962.404],[38570693.183,2603953.717]]
points4 = [[38570797.795,2603804.734],[38570876.434,2603781.65],[38570884.259,2603854.03],[38570807.881,2603858.642],[38570797.795,2603804.734]]
# # 3个环的Array对象
ring1 = arcpy.Array([arcpy.Point(*p) for p in points1])
ring2 = arcpy.Array([arcpy.Point(*p) for p in points2])
ring3 = arcpy.Array([arcpy.Point(*p) for p in points3])
ring4 = arcpy.Array([arcpy.Point(*p) for p in points4])
# 创建features列表,用于存放要素,在内存
features = []
# 通过Array组成的Array创建Polygon对象
# 将Polygon要素添加到features列表
features.append(arcpy.Polygon(arcpy.Array([ring1, ring2, ring3, ring4])))
# 调用复制要素工具,将内存中的features列表创建为shapefile
arcpy.CopyFeatures_management(features, r"E:\微信\WeChat Files\wxid_z5ik6og9uvs421\FileStorage\File\2022-11\糖厂\6.shp")