工具箱相关
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LZDsf1201.py 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import arcpy
  2. import math
  3. def LZDpoly(zdshp, jzdshp, outpath):
  4. # 先把总点数搞出来,zdbh+总点数
  5. txtpath1 = outpath + '\\LZD.txt'
  6. arcpy.MakeFeatureLayer_management(jzdshp, 'JZD')
  7. arcpy.MakeFeatureLayer_management(zdshp, 'ZD')
  8. sr = arcpy.Describe('ZD').spatialReference
  9. cc = 1
  10. # 在外面写个字典
  11. zd = {'公路用地': 'GLYD', '特殊用地': 'TSYD', '公用设施用地': 'GYSS', '交通服务场站用地': 'JTFW', '沟渠': 'GQ',
  12. '灌木林地': 'GMLD', '其他林地': 'QTLD', '乔木林地': 'QMLD', '竹林地': 'ZLD', '果园': 'GY', '旱地': 'HD',
  13. '河流水面': 'HLSM', '坑塘水面': 'KTSM', '养殖坑塘': 'YZKT', '农村道路': 'NCDL', '农村宅基地': 'NCZJD',
  14. '其他草地': 'QTCD', '其他园地': 'QTYD', '设施农用地': 'SSNYD', '水田': 'ST'}
  15. # with open(txtpath1.decode('utf-8'), 'w') as line:
  16. with arcpy.da.SearchCursor('ZD', ['SHAPE@', '宗地编码']) as cursorA:
  17. for curA in cursorA:
  18. # 先找到对应宗地
  19. shpA = curA[0]
  20. # 所有点存个list,方便删(list0,listz0)
  21. zdbh = curA[1]
  22. if zdbh == '' or zdbh == ' ' or zdbh == None:
  23. pass
  24. else:
  25. # if cc == 1:
  26. # cc = -1
  27. # else:
  28. # line.write('\n')
  29. # line.write(zdbh + ':')
  30. list1 = []
  31. ii = 0
  32. with arcpy.da.SearchCursor('JZD', ['SHAPE@', 'JZDH','ZDBH']) as cursorB:
  33. for curB in cursorB:
  34. # 前一个和当前的相交
  35. if zdbh == curB[2]:
  36. if ii == 0:
  37. fp = curB[0].firstPoint
  38. fpx = fp.X
  39. fpy = fp.Y
  40. fpoint = arcpy.Point(fpx, fpy)
  41. firstpoint = arcpy.Point(fpx, fpy)
  42. else:
  43. lp = curB[0].firstPoint
  44. lpx = lp.X
  45. lpy = lp.Y
  46. lpoint = arcpy.Point(lpx, lpy)
  47. new_array = arcpy.Array()
  48. new_array.append(fpoint)
  49. new_array.append(lpoint)
  50. ln2 = arcpy.Polyline(new_array, sr)
  51. arcpy.SelectLayerByLocation_management(
  52. 'ZD', 'INTERSECT', ln2)
  53. with arcpy.da.SearchCursor('ZD', ['SHAPE@', '宗地编号', 'DLMC', '权利人']) as cursorC:
  54. for curC in cursorC:
  55. # 排除自己
  56. str1 = curC[1]
  57. shpC = curC[0]
  58. if str1 == zdbh:
  59. pass
  60. else:
  61. # 排除只交一个点的情况
  62. bl1 = fpoint.disjoint(shpC)
  63. bl2 = lpoint.disjoint(shpC)
  64. if bl1 == False and bl2 == False:
  65. if str1 == None or str1 == '' or str1 == ' ':
  66. str1 = curC[2]
  67. str2 = zd[str1]
  68. slist1 = []
  69. slist1.append(ii)
  70. slist1.append(ii+1)
  71. slist1.append(str2)
  72. list1.append(slist1)
  73. else:
  74. str1 = curC[3] + \
  75. '(' + curC[1]+')'
  76. slist1 = []
  77. slist1.append(ii)
  78. slist1.append(ii+1)
  79. slist1.append(str1)
  80. list1.append(slist1)
  81. fp = curB[0].firstPoint
  82. fpx = fp.X
  83. fpy = fp.Y
  84. fpoint = arcpy.Point(fpx, fpy)
  85. ii = ii + 1
  86. new_array = arcpy.Array()
  87. new_array.append(fpoint)
  88. new_array.append(firstpoint)
  89. ln2 = arcpy.Polyline(new_array, sr)
  90. arcpy.SelectLayerByLocation_management(
  91. 'ZD', 'INTERSECT', ln2)
  92. with arcpy.da.SearchCursor('ZD', ['SHAPE@', '宗地编号', 'DLMC', '权利人']) as cursorC:
  93. for curC in cursorC:
  94. # 排除自己
  95. str1 = curC[1]
  96. shpC = curC[0]
  97. if str1 == zdbh:
  98. pass
  99. else:
  100. # 排除只交一个点的情况
  101. bl1 = fpoint.disjoint(shpC)
  102. bl2 = lpoint.disjoint(shpC)
  103. if bl1 == False and bl2 == False:
  104. if str1 == None or str1 == '' or str1 == ' ':
  105. str1 = curC[2]
  106. slist1 = []
  107. slist1.append(ii)
  108. slist1.append(1)
  109. slist1.append(str1)
  110. list1.append(slist1)
  111. else:
  112. str1 = curC[3] + '(' + curC[1]+')'
  113. slist1 = []
  114. slist1.append(ii)
  115. slist1.append(1)
  116. slist1.append(str1)
  117. list1.append(slist1)
  118. # 然后把相同的合在一起,书写在txt上
  119. mm = 0
  120. qsd = ''
  121. zd = ''
  122. nr = ''
  123. while mm < len(list1):
  124. if mm == len(list1) - 1:
  125. if nr == list1[mm][2]:
  126. if 'JE' in nr:
  127. str1 = nr.split('(',-1)[-1]
  128. nr = str1.replace(')','')
  129. else:
  130. try:
  131. nr = str1
  132. except:
  133. nr = 'QT'
  134. zd = 'J1'
  135. # line.write(nr + ',')
  136. # line.write(qsd + ',')
  137. # line.write(zd + ';')
  138. else:
  139. if 'JE' in nr:
  140. str1 = nr.split('(',-1)[-1]
  141. nr = str1.replace(')','')
  142. else:
  143. try:
  144. nr = str1
  145. except:
  146. nr = 'QT'
  147. # line.write(nr + ',')
  148. # line.write(qsd + ',')
  149. # line.write(zd + ';')
  150. qsd = 'J' + str(list1[mm][0])
  151. nr = list1[mm][2]
  152. zd = 'J1'
  153. if 'JE' in nr:
  154. str1 = nr.split('(',-1)[-1]
  155. nr = str1.replace(')','')
  156. else:
  157. try:
  158. nr = str1
  159. except:
  160. nr = 'QT'
  161. # line.write(nr + ',')
  162. # line.write(qsd + ',')
  163. # line.write(zd + ';')
  164. elif mm == 0:
  165. nr = list1[mm][2]
  166. qsd = 'J1'
  167. else:
  168. if nr == list1[mm][2]:
  169. pass
  170. else:
  171. zd = 'J' + str(list1[mm][0])
  172. if 'JE' in nr:
  173. str1 = nr.split('(',-1)[-1]
  174. nr = str1.replace(')','')
  175. else:
  176. try:
  177. nr = str1
  178. except:
  179. nr = 'QT'
  180. # line.write(nr + ',')
  181. # line.write(qsd + ',')
  182. # line.write(zd + ';')
  183. qsd = 'J' + str(list1[mm][0])
  184. nr = list1[mm][2]
  185. mm = mm + 1
  186. arcpy.AddMessage(zdbh + ' finish')
  187. if __name__ == '__main__':
  188. try:
  189. # 输入宗地shp,输入界址点,界址点总数,底图all,输出文件夹
  190. LZDpoly(r'D:\2work_now\20221026\test\testLZD1.shp',
  191. r'D:\2work_now\20221026\JZD\JZD.shp', r'D:\2work_now\20221026\test')
  192. except arcpy.ExecuteError:
  193. arcpy.AddMessage(arcpy.GetMessages())