أكثر

تسمية النقاط بالأرقام وإضافة تسمية نصية إلى وسيلة الإيضاح كقائمة في ArcMap؟

تسمية النقاط بالأرقام وإضافة تسمية نصية إلى وسيلة الإيضاح كقائمة في ArcMap؟


أقوم بتطوير سلسلة من الخرائط في ArcGIS 10 وليس لدي مساحة كبيرة لتسمية المعالم على الخريطة. لهذا السبب اعتقدت أنني سأقوم بترقيم كل معلم في إطار البيانات من خلاله ثم تصدير الملصقات كقائمة ووضعها في وسيلة إيضاح الخريطة.

لذلك يتم إنشاء قائمة بالطريقة التالية وإضافتها إلى وسيلة الإيضاح

SO 1 Label 2 Label 3 Label

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

هل هناك طريقة أسهل للقيام بذلك في ArcGIS ، لدي الكثير من الخرائط للقيام بذلك ، والقيام بذلك يدويًا يستغرق الكثير من الوقت؟ هل يمكنك التفكير في حل أفضل للقيام بذلك؟


يوجد نصان في العمل.

يقوم أولاً بإنشاء مرفق - ملف نصي - في مضلع صفحات تعتمد على البيانات مخزّن في FGDB ، الاسم في جدول المحتويات = الصفحات.

البيانات التي يتم الحصول عليها في جدول المرفقات من طبقة تسمى "pnts" ، يجب أن يكون استعلام تعريف الصفحة نشطًا. للتحكم في مظهر الجدول المستقبلي ، ستحتاج إلى عنصر نصي في التخطيط يسمى TABLE. هذا ما تتوقعه الأداة كمعلمات:

القيم الموجودة في قائمة الحقول هي أسماء الحقول من "pnts" التي تريد إظهارها:

نعم ، يجب عليك تغيير القائمة لتناسب احتياجاتك.

يتكرر البرنامج النصي عبر الصفحات ويقوم بما يلي:

  • إزالة المرفق الموجود
  • إنشاء مرفق من القيم المأخوذة من جدول pnts ضمن DDP الحالي.

    (عادةً ما أقوم بإنشاء مخزن مؤقت صغير حول الصفحات ، يتقاطع مع pnts. يؤدي هذا إلى إنشاء نقطتين حيث تتداخل المخازن المؤقتة)

أنا استخدم هو خط Calibri Light للنص في الجدول.

النصي:

استيراد arcpy ، traceback ، os ، sys ، numpy من arcpy import env.overwriteoutput = True folder = arcpy.GetParameterAsText (0) allNames = arcpy.GetParameterAsText (1) fldNames = allNames.split ('؛') table = r'in_memory إرفاق '#Reference MXD والطبقات حاول: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + message) def isLayerExist (mxd، lName): layer = arcpy.mapping.ListLayers ( mxd، lName) إذا كانت len (طبقات) == 0: رفع NameError ، ' n' + lName + "لم يتم العثور على الطبقة. الخروج…" + ' n' نتيجة = طبقات [0] إرجاع النتيجة mxd = arcpy.mapping. MapDocument ("CURRENT") thePagesLayer = isLayerExist (mxd، "Pages") thePointsLayer = isLayerExist (mxd، "pnts") ddp = mxd.dataDrivenPages fld = ddp.pageNameField.name Page_Names = arcpy.da.TableTrayToNumages لـ elm في arcpy.mapping.ListLayoutElements (mxd): if elm.name == "TABLE": tableTxt = elm x = elm.elementPositionX y = elm.elementPositionY ## شيء يجب تغييره !!!!! formatS = "{: 5d} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f} {: 8.2f}" لـ pageID في النطاق (1 ، ddp.pageCount + 1): arcpy.AddMessage (pageID) ddp.currentPageID = pageID arcpy.RefreshActiveView () fOut = folder + os.sep + Page_Names [pageID-1] [0] + ". txt" arcpy.SelectLayerByAttribute_management (thePointByAttribute_management) ) linkValue = Page_Names [pageID-1] [0] attachName = Page_Names [pageID-1] [0] + ". txt" arcpy.CreateTable_management ('in_memory'، 'attach') arcpy.AddField_management (table، "Page"، "TEXT"، ""، ""، 25) arcpy.AddField_management (جدول، "Page2"، "TEXT"، ""، "، 250) curT = arcpy.da.InsertCursor (جدول، (" الصفحة "،" Page2 ")) theRow = (linkValue، fOut) curT.insertRow (theRow) arcpy.RemoveAttachments_management (thePagesLayer، fld، table،" Page ") tbl = arcpy.da.TableToNumPyArray (thePointsLayer، fldNames) tbl = ) if len (tbl)> 0: m = 0 للتسجيل في tbl: ## الشيء الذي يجب تغييره !!!!! bit = formatS.format (rec [0]، rec [1]، rec [2]، rec [4]، rec [6]، rec [3]، rec [5]، rec [7]) textB + = bit + '  n 'm + = 1 if m> 54: break tableTxt.text = textB arcpy.SelectLayerByAttribute_management (thePointsLayer، "CLEAR_SELECTION") tableTxt.elementPositionX = x tableTxt.elementPositionY = y arcpy.RefreshActiveView () fileO = open ') fileO.write (textB) fileO.close () arcpy.AddAttachments_management (thePagesLayer، fld، table، "Page"، "Page2") arcpy.Delete_management (fOut) باستثناء: message = " n *** أخطاء PYTHON * ** "؛ showPyMessage () message = "معلومات تتبع Python:" + traceback.format_tb (sys.exc_info () [2]) [0] ؛ showPyMessage () message = "معلومات خطأ Python:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"؛ showPyMessage ()

مثال الإخراج الذي أستخدمه للتحكم في الشكل الذي ستبدو عليه المطبوعات:

لاحظ أن الجزء الرمادي عنصر منفصل هنا. يجب عليك أيضًا تغيير سطر تنسيق النص في البرنامج النصي أعلاه.

يقوم البرنامج النصي الثاني بالطباعة (تصدير إلى ملف pdf ، باستخدام اسم DDP) ، ويفترض أن اسم طبقة DDP = صفحات (الذي يحتوي على ملحق) ويوجد عنصر نص يسمى TABLE في التخطيط

استيراد arcpy ، traceback ، os ، sys من arcpy import env.overwriteoutput = True folder = arcpy.GetParameterAsText (0) aTable = arcpy.GetParameterAsText (1) #Reference MXD والطبقات حاول: def showPyMessage (): arcpy.AddMessage (): arcpy.AddMessage (): arcpy.AddMessage (): arcpy.AddMessage () (الوقت. + lName + "الطبقة غير موجودة. الخروج…" + ' n' نتيجة = طبقات [0] إرجاع النتيجة mxd = arcpy.mapping.MapDocument ("CURRENT") thePagesLayer = isLayerExist (mxd، "Pages") ddp = mxd. dataDrivenPages fld = ddp.pageNameField.name diction = {} both = arcpy.da.TableToNumPyArray (thePagesLayer، (fld، "OBJECTID")) للصف في كليهما: الإملاء [الصف [0]] = الصف [1] Page_Names = [ row [0] للصف في كليهما] del كل من #Reference page layout element for elm in arcpy.mapping.ListLayoutElements (mxd): if elm.name == "TABLE": tableTxt = elm x = elm.elementPositionX y = elm. elementPositionY لـ pageID في النطاق (1، ddp.pageCount + 1): ## لـ pageID في النطاق (1،3): ddp.currentPageID = pageID baseName = Page_Names [pageID-1] OID = diction [baseName] استعلام = "REL_OBJECTID =٪ s"٪ str (int (OID)) مع arcpy.da.SearchCursor (aTable ، 'DATA' ، استعلام) كمؤشر: للصف في المؤشر: binaryRep = row [0] textB = binaryRep.tobytes () if len (textB)> 0: tableTxt.text = textB else: tableTxt.text = "" tableTxt.elementPositionY = y arcpy.RefreshActiveView () ddp .exportToPDF (المجلد + os.sep + baseName + ".pdf"، "CURRENT") arcpy.AddMessage ('تم تصدير٪ i٪ s'٪ (معرّف الصفحة ، اسم القاعدة)) باستثناء: message = " n *** أخطاء PYTHON *** "؛ showPyMessage () message = "معلومات تتبع Python:" + traceback.format_tb (sys.exc_info () [2]) [0] ؛ showPyMessage () message = "معلومات خطأ Python:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"؛ showPyMessage ()

في الأمثلة أعلاه ، يتم تصنيف النقاط بواسطة معرف القسم ويقدم الجدول مرجعًا مثاليًا.

وفر لي هذا الزوجان أسابيع من الوقت ...

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

هذا هو الركن الأيمن العلوي لإحدى صفحات الإخراج:


فيما يلي خطوات الحصول على رقم مفتاح بجوار التسمية الخاصة بك في وسيلة إيضاح ديناميكية.

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

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

أضف وسيلة إيضاح وقم بتضمين طبقة وسيلة الإيضاح فقط. انقر بزر الماوس الأيمن على وسيلة الإيضاح> خصائص> علامة تبويب العناصر> انقر فوق طبقة الأسطورة> النمط واختر العنصر المميز هنا.

ثم انقر فوق خصائص لتعديل إعداد وصف التسمية كيفما تشاء. للحصول على ما يظهر في صورتي النهائية أدناه ، استخدم هذه الإعدادات.

مرة أخرى في علامة تبويب العناصر الخاصة بالخط ، اختر تطبيق على وصف الفصل ، اجعله غامقًا ومضبوطًا بشكل صحيح.

لجعله يقصر وسيلة الإيضاح على ما هو موجود على كل خريطة ، تأكد من تحديد "إظهار الفئات المرئية فقط في نطاق الخريطة الحالي".

أتمنى أن يكون هذا منطقيًا.


شاهد الفيديو: 18-2 GIS CartographyRepresentation of line shapefiles