آموزش Join، Relate و Spatial Join در GIS   www gisland org   ۰۹۱۲۰۴۳۸۸۷۴

نویسنده: دکتر سعید جوی زاده | مشاوره و آموزش تخصصی GIS: ۰۹۱۲۰۴۳۸۸۷۴

آموزش Join در GIS از آن مهارت‌هایی است که تقریباً در هر پروژه به کار می‌آید. داده‌های آماری معمولاً در جدول‌های اکسل نگهداری می‌شوند: جمعیت شهرستان‌ها، میزان تولید محصولات، آمار بیماری یا فهرست مشترکین. از سوی دیگر، لایه‌های مکانی مانند مرز تقسیمات کشوری فقط شکل و چند فیلد شناسایی دارند. اتصال این دو، یعنی آوردن آمار روی نقشه، با ابزار Join انجام می‌شود. در کنار آن، Relate برای رابطه‌های یک‌به‌چند و Spatial Join برای اتصال بر اساس موقعیت مکانی به کار می‌روند. در این مقاله تفاوت این سه، مراحل اجرا و راه رفع خطاهای رایج را توضیح می‌دهیم. برای رفع اشکال داده‌های خود با شماره ۰۹۱۲۰۴۳۸۸۷۴ تماس بگیرید.

مفهوم کلید مشترک

اتصال توصیفی بر پایه یک فیلد مشترک میان دو جدول انجام می‌شود که به آن کلید می‌گویند. کلید باید در هر دو جدول مقدار یکسانی برای یک پدیده داشته باشد؛ مانند کد شهرستان، شماره پلاک ثبتی یا شناسه ایستگاه. بهترین کلید، کد عددی یا متنی یکتا و استاندارد است. استفاده از نام به‌عنوان کلید پرخطر است، زیرا یک نام ممکن است به چند شکل نوشته شود: با فاصله یا نیم‌فاصله، با حروف عربی یا فارسی، با پیشوند «شهرستان» یا بدون آن.

دو شرط اصلی برای موفقیت اتصال وجود دارد. نخست، نوع فیلد در دو جدول باید یکی باشد؛ کد عددی در یک جدول و همان کد به‌صورت متنی در جدول دیگر به هم وصل نمی‌شوند. دوم، مقادیر باید دقیقاً برابر باشند؛ یک فاصله اضافه در انتهای متن یا صفر ابتدایی حذف‌شده، اتصال را از بین می‌برد.

انواع رابطه میان جدول‌ها

پیش از انتخاب ابزار، نوع رابطه را مشخص کنید. در رابطه یک‌به‌یک، هر رکورد لایه دقیقاً یک رکورد متناظر در جدول دارد؛ مانند هر شهرستان و جمعیت آن. در رابطه چندبه‌یک، چندین رکورد لایه به یک رکورد جدول مربوط‌اند؛ مانند چندین قطعه زمین که همگی کد کاربری یکسانی دارند و توضیح آن کد در جدول دیگری آمده است. Join برای این دو حالت مناسب است.

در رابطه یک‌به‌چند، هر رکورد لایه چندین رکورد در جدول دارد؛ مانند یک چاه با ده‌ها اندازه‌گیری ماهانه سطح آب یا یک قطعه ملک با چند مالک. اگر در این حالت Join بزنید، در بسیاری از قالب‌های داده فقط نخستین رکورد متناظر نمایش داده می‌شود و بقیه نادیده می‌مانند. ابزار مناسب این حالت Relate یا کلاس رابطه در ژئودیتابیس است.

اجرای Join در ArcGIS Pro

  • جدول اکسل یا CSV را به پروژه اضافه کنید و مطمئن شوید سطر اول عنوان ستون‌هاست.
  • روی لایه راست‌کلیک و از مسیر Joins and Relates گزینه Add Join را انتخاب کنید.
  • در Input Join Field فیلد کلید لایه و در Join Table جدول مورد نظر و فیلد کلید آن را معرفی کنید.
  • دکمه Validate Join را بزنید. این ابزار تعداد رکوردهای متصل‌شده و مشکلات احتمالی را گزارش می‌کند و استفاده از آن بسیار توصیه می‌شود.
  • گزینه Keep All Target Features مشخص می‌کند رکوردهای بدون متناظر نمایش داده شوند یا نه.
  • پس از تأیید، جدول توصیفی لایه را باز کنید؛ ستون‌های جدول دوم در انتهای آن دیده می‌شوند.

این اتصال موقتی است و فقط در همان پروژه وجود دارد. برای دائمی کردن آن دو راه دارید: خروجی گرفتن از لایه با Export Features که لایه تازه‌ای با همه ستون‌ها می‌سازد، یا استفاده از ابزار Join Field که ستون‌های انتخابی را به‌طور دائمی به جدول لایه اضافه می‌کند. روش دوم برای زمانی که فقط به یکی دو ستون نیاز دارید مناسب‌تر است.

اجرای Join در QGIS

در QGIS پنجره Properties لایه را باز کنید و به زبانه Joins بروید. با دکمه افزودن، لایه یا جدول دوم، فیلد کلید آن و فیلد کلید لایه هدف را انتخاب کنید. می‌توانید مشخص کنید کدام ستون‌ها افزوده شوند و پیشوند نام آن‌ها چه باشد؛ پیشوند کوتاه، خوانایی جدول را بهتر می‌کند. برای دائمی کردن، از Export و Save Features As استفاده کنید. الگوریتم Join attributes by field value در جعبه‌ابزار پردازش نیز همین کار را به‌صورت یک مرحله‌ای و با خروجی لایه تازه انجام می‌دهد و امکان انتخاب نوع رابطه یک‌به‌یک یا یک‌به‌چند را می‌دهد.

Relate: برای رابطه‌های یک‌به‌چند

Relate جدول‌ها را ادغام نمی‌کند، بلکه میان آن‌ها پیوند برقرار می‌کند. پس از تعریف Relate در ArcGIS Pro، با انتخاب یک عارضه روی نقشه می‌توانید همه رکوردهای مرتبط آن را در جدول دوم ببینید و برعکس. برای نمونه، با انتخاب یک چاه، همه اندازه‌گیری‌های آن در جدول سری زمانی انتخاب می‌شود. اگر این رابطه دائمی و پرکاربرد است، بهتر است به‌صورت Relationship Class در ژئودیتابیس تعریف شود تا با داده ذخیره بماند و در ویرایش‌ها نیز یکپارچگی حفظ شود. در QGIS همین مفهوم در بخش Relations تنظیمات پروژه تعریف می‌شود.

روش دیگر برای داده‌های یک‌به‌چند، خلاصه‌سازی پیش از اتصال است. با ابزار Summary Statistics می‌توانید برای هر چاه میانگین، بیشینه و کمینه سطح آب را محاسبه و جدول خلاصه را که اکنون رابطه یک‌به‌یک دارد با Join به لایه وصل کنید. این روش برای تهیه نقشه بسیار کارآمد است.

Spatial Join: اتصال بر پایه موقعیت

گاهی دو لایه هیچ فیلد مشترکی ندارند، اما رابطه مکانی دارند: هر مدرسه در کدام منطقه شهرداری قرار دارد؟ در هر دهستان چند حلقه چاه وجود دارد؟ نزدیک‌ترین ایستگاه آتش‌نشانی به هر ساختمان کدام است؟ پاسخ این پرسش‌ها با Spatial Join به دست می‌آید. در این ابزار، ویژگی‌های توصیفی لایه دوم بر اساس رابطه مکانی به لایه هدف منتقل می‌شود.

سه تنظیم اصلی را باید بشناسید. نخست، نوع رابطه مکانی: تقاطع، قرارگیری کامل درون، نزدیک‌ترین، در فاصله مشخص و موارد دیگر. دوم، نوع اتصال: یک‌به‌یک یا یک‌به‌چند. در حالت یک‌به‌یک اگر چند عارضه با عارضه هدف رابطه داشته باشند، با قواعد ادغام مانند جمع، میانگین یا شمارش خلاصه می‌شوند. سوم، نگه‌داشتن یا حذف عوارض بدون متناظر. فیلد Join_Count در خروجی نشان می‌دهد چند عارضه به هر عارضه هدف متصل شده است؛ همین فیلد پاسخ پرسش «چند نقطه در هر پلیگون» را می‌دهد. در QGIS ابزارهای Join attributes by location و Count points in polygon همین کارها را انجام می‌دهند.

هفت خطای رایج و راه رفع آن‌ها

هیچ رکوردی متصل نمی‌شود

تقریباً همیشه نوع فیلدها متفاوت است. کد در لایه عددی و در اکسل متنی است یا برعکس. یک فیلد تازه با نوع مناسب بسازید و مقدار را با Field Calculator در آن تبدیل کنید؛ روش کار در مقاله آموزش Field Calculator در ArcGIS Pro آمده است.

فقط بخشی از رکوردها متصل می‌شوند

مقادیر کلید در برخی سطرها برابر نیستند. فاصله‌های اضافه، صفرهای ابتدایی حذف‌شده توسط اکسل، تفاوت حروف «ی» و «ک» فارسی و عربی و غلط‌های املایی را بررسی کنید. رکوردهای متصل‌نشده را با انتخاب مقادیر تهی در ستون‌های افزوده‌شده پیدا کنید.

ستون‌های عددی به شکل متن یا تهی دیده می‌شوند

در اکسل، ستون عددی که حتی یک خانه متنی داشته باشد ممکن است نادرست خوانده شود. ستون‌ها را یکدست کنید یا فایل را با قالب CSV ذخیره کنید.

جدول اکسل در نرم‌افزار باز نمی‌شود

فایل در اکسل باز و قفل است، یا نام کاربرگ و ستون‌ها نویسه‌های غیرمجاز دارد. فایل را ببندید و نام‌ها را ساده و انگلیسی کنید.

پس از بستن پروژه، اتصال از بین رفته است

مسیر فایل جدول تغییر کرده یا اتصال را دائمی نکرده‌اید. خروجی دائمی بگیرید.

تعداد رکوردها پس از اتصال زیاد شده است

رابطه یک‌به‌چند بوده و ابزار برای هر متناظر یک عارضه تکراری ساخته است. ابتدا جدول را خلاصه کنید.

نام ستون‌ها پس از خروجی کوتاه و ناخوانا شده است

شیپ‌فایل نام فیلد را به ده نویسه محدود می‌کند. خروجی را در ژئودیتابیس یا GeoPackage ذخیره کنید.

نمونه کاربردی: نقشه تراکم جمعیت دهستان‌ها

فرض کنید لایه دهستان‌های یک استان و جدول اکسل جمعیت را دارید. ابتدا در اکسل ستون کد دهستان را بررسی و آن را به قالب متنی با تعداد رقم ثابت تبدیل کنید. در لایه نیز نوع فیلد کد را کنترل کنید. Join را اجرا و با Validate مطمئن شوید همه دهستان‌ها متصل شده‌اند. سپس خروجی دائمی بگیرید، یک فیلد اعشاری برای مساحت به کیلومتر مربع و فیلد دیگری برای تراکم بسازید و مقدار جمعیت را بر مساحت تقسیم کنید. در پایان، لایه را با نمادگذاری مدرج بر اساس تراکم نمایش دهید. این فرایند ساده، الگوی کلی بیشتر نقشه‌های آماری است.

نمونه کاربردی: شمارش حوادث در هر منطقه

لایه نقطه‌ای تصادفات و لایه پلیگونی مناطق شهری را در نظر بگیرید. با Spatial Join که لایه هدف آن مناطق و لایه اتصال آن تصادفات است، در حالت یک‌به‌یک و با رابطه «دربرگیرنده»، فیلد Join_Count تعداد تصادف هر منطقه را می‌دهد. اگر در قواعد ادغام برای فیلد تعداد مصدومان گزینه جمع را برگزینید، مجموع مصدومان هر منطقه نیز محاسبه می‌شود. با تقسیم تعداد تصادف بر طول معابر یا جمعیت هر منطقه، شاخصی قابل مقایسه به دست می‌آید که از عدد خام گویاتر است.

توصیه‌هایی برای کار حرفه‌ای

  • پیش از اتصال، تعداد رکوردهای دو جدول و یکتایی کلید را بررسی کنید.
  • همیشه پس از اتصال، تعداد رکوردهای متصل‌نشده را کنترل کنید.
  • از کدهای استاندارد به جای نام استفاده کنید.
  • اتصال‌های مهم را دائمی و مستند کنید.
  • برای جدول‌های بزرگ، روی فیلد کلید نمایه بسازید تا سرعت بالا برود.
  • در Spatial Join، سیستم مختصات دو لایه را یکسان و برای فاصله‌ها متری انتخاب کنید.
  • فرایندهای تکراری را با ModelBuilder خودکار کنید.

آماده‌سازی جدول اکسل پیش از اتصال

بخش بزرگی از مشکلات اتصال، پیش از ورود به نرم‌افزار GIS و در خود اکسل قابل پیشگیری است. جدول را به شکل ساده درآورید: یک سطر عنوان و زیر آن فقط داده. سلول‌های ادغام‌شده، سطرهای خالی میانی، سطر جمع کل، یادداشت‌ها و قالب‌بندی‌های رنگی را حذف کنید. نام ستون‌ها را کوتاه، انگلیسی و بدون فاصله بنویسید و با عدد آغاز نکنید. ستون کلید را به قالب متن درآورید تا صفرهای ابتدایی کدها حفظ شود؛ اکسل به‌طور پیش‌فرض کد ۰۱۲۳ را به عدد ۱۲۳ تبدیل می‌کند و همین تغییر کوچک صدها رکورد را بدون متناظر می‌گذارد.

برای یکسان‌سازی متن‌ها، با تابع حذف فاصله‌های اضافه و جایگزینی حروف عربی با فارسی، ستون نام‌ها را پاک‌سازی کنید. اگر ناچارید با نام اتصال دهید، یک ستون کمکی بسازید که در آن همه فاصله‌ها و نیم‌فاصله‌ها حذف شده باشد و همین کار را در لایه نیز انجام دهید؛ این ترفند ساده بسیاری از ناهمخوانی‌های نگارشی را از میان می‌برد. در پایان، با ابزار حذف موارد تکراری یا یک جدول محوری بررسی کنید که هر کلید فقط یک بار آمده باشد. اگر کلیدی تکرار شده، باید تصمیم بگیرید کدام رکورد معتبر است یا داده را خلاصه کنید.

اتصال در پایگاه داده با SQL

کاربرانی که داده خود را در پایگاه داده مکانی نگه می‌دارند، همین عملیات را با دستور JOIN در زبان SQL انجام می‌دهند. مزیت این روش، سرعت بسیار بیشتر در جدول‌های بزرگ و امکان ذخیره نتیجه به‌صورت نما است؛ نمایی که با تغییر جدول‌های پایه، خودکار به‌روز می‌شود. توابع مکانی نیز اتصال بر پایه موقعیت را ممکن می‌کنند. اگر حجم داده‌های شما به صدها هزار رکورد می‌رسد یا اتصال‌ها را مرتب تکرار می‌کنید، یادگیری این روش ارزش زیادی دارد.

پرسش‌های متداول

تفاوت Add Join و Join Field چیست؟

Add Join اتصال موقت و پویا می‌سازد و با تغییر جدول مبدأ به‌روز می‌شود. Join Field ستون‌ها را به‌طور دائمی در جدول لایه می‌نویسد.

آیا می‌توان هم‌زمان چند جدول را به یک لایه وصل کرد؟

بله، اما هر اتصال سرعت را کم می‌کند. بهتر است پس از هر اتصال خروجی دائمی بگیرید.

آیا می‌توان با دو فیلد کلید اتصال داد؟

راه ساده، ساخت یک فیلد ترکیبی در هر دو جدول است که از به‌هم‌چسباندن دو فیلد به دست می‌آید.

جمع‌بندی

Join برای رابطه‌های یک‌به‌یک و چندبه‌یک، Relate برای یک‌به‌چند و Spatial Join برای اتصال بر پایه موقعیت به کار می‌رود. کلید موفقیت، یکسان بودن نوع و مقدار فیلد مشترک و کنترل نتیجه پس از هر اتصال است. برای یادگیری پروژه‌محور این مباحث و ثبت‌نام در دوره‌های آموزش GIS، با شماره ۰۹۱۲۰۴۳۸۸۷۴ تماس بگیرید.

مطالب مرتبط در GISLand

درباره نویسنده

این مقاله را دکتر سعید جوی زاده، مدرس و مشاور سیستم اطلاعات جغرافیایی در www.gisland.org نوشته است. برای دریافت مشاوره GIS، ثبت‌نام در دوره‌های آموزش GIS یا سفارش پروژه، با شماره ۰۹۱۲۰۴۳۸۸۷۴ تماس بگیرید.

بدون دیدگاه

دیدگاهتان را بنویسید