Guest User

Untitled

a guest
Feb 14th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. #-------------------------------------------------------------------------------
  2. # Name: Calculo ruta mas optima
  3. # Purpose: calcula la ruta mas optima da el perfil y avisa si hay algo entre ella
  4. #
  5. # Author: FELIPE
  6. #
  7. # Created: 10/02/2016
  8. # Copyright: (c) FELIPE 2016
  9. # Licence: <your licence>
  10. #-------------------------------------------------------------------------------
  11. #importamos los modulos de arcpy, y time
  12. import arcpy, time, arcpy.sa
  13. #calculamos el tiempo que tarda en ejecutarse el script
  14. START=time.clock()
  15. #chequeamos las licencias de espatila y 3 d
  16. arcpy.CheckOutExtension("Spatial")
  17. arcpy.CheckOutExtension('3D')
  18. #generamos el entorno de trabajo
  19. arcpy.env.workspace=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb"
  20. arcpy.env.overwriteOutput = True
  21. #tenemos los dos punos el origen y final de la ruta
  22. Punt1=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\DatosTopograficos\Punto1"
  23. Punt2=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\DatosTopograficos\Punto2"
  24. puntos=[Punt1,Punt2]
  25. coord=["SHAPE@XY"]
  26. list=[]
  27. #obtenemos la coordenadas de cada punto
  28. for punt in puntos:
  29. with arcpy.da.SearchCursor(punt,coord) as cursor:
  30. for row in cursor:
  31. #introducimos esas coordenadas en la lista list
  32. list.append(row[0])
  33. print list
  34. #realizamos una polilinea
  35. pnt= arcpy.Point()
  36. ary= arcpy.Array()
  37. for cor in list:
  38. pnt.X=cor [0]
  39. pnt.Y=cor [1]
  40. ary.add(pnt)
  41. polyline=arcpy.Polyline(ary)
  42.  
  43. #creamos una enidad lineal
  44. path=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\geo"
  45. nombre="linea"
  46. linea=arcpy.CreateFeatureclass_management(path,nombre,"POLYLINE")
  47. print "puntos{0}".format(polyline.pointCount)
  48. in_linea=arcpy.da.InsertCursor(linea,["SHAPE@"])
  49. in_linea.insertRow([polyline])
  50. del in_linea
  51. Punto=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\geo\PUNTO"
  52. arcpy.FeatureToPoint_management(linea,Punto,"CENTROID")
  53. mask=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\Mask"
  54.  
  55. #para la distancia del bufer necesitamos saber cuatno mie la linea y anadirle un margen de x metros
  56. leng=["SHAPE@LENGTH"]
  57. with arcpy.da.SearchCursor(linea,leng) as cursor:
  58. for row in cursor:
  59. #introducimos esas coordenadas en la lista list
  60. longi=row[0]
  61. #aunadimos el margen y lo metemso dentro del buffer
  62. distancia=(longi/2)+200
  63. arcpy.Buffer_analysis(Punto,mask,distancia)
  64.  
  65. Raster=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\Impedancia_ruta"
  66. outExtractByMask=arcpy.sa.ExtractByMask(Raster,mask)
  67. impedancia_rast=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\Impedancia_rast"
  68. outExtractByMask.save(impedancia_rast)
  69.  
  70. # a continuacion empezamos con el calculo de la ruta mas optima mediante path
  71.  
  72. #Primero obtenemos el coste de distancia y el backlinc, se usa el putno 1 pues es el de origen
  73. Backlink=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\back_link"
  74. CostDist=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\CostDist"
  75. outCostDistance = arcpy.sa.CostDistance(Punt1,impedancia_rast,"",Backlink)
  76. outCostDistance.save(CostDist)
  77.  
  78. #se pone el punto 2 ya que es el punto de destino
  79. Camino=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\Camino"
  80. outCostPath = arcpy.sa.CostPath(Punt2,CostDist,Backlink,"EACH_CELL")
  81. outCostPath.save(Camino)
  82.  
  83. #boramos las entidades innecesarias
  84. arcpy.Delete_management(CostDist)
  85. arcpy.Delete_management(Backlink)
  86. arcpy.Delete_management(mask)
  87. arcpy.Delete_management(impedancia_rast)
  88.  
  89. #convrtimos el raster en una entidad de linea
  90. Camino_vecto=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\geo\Camino_vecto"
  91. arcpy.RasterToPolyline_conversion(Camino,Camino_vecto,"ZERO","10","SIMPLIFY")
  92. arcpy.Delete_management(Camino)
  93.  
  94. #obtenemo el perfil
  95. MDT=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\MDT_parque"
  96. Tabla_gra=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\Tabla_gra"
  97. grafico=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\grafico"
  98. arcpy.StackProfile_3d(Camino_vecto,MDT,Tabla_gra,grafico)
  99. out_gra=r"C:\Users\Felipe\Desktop\Trabajo_Master\grafico.png"
  100. arcpy.SaveGraph_management(grafico,out_gra)
  101.  
  102. arcpy.Delete_management(Tabla_gra)
  103.  
  104. #avisa si cruza un rio, camino o zona vallada
  105. Rio=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\DatosTopograficos\Rios"
  106. Rio_layer="Rio_layer"
  107. Valla=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\DatosTopograficos\Vallado"
  108. Valla_layer="Valla_layer"
  109. Camino=r"C:\Users\Felipe\Desktop\Trabajo_Master\Papelera.gdb\REDosm_1\Caminos_Vehiculos1_1"
  110. Camino_layer="Camino_layer"
  111. Camino_vecto_layer="Camino_vecto_layer"
  112. #con describe y seleccion por localizacionsabemso si se ha seleccionado
  113. #creamos las layer de las entidades queintervienen enelroceso
  114. arcpy.MakeFeatureLayer_management(Rio,Rio_layer)
  115. arcpy.MakeFeatureLayer_management(Valla,Valla_layer)
  116. arcpy.MakeFeatureLayer_management(Camino,Camino_layer)
  117. arcpy.MakeFeatureLayer_management(Camino_vecto,Camino_vecto_layer)
  118. arcpy.SelectLayerByLocation_management(Rio_layer,"INTERSECT",Camino_vecto_layer)
  119. #con describe y FIdSet el cual ns dice si exite una seleccion, y la condicion if obtenemos el resultado de las entidades pro las que cruza
  120. rio_des=arcpy.Describe(Rio_layer)
  121. rio_cruz=rio_des.FIDset
  122. if rio_cruz!="":
  123. print"Cruzas un rio"
  124. print rio_cruz
  125.  
  126. arcpy.SelectLayerByLocation_management(Valla_layer,"INTERSECT",Camino_vecto_layer)
  127. Valla_des=arcpy.Describe(Valla_layer)
  128. Valla_cruz=Valla_des.FIDset
  129. if Valla_cruz!="":
  130. print"Cruzas una valla"
  131. print Valla_cruz
  132.  
  133. arcpy.SelectLayerByLocation_management(Camino_layer,"INTERSECT",Camino_vecto_layer)
  134. Camino_des=arcpy.Describe(Camino_layer)
  135. Camino_cruz=Camino_des.FIDset
  136. if Camino_cruz!="":
  137. print"Cruzas un Camino"
  138. print Camino_cruz
  139. FIN=(time.clock()-START)
  140. print "Script compelto. Tiempo de ejecucion {} segundos".format(FIN)
Add Comment
Please, Sign In to add comment