أكثر

نقل طبقة مجموعة خدمة الخريطة خارج طبقة المجموعة باستخدام ArcPy

نقل طبقة مجموعة خدمة الخريطة خارج طبقة المجموعة باستخدام ArcPy


أنا أكافح من أجل نقل خدمات الويب (خرائط أساس متجانبة) خارج طبقات المجموعة في إطار البيانات. لقد استخدمت arcpy.mapping.ListLayers لتكوين قائمة من الطبقات ، ثم تأكدت من ماهية طبقة المجموعة .isGroupLayer واختبرت طبقات المجموعة اسم وماذا بعد ذلك "يدعم". ومع ذلك ، فشلت فشلاً ذريعًا في التقاط طبقة مجموعة خدمة ويب غريبة ونقلها. لقد اختبرت Arcpy.mapping.AddLayer من بين حفنة من الأشياء.

نرحب بأي أفكار. النتيجة المرجوة هي عدم وجود خدمات ويب في طبقات المجموعة.

import arcpy mxd = "C:  Data  native.mxd" OriginMxd = arcpy.mapping.MapDocument (mxd) df = arcpy.mapping.ListDataFrames (OriginMxd) [0] لـ OPFSLyr في arcpy.mapping.ListLayers (OriginMxd، ""، df): if str (OPFSLyr) == "Basemap": # إذا كانت تسمى خريطة الأساس إذا كانت OPFSLyr.isGroupLayer: للطبقة الفرعية في OPFSLyr: طباعة subLayer arcpy.mapping.AddLayer (df، subLayer، "BOTTOM") OriginMxd. حفظ()

انت قريب. بدلاً من AddLayer ، يمكنك استخدام MoveLayer. يمكن تعديل رمز مثال ESRI ، جنبًا إلى جنب مع بعض التعديلات على هياكل البيانات الخاصة بك لنقل الطبقات التي تريدها إلى جذر إطار البيانات. انظر الكود:

mxd = arcpy.mapping.MapDocument (r "C:  peendata  MoveLayers.mxd") df = arcpy.mapping.ListDataFrames (mxd) [0] moveThese = [] للطبقة في arcpy.mapping.ListLayers (mxd، "" ، df): print str (layer.name) + ">>>" if layer.isServiceLayer: print str (layer) + "هي طبقة خدمة" if layer.isFeatureLayer: print str (layer) + "هي طبقة معالم "if layer.isRasterLayer: print str (layer) +" هي طبقة نقطية "if layer.isGroupLayer: print str (layer) +" هي طبقة مجموعة "if str (layer) ==" Group Layer 1 ": refLayer = layer if (layer.isServiceLayer وليس layer.isGroupLayer): print "مؤهل للحركة" moveThese.append (layer) للطبقة في moveThese: print "move" + str (layer) arcpy.mapping.MoveLayer (df ، refLayer ، layer ، "BEFORE") mxd.saveACopy (r "C:  peendata  MoveLayersDone.mxd") del mxd

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

فيما يتعلق ببنية الطبقة الخاصة بك ، يرجى العلم بذلك Global_Imagery عبارة عن مجموعة طبقات مقفلة ، لذا لا يمكنك الطبقات الفرعية المنفصلة الخاصة بها حتى في ArcMap يدويًا. في الواقع ، لا يزال الكود يفعل ذلك (نوعًا ما) ، لكن الطبقات المنقولة مكسورة ، والطبقات الأصلية لا تزال في مكانها. تأكد من أن الطبقات التي تحاول نقلها قابلة للحركة يدويًا.

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

أوه ونعم. أحيانًا تكون طبقات الخدمة عبارة عن طبقات مجموعة أيضًا - لذا اختبرها بعناية.

كمرجع ، هيكل طبقي قبل وبعد:


شاهد الفيديو: فصل تصنيفات الشيب فايل الي طبقات متعددة عن طريق Split By Attributes