أكثر

إنشاء المخزن المؤقت فقط في اتجاه محدد باستخدام ArcGIS for Desktop؟

إنشاء المخزن المؤقت فقط في اتجاه محدد باستخدام ArcGIS for Desktop؟


أحاول إنشاء منطقة عازلة لعدة مضلعات في اتجاه جنوبي غربي. بقدر ما أعرف ، هذا غير ممكن باستخدام أداة المخزن المؤقت (أستخدم ArcGIS 10.3). يمكنني القيام بذلك يدويًا ولكن بالنسبة إلى أكثر من 400 مضلع ، سيستغرق الأمر وقتًا طويلاً جدًا.

هل يعرف أي شخص طريقة أفضل؟

هذا ما أطمح إليه بشكل أو بآخر:


إذا كنت تستطيع العمل معأركبيفي Python قليلاً ، يمكنك استخدام بعض البرامج النصية لإنشاء هذه المناطق في اتجاه معين. لقد قمت بعمل مماثل قبل أسابيع قليلة ، وسوف أنشر جزءًا من النص الخاص بي لمساعدتك.

import arcpy، math، gc # Workspace، الكتابة فوق arcpy.env.workspace = r "YOUR_WORKSPACE" arcpy.env.overwriteOutput = True # INPUTS object_input = "objects.shp" # يجب أن تكون كائنات مضلعة = "object_lyr.shp" arcpayer_MakeFagement (إدخال كائنات ، كائنات) # OUTPUTS ، معظم النتائج المؤقتة = "result.shp" result_erase = "in_memory" + "" + "result_erase" polygon = "in_memory" + "" + "polygon" polygon_dissolve = "in_memory" + "" + "polygon_dissolve" arcpy.CreateFeatureclass_management (arcpy.env.workspace ، النتيجة ، "POLYGON") # مسافة المعلمات = 300 # مسافة للتحرك في اتجاه الاتجاه = 90 # اتجاه بالدرجات (90 من الشمال إلى الجنوب ) index = 0 # Set UpdateCursor cur_objects = arcpy.da.UpdateCursor (كائنات ، ("FID")) لـ row_objects في cur_objects: جرّب: fid = row_objects [0] sql = '"FID" =' + str (index) index + = 1 # تهيئة القوائم line_list = [] lines_created = [] # حدد الميزة الحالية arcpy.SelectLayerByAttribute_management (object، "NEW_SELECTION"، sql) vert exes = "in_memory" + "" + "vertexes" # تحويل الكائن إلى رؤوس قوسية. "SHAPE @ XY")) لـ row_vertexes في cur_vertexes: vertex_coords_x = row_vertexes [0] [0] vertex_coords_y = row_vertexes [0] [1] # تحديد إحداثيات النقاط point_move_x = vertex_coords_x - (المسافة) * mathradians ( direction)) point_move_y = vertex_coords_y - (المسافة) * math.cos (math.radians (90 - direction)) # ضع قائمة بالنقاط new_line = ([[vertex_coords_x، vertex_coords_y]، [point_move_x، point_move_y]]) lines_list.append ( new_line) # من الدورة الثانية إذا كان index_vertex> 0: line_vertexes = ([[vertex_coords_x، vertex_coords_y]، start_line]) line_ends = ([[point_move_x، point_move_y]، end_line]) line_list.append (line_vertexes) lines_list.append (line_vertexes) line_list.append = [vertex_coords_x، vertex_coords_y] end_line = [point_move_x، point_move_y] index_v ertex = index_vertex + 1 # Cycle التي تجعل الخطوط المتعددة من نقاط line_step in line_list: lines_created.append (arcpy.Polyline (arcpy.Array ([arcpy.Point (* sour) for sour in lines_step]))) arcpy.FeatureToPolygon_maned ، المضلع) arcpy.AggregatePolygons_cartography (polygon، polygon_dissolve، 1) # أسلوب التحرير النهائي. vertexes) start_line = [] # مسح التحديد والذاكرة وحذف temps arcpy.SelectLayerByAttribute_management (object، "CLEAR_SELECTION") اطبع "رقم الكائن:" + str (index - 1) + "- done." gc.collect () # أخطاء الالتقاط باستثناء الاستثناء كـ e: pass print "Error:" print e print " n" index + = 1

أتمنى أن تقرأها جيدًا ، كان علي أن أترجم التعليقات والمتغيرات.


هذا هو النص الذي يحل المشكلة. الفضل والشكر الجزيل يعود إلى david_p الذي كتبه. لقد أضفت للتو بضعة أقواس مفقودة.

import arcpy، math، gc # Workspace، الكتابة فوق arcpy.env.workspace = r "YOUR_WORKSPACE" arcpy.env.overwriteOutput = True # INPUTS object_input = "objects.shp" # يجب أن تكون كائنات مضلعة = "object_lyr.shp" arcpayer_MakeFagement (إدخال كائنات ، كائنات) # OUTPUTS ، معظم النتائج المؤقتة = "result.shp" result_erase = "in_memory" + "" + "result_erase" polygon = "in_memory" + "" + "polygon" polygon_dissolve = "in_memory" + "" + "polygon_dissolve" arcpy.CreateFeatureclass_management (arcpy.env.workspace ، النتيجة ، "POLYGON") # مسافة المعلمات = 300 # مسافة للتحرك في اتجاه الاتجاه = 90 # اتجاه بالدرجات (90 من الشمال إلى الجنوب ) index = 0 # Set UpdateCursor cur_objects = arcpy.da.UpdateCursor (كائنات ، ("FID")) لـ row_objects في cur_objects: جرّب: fid = row_objects [0] sql = '"FID" =' + str (index) index + = 1 # تهيئة القوائم line_list = [] lines_created = [] # حدد الميزة الحالية arcpy.SelectLayerByAttribute_management (object، "NEW_SELECTION"، sql) vert exes = "in_memory" + "" + "vertexes" # تحويل الكائن إلى رؤوس قوسية. "SHAPE @ XY")) لـ row_vertexes في cur_vertexes: vertex_coords_x = row_vertexes [0] [0] vertex_coords_y = row_vertexes [0] [1] # تحديد إحداثيات النقاط point_move_x = vertex_coords_x - (المسافة) * mathradians ( direction)) point_move_y = vertex_coords_y - (المسافة) * math.cos (math.radians (90 - direction)) # ضع قائمة بالنقاط new_line = ([[vertex_coords_x، vertex_coords_y]، [point_move_x، point_move_y]]) lines_list.append ( new_line) # من الدورة الثانية إذا كان index_vertex> 0: line_vertexes = ([[vertex_coords_x، vertex_coords_y]، start_line]) line_ends = ([[point_move_x، point_move_y]، end_line]) line_list.append (line_vertexes) lines_list.append (line_vertexes) line_list.append = [vertex_coords_x، vertex_coords_y] end_line = [point_move_x، point_move_y] index_v ertex = index_vertex + 1 # Cycle التي تجعل الخطوط المتعددة من نقاط line_step in line_list: lines_created.append (arcpy.Polyline (arcpy.Array ([arcpy.Point (* sour) for sour in lines_step]))) arcpy.FeatureToPolygon_maned ، المضلع) arcpy.AggregatePolygons_cartography (polygon، polygon_dissolve، 1) # أسلوب التحرير النهائي. vertexes) start_line = [] # مسح التحديد والذاكرة وحذف temps arcpy.SelectLayerByAttribute_management (object، "CLEAR_SELECTION") print ("Object number:" + str (index - 1) + "- done.") gc.collect ( ) # اصطياد الأخطاء باستثناء الاستثناء كـ e: pass print ("Error:") print (e) print (" n") index + = 1

الخيار أ:

  1. قم بإنشاء المخزن المؤقت باستخدام أداة المخزن المؤقت
  2. حدد جميع الميزات في فئة ميزة المخزن المؤقت
  3. استخدم أداة الالتواء وحدد بعض الزوايا المهمة وقم بإجراء الالتواء

الخيار ب:

  1. قم بإنشاء المخزن المؤقت باستخدام أداة المخزن المؤقت
  2. قم بتمكين التحرير وحدد جميع الميزات في فئة ميزة المخزن المؤقت
  3. استخدم أداة "Move" ، واملأ عمليتي X و Y في النافذة واحفظي الإخراج

شاهد الفيديو: ArcGIS Buffer