Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. import math
  2.  
  3. siteboundary=None
  4. for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
  5. if lyr.name() == "Site_Boundary_Auto_Theo":
  6. siteboundary = lyr
  7. break
  8.  
  9. targetlayer=None
  10. for lyr2 in QgsMapLayerRegistry.instance().mapLayers().values():
  11. if lyr2.name() == "Site_Boundary_Auto_Ben":
  12. targetlayer = lyr2
  13. break
  14.  
  15. siteboundaryshapes = siteboundary.getFeatures()
  16. targetlayershapes = targetlayer.getFeatures()
  17.  
  18. for i in siteboundaryshapes:
  19. siteboundarygeom = i.geometry()
  20. siteboundarybuffer = siteboundarygeom.buffer(1000,25)
  21.  
  22. for j in targetlayershapes:
  23. targetlayergeom = j.geometry()
  24. targetlayeratt = j.attributes()
  25.  
  26. if targetlayergeom.intersects(siteboundarybuffer):
  27.  
  28. poly1 = siteboundarygeom.exportToWkt()
  29. poly2 = targetlayergeom.exportToWkt()
  30.  
  31. wkt1 = []
  32. wkt2 = []
  33.  
  34. poly1 = poly1.replace("Polygon ((","")
  35. poly2 = poly2.replace("Polygon ((","")
  36.  
  37. poly1 = poly1.replace("Multi","")
  38. poly2 = poly2.replace("Multi","")
  39.  
  40. poly1 = poly1.replace(")","")
  41. poly2 = poly2.replace(")","")
  42.  
  43. poly1 = poly1.replace("(","")
  44. poly2 = poly2.replace("(","")
  45.  
  46. poly1Split = poly1.split(", ")
  47. poly2Split = poly2.split(", ")
  48.  
  49. for item in poly1Split:
  50. xysplit = item.split(" ")
  51. xysplit[0] = float(xysplit[0])
  52. xysplit[1] = float(xysplit[1])
  53. wkt1.append(xysplit)
  54.  
  55. for item in poly2Split:
  56. xysplit = item.split(" ")
  57. xysplit[0] = float(xysplit[0])
  58. xysplit[1] = float(xysplit[1])
  59. wkt2.append(xysplit)
  60.  
  61. result = []
  62. bresult = []
  63.  
  64. for item in wkt1[0::1]:
  65. for o, j in enumerate(wkt2[0:len(wkt2)-1:1]):
  66. x1 = item[0]
  67. xy1 = wkt2[o]
  68. xy2 = wkt2[o+1]
  69. x2 = xy1[0]
  70. x3 = xy2[0]
  71.  
  72. y1 = item[1]
  73. y2 = xy1[1]
  74. y3 = xy2[1]
  75.  
  76. deltaX = (x2-x1)
  77. deltaY = (y2-y1)
  78.  
  79. deltaX2 = (x3-x1)
  80. deltaY2 = (y3-y1)
  81.  
  82. dist = math.sqrt((deltaX*deltaX) + (deltaY*deltaY))
  83. bearing1 = math.atan2(deltaY,deltaX)
  84.  
  85. dist2 = math.sqrt((deltaX2*deltaX2) + (deltaY2*deltaY2))
  86. bearing2 = math.atan2(deltaY2,deltaX2)
  87.  
  88. xmp = (x2+x3)/2
  89. ymp = (y2+y3)/2
  90.  
  91. deltaXMP = (xmp-x1)
  92. deltaYMP = (ymp-y1)
  93.  
  94. distMP = math.sqrt((deltaXMP*deltaXMP) + (deltaYMP*deltaYMP))
  95.  
  96. if distMP > dist or distMP > dist2:
  97. result.append(dist)
  98. bresult.append(bearing1)
  99. else:
  100. internalangle = abs(bearing2 - bearing1)
  101. oppositelength = math.sqrt((((dist*dist)+(dist2*dist2))-(2*dist*dist2*math.cos(internalangle))))
  102. secondinternalangle = math.asin(dist*((math.sin(internalangle))/oppositelength))
  103. if bearing2 < 0:
  104. polygonbearing = ((2*math.pi)+(bearing2+((math.pi/2)-secondinternalangle)))
  105. bresult.append(polygonbearing)
  106. polygondist = abs(dist2*math.sin(secondinternalangle))
  107. result.append(polygondist)
  108. else:
  109. polygonbearing = bearing2-((math.pi/2)-secondinternalangle)
  110. bresult.append(polygonbearing)
  111. polygondist = abs(dist2*math.sin(secondinternalangle))
  112. result.append(polygondist)
  113.  
  114. for item2 in wkt2[0::1]:
  115. for p,q in enumerate (wkt1[0:len(wkt1)-1:1]):
  116. rx1 = item2[0]
  117. rxy1 = wkt1[p]
  118. rxy2 = wkt1[p+1]
  119. rx2 = rxy1[0]
  120. rx3 = rxy2[0]
  121.  
  122. ry1 = item2[1]
  123. ry2 = rxy1[1]
  124. ry3 = rxy2[1]
  125.  
  126. deltarX = (rx2-rx1)
  127. deltarY = (ry2-ry1)
  128.  
  129. deltarX2 = (rx3-rx1)
  130. deltarY2 = (ry3-ry1)
  131.  
  132. rdist = math.sqrt((deltarX*deltarX) + (deltarY*deltarY))
  133. rbearing1 = math.atan2(deltarY,deltarX)
  134.  
  135. rdist2 = math.sqrt((deltarX2*deltarX2) + (deltarY2*deltarY2))
  136. rbearing2 = math.atan2(deltarY2,deltarX2)
  137.  
  138. rxmp = (rx2+rx3)/2
  139. rymp = (ry2+ry3)/2
  140.  
  141. deltarXMP = (rxmp-rx1)
  142. deltarYMP = (rymp-ry1)
  143.  
  144. distrMP = math.sqrt((deltarXMP*deltarXMP) + (deltarYMP*deltarYMP))
  145.  
  146. if distrMP > rdist or distrMP > rdist2:
  147. result.append(rdist)
  148. bresult.append(rbearing1)
  149. else:
  150. rinternalangle = abs(rbearing2 - rbearing1)
  151. roppositelength = math.sqrt((((rdist*rdist)+(rdist2*rdist2))-(2*rdist*rdist2*math.cos(rinternalangle))))
  152. rsecondinternalangle = math.asin(rdist*((math.sin(rinternalangle))/roppositelength))
  153. if bearing2 < 0:
  154. rpolygonbearing = ((2*math.pi)+(rbearing2+((math.pi/2)-rsecondinternalangle)))
  155. bresult.append(rpolygonbearing)
  156. rpolygondist = abs(rdist2*math.sin(rsecondinternalangle))
  157. result.append(rpolygondist)
  158. else:
  159. rpolygonbearing = rbearing2-((math.pi/2)-rsecondinternalangle)
  160. bresult.append(rpolygonbearing)
  161. rpolygondist = abs(rdist2*math.sin(rsecondinternalangle))
  162. result.append(rpolygondist)
  163.  
  164. mindist = min(result)
  165. bearingindex = result.index(mindist)
  166. minbearing = bresult[bearingindex]
  167. minbearing = 90 - minbearing*(180/math.pi)
  168.  
  169. print(mindist)
  170. print(minbearing)
  171. print("Next Planning Permission")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement