أكثر

استخدام ArcGIS Desktop للتكبير إلى المعالم المحددة التالية؟

استخدام ArcGIS Desktop للتكبير إلى المعالم المحددة التالية؟


كيف يمكنني تكييف الكود التالي لتمكينني من التكبير والتصغير لكل هندسة فردية محددة واحدة تلو الأخرى؟

import arcpy mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpy.mapping.ListDataFrames (mxd، "Layers") [0] df.zoomToSelectedFeatures () arcpy.RefreshActiveView ()

لدي أداة زيارة (في C # ، تم تحويلها من VB.net ، والتي تمت ترقيتها من VB6 والتي تأثرت بأداة كتبتها في AML) ... على أي حال ، المفتاح هو استخدام Envelope of the geometry في حالة المضلع ، متعدد الخطوط أو متعدد النقاط وأحدث مدى الخريطة.

هذه بداية أساسية للغاية بالنسبة لك:

import arcpy mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpy.mapping.ListDataFrames (mxd، "Layers") [0] Envelopes = [] # امتدادات المتجر هنا # ابحث عن مجموعة التحديد SelLayer = arcpy.mapping. ListLayers (mxd، data_frame = df) [0] # first layer fidSet = arcpy.Describe (SelLayer) .FIDSet if len (fidSet) == 0: arcpy.AddMessage ("لا شيء محدد") وإلا: # الآن المؤشر من خلاله و احصل على الأشكال الهندسية # تخزين نطاقاتها في قائمة باستخدام arcpy.da.SearchCursor (SelLayer، "SHAPE @") كـ SCur: للعمل في SCur: # سأفترض مضلع / متعدد الخطوط Envelopes.append (feat [0] .extent) # الاستيلاء على المغلف df.extent = المغلفات [0] # الدرجة الأولى arcpy.RefreshActiveView ()

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

لاحظ أنه بمجرد تحديد القائمة ، يمكن تغيير التحديد ، وقد يكون هذا هو ما تريده وقد لا يكون كذلك. في حالتي ، أردت أن تبقى النطاقات وأن أكون قادرًا على التعديل أثناء تصفح القائمة.


يمكنك دمج التعليمات البرمجية الخاصة بك على النحو الوارد أعلاه لتشمل ما يلي:

  1. استخدم arcpy.da.searchcursor () لعمل قائمة بيثون لتلك الميزات المحددة
  2. كرر من خلال قائمة python باستخدام معرف فريد لإنشاء تعبير SQL واستخدامه مما يتيح لك التحديد حسب السمة ، ثم تكبير المعالم المحددة.

أعتقد أن شيئًا ما على هذا المنوال سينجح ... لم يتم اختباره في الوقت الحالي:

import arcpy mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpy.mapping.ListDataFrames (mxd، "Layers") [0] # من تحديد تكوين طبقة المعالم (ArcGIS دائمًا ما يكون افتراضيًا لاستخدام المعالم المحددة) LayerList = [] باستخدام arcpy.da.SearchCursor ("Layer1"، "OBJECTID") كمؤشر: للعنصر الموجود في المؤشر: LayerList.append (عنصر) Query = "" "{0} = {1}" "". تنسيق ("OBJECTID" ، item) #print LayerList #print Query للصفوف في LayerList: arcpy.SelectLayerByAttribute_management ("Layer1"، "NEW_SELECTION"، Query) df.zoomToSelectedFeatures ()