أكثر

حساب الربع من حقل التاريخ باستخدام ArcGIS Field Calculator؟

حساب الربع من حقل التاريخ باستخدام ArcGIS Field Calculator؟


لدي حاليًا حقل تاريخ بتنسيق MM / DD / YYYY.

هدفي هنا هو تحويل التواريخ إلى ربع واحد من أربعة أرباع ، جنبًا إلى جنب مع السنة. الحقل المراد إنشاؤه سيسمى QTR_YR.

سؤالي الأول هو ما نوع البيانات الذي أحتاجه لعمل حقل QTR_YR؟ هل يجب أن يكون عددًا صحيحًا (قصير أم طويل) أم تاريخ أم مزدوج؟

أنا مدرسة قديمة لذا أفضل VBA لكن يمكنني استخدام Python.


يجب أن يقوم الاستعلام أدناه في VBA بإرجاع سلسلة تشبه "Q2 1990" لكل سجل. جميع الاعتمادات تذهب إلى EvilGenius لهذا واحد.

"Q" & DatePart ("q"، [MyDate]) & "" & DatePart ("yyyy"، [MyDate])

فقط تأكد من ربع مجالك "QTR_YR" هو سلسلة نصية اكتب. إذا كان التنسيق "Q2 1990" لا يناسب ذوقك ، فيمكنك تعديل التنسيق. يتم إجراء التسلسل في VBA بواسطة علامة العطف "&" not "+" مثل معظم اللغات الأخرى.

واسمحوا لنا أن نعرف إذا كان هذا يعمل.


تحديث: كما هو مطلوب ، سيكون الحل في ArcPy باستخدام UpdateCursor هو:

استيراد تاريخ ووقت استيراد arcpy def GetQuarter (شهر): "" "تحديد دالة لإرجاع ربع الشهر (يناير = 1 ، ديسمبر = 12). حيث: 0-3 = Q1 4-6 = Q2 7-9 = Q3 10-12 = Q4 "" "if 0 <= int (month) <= 3: return 1 elif 4 <= int (month) <= 6: return 2 elif 7 <= int (month) <= 9: return 3 elif 10 <= int (month) <= 12: return 4 else: رفع ValueError ، "يجب أن يكون الشهر بين 0-12" fc = r "C:  Users  MyUsername  Desktop  Working.gdb  TestPoints" # Change لتصل إلى فئة الميزات الخاصة بك. باستخدام arcpy.da.UpdateCursor (fc، ["MyDate"، "MyQuarter"]) كمؤشر: # قم بتغيير "MyDate" و "MyQuarter" إلى أسماء الحقول الخاصة بك. للصف في المؤشر: date = row [0] # A datetime object Quarter = "Q {0} {1}". format (GetQuarter (date.month)، date.year) # ستبدو سلسلة الربع بالشكل "Q2 1990 ". الصف [1] = ربع # تعيين قيمة ربع للصف الحالي. cursor.updateRow (row) # تحديث (حفظ) صف. المؤشر ديل

بناءً على طلبك ، إليك المكافئ في Python ، والذي يمكن تشغيله داخل حقل الحساب. ستحتاج إلى استخدام كود بلوك وكذلك التعبير.

كتلة التعليمات البرمجية:

def yr_qtr (dt): date_str = dt.split (") [0] # قد تحتوي بعض التواريخ على مكون زمني date_parts = dt.split ('/') # هل هي دائمًا بهذا التنسيق ، # أم أنها خاصة بالمنطقة؟ yr = date_parts [2] mnth = int (date_parts [0]) qrtr = ((mnth-1) / 3) + 1 إرجاع تنسيق "Q {0} {1}" (qrtr ، سنة)

تعبير:

yr_qtr (! DateField!)

كما أشرت في تعليقي ، تأتي قيمة التاريخ كسلسلة ، لذلك يجب عليك تحويلها / تحليلها. أنت يستطع استعمالالتاريخ والوقتللقيام بذلك ولكني اكتشفت أن التنسيق ليس متسقًا بدرجة كافية لذلك.


شاهد الفيديو: Calculating Area of Polygons using ArcGIS