arcgis TXT转shp文件

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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DK业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值