تحلیل نزدیکترین همسایه

هشدار

این آموزش در حال حاضر منسوخ شده است. نسخه جدید و به روز شده در Nearest Neighbor Analysis (QGIS3) موجود است.

GIS در تجزیه و تحلیل روابط فضایی بین ویژگی ها بسیار مفید است. یکی از این تحلیل‌ها، یافتن این است که کدام ویژگی به یک ویژگی خاص نزدیک‌تر است. QGIS ابزاری به نام Distance Matrix دارد که به چنین تحلیلی کمک می کند. در این آموزش از 2 مجموعه داده استفاده می کنیم و متوجه می شویم که کدام نقطه از یک لایه به کدام نقطه از لایه دوم نزدیکتر است.

بررسی اجمالی کار

با توجه به مکان تمام زمین لرزه های مهم شناخته شده، نزدیک ترین مکان پرجمعیت را برای هر مکانی که زمین لرزه در آن رخ داده است، بیابید.

مهارت های دیگری که یاد خواهید گرفت

  • نحوه اتصال جدول در QGIS (برای دستورالعمل های دقیق به اجرای اتصال جدول مراجعه کنید.)

  • استفاده از :guilabel: Query Builder برای نمایش زیرمجموعه ای از ویژگی های یک لایه.

  • استفاده از پلاگین MMQGIS برای ایجاد خطوط هاب برای تجسم نزدیکترین همسایگان.

داده ها را دریافت کنید

ما از پایگاه داده زلزله مهم مرکز ملی داده های ژئوفیزیک NOAA <http://www.ngdc.noaa.gov/nndc/struts/form?t=101650&s=1&d=1>`_ به عنوان لایه خود که تمام زمین لرزه های بزرگ را نشان می دهد استفاده خواهیم کرد. «داده‌های زمین‌لرزه تعیین‌شده با برگه‌ها <http://www.ngdc.noaa.gov/nndc/struts/results?type_0=Exact&query_0=$ID&t=101650&s=13&d=189&dfn=signif.txt>`_ را دانلود کنید.

زمین طبیعی یک مجموعه داده زیبای «مکان‌های پرجمعیت <http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/>» دارد. مجموعه داده «ساده (کمتر ستون) <http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip>`_ را دانلود کنید

برای راحتی کار، می‌توانید مستقیماً یک کپی از هر دو مجموعه داده را از لینک‌های زیر دانلود کنید:

signif.txt

ne_10m_populated_places_simple.zip

منابع داده: [NCEI] [NATURALEARTH]

روش

  1. Layer ‣ Add Layer ‣ Add Limited Text Layer را باز کنید و فایل "signif.txt" دانلود شده را مرور کنید.

../_images/1194.png
  1. از آنجایی که این یک فایل جداشده با تب است، Tab را به عنوان فرمت فایل انتخاب کنید. فیلد :guilabel:`X و Y فیلد به صورت خودکار پر می شود. روی :guilabel:`OK کلیک کنید.

توجه

هنگامی که QGIS سعی می کند فایل را وارد کند، ممکن است برخی از پیام های خطا را مشاهده کنید. اینها خطاهای معتبر هستند و برخی از ردیف‌های فایل وارد نمی‌شوند. برای هدف این آموزش می توانید خطاها را نادیده بگیرید.

../_images/2158.png
  1. از آنجایی که مجموعه داده زلزله دارای مختصات طول و عرض جغرافیایی است، با CRS پیش‌فرض «EPSG: 4326» وارد می‌شود. بررسی کنید که این مورد در گوشه سمت راست پایین است. بیایید لایه Populated Places را نیز باز کنیم. به Layer ‣ Add Layer ‣ Add Vector Layer بروید.

../_images/399.png
  1. فایل "ne_10m_populated_places_simple.zip"" دانلود شده را مرور کنید و روی :guilabel:'Open' کلیک کنید.

../_images/463.png
  1. بزرگنمایی کنید و هر دو مجموعه داده را کاوش کنید. هر نقطه بنفش نشان دهنده محل وقوع یک زلزله مهم و هر نقطه آبی نشان دهنده محل یک مکان پرجمعیت است. برای یافتن نزدیکترین نقطه از لایه مکانهای پرجمعیت برای هر یک از نقاط لایه زلزله به راهی نیاز داریم.

../_images/556.png
  1. به Vector ‣ Analysis Tools ‣ Distance Matrix بروید.

../_images/654.png
  1. در اینجا لایه زلزله signif را به عنوان لایه نقطه ورودی و مکان های پر شده``ne_10m_populated_places_simple`` را به عنوان لایه هدف انتخاب کنید. همچنین باید از هر یک از این لایه ها یک فیلد منحصر به فرد را انتخاب کنید تا نتایج شما چگونه نمایش داده شود. در این تجزیه و تحلیل، ما به دنبال بدست آوردن تنها «1» هستیم، بنابراین :guilabel:«فقط از نزدیکترین (k) نقاط هدف استفاده کنید» را بررسی کنید و 1 را وارد کنید. نام فایل خروجی خود را «matrix.csv» بگذارید و روی OK کلیک کنید. پس از پایان پردازش، روی :guilabel:'Close' کلیک کنید.

توجه

نکته مفیدی که باید به آن توجه کنید این است که حتی می توانید آنالیز را تنها با 1 لایه انجام دهید. همان لایه را به عنوان ورودی و هدف انتخاب کنید. نتیجه یک نزدیکترین همسایه از همان لایه به جای لایه متفاوتی است که در اینجا استفاده کردیم.

../_images/753.png
  1. پس از پایان پردازش، روی دکمه :guilabel:'Close' در گفتگوی :guilabel:'Distance Matrix' کلیک کنید. اکنون می توانید فایل "matrix.csv" را در Notepad یا هر ویرایشگر متنی مشاهده کنید. QGIS می تواند فایل های CSV را نیز وارد کند، بنابراین ما آن را به QGIS اضافه کرده و در آنجا مشاهده می کنیم. به Layer ‣ Add Layer ‣ Add Limited Text Layer... بروید.

../_images/852.png
  1. به فایل «matrix.csv» تازه ایجاد شده بروید. از آنجایی که این فایل فقط ستون های متنی است، No geometry (فقط جدول ویژگی) را به عنوان تعریف هندسه انتخاب کنید. روی :guilabel:`OK کلیک کنید.

../_images/951.png
  1. فایل CSV را به صورت جدول بارگذاری شده مشاهده خواهید کرد. روی لایه جدول کلیک راست کرده و :guilabel:'Open Attribute Table' را انتخاب کنید.

../_images/1059.png
  1. اکنون می توانید محتوای نتایج ما را مشاهده کنید. فیلد :guilabel: InputID حاوی نام فیلد از لایه Earthquake است. فیلد TargetID حاوی نام ویژگی از لایه مکان‌های جمعیتی است که نزدیک‌ترین نقطه به نقطه زلزله بود. قسمت :guilabel:'Distance' فاصله بین 2 نقطه است.

توجه

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

../_images/1195.png
  1. این بسیار نزدیک به نتیجه ای است که ما به دنبال آن بودیم. برای برخی از کاربران، این جدول کافی است. با این حال، ما همچنین می‌توانیم این نتایج را با استفاده از Table Join در لایه زلزله اصلی خود ادغام کنیم. بر روی لایه Earthquake کلیک راست کرده و Properties را انتخاب کنید.

../_images/1261.png
  1. به تب :guilabel:` Joins` بروید و روی دکمه + کلیک کنید.

../_images/1455.png
  1. ما می خواهیم داده های حاصل از تجزیه و تحلیل خود را به این لایه بپیوندیم. باید از هر یک از لایه ها فیلدی را انتخاب کنیم که مقادیر یکسانی داشته باشد. "ماتریس" را به عنوان :guilabel:"لایه پیوستن" و "InputID" را به عنوان فیلد :guilabel:"پیوستن" انتخاب کنید. فیلد فیلد مورد نظر "I_D" خواهد بود. سایر گزینه ها را به مقادیر پیش فرض خود رها کنید و روی OK کلیک کنید.

../_images/1455.png
  1. خواهید دید که join در تب :guilabel:` Joins ظاهر می شود. روی OK کلیک کنید.

../_images/1551.png
  1. اکنون جدول ویژگی لایه signif را با کلیک راست و انتخاب Open Attribute Table باز کنید.

../_images/1648.png
  1. خواهید دید که برای هر ویژگی زلزله، ما اکنون یک ویژگی داریم که نزدیکترین همسایه (نزدیکترین مکان پرجمعیت) و فاصله تا نزدیکترین همسایه است.

../_images/1745.png
  1. اکنون راهی برای تجسم این نتایج بررسی خواهیم کرد. ابتدا باید جدول را با ذخیره کردن آن در یک لایه جدید، دائمی کنیم. روی لایه "signif" کلیک راست کرده و :guilabel:"Save As..." را انتخاب کنید.

../_images/1842.png
  1. روی دکمه Browse در کنار برچسب Save as کلیک کنید و لایه خروجی را به عنوان ``earthquake_with_places.shp` نامگذاری کنید. مطمئن شوید که کادر Add saved file to map علامت زده شده است و روی :guilabel:`OK کلیک کنید.

../_images/1933.png
  1. پس از بارگیری لایه جدید، می توانید نمایان بودن لایه «signif» را خاموش کنید. از آنجایی که مجموعه داده ما بسیار بزرگ است، می توانیم تجزیه و تحلیل تجسم خود را بر روی زیر مجموعه ای از داده ها اجرا کنیم. QGIS یک ویژگی منظم دارد که در آن می‌توانید زیرمجموعه‌ای از ویژگی‌ها را از یک لایه بارگذاری کنید، بدون اینکه مجبور باشید آن را به یک لایه جدید صادر کنید. روی لایه "زلزله_با_مکان" کلیک راست کرده و :guilabel:"Properties" را انتخاب کنید.

../_images/2028.png
  1. در برگه :guilabel:'General'، به قسمت :guilabel:'Feature subset' بروید. روی :guilabel:'Query Builder' کلیک کنید.

../_images/2159.png
  1. برای این آموزش، زلزله‌ها و نزدیک‌ترین مکان‌های پرجمعیت آن‌ها را برای مکزیک تجسم می‌کنیم. عبارت زیر را در گفتگوی :guilabel: Query Builder وارد کنید.

"COUNTRY" = 'MEXICO'
../_images/2229.png
  1. خواهید دید که فقط نقاطی که در مکزیک قرار دارند در بوم قابل مشاهده خواهند بود. بیایید همین کار را برای لایه مکان های پرجمعیت انجام دهیم. روی لایه "ne_10m_populated_places_simple" کلیک راست کرده و :guilabel:"Properties" را انتخاب کنید.

../_images/2326.png
  1. گفتگوی Query Builder را از برگه :guilabel:`General باز کنید. عبارت زیر را وارد کنید.

"adm0name" = 'Mexico'
../_images/2426.png
  1. اکنون ما آماده ایم تا تجسم خود را ایجاد کنیم. ما از افزونه ای به نام MMQGIS استفاده خواهیم کرد. افزونه را پیدا و نصب کنید. برای جزئیات بیشتر در مورد نحوه کار با افزونه ها به استفاده از پلاگین Plugins مراجعه کنید. پس از نصب افزونه، به MMQGIS ‣ Create ‣ Hub Lines بروید.

../_images/2524.png
  1. «ne_10m_populated_places_simple» را به‌عنوان Hub Point Layer» و «name» را به‌عنوان :guilabel:`Hub ID مشخصه انتخاب کنید. به طور مشابه، «زلزله_با_مکان‌ها» را به‌عنوان :guilabel: «لایه نقطه اسپوک» و «ماتریس_Tar» را به‌عنوان :guilabel: «ویژگی شناسه مرکز گفتاری» انتخاب کنید. الگوریتم خطوط هاب از هر یک از نقاط زلزله می گذرد و خطی ایجاد می کند که آن را به مکان پر شده می پیوندد که با ویژگی مشخص شده ما مطابقت دارد. روی :guilabel:'Browse' کلیک کنید و :guilabel:'Output Shapefile' را به عنوان ``earthquake_hub_lines.shp` نامگذاری کنید. برای شروع پردازش روی OK کلیک کنید.

../_images/2622.png
  1. پردازش ممکن است چند دقیقه طول بکشد. می توانید پیشرفت را در گوشه سمت چپ پایین پنجره QGIS مشاهده کنید.

../_images/2721.png
  1. هنگامی که پردازش انجام شد، لایه "earthquake_hub_lines" را خواهید دید که در QGIS بارگذاری شده است. می بینید که هر نقطه زلزله اکنون دارای یک خط است که آن را به نزدیکترین مکان مسکونی متصل می کند

../_images/2820.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)