در فصل قبل با Domain و Subtype ساختار ژئودیتابیس را محکم کردیم. اما سازمانها به چیزی بیش از فهرست مقادیر مجاز نیاز دارند: باید بدانند چه کسی و کی هر عارضه را ساخته یا تغییر داده، دقت GPS هر نقطهی برداشتشده چقدر بوده، چه فیلدهایی باید خودکار محاسبه شوند و چه ترکیبهایی از مقادیر اصلاً منطقی نیستند. Attribute Rules در ArcGIS Pro به همراه Editor Tracking، فیلدهای متادیتای GPS و Contingent Values، ژئودیتابیس را از یک انبار داده به یک سامانهی هوشمند تبدیل میکنند. در این آموزش ArcGIS Pro همهی این قابلیتها را قدمبهقدم فعال میکنیم.
📚 مسیر یادگیری: این مطلب فصل ۹ از مجموعهی ۱۴ فصلی «کتابخوانی عملی ArcGIS Pro» در گیسلند است؛ فهرست کامل فصلها را در صفحهی دوره جامع آموزش آرکجیایاس پرو ببینید. این مجموعه بخشی از آموزش آرک جی آی اس پرو از صفر تا پیشرفته است. فایلهای تمرینی را از داده های آرک جی آی اس پرو بردارید و تمرینهای بیشتر را در تمرین های آرک جی آی اس پرو ببینید.
پیشنیاز این فصل، کلاسهای عارضهی ژئودیتابیسی و آشنایی با Domain است که در فصل هشتم: ساخت ژئودیتابیس در ArcGIS Pro آموزش داده شد. همهی قابلیتهای این فصل فقط روی ژئودیتابیس (فایلی، موبایل یا سازمانی) کار میکنند و برای Shapefile در دسترس نیستند.
🧭 فهرست مطالب این آموزش
- 🧭 نگاهی کلی به قابلیتهای پیشرفتهی ژئودیتابیس
- 🕵️ فعالسازی Editor Tracking
- 🛰️ افزودن فیلدهای متادیتای GPS
- 🧠 Attribute Rules در ArcGIS Pro: قوانین هوشمند با Arcade
- 🗃️ مدیریت، انتقال و اشکالزدایی Attribute Rules
- 🔗 Contingent Values: ترکیبهای مجاز بین فیلدها
- 🧱 ترکیب قابلیتها: یک ژئودیتابیس هوشمند در عمل
- 💼 سه سناریوی واقعی با Attribute Rules
- 📋 برنامهریزی پیش از پیادهسازی: چکلیست طراح ژئودیتابیس
- 🧪 تمرین عملی: شیرهای آب هوشمند
- 🏙️ سناریوی واقعی: کنترل کیفیت برداشت میدانی تیرهای برق
- 🐞 خطاهای رایج و راهحل
- ❓ پرسشهای متداول
- 🏁 جمعبندی
🧭 نگاهی کلی به قابلیتهای پیشرفتهی ژئودیتابیس

⚠️ هشدار
پیش از فعال کردن این قابلیتها روی دادهی اصلی، نسخهی پشتیبان بگیرید. بیشتر این تغییرات ساختاریاند و فیلد یا جدول جدید به کلاس اضافه میکنند. همچنین اگر داده در ArcGIS Online منتشر شده یا با برنامههای میدانی همگام میشود، پیش از تغییر ساختار با مدیر سامانه هماهنگ کنید.
🕵️ فعالسازی Editor Tracking
Editor Tracking چهار فیلد به کلاس اضافه میکند که ArcGIS بهطور خودکار پر میکند: کاربر سازنده، تاریخ ساخت، آخرین کاربر ویرایشگر و تاریخ آخرین ویرایش. هیچ کاربری نمیتواند این مقادیر را دستی تغییر دهد. این سادهترین راه پاسخ به پرسش «این تغییر را چه کسی و کی انجام داد؟» است.
🛠️ روش اول: از Properties کلاس عارضه
- ۱در Catalog روی کلاس عارضه راستکلیک کنید و Properties را بزنید.
- ۲در پنجرهی Feature Class Properties صفحهی Manage را باز کنید.
- ۳گزینهی Editor Tracking را فعال کنید.
- ۴اگر کلاس فیلدهای مربوط را ندارد، ArcGIS Pro پیشنهاد میدهد آنها را با نامهای پیشفرض (
created_user،created_date،last_edited_user،last_edited_date) بسازد. - ۵OK را بزنید.
🛠️ روش دوم: ابزار Enable Editor Tracking
- ۱در پنجرهی Geoprocessing ابزار Enable Editor Tracking را باز کنید.
- ۲در Input Dataset کلاس یا جدول را انتخاب کنید.
- ۳در چهار پارامتر Creator Field، Creation Date Field، Last Editor Field و Last Edit Date Field نام فیلدها را تعیین کنید. میتوانید فقط برخی را پر کنید؛ مثلاً فقط آخرین ویرایشگر و تاریخ آن.
- ۴گزینهی Add fields را فعال کنید تا فیلدهای ناموجود ساخته شوند.
- ۵در Record Dates in بین UTC و Time zone of database انتخاب کنید. برای دادههایی که در وب منتشر میشوند، UTC توصیه میشود.
- ۶Run را بزنید.
💡 نکته
اگر دادهی قدیمی را برای اولین بار ردیابی میکنید، فیلدهای ساخت برای رکوردهای موجود خالی میمانند. میتوانید پیش از فعالسازی، با Calculate Field یک مقدار اولیه (مثلاً نام «Legacy» و تاریخ مهاجرت) در آنها بنویسید تا گزارشها کامل باشند.
📌 یادداشت
در ژئودیتابیس فایلی، نام کاربر از نام ورود ویندوز گرفته میشود؛ در ژئودیتابیس سازمانی از نام کاربر پایگاه داده و در سرویسهای وب از نام کاربر ArcGIS. اگر چند نفر با یک حساب ویندوز مشترک کار میکنند، Editor Tracking نمیتواند آنها را از هم جدا کند.
📊 استفاده از اطلاعات ردیابی
- با Select By Attributes و شرطی مثل
last_edited_date >= date '2026-10-01'همهی ویرایشهای این ماه را پیدا کنید. - با نمادشناسی Unique Values روی
last_edited_userببینید هر کاربر کدام بخش نقشه را ویرایش کرده است. - با ابزار Summary Statistics و Case field روی
created_userتعداد عوارض ساختهشده توسط هر کارشناس را گزارش کنید. - در Definition Query فقط عوارضی را نمایش دهید که در هفتهی اخیر تغییر کردهاند تا بازبینی متمرکز شود.
✅ نکات کلیدی این بخش
- Editor Tracking چهار فیلد خودکار و غیرقابل ویرایش میسازد
- از Properties > Manage یا ابزار Enable Editor Tracking فعال میشود
- برای دادهی وب UTC را انتخاب کنید
- برای گزارش عملکرد و بازبینی ویرایشها عالی است
🛰️ افزودن فیلدهای متادیتای GPS
وقتی داده با گیرندهی GNSS و برنامههایی مثل ArcGIS Field Maps برداشت میشود، اطلاعات ارزشمندی مثل دقت افقی، دقت عمودی، تعداد ماهوارهها، نوع اصلاح (Fix type) و زمان دقیق برداشت وجود دارد. اگر کلاس فیلدهای استاندارد برای این اطلاعات داشته باشد، برنامهی میدانی آنها را خودکار پر میکند.
- ۱در پنجرهی Geoprocessing ابزار Add GPS Metadata Fields را باز کنید.
- ۲در Input Features کلاس عارضهی نقطهای مقصد برداشت را انتخاب کنید.
- ۳Run را بزنید. ابزار مجموعهای از فیلدها با پیشوند
ESRIGNSS_میسازد؛ مثل گیرنده، دقت افقی و عمودی، طول و عرض، ارتفاع، PDOP، HDOP، تعداد ماهوارهها، نوع اصلاح و زمان. - ۴کلاس را در ArcGIS Online یا Enterprise منتشر کنید یا از طریق نقشهی آفلاین در دسترس برنامهی میدانی قرار دهید.
- ۵پس از برداشت میدانی، فیلدهای GNSS را در جدول بررسی کنید و با Select By Attributes نقاط با دقت پایین (مثلاً دقت افقی بیش از ۵ متر) را برای بازبینی جدا کنید.
💡 نکته
اگر سازمان شما استاندارد دقت دارد (مثلاً «حداکثر ۱ متر برای شیرهای آب»)، با یک Attribute Rule محدودیتی میتوانید جلوی ذخیرهی نقاط با دقت بدتر را بگیرید؛ ترکیب فیلدهای GPS و Attribute Rules در ادامهی همین فصل بررسی میشود.
✅ نکات کلیدی این بخش
- Add GPS Metadata Fields فیلدهای استاندارد ESRIGNSS میسازد
- برنامههای میدانی Esri این فیلدها را خودکار پر میکنند
- دقت افقی و نوع اصلاح ابزار اصلی کنترل کیفیت برداشتاند
🧠 Attribute Rules در ArcGIS Pro: قوانین هوشمند با Arcade
Attribute Rules قوانینی هستند که با زبان Arcade نوشته میشوند و در خود ژئودیتابیس ذخیره میشوند. چون قانون در داده است نه در نقشه یا پروژه، هر کسی که داده را ویرایش کند، از ArcGIS Pro یا برنامهی وب یا موبایل، تابع همان قانون است. سه نوع اصلی قانون وجود دارد:
🔑 پیشنیازها
- کلاس باید در ژئودیتابیس باشد و ورژن ژئودیتابیس از Attribute Rules پشتیبانی کند (ژئودیتابیسهای فایلی جدید پشتیبانی میکنند).
- کلاس باید فیلد Global ID داشته باشد. اگر ندارد، روی کلاس راستکلیک کرده و Manage > Global IDs را فعال کنید یا ابزار Add Global IDs را اجرا کنید.
- برای قوانین Validation و محاسبهی دستهای، Editor Tracking هم توصیه میشود و در برخی ژئودیتابیسها الزامی است.
- آشنایی مقدماتی با Arcade که در فصل ششم: ویرایش اطلاعات توصیفی در ArcGIS Pro با آن آشنا شدیم.
🧮 ساخت قانون محاسباتی (Calculation Rule)
فرض کنید میخواهید فیلد Area_ha قطعات همیشه، با هر ساخت یا تغییر شکل، خودکار بهروز شود.
- ۱در Catalog روی کلاس عارضه راستکلیک کنید و Data Design > Attribute Rules را بزنید. نمای Attribute Rules با سه زبانهی Calculation، Constraint و Validation باز میشود.
- ۲زبانهی Calculation را انتخاب کنید و در ریبون روی Add Rule کلیک کنید.
- ۳در Rule Name نامی مثل
Calc_Area_haو در Description توضیح بنویسید. - ۴در Field فیلد مقصد
Area_haرا انتخاب کنید. - ۵در Triggers گزینههای Insert و Update را فعال کنید تا قانون هنگام ساخت و ویرایش اجرا شود.
- ۶روی دکمهی عبارت کلیک کنید و عبارت Arcade زیر را بنویسید. سپس دکمهی Verify را بزنید.
- ۷در صورت نیاز گزینهی Exclude from application evaluation را خاموش بگذارید تا قانون در برنامههای کلاینت هم ارزیابی شود.
- ۸در زبانهی Attribute Rules ریبون روی Save کلیک کنید.
// Area in hectares, always up to date Round(AreaGeodetic($feature, 'hectares'), 3)

💡 نکته
قانون محاسباتی میتواند از دادهی لایههای دیگر هم استفاده کند. مثلاً با تابع FeatureSetByName و Intersects نام منطقهای را که هر شیر جدید در آن قرار میگیرد، خودکار در فیلد Zone بنویسید:
var zones = FeatureSetByName($datastore, "Zones", ["ZoneName"], true);
var z = First(Intersects(zones, $feature));
if (IsEmpty(z)) { return null; }
return z.ZoneName;
⛔ ساخت قانون محدودیتی (Constraint Rule)
قانون محدودیتی مثل یک نگهبان عمل میکند: اگر عبارت false برگرداند، ویرایش ذخیره نمیشود و پیام خطای دلخواه شما نمایش داده میشود.
- ۱در نمای Attribute Rules زبانهی Constraint را باز کنید و Add Rule را بزنید.
- ۲نام قانون (مثلاً
Diameter_Positive) و پیام خطا را در Error Message بنویسید؛ مثلاً «قطر لوله باید بزرگتر از صفر باشد». - ۳Error Number را برای پیگیری تعیین کنید؛ مثلاً ۱۰۱.
- ۴Triggerهای Insert و Update را فعال کنید.
- ۵عبارت Arcade را بنویسید، Verify و Save کنید.
// Reject non-positive diameters var d = $feature.Diameter_mm; return !IsEmpty(d) && d > 0;
// Reject GPS points with horizontal accuracy worse than 1 meter
var acc = $feature.ESRIGNSS_H_RMS;
if (IsEmpty(acc)) { return true; }
return acc <= 1;
⚠️ هشدار
قانون محدودیتی روی دادههای موجود اثر ندارد؛ فقط ویرایشهای بعدی را کنترل میکند. برای یافتن رکوردهای قدیمی که قانون را نقض میکنند، یک قانون Validation مشابه بسازید یا با Select By Attributes آنها را پیدا کنید.
🔍 ساخت قانون اعتبارسنجی (Validation Rule)
قوانین Validation ویرایش را متوقف نمیکنند، بلکه پس از ویرایش، با اجرای دستور Validate، عوارض ناقض را پیدا و در جدولهای خطا ثبت میکنند. این روش برای کنترل کیفیت دورهای و قوانین پیچیدهای که نباید کار ویرایشگر را متوقف کنند مناسب است.
- ۱در نمای Attribute Rules زبانهی Validation را باز کنید و Add Rule را بزنید.
- ۲نام، توضیح، Severity (شدت از ۱ تا ۵) و پیام خطا را تعیین کنید.
- ۳عبارت Arcade را بنویسید؛ مثلاً بررسی کنید هر شیر حداقل با یک لوله تماس دارد. سپس Save کنید.
- ۴لایه را به نقشه اضافه کنید، در زبانهی Edit و گروه Manage Edits روی Error Inspector کلیک کنید تا لایههای خطا به نقشه اضافه شوند.
- ۵در زبانهی Edit روی Validate کلیک کنید تا قوانین در محدودهی نقشه اجرا شوند.
- ۶در پنجرهی Error Inspector فهرست خطاها را ببینید، روی هر خطا کلیک کنید تا نقشه به آن بزرگنمایی کند، آن را اصلاح و دوباره Validate کنید. خطاهای پذیرفتنی را میتوانید Mark as Exception کنید.
// Each valve must touch at least one pipe var pipes = FeatureSetByName($datastore, "Pipes", ["OBJECTID"], true); return Count(Intersects(pipes, $feature)) > 0;
🐞 خطای رایج و راهحل
اگر هنگام ذخیرهی قانون پیام «Global ID required» یا مشابه دیدید، کلاس فیلد Global ID ندارد. ابزار Add Global IDs را اجرا کنید. اگر پس از ذخیرهی قانون، ویرایشها کند شدهاند، قوانین سنگین (مثلاً با FeatureSetByName روی لایههای بزرگ) را به حالت Batch یا Validation منتقل کنید.
✅ نکات کلیدی این بخش
- Attribute Rules در داده ذخیره میشوند و برای همهی کلاینتها اجرا میشوند
- Calculation فیلد را پر میکند، Constraint ویرایش را رد میکند، Validation خطا را ثبت میکند
- Global ID پیشنیاز است
- Error Inspector و Validate برای مدیریت خطاها
🧾 توابع پرکاربرد Arcade در Attribute Rules
💡 نکته
برای شمارهگذاری خودکار و یکتا، ابتدا با ابزار Create Database Sequence یک دنباله بسازید و سپس در قانون محاسباتی از NextSequenceValue("SeqName") استفاده کنید؛ مثلاً "VLV-" + Text(NextSequenceValue("ValveSeq"), "00000") کدهایی مثل VLV-00125 میسازد که هرگز تکرار نمیشوند.
🗃️ مدیریت، انتقال و اشکالزدایی Attribute Rules
با رشد پروژه، تعداد قوانین زیاد میشود و مدیریت آنها اهمیت پیدا میکند. چند ابزار و عادت کاربردی:
🐛 اشکالزدایی عبارتهای Arcade
- پیش از ذخیره، همیشه دکمهی Verify را بزنید؛ خطاهای نحوی و نام فیلد اشتباه همانجا گزارش میشوند.
- از تابع
Console()برای چاپ مقادیر میانی استفاده کنید؛ خروجی آن در پیامهای ارزیابی قابل مشاهده است. - همیشه حالت
IsEmptyرا برای فیلدهای ورودی بررسی کنید تا قانون روی رکوردهای ناقص خطا ندهد. - در
FeatureSetByNameفقط فیلدهای لازم را بخواهید (پارامتر فهرست فیلدها) و گزینهی هندسه را فقط در صورت نیازtrueکنید تا سرعت بالا بماند. - قانون را ابتدا روی یک کپی کوچک از داده آزمایش کنید و پس از اطمینان، روی دادهی اصلی اعمال کنید.
یک فایل CSV از قوانین در کنار مستندات پروژه نگه دارید؛ اگر ژئودیتابیس آسیب ببیند یا بخواهید همان منطق را در شهر دیگری پیاده کنید، بازسازی قوانین چند ثانیه طول میکشد.
✅ نکات کلیدی این بخش
- Disable برای بارگذاری دستهای
- Evaluation Order برای قوانین وابسته
- Export و Import Attribute Rules برای انتقال
- Verify و Console برای اشکالزدایی
🔗 Contingent Values: ترکیبهای مجاز بین فیلدها
Domain تعیین میکند هر فیلد بهتنهایی چه مقادیری میتواند داشته باشد. اما گاهی مقدار مجاز یک فیلد به مقدار فیلد دیگر بستگی دارد. مثلاً لولهی چدنی فقط در قطرهای ۱۰۰ تا ۶۰۰ و لولهی پلیاتیلن فقط در ۲۰ تا ۲۵۰ میلیمتر تولید میشود. Contingent Values دقیقاً همین وابستگی را تعریف میکند: وقتی کاربر جنس را انتخاب کند، فهرست قطرها فقط گزینههای مجاز همان جنس را نشان میدهد.
🧩 مفاهیم Contingent Values
- Field Group: گروهی از فیلدها که با هم ترکیبهای مجاز دارند؛ مثلاً Material و Diameter.
- Contingent Value: یک ردیف مجاز از مقادیر برای فیلدهای گروه؛ مثلاً «چدن + ۲۰۰».
- Restrictive: اگر گروه محدودکننده باشد، ورود ترکیب غیرمجاز در پنجرهی Attributes و قالبها ممکن نیست؛ در غیر این صورت فقط هشدار داده میشود.
- Any / Null: میتوانید برای یک فیلد مقدار «هر مقدار» یا «خالی» را در ترکیب مجاز قرار دهید.
🛠️ مراحل تعریف Contingent Values
- ۱مطمئن شوید همهی فیلدهای گروه Domain دارند (Coded Value یا Range). Contingent Values فقط روی فیلدهای دارای Domain کار میکند.
- ۲در Catalog روی کلاس راستکلیک کنید و Data Design > Contingent Values را بزنید. نمای Contingent Values باز میشود.
- ۳در ریبون روی Manage Field Groups کلیک کنید، یک گروه جدید (مثلاً
MaterialDiameter) بسازید و فیلدهای Material و Diameter را به آن اضافه کنید. گزینهی Restrictive را بر اساس نیاز فعال کنید. - ۴اگر کلاس Subtype دارد، ابتدا Subtype مورد نظر را انتخاب کنید؛ ترکیبها میتوانند برای هر Subtype متفاوت باشند.
- ۵در جدول نمای Contingent Values، برای هر ترکیب مجاز یک ردیف اضافه کنید: Material = چدن، Diameter = ۱۰۰؛ Material = چدن، Diameter = ۱۵۰ و به همین ترتیب.
- ۶برای Range Domainها میتوانید در هر ردیف یک زیرمحدوده تعیین کنید.
- ۷Save را بزنید.
- ۸لایه را دوباره به نقشه اضافه کنید و در پنجرهی Attributes یک لوله را ویرایش کنید: با تغییر جنس، فهرست قطرها تغییر میکند.

💡 نکته
هنگام ویرایش در پنجرهی Attributes، ترکیب نامجاز با علامت هشدار مشخص میشود. برای یافتن رکوردهای قدیمی که پیش از تعریف Contingent Values ترکیب نامجاز داشتهاند، با Select By Attributes و شرطهایی مثل Material = 2 AND Diameter > 250 آنها را دستهای پیدا و اصلاح کنید.
📌 یادداشت
Contingent Values در برنامههای میدانی Esri مثل ArcGIS Field Maps هم اعمال میشود؛ یعنی مأمور میدانی هم فقط ترکیبهای مجاز را میبیند. این قابلیت خطای انسانی را در برداشت میدانی بهشدت کاهش میدهد.
✅ نکات کلیدی این بخش
- Contingent Values وابستگی مقادیر بین چند فیلد را تعریف میکند
- همهی فیلدهای گروه باید Domain داشته باشند
- Restrictive ورود ترکیب نامجاز را میبندد
- برای هر Subtype ترکیبهای جدا قابل تعریف است
🧱 ترکیب قابلیتها: یک ژئودیتابیس هوشمند در عمل
قدرت واقعی این فصل در ترکیب قابلیتهاست. نمونهی زیر طراحی رایج برای لایهی شیرهای آب است:
با این هفت لایه، بیشتر خطاها پیش از ورود به داده متوقف میشوند و آنچه باقی میماند، با Validate و Error Inspector بهسرعت پیدا میشود. برای خطاهای هندسی مثل همپوشانی و شکاف هم ابزار اصلی توپولوژی است که در فصل بعد بررسی میکنیم.
⚠️ هشدار
پیش از انتشار لایهای با Attribute Rules به ArcGIS Online یا Enterprise، مطمئن شوید نسخهی پورتال از نوع قوانین شما پشتیبانی میکند. برخی توابع Arcade یا قوانین Batch فقط در ژئودیتابیس سازمانی و سرویسهای Enterprise کار میکنند. همیشه پس از انتشار، با یک ویرایش آزمایشی در برنامهی وب رفتار قوانین را بررسی کنید.
💼 سه سناریوی واقعی با Attribute Rules
در ادامه سه نمونهی کاربردی میآوریم که در پروژههای شهری، کشاورزی و منابع طبیعی زیاد تکرار میشوند. هر سه را میتوانید با تغییر نام فیلدها در دادهی خودتان به کار ببرید.
🏙️ سناریو ۱: کد پلاک خودکار بر اساس منطقه
در شهرداریها هر قطعه باید کدی شامل شمارهی منطقه و یک شمارهی ترتیبی داشته باشد. یک قانون محاسباتی روی فیلد ParcelCode با محرک Insert بسازید. عبارت ابتدا منطقهای را که مرکز قطعه در آن قرار دارد پیدا میکند و سپس کد را میسازد:
var zones = FeatureSetByName($datastore, "Zones", ["ZoneNo"], true);
var z = First(Intersects(zones, Centroid($feature)));
if (IsEmpty(z)) { return "Z00-" + Text(NextSequenceValue("ParcelSeq"), "000000"); }
return "Z" + Text(z.ZoneNo, "00") + "-" + Text(NextSequenceValue("ParcelSeq"), "000000");
نتیجه کدهایی مانند Z07-000412 است. اگر قطعه بیرون از همهی مناطق رسم شود، پیشوند Z00 میگیرد و میتوانید با یک قانون Validation این موارد را برای بازبینی فهرست کنید.
🌾 سناریو ۲: مساحت هکتاری مزارع
در پروژههای کشاورزی، کارشناسان باید مساحت هر مزرعه را بر حسب هکتار ببینند. قانون محاسباتی روی فیلد Area_ha با محرک Insert و Update:
return Round(AreaGeodetic($feature, "hectares"), 2);
مزیت این قانون نسبت به Calculate Geometry این است که با هر تغییر شکل، مساحت خودکار بهروز میشود و هیچوقت عدد قدیمی در جدول باقی نمیماند. اگر فقط تغییر هندسه برایتان مهم است، در بخش Triggering Fields فقط Shape را انتخاب کنید تا با ویرایش فیلدهای دیگر قانون بیهوده اجرا نشود.
🌲 سناریو ۳: جلوگیری از ثبت نمونهبرداری خارج از فصل
در پایش منابع طبیعی، نمونهبرداری فقط بین فروردین تا مهر معتبر است. یک قانون محدودیتی روی کلاس Samples:
var m = Month($feature.SampleDate) + 1; return m >= 3 && m <= 10;
توجه کنید که تابع Month در Arcade ماه را از صفر میشمارد، به همین دلیل یک واحد اضافه شده است. محدودهی ماههای میلادی را با تقویم کاری پروژهی خود تطبیق دهید و یک پیام خطای فارسی مانند «تاریخ نمونهبرداری خارج از فصل مجاز است» تعریف کنید.
⚠️ هشدار
قوانین محدودیتی روی دادهی موجود اثری ندارند و فقط ویرایشهای جدید را کنترل میکنند. برای یافتن رکوردهای قدیمیِ ناقض، همان منطق را بهصورت قانون Validation هم تعریف کنید.
✅ نکات کلیدی این بخش
- FeatureSetByName و Intersects برای اطلاعات مکانی از لایهی دیگر
- AreaGeodetic برای مساحت همیشه بهروز
- Triggering Fields اجرای بیهوده را حذف میکند
- Constraint فقط ویرایشهای جدید را کنترل میکند
📋 برنامهریزی پیش از پیادهسازی: چکلیست طراح ژئودیتابیس
بزرگترین اشتباه در کار با این قابلیتها، شروع مستقیم از نوشتن کد است. قبل از ساخت اولین قانون، این پرسشها را با کارفرما و کاربران نهایی مرور کنید:
- ۱کدام فیلدها همیشه از روی دادهی دیگر قابل محاسبهاند؟ اینها نامزد قانون محاسباتیاند و نباید کاربر دستی پرشان کند؛ مثل مساحت، منطقه، کد یکتا و تاریخ.
- ۲کدام خطاها هرگز نباید وارد داده شوند؟ اینها نامزد قانون محدودیتیاند؛ مثل قطر منفی یا تاریخ آینده.
- ۳کدام خطاها ممکن است موقتاً قابل قبول باشند؟ مثلاً شیری که هنوز لولهاش رسم نشده؛ اینها را Validation کنید تا کار ویرایشگر متوقف نشود.
- ۴چه کسی باید پاسخگوی تغییرات باشد؟ اگر پاسخ مهم است، Editor Tracking را از روز اول فعال کنید.
- ۵داده از کجا وارد میشود؟ اگر بخش زیادی از داده با Append یا بارگذاری دستهای وارد میشود، برنامهی غیرفعال کردن موقت قوانین سنگین را از قبل بنویسید.
- ۶داده کجا منتشر میشود؟ سازگاری قوانین را با ArcGIS Online، Enterprise و برنامههای میدانی بررسی کنید.
پاسخ این پرسشها را در یک جدول ساده ثبت کنید: نام کلاس، نام فیلد، نوع کنترل (Domain، Contingent، Calculation، Constraint، Validation) و توضیح. این جدول هم مستند پروژه است و هم مبنای آزمون پذیرش داده. پس از پیادهسازی، برای هر ردیف یک ویرایش آزمایشی انجام دهید و نتیجه را علامت بزنید.
💡 نکته
قوانین را بهصورت تدریجی اضافه کنید: ابتدا Domain و Subtype، سپس Contingent Values، بعد قوانین محاسباتی ساده و در آخر قوانین مکانی سنگین. این ترتیب اشکالزدایی را بسیار سادهتر میکند، چون هر بار فقط یک لایهی منطق جدید اضافه شده است.
📌 یادداشت
اگر هنوز با مفاهیم پایهی ساخت ژئودیتابیس، Domain و Subtype آشنا نیستید، ابتدا فصل هشتم: ساخت ژئودیتابیس در ArcGIS Pro را بخوانید؛ همهی قابلیتهای این فصل روی آن پایه ساخته میشوند.
✅ نکات کلیدی این بخش
- اول برنامه، بعد کد
- هر کنترل را در یک جدول مستند کنید
- قوانین را تدریجی و آزموده اضافه کنید
🧪 تمرین عملی: شیرهای آب هوشمند
- ۱در ژئودیتابیس تمرین فصل قبل (
WaterNet.gdb)، برای کلاسValvesوPipesفیلد Global ID و Editor Tracking را فعال کنید. - ۲روی کلاس
Valvesابزار Add GPS Metadata Fields را اجرا کنید. - ۳یک قانون محاسباتی بسازید که با Insert کد
VLV-00001به بعد را با یک Database Sequence تولید کند. - ۴یک قانون محاسباتی دیگر بسازید که نام منطقه را از لایهی Zones در فیلد Zone بنویسد.
- ۵یک قانون محدودیتی بسازید که قطر منفی یا صفر لوله را رد کند و پیام فارسی نشان دهد.
- ۶برای Pipes یک گروه Contingent Values با Material و Diameter و حداقل شش ترکیب مجاز تعریف کنید.
- ۷یک قانون Validation بسازید که شیرهای جدا از لوله را پیدا کند؛ سه شیر عمداً دور از لوله بسازید و با Validate و Error Inspector آنها را بیابید.
- ۸با Select By Attributes روی فیلدهای Editor Tracking، ویرایشهای امروز را انتخاب کنید.
💡 نکته
چکلیست موفقیت: کد شیرها خودکار و تکرارینشدنی است، قطر منفی ذخیره نمیشود، با تغییر جنس لوله فهرست قطرها عوض میشود و Error Inspector دقیقاً سه خطا نشان میدهد. تمرینهای مکمل در تمرین های آرک جی آی اس پرو.
🏙️ سناریوی واقعی: کنترل کیفیت برداشت میدانی تیرهای برق
یک شرکت توزیع برق تیمهای میدانیاش را با تبلت به برداشت تیرهای برق فرستاده است. در هفتهی اول مشکلها پیدا میشود: کد تیرها تکراری است، بعضی تیرها بدون ارتفاع ثبت شدهاند و معلوم نیست هر رکورد را چه کسی و چه زمانی ویرایش کرده است. ترکیب قوانین توصیفی و ردیابی ویرایشگر این مشکلها را مهار میکند:
- ۱Editor Tracking را روی کلاس عارضه فعال کنید تا نام ویرایشگر و تاریخ ایجاد و ویرایش هر تیر خودکار ثبت شود.
- ۲یک قانون محاسباتی (Calculation Rule) بسازید که کد تیر را از ترکیب کد فیدر و یک شمارهی ترتیبی تولید کند تا کد تکراری ساخته نشود.
- ۳یک قانون محدودیت (Constraint Rule) تعریف کنید که ذخیرهی تیر با ارتفاع خالی یا کمتر از ۶ متر را رد کند و پیام خطای فارسی و روشن نشان دهد.
- ۴در پایان هر روز با فیلتر روی فیلد تاریخ ویرایش، کارکرد هر تیم را مرور کنید.
💡 نکته
پیام خطای قانون محدودیت را طوری بنویسید که کاربر میدانی بداند چه باید بکند؛ مثلاً «ارتفاع تیر را وارد کنید؛ حداقل ۶ متر» بهجای «Constraint failed». پیام روشن، تماسهای تلفنی تیم میدانی با دفتر را بهطور محسوسی کم میکند.
🐞 خطاهای رایج و راهحل
❓ پرسشهای متداول درباره Attribute Rules و Editor Tracking
🔹 Attribute Rules در ArcGIS Pro چه تفاوتی با Domain دارند؟
Domain فقط فهرست یا محدودهی مقادیر مجاز یک فیلد را تعیین میکند. Attribute Rules با Arcade میتوانند فیلدها را خودکار محاسبه کنند، ویرایشهای نادرست را بر اساس منطق پیچیده رد کنند و خطاها را حتی با شرطهای مکانی پیدا کنند.
🔹 آیا Attribute Rules روی Shapefile کار میکند؟
خیر. این قابلیت فقط در ژئودیتابیس فایلی، موبایل و سازمانی در دسترس است و کلاس باید فیلد Global ID داشته باشد.
🔹 Editor Tracking دقیقاً چه چیزی را ثبت میکند؟
نام کاربر سازنده، تاریخ ساخت، نام آخرین ویرایشگر و تاریخ آخرین ویرایش هر رکورد را در چهار فیلد خودکار ثبت میکند. سابقهی کامل تغییرات را نگه نمیدارد؛ برای آن به آرشیو یا نسخهبندی در ژئودیتابیس سازمانی نیاز دارید.
🔹 فیلدهای GPS Metadata چطور پر میشوند؟
برنامههای میدانی Esri مثل ArcGIS Field Maps هنگام برداشت با گیرندهی GNSS، این فیلدها را خودکار با دقت، تعداد ماهواره و زمان پر میکنند. در ArcGIS Pro معمولاً دستی وارد نمیشوند.
🔹 تفاوت قانون Constraint و Validation چیست؟
Constraint هنگام ویرایش اجرا میشود و اگر شرط برقرار نباشد، ذخیره را رد میکند. Validation ویرایش را متوقف نمیکند و با دستور Validate، عوارض ناقض را در جدول خطا ثبت میکند.
🔹 Contingent Values برای چه کاری است؟
برای تعریف ترکیبهای مجاز مقادیر بین چند فیلد؛ مثلاً اینکه هر جنس لوله فقط با قطرهای مشخصی ساخته میشود. با انتخاب یک مقدار، گزینههای فیلد دیگر محدود میشوند.
🔹 آیا قوانین Arcade در ArcGIS Online هم اجرا میشوند؟
بله، اگر لایه با قوانینش منتشر شود و پورتال از نوع قانون پشتیبانی کند، قوانین هنگام ویرایش در برنامههای وب و موبایل هم اجرا میشوند.
🔹 آیا Attribute Rules در شیپفایل هم کار میکند؟
خیر. قوانین توصیفی فقط روی کلاسهای عارضه و جدولهای ژئودیتابیس (فایلی، موبایل یا سازمانی) قابل تعریف هستند. برای استفاده از آنها ابتدا شیپفایل را به ژئودیتابیس منتقل کنید.
🏁 جمعبندی
در این فصل ژئودیتابیس را هوشمند کردیم: با Editor Tracking ردپای هر ویرایش را ثبت کردیم، با Add GPS Metadata Fields برای برداشت میدانی آماده شدیم، با Attribute Rules در ArcGIS Pro قوانین محاسباتی، محدودیتی و اعتبارسنجی نوشتیم و با Contingent Values ترکیبهای مجاز را تعریف کردیم. این قابلیتها کیفیت توصیفی داده را تضمین میکنند. در فصل بعد سراغ کیفیت هندسی میرویم: توپولوژی در ArcGIS Pro و اعتبارسنجی دادههای مکانی.
✅ نکات کلیدی این بخش
- کیفیت داده را در خود داده پیاده کنید، نه در دستورالعمل کاغذی
- قوانین سنگین را Batch یا Validation کنید
- ترکیب Domain، Contingent Values و Attribute Rules بیشترین اثر را دارد
🗺️ ادامهی مسیر آموزش ArcGIS Pro
→ فصل قبل: ساخت ژئودیتابیس در آرکجیایاس پرو
🎓 اگر میخواهید این مباحث را با دادهی واقعی، تمرین تصحیحشده و پشتیبانی مدرس یاد بگیرید، سرفصل دوره آرک جی آی اس پرو گیسلند را ببینید. برای نصب نرمافزار هم راهنمای نصب آرک جی آی اس پرو و برای منابع مطالعهی بیشتر صفحهی کتاب آرک جی آی اس پرو را ببینید.
🔗 مطالب پایهی مرتبط: آشنایی با رابط کاربری ArcGIS Pro، ساخت پروژه در ArcGIS Pro، افزودن داده در ArcGIS Pro و پیمایش نقشه و بوکمارک در ArcGIS Pro.
📖 منابع: مستندات رسمی Esri: Introduction to attribute rules و Enable Editor Tracking tool.
📕 مطالعهی بیشتر: موضوعبندی این مطلب از فصل ۹ کتاب ArcGIS Pro 3.x Cookbook (ویرایش دوم)، نوشتهی Tripp Corbin، انتشارات Packt، ۲۰۲۴ الهام گرفته است؛ متن، مراحل و مثالها نوشتهی اختصاصی گیسلند هستند.

بدون دیدگاه