مکان یابی نزدیکترین تسهیلات با ماتریس مبدا-مقصد (QGIS3)
در آموزش قبلی بصری سازی و مسیریابی شبکه پایه (QGIS3) یاد گرفتیم که چگونه یک شبکه بسازیم و کوتاه ترین مسیر را بین ۲ نقطه محاسبه کنیم. ما میتوانیم آن تکنیک را برای انواع مختلفی از تحلیلهای مبتنی بر شبکه اعمال کنیم. یکی از این کاربردها محاسبه ماتریس مبدا-مقصد یا ماتریس OD است . با توجه به مجموعه ای از نقاط مبدا و مجموعه ای دیگر از نقاط مقصد، می توانیم کوتاه ترین مسیر را بین هر جفت مبدا-مقصد محاسبه کنیم و فاصله/زمان سفر بین آنها را دریابیم. چنین تحلیلی برای یافتن نزدیکترین مرکز به هر نقطه ای مفید است. به عنوان مثال، یک شرکت لجستیک ممکن است از این تجزیه و تحلیل برای یافتن نزدیکترین انبار به مشتریان خود برای بهینه سازی مسیرهای تحویل استفاده کند. در اینجا ما از الگوریتم Distance Matrix از افزونه QGIS Network Analysis Toolbox (QNEAT3) برای یافتن نزدیکترین مرکز بهداشتی به هر آدرس در شهر استفاده می کنیم.
توجه داشته باشید
این آموزش نشان می دهد که چگونه از داده های شبکه خود برای محاسبه یک ماتریس مبدا-مقصد استفاده کنید. اگر داده های شبکه خود را ندارید، می توانید از پلاگین ORS Tools و الگوریتم برای انجام تحلیل مشابه با استفاده از داده های OpenStreetMap استفاده کنید. برای یادگیری نحوه استفاده از پلاگین ORS Tools به تجزیه و تحلیل منطقه خدمات با استفاده از Openrouteservice (QGIS3) مراجعه کنید .
نمای کلی کار
ما ۲ لایه برای واشنگتن دی سی می گیریم – یکی با نقاط نشان دهنده آدرس و دیگری با نقاطی که نشان دهنده امکانات بهداشت روانی است – و امکاناتی را با کمترین فاصله سفر از هر آدرس پیدا می کنیم.
خواهید گرفت
- یک نمونه تصادفی از یک لایه نقطه استخراج کنید.
- از لایه های مجازی برای اجرای پرس و جوی SQL در یک لایه QGIS استفاده کنید.
دریافت داده ها
دولت ناحیه کلمبیا صدها مجموعه داده را آزادانه در کاتالوگ داده باز به اشتراک می گذارد .
لایه های داده زیر را به صورت فایل های شکل دانلود کنید.
برای راحتی کار، میتوانید مستقیماً یک نسخه از مجموعه دادهها را از لینکهای زیر دانلود کنید:
ارائه دهنده خدمات مبتنی بر جامعه.zip
منبع داده: [DCOPENDATA]
راه اندازی
از پلاگین ها بازدید کنید . :guilabel:`All` را انتخاب کنید افزونه QNEAT3 را جستجو کرده و نصب کنید. روی Close کلیک کنید .
- فایل را پیدا کنید
Community_Based_Service_Providers.zip
، آن را گسترش دهید وCommunity_Based_Service_Providers.shp
به بوم اضافه کنید. ما فقط مراکزی را انتخاب خواهیم کرد که به بزرگسالان تسهیلات ارائه می دهند. روی لایه کلیک راست کردهCommunity_Based_Service_Providers.shp
و Filter را انتخاب کنید .
- یک کادر محاوره ای Query Builder را باز می کند . عبارت زیر را در :guilabel:’Filter Expression’ وارد کنید روی Run کلیک کنید .
"PROVIDER_T" IN ('Adult','Adult & Child')
- سپس،
Roadway_Block.zip
فایل را پیدا کنید، آن را گسترش دهید و آن را اضافه کنیدRoadway_Block.shp
. به همین ترتیب، فایل را پیدا کنیدAddress_Points.zip
، آن را گسترش دهید و آن را اضافه کنیدAddress_Points.shp
. نقاط زیادی را در اطراف شهر خواهید دید. هر نقطه نشان دهنده یک آدرس معتبر است. ما ۱۰۰۰ امتیاز را به صورت تصادفی انتخاب می کنیم. این تکنیک را نمونه گیری تصادفی می نامند. به بروید .
- را جستجو و مکان یابی کنید .
Address_Points
به عنوان لایه ورودی ، به عنوان روش انتخاب کنید و تعداد /درصد ویژگی ها را وارد کنید . در Extracted (تصادفی) گزینه را انتخاب کنید و روی Save to a file کلیک کنید . حالا دایرکتوری را انتخاب کنید و نام را به عنوان وارد کنید و روی Run کلیک کنید .Number of feature
1000
...
address_point_subset.shp
توجه داشته باشید
از آنجایی که الگوریتم ۱۰۰۰ نقطه تصادفی را از مجموعه دادههای داده شده استخراج میکند، برای تکرار دقیق نقاط مورد استفاده در این تمرین، میتوانید فایل زیر مجموعهای را که در حین اجرای الگوریتم دریافت کردهایم از اینجا address_point_subset.zip دانلود کنید . پس از دانلود address_point_subset.shp
لایه بار در QGIS.
- یک لایه جدید به پنل لایه ها
address_point_subset
اضافه می شود ، می توانید نمایان بودن لایه نقاط آدرس را خاموش کنید. بیایید نام این لایه را به عنوان تغییر نام دهیم . روی لایه کلیک راست کرده و Rename layer را انتخاب کنید .Address_Points
origin_points
address_point_subset
- به همین ترتیب، نام
Community_Based_Service_Provider
لایههای نشاندهنده امکانات بهداشتی را به عنوان تغییر نام دهیدdestination_points
. نامگذاری لایه ها به این ترتیب شناسایی آنها را در پردازش های بعدی آسان می کند. در ادامه جعبه ابزار پردازش را برای ایجاد ماتریس فاصله با استفاده از لایه های مبدا و مقصد باز می کنیم.
- تعیین کنید . اگر این الگوریتم را در جعبه ابزار نمی بینید، مطمئن شوید که افزونه QNEAT3 را نصب کرده اید .
- این الگوریتم به یافتن فواصل همراه با شبکه بین لایه های انتخاب شده مبدا و مقصد کمک می کند.
Roadway_Block
به عنوان لایه شبکه انتخاب کنید .origin_points
به عنوان لایه From-Points وOBJECTID
به عنوان قسمت Unique Point ID را انتخاب کنید . به همین ترتیب،destination_points
به عنوان لایه To-Points وOBJECTID
به عنوان قسمت Unique Point ID تنظیم کنید . معیار بهینه سازی را به عنوان تنظیم کنید .Shortest Path (distance optimization)
- از آنجایی که بسیاری از خیابان های شبکه یک طرفه هستند، باید پارامترهای پیشرفته را برای تعیین جهت تنظیم کنیم. برای جزئیات بیشتر در مورد نحوه ساختاردهی این ویژگی ها ، بصری سازی و مسیریابی شبکه اصلی (QGIS3) را ببینید . ما همچنین گزینه ای برای انتخاب سبک هندسی ماتریس تولید شده داریم. ما در حال داشتن یک شبکه جاده با اطلاعات جهت هستیم تا بتوانیم با فول کردن مسیر، ماتریس تولید کنیم. انتخاب کنید . به عنوان قسمت جهت انتخاب کنید . مقدار را برای جهت رو به جلو ، مقدار برای جهت عقب و به عنوان مقدار برای هر دو جهت وارد کنید . تحمل توپولوژی را به صورت . سایر گزینه ها را در مقادیر پیش فرض نگه دارید و روی Run کلیک کنید .
Matrix geometry follows routes
SUMMARYDIR
OB
IB
BD
0.0000150
- یک لایه جدول جدید به نام به پنل لایه ها اضافه می شود . کلیک راست کرده و Open Attributes Table را انتخاب کنید . خواهید دید که جدول شامل ۶۷۰۰۰ ردیف است. ما ۶۷ نقطه مبدا و ۱۰۰۰ نقطه مقصد داشتیم – بنابراین خروجی شامل ۶۷ x 1000 = 67000 جفت مبدا و مقصد است. ستون شامل فاصله بر حسب متر بین هر نقطه مبدا تا هر نقطه مقصد است.
Output OD Matrix
total_cost
- برای این آموزش فقط به نقطه مقصد با کمترین مسافت علاقه داریم. ما می توانیم یک پرس و جوی SQL ایجاد کنیم تا مقصدی را که کمترین مقدار را
total_cost
در بین همه مقصدها دارد انتخاب کنیم. به بروید . .
- در Additional input data sources، Output OD Matrix را انتخاب کرده
...
و بررسی کنید و روی OK کلیک کنید . اکنون بر روی Summation تحت پرس و جوی SQL کلیک کنید . پرس و جوی زیر را در کادر محاوره ای SQL query وارد کنید . به عنوان فیلد Geometry وارد شده و نوع Geometry را انتخاب کنید . روی Run کلیک کنید .geometry
LineString
select origin_id, destination_id, min(total_cost) as shortest_distance, geometry from input1 group by origin_id
- یک لایه مجازی جدید به پنل لایه ها اضافه می شود . این لایه نتیجه تحلیل ما را دارد. نزدیکترین ارائه دهنده خدمات برای هر یک از ۱۰۰۰ نقطه مبدا.
SQL Output
اگر می خواهید بازخورد بدهید یا تجربه خود را در مورد این آموزش به اشتراک بگذارید، لطفاً در زیر نظر دهید. (به حساب GitHub نیاز دارد)