نقشه راه GIS

درخواست مشاوره

09120049370

8 صبح تا 12 شب

09120049370

کاربرد جی ای اس

 

چکیده

:PyGRASS یک رابط برنامه نویسی برنامه کاربردی Python شی گرا (API) برای سیستم پشتیبانی تجزیه و تحلیل منابع جغرافیایی (GRASS) سیستم اطلاعات جغرافیایی (GIS)، یک GIS منبع باز قدرتمند است که به طور گسترده در دانشگاه ها، تنظیمات تجاری و سازمان های دولتی استفاده می شود. ما معماری کتابخانه PyGRASS را ارائه می‌کنیم که رابط‌های ماژول‌های GRASS، داده‌های برداری و شطرنجی را با تمرکز بر قابلیت‌های جدیدی که در اختیار کاربران و توسعه‌دهندگان GRASS قرار می‌دهد، ارائه می‌کنیم. مفهوم طراحی ما از رابط ماژول اجازه می دهد تا ورودی ها و خروجی های ماژول های GRASS را به طور مستقیم به یکدیگر متصل کنیم تا زنجیره های فرآیندی از جمله بررسی سازگاری، کنترل فرآیند و مدیریت خطا ایجاد شود. رابط ماژول طوری طراحی شده است که به راحتی برای کار با خدمات پردازش از راه دور توسعه یابد (سرویس پردازش وب (WPS) زبان تعریف سرویس وب (WSDL)/پروتکل دسترسی به شیء ساده (SOAP)). API برنامه نویسی Python شی گرا جدید یک لایه انتزاعی را معرفی می کند که امکان استفاده و دسترسی شفاف به توابع شطرنجی و برداری کارآمد GRASS را که در C پیاده سازی شده اند را باز می کند. هدف طراحی ارائه یک پایتون آسان برای استفاده، اما قدرتمند بود. رابط کاربری برای کاربران و توسعه دهندگانی که با زبان برنامه نویسی C و GRASS C-API آشنایی ندارند. ما قابلیت ها، مقیاس پذیری و عملکرد PyGRASS را با چندین تست و معیار اختصاصی نشان می دهیم. ما نتایج معیارها را با پیاده سازی اختصاصی C مقایسه و بحث می کنیم. API برنامه نویسی Python شی گرا جدید یک لایه انتزاعی را معرفی می کند که امکان استفاده و دسترسی شفاف به توابع شطرنجی و برداری کارآمد GRASS را که در C پیاده سازی شده اند را باز می کند. هدف طراحی ارائه یک پایتون آسان برای استفاده، اما قدرتمند بود. رابط کاربری برای کاربران و توسعه دهندگانی که با زبان برنامه نویسی C و GRASS C-API آشنایی ندارند. ما قابلیت ها، مقیاس پذیری و عملکرد PyGRASS را با چندین تست و معیار اختصاصی نشان می دهیم. ما نتایج معیارها را با پیاده سازی اختصاصی C مقایسه و بحث می کنیم. API برنامه نویسی Python شی گرا جدید یک لایه انتزاعی را معرفی می کند که امکان استفاده و دسترسی شفاف به توابع شطرنجی و برداری کارآمد GRASS را که در C پیاده سازی شده اند را باز می کند. هدف طراحی ارائه یک پایتون آسان برای استفاده، اما قدرتمند بود. رابط کاربری برای کاربران و توسعه دهندگانی که با زبان برنامه نویسی C و GRASS C-API آشنایی ندارند. ما قابلیت ها، مقیاس پذیری و عملکرد PyGRASS را با چندین تست و معیار اختصاصی نشان می دهیم. ما نتایج معیارها را با پیاده سازی اختصاصی C مقایسه و بحث می کنیم. رابط پایتون برای کاربران و توسعه دهندگانی که با زبان برنامه نویسی C و GRASS C-API آشنایی ندارند. ما قابلیت ها، مقیاس پذیری و عملکرد PyGRASS را با چندین تست و معیار اختصاصی نشان می دهیم. ما نتایج معیارها را با پیاده سازی اختصاصی C مقایسه و بحث می کنیم. رابط پایتون برای کاربران و توسعه دهندگانی که با زبان برنامه نویسی C و GRASS C-API آشنایی ندارند. ما قابلیت ها، مقیاس پذیری و عملکرد PyGRASS را با چندین تست و معیار اختصاصی نشان می دهیم. ما نتایج معیارها را با پیاده سازی اختصاصی C مقایسه و بحث می کنیم.

کلید واژه ها: 

چمن ; پایتون ; پردازش GIS

 

1. مقدمه

سیستم‌های اطلاعات جغرافیایی (GIS) قابلیت یکپارچه‌سازی داده‌های دیجیتالی ناهمگن را دارند و این فرصت را به مدیریت عمومی، صنعت و تحقیقات می‌دهند تا تجزیه و تحلیل و مدل‌سازی داده‌های پایه و پیشرفته را برای طیف گسترده‌ای از رشته‌ها ارائه کنند [ 1 ]. سیستم پشتیبانی تجزیه و تحلیل منابع جغرافیایی (GRASS) از ایجاد، اصلاح و پردازش لایه های شطرنجی و برداری دو بعدی و سه بعدی پشتیبانی می کند. این یک مدل برداری توپولوژیکی و مختصات سه بعدی واقعی برای ویژگی های برداری ارائه می دهد. GRASS با ثبات، یک رابط برنامه نویسی کاربردی کارآمد (API) نوشته شده در C، و تعداد زیادی توابع و ماژول های GIS مشخص می شود [ 2 ].]. GRASS تعداد زیادی مدل و الگوریتم را ارائه می دهد که پس از آزمایش های اساسی و عیب یابی، ثابت شده است که بسیار قابل اعتماد هستند. توانایی های آن برای پردازش اطلاعات جغرافیایی توسط بسیاری از مقالات تحقیقاتی و فنی گواهی شده است [ 3-14 ] .

GRASS GIS دارای طراحی مدولار است. عملکردهای اصلی در کتابخانه های مشترک با استفاده از زبان برنامه نویسی C پیاده سازی می شوند و از طریق GRASS C-API قابل دسترسی هستند. این API دسترسی خواندن و نوشتن به داده های شطرنجی، شطرنجی سه بعدی و برداری، و همچنین مدیریت اطلاعات طرح ریزی، مدیریت پایگاه داده فضایی و ویژگی، درون یابی spline، عملکردهای ریاضی و عددی و ویژگی های تجسم را فراهم می کند. جدول 1 را ببینید. الگوریتم‌ها و مدل‌های فضایی به‌عنوان برنامه‌های مستقل کوچک به نام ماژول‌ها که از C-API استفاده می‌کنند، پیاده‌سازی می‌شوند. پیاده سازی ماژول های GRASS از مفهوم یونیکس پیروی می کند. از این رو، هر ماژول در GRASS یک هدف اختصاصی دارد و به طور موثر پیاده سازی می شود. ماژول ها را می توان مانند مفهوم ابزار یونیکس ترکیب کرد. از روزهای اولیه GRASS در دهه 80، پوسته یونیکس برای ترکیب ماژول‌های GRASS و ابزارهای یونیکس برای اسکریپت کارهای تکراری و برای پیاده‌سازی الگوریتم‌های پردازش و تحلیل فضایی پیچیده استفاده می‌شد. این مفهوم منجر به تعداد زیادی بیش از 400 ماژول می شود. بسیاری از آنها در C پیاده سازی می شوند. مقدار کافی به عنوان اسکریپت با استفاده از POSIX (رابط سیستم عامل قابل حمل؛ یک رابط و محیط استاندارد سیستم عامل، از جمله یک مفسر فرمان (یا پوسته) را تعریف می کند. و برنامه های کاربردی رایج برای پشتیبانی از قابلیت حمل برنامه ها در سطح کد منبع. اسکریپت ها تا نسخه 6 GRASS GIS مبتنی بر POSIX هستند.) یا Python، مانند آخرین نسخه توسعه 7 GRASS.

بسیاری از نرم‌افزارهای GIS پایتون را به‌عنوان زبان اصلی برای کاربران انتخاب کرده‌اند ( جدول 2 را ببینید )، زیرا در بسیاری از پلتفرم‌ها در دسترس است و به نظر می‌رسد که سازش خوبی بین سادگی (سینتکس، منحنی یادگیری کم)، انعطاف‌پذیری (برنامه‌نویسی چند پارادایمی) باشد. ) و قدرت (به دلیل کتابخانه های علمی غنی). توسعه دهندگان GRASS پایتون را برای جایگزینی POSIX برای ماژول های اسکریپت انتخاب کرده اند [ 2 ]. برای این منظور، یک کتابخانه اسکریپت‌نویسی پایتون پیاده‌سازی شد که یک API پایتون را برای ماژول‌های GRASS فراهم کرد. با این حال، API اسکریپت‌نویسی فعلی پایتون، به‌جز مدیریت زنجیره‌های فرآیند با استفاده از کتابخانه استاندارد پایتون، پیشرفت بیشتری در رویکرد POSIX ایجاد نمی‌کند.

اکثر نرم افزارها و ابزارهای GIS تعداد زیادی الگوریتم سطح بالا را برای پوشش نیازهای مختلف پردازش GIS ارائه می کنند. تعداد کمی از GIS قابلیت‌هایی را برای دسترسی به قابلیت‌های پایین‌تر، مانند تکرار بین ویژگی‌های هندسی یک نقشه برداری، یا تکرار سطر به ردیف به نقشه شطرنجی با استفاده از زبان سطح بالاتر، به روی کاربران باز می‌کنند.

برای دسترسی به عملکرد سطح پایین، ماژول‌های GRASS باید در C پیاده‌سازی شوند. برای غلبه بر این محدودیت و دستیابی به یک جامعه توسعه گسترده تر، یک رابط ctypes به GRASS نسخه 7 معرفی شد. این رابط دسترسی به سطح پایین GRASS C-API در پایتون را امکان پذیر می کند. با این حال، ایجاد ماژول های جدید برای نوشتن به زبان C یا استفاده از C API با پایتون از طریق رابط ctypes یک کار پیش پا افتاده نیست و به طور کلی یک فعالیت بسیار وقت گیر است. این به این دلیل اتفاق می افتد که نویسنده باید یک برنامه نویس C ماهر باشد (مدیریت حافظه رایانه، کار با اشاره گرها و غیره ) و به دلیل نحوه عملکرد داخلی کتابخانه GRASS. از این رو، مطالعه فشرده GRASS C-API بزرگ مورد نیاز است.

هدف از این کار پیاده سازی یک لایه شی گرا بصری و آسان در اطراف GRASS C-API است که پیچیدگی آن را پنهان می کند، اما یک محیط توسعه قدرتمندتر برای حل مشکلات پیچیده داده های GIS و تجزیه و تحلیل داده ها ارائه می دهد. یک کار اضافی جایگزینی قطعات از API اسکریپت پایتون موجود با رویکردهای شی گرا کارآمدتر و قدرتمندتر است. به این ترتیب می‌توانیم برای کاربران قدرتمند و دانشمندان علوم زمین که با C و C-API GRASS آشنایی ندارند، دسترسی به قابلیت C-API of GRASS را فراهم کنیم.

ایده PyGRASS از تجربه نویسندگانی که مایل به گسترش قابلیت‌های GRASS با پیاده‌سازی ابزاری بودند که آزادی رویکرد به مسئله GIS را از منظری متفاوت می‌دهد، باز کردن رویکرد توسعه‌دهنده نرم‌افزار برای کاربران GIS و تلاش برای حفظ سادگی نسبی زاده شد. . کتابخانه PyGRASS یک رابط سطح بالاتر شی گرا و ساده ارائه می دهد که هر ماژول GRASS را با تفسیر توصیف رابط XML آن به یک شی تبدیل می کند، سعی در ساده سازی نحو و اجرای فعالیت اسکریپت دارد. لایه شی گرا در اطراف GRASS C-API، PyGRASS، چندین کلاس را برای دسترسی به داده های برداری و شطرنجی پیاده سازی می کند و چندین ویژگی پیچیده را پوشش می دهد که فقط در GRASS C-API در دسترس هستند، مانند پشتیبانی از توپولوژی برداری یا استفاده از حافظه پنهان رستر برای دسترسی سریع به خواندن و نوشتن تصادفی.

توسعه PyGRASS توسط برنامه Summer of Code گوگل (2012) حمایت شده است و کد تولید شده در آخرین نسخه توسعه، GRASS7 ادغام شده است.

2. روش شناسی

کتابخانه PyGRASS به زبان پایتون نوشته شده است و از ماژول های کتابخانه استاندارد پایتون [ 15 ]، مانند: sys ، fnmatch ، مجموعه ها ، sqlite3 ، و همچنین از کتابخانه شخص ثالث Python، NumPy [ 16 ] استفاده می کند. NumPy بسته ای برای محاسبات علمی است. این در حال حاضر یک وابستگی به GRASS است. یک کتابخانه اختیاری psycopg2 [ 17 ] است که برای رابط کاربری ویژگی برداری PyGRASS با پایگاه داده PostgreSQL استفاده می شود.

کتابخانه PyGRASS با در نظر گرفتن چهار جنبه اصلی توسعه یافته است:

  • سازگاری — کتابخانه باید به هنجارها و معماری‌هایی که معمولاً در پایتون و GRASS یافت می‌شوند، پایبند باشد تا از سردرگمی کاربرانی که فقط با یکی از موارد بالا آشنا هستند جلوگیری شود.
  • سادگی — کتابخانه باید ساده و شهودی باشد، بدون پنهان کردن دسترسی به عملکرد سطح پایین تر، در واقع، یک تجربه کاربری یکپارچه بین C-API سطح پایین GRASS با رویکرد سطح بالاتر Python شی گرا ارائه دهد.
  • انعطاف‌پذیری – کتابخانه باید انعطاف‌پذیر باشد، هم اجازه استفاده از ماژول‌های GRASS موجود را بدهد و هم به هر کاربر آزادی عمل بدهد تا منطق خود را با استفاده از ابزارهای برنامه‌نویسی دقیق‌تر و دقیق‌تر پیاده‌سازی کند.
  • عملکرد – کتابخانه باید با توجه به زمان توسعه و زمان CPU سریع باشد. توابع GRASS C API به شدت توسط PyGRASS هر زمان که ممکن است استفاده می شود.

 

کتابخانه به دو بخش تقسیم می شود: بخش اول بیشتر به فعالیت اسکریپت و ماژول های GRASS مربوط می شود. دومی بر جنبه های برنامه نویسی و C API از GRASS متمرکز است.

برای بهبود API اسکریپت موجود در GRASS، PyGRASS هر ماژول GRASS را به عنوان یک شی با پارامترهای ورودی، پارامترهای خروجی و پرچم ها در نظر می گیرد. هنگامی که شی “مثلا” است، کلاس Module توضیحات رابط XML تولید شده از ماژول های GRASS را از طریق پرچم -interface-description تجزیه می کند تا بداند کدام پارامترها و پرچم ها تعریف شده اند. برای هر پارامتر، فراداده تجزیه و تحلیل می شود. فراداده مشخص می کند که آیا یک پارامتر مورد نیاز یا اختیاری است، اگر یک ورودی یا خروجی است، نوع آن (راستر، برداری، رشته، شناور و غیره ).) و خیلی بیشتر. این اطلاعات به کلاس اجازه می دهد تا صحت پارامترها را بررسی کند و قابلیت پیشنهاد صحیح پارامترها را فراهم می کند. شناسایی ورودی ها و خروجی ها امکان اجرای زنجیره های فرآیند را فراهم می کند. طراحی رابط این کلاس برای پشتیبانی از اجرای خدمات اجرای فرآیند محلی و راه دور انتخاب شده است که ممکن است در آینده اضافه شود. برای پیاده‌سازی یک رابط به یک سرویس پردازش وب (WPS)، تعریف ورودی‌های پیچیده، خروجی‌های پیچیده و لفظ‌ها باید برای ایجاد درخواست اجرای XML شناخته شود. همین امر در مورد خدمات اجرای فرآیند از راه دور مبتنی بر WSDL/SOAP نیز صادق است. کلاس Module تمام اطلاعات خاص ماژول مورد نیاز را با طراحی ارائه می دهد.

API اسکریپت پایتون فعلی چندین تابع را برای مدیریت ماژول GRASS تعریف می‌کند: make_command فهرستی از رشته‌ها را با گزینه‌های فرمان از فرهنگ لغت کلیدها و مقادیر برمی‌گرداند. دستور start_command یک رابط GRASS گرا برای پردازش فرعی است. Popen (یک فرآیند ایجاد و مدیریت ماژول ارائه شده توسط کتابخانه استاندارد پایتون)، که به صورت داخلی از تابع make_command استفاده می کند. همه توابع دستوری run/pipe/feed/read/write/parse، بسته‌بندی‌های تخصصی دستور start_command هستند.

کلاس Module PyGRASS همه این ویژگی ها را در یک شی جمع می کند و مستقیماً ورودی ها و خروجی های ماژول های GRASS را به هم متصل می کند. به فهرست 1 در پیوست مراجعه کنید.

کلاس PyGRASS Module سینتکس پایتون را تا حد امکان ساده می کند تا با رابط ماژول POSIX قابل رقابت باشد. از نحو سازگاری با عقب پشتیبانی می کند و API را تقویت می کند تا ابزاری را ارائه دهد که خطاهای کاربران را مدیریت کرده و لیست گزینه های معتبر را برمی گرداند. علاوه بر این، کتابخانه PyGRASS این قابلیت را می دهد که متن را به یک دستور به عنوان ورودی ( stdin )، دریافت خروجی متن ( stdout ) و پیام خطا ( stderr ) یک دستور را ارسال کند. در نهایت، PYGRASS به کاربران اجازه می دهد تا فرآیند را مدیریت کنند (به عنوان مثال ، خاتمه، کشتن، صبر کنید).

کتابخانه PyGRASS یک API Python شی گرا (OO) را به GRASS معرفی می کند که برای هر موجودیت GIS/GRASS یک یا چند کلاس پیاده سازی می کند. کلاس ها از ساختارها و توابع C از طریق رابط ctypes موجود استفاده می کنند. Ctypes یک کتابخانه پایتون است. انواع داده های سازگار با C را فراهم می کند و امکان فراخوانی توابع در DLL یا کتابخانه های مشترک را فراهم می کند. می توان از آن برای بسته بندی این کتابخانه ها در پایتون خالص استفاده کرد. رابط کاربری سطح بالاتر پایتون ما از ctypes برای ادغام ساختارها و توابع زیرین GRASS C-API در یک چارچوب شی گرا استفاده می کند، اما در عین حال تلاش می کند به جریان کار و نامگذاری GRASS احترام بگذارد تا با C-API مطابقت داشته باشد. ctypes شی خاصاشاره گر به ساختارهای زیرین C تحت نام مشخصه ای که با c_ * شروع می شود موجود است. این به کاربر اجازه می دهد تا مستقیماً با استفاده از رابط ctypes به ساختارهای سطح پایین تر GRASS C-API دسترسی پیدا کند. این کلاس‌ها به فرد اجازه می‌دهند با مشکل به شیوه‌ای انتزاعی‌تر مواجه شوند. یک رویکرد شی گرا سطح بالا می تواند به کاربران کمک کند تا با مشکل مواجه شوند، حتی اگر با جزئیات پیاده سازی سطح C-API آشنا نباشند، سرعت طراحی، نوشتن، نمونه سازی اولیه و مرحله اشکال زدایی را افزایش می دهد.

معماری کتابخانه

کتابخانه PyGRASS از ساختار اصلی GRASS پیروی می کند و به چهار قسمت تقسیم می شود. هر قسمت مجموعه ای از کلاس های اختصاصی را پیاده سازی می کند. برای یک نمای کلی از کتابخانه به شکل 1 و 2 مراجعه کنید.

  • ماژول ها شامل کلاس های Module، MetaModule و Parameter هستند. این کلاس‌ها برای جایگزینی رویکرد اسکریپت‌نویسی مبتنی بر POSIX قبلی (به فهرست 2 مراجعه کنید ) و جایگزینی بخش‌هایی از API اسکریپت پایتون موجود طراحی شده‌اند ( لیست 3 را ببینید ).

    معماری شی گرا کتابخانه PyGRASS به کاربران اجازه می دهد تا با ماژول های GRASS به عنوان اشیاء پایتون تعامل داشته باشند. این اشیاء اجازه دسترسی مستقیم به ویژگی های ماژول مانند: نام، توضیحات و کلمات کلیدی را می دهند. گزینه های ورودی و خروجی با استفاده از یک کلاس پارامتر اختصاصی پیاده سازی می شوند. نمونه‌های این کلاس در یک فرهنگ لغت ورودی یا یک فرهنگ لغت خروجی در شیء ماژول Listing 4 ذخیره می‌شوند . ورودی ها و خروجی ها را می توان با نام آنها در فرهنگ لغت یا به عنوان ویژگی اشیاء فرهنگ لغت ارجاع داد. آنها می توانند برای ایجاد زنجیره های فرآیندی به یکدیگر متصل شوند. فهرست 1 را ببینید. سیستم بررسی نوع کلاس پارامتر تضمین می‌کند که گزینه‌های خروجی تنها زمانی می‌توانند با گزینه‌های ورودی ماژول‌های مختلف متصل شوند که نوع یکسانی داشته باشند. از این رو، کتابخانه ماژول PyGRASS در صورتی که خروجی یک ماژول برداری با ورودی شطرنجی یک ماژول دوم متصل شده باشد، خطا ایجاد می کند.

    کتابخانه ماژول PyGRASS پارامترهای خاصی را معرفی می کند تا امکان کنترل دانه ریز روی فرآیندهای GRASS را فراهم کند. این پارامترهای ویژه با کاراکتر ‘_’ خاتمه می‌یابند تا از اختلاط نام گزینه‌ها جلوگیری شود. دو پارامتر ویژه اول – run_ و finish_ – برای مدیریت فرآیند استفاده می شوند. تعریف پارامتر run_=True بلافاصله فرآیند را اجرا می کند و finish_=True منتظر می ماند تا فرآیند خاتمه یابد. به فهرست 5 مراجعه کنید . پارامترهای ویژه دیگری که اضافه شدند عبارتند از: stdin_، stdout_ و stderr_. پارامترهای stdin_ و stdout_ برای اتصال ورودی‌ها و خروجی‌های متنی از ماژول‌های مختلف برای ایجاد خط لوله فرآیند استفاده می‌شوند. stdin_ برای انتقال خروجی متنی (stdout_) از یک فرآیند به فرآیند دیگر استفاده می شود. به فهرست 6 مراجعه کنید .

  • vector شامل کلاس های Vector بدون توپولوژی GRASS و VectorTopo با توپولوژی GRASS است.

    کلاس Vector به کاربر اجازه می دهد تا به ویژگی های هندسه غیر توپولوژیکی یک نقشه برداری به ترتیب متوالی دسترسی داشته باشد. به فهرست 7 مراجعه کنید . کلاس VectorTopo برای دسترسی به ویژگی های هندسه توپولوژیکی و غیر توپولوژیکی یک نقشه برداری به ترتیب تصادفی طراحی شده است. این کلاس به فرد اجازه می دهد تا بین انواع ویژگی های خاص تکرار شود. لیست 8 و 9 را ببینید. نوشتن در کلاس های غرفه به ترتیب متوالی پشتیبانی می شود. با این حال، ویژگی های از قبل نوشته شده را می توان در کلاس دسترسی توپولوژیکی به روز کرد. کلاس های زیر برای نمایش ویژگی های برداری طراحی شده اند: نقطه، خط، مرکز، مرز، جزیره و ناحیه. نمونه هایی از این کلاس ها معمولاً زمانی ایجاد می شوند که ویژگی ها از نقشه های برداری توسط کلاس های Vector و VectorTopo خوانده می شوند. برای مدیریت اتصالات متعدد با پایگاه داده های SQL ویژگی برداری، کلاس های DBLinks و Link طراحی شدند. جداول مشخصه را می توان با کلاس Table ایجاد، دسترسی و اصلاح کرد. کلاس Filter چندین روش برای کار با داده ها بدون نیاز به دانستن SQL ارائه می دهد. برای دسترسی به محتوای جدول ویژگی ها از ویژگی هندسه، کلاس Attrs طراحی شد.

  • رستر شامل کلاس ها (RasterRow، RasterRowIO، RasterSegment و RasterNumpy) است.

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

    کلاس RasterRow محتوای نقشه شطرنجی را سطر به سطر می خواند و آن را در حالت متوالی، سطر به سطر می نویسد. لیست 10 و 11 را ببینید .

    کلاس RasterRowIO یک کش ردیفی را پیاده سازی می کند که به کاربران اجازه می دهد با نگه داشتن تعدادی ردیف در حافظه اصلی، ردیف های شطرنجی را به صورت تصادفی بخوانند. این مکانیسم کش از استفاده سنگین ورودی/خروجی (ورودی/خروجی) هارد دیسک در کارهای خاص مانند عملیات پنجره متحرک یا تجزیه و تحلیل محله سلولی جلوگیری می کند. مشابه RasterRowIO، کلاس RasterSegment دسترسی به کش کاشی را فراهم می کند. کش کاشی نمایشی فشرده نشده از یک نقشه شطرنجی است که در نقطه اولیه ایجاد می شود. دسترسی به فایل غیرفشرده بر اساس کاشی‌هایی است که در حافظه اصلی برای دسترسی سریع به خواندن و نوشتن تصادفی از طریق کلاس Segment ذخیره می‌شوند. با کلاس RasterSegment، می توان مقدار پیکسل را به صورت تصادفی در یک نقشه به طور همزمان خواند و نوشت.

    کلاس RasterNumpy از یک کلاس numpy.memmap به ارث می برد و به کاربران اجازه می دهد تا با نقشه به عنوان یک ماتریس NumPy تعامل داشته باشند.

  • gis شامل کلاس های مدیریت GRASS، مانند Gisdbase، Location و Mapset است که به کاربران کمک می کند تا با محیط GRASS تعامل داشته باشند. به فهرست 12 مراجعه کنید . کلاس Region ناحیه محاسباتی GRASS را مدیریت می کند که مستقیماً بر پردازش شطرنجی دو بعدی و سه بعدی و همچنین چندین الگوریتم پردازش برداری تأثیر می گذارد. به فهرست 13 مراجعه کنید .

 

کتابخانه PyGRASS تضمین می کند که مدیریت حافظه به طور کامل توسط پایتون اداره می شود. تمام ساختارهای GRASS C-API که توسط PyGRASS استفاده می‌شوند، اشیاء ctypes هستند یا در تخریب‌کننده‌های کلاس حذف می‌شوند و بنابراین توسط جمع‌آورنده زباله پایتون مدیریت می‌شوند. کاربر نباید به طور مستقیم از تخصیص و حذف حافظه مراقبت کند.

3. نتایج

در این بخش راه حل های مختلف وظایف ساده GIS را با استفاده از ابزار استاندارد GRASS و PyGRASS مقایسه می کنیم. دستگاه مورد استفاده برای این معیار، یک لپ تاپ با پردازنده Intel Core i7 3610QM با فرکانس 2.30 گیگاهرتز و 6 مگابایت حافظه کش L3 بود. این سیستم دارای 24 گیگابایت رم DDR3@1333 مگاهرتز و یک دیسک حالت جامد (SSD) با ظرفیت 250 گیگابایت به عنوان درایور سیستم است. سیستم عامل نصب شده (OS) GNU/Linux 3.7.5 ( × 86_64) روی SSD است. نسخه توسعه GRASS 7 مورد استفاده برای بنچمارک دارای شماره ویرایش r54812 است. داده های GRASS بر روی یک هارد دیسک ثانویه 750 گیگابیت در 7200 دور در دقیقه ذخیره می شوند.

در مورد فعالیت اسکریپت، PyGRASS عمدتاً نحو را بهبود می بخشد و نحوه تعامل کاربران با ماژول های GRASS را تغییر می دهد. ما کاهش عملکرد کوچک را هنگام اجرای ماژول‌های GRASS با استفاده از رابط ماژول PyGRASS در مقایسه با رویکرد POSIX اندازه‌گیری کردیم، که به دلیل میانگین بار سیستم از 1% تا 12% افزایش می‌یابد. ما انتظار تفاوت عملکرد زیادی را نداشتیم، زیرا پایتون و POSIX اساساً از عملکردهای سیستم عامل (سیستم عامل) یکسانی برای ایجاد فرآیندها استفاده می کنند.

برعکس، API جدید اضافه شده توسط PyGRASS باید آزمایش شود (تمام تست‌های معیار مورد استفاده در این مقاله در https://github.com/zarch/pygrass-benchmark موجود است ) تا نقاط قوت، ضعف و مقیاس‌پذیری آن شناسایی شود. هر آزمایش، به استثنای بزرگترین ناحیه (با 10 10 سلول)، پنج بار تکرار شده است. تنها تفاوت های کوچکی بین هر زمان اجرا اندازه گیری شده وجود دارد که منجر به یک انحراف استاندارد کوچک می شود. از این رو، ما فکر می کنیم که نتایج نهایی معیار ما نماینده است.

آزمون اول دو رویه ساده را مقایسه می کند، یکی با استفاده از PyGRASS (RasterRow و VectorTopo) نوشته شده است (به فهرست 14 مراجعه کنید ) و دیگری با استفاده از زبان برنامه نویسی C (به فهرست 15 و برای نتایج، به جدول 3 مراجعه کنید.). آزمون یک نقشه نقطه برداری و یک نقشه شطرنجی را به عنوان ورودی می گیرد. این یک نقشه نقطه برداری جدید ایجاد می کند که شامل تمام نقاط برداری از نقشه ورودی است. یک جدول ویژگی جدید ایجاد شده و با نقشه برداری پیوند داده می شود که حاوی ستونی با مقادیر نمونه برداری شده از نقشه شطرنجی است. این روش برای پنج نقشه نقطه بردار تصادفی مختلف اعمال می شود تا از توزیع فضایی نقاط بردار مستقل باشد. علاوه بر این، آزمایش‌ها با استفاده از گستره‌های ناحیه و تعداد نقاط مختلف برای آزمایش مقیاس‌پذیری راه‌حل‌های مختلف اجرا شده‌اند. هر دو رویه از نظر مفهومی یکسان هستند و اکثر توابع GRASS C-API را به اشتراک می گذارند. تنها تفاوت دسترسی به پایگاه داده است، جایی که PyGRASS از درایور پایتون به جای C-API GRASS استفاده می کند.

یکی از نشانه‌هایی که نشان می‌دهد روش ما راحت‌تر از اجرای C است، این است که نسخه PyGRASS به طور قابل‌توجهی کوتاه‌تر (48 خط) از نسخه C (102 خط) است. یک کتابخانه PyGRASS، اشاره شده است که یک مزیت حاشیه ای در سرعت در مقایسه با همتای C آن وجود دارد. افزایش سرعت نسبت به نسخه C احتمالاً به دلیل درایور کندتر است که توسط GRASS C API پایگاه داده ویژگی بردار اتخاذ شده است.

در یک آزمایش بیشتر، عملکرد پیاده‌سازی PyGRASS RasterRow را با r.mapcalc با استفاده از یک الگوریتم نقشه شطرنجی ساده مقایسه کردیم (به فهرست 17 مراجعه کنید ). الگوریتم تنها پیکسل‌هایی را در یک نقشه شطرنجی جدید ذخیره می‌کند که مقدار آن بیشتر از 50 است. باز هم، نسخه PyGRASS کمی سریع‌تر از ماژول GRASS است. عملکرد خوب PyGRASS ناشی از رویکرد طراحی ما است که از NumPy برای وظایف محاسباتی ردیف استفاده می کند. در صورتی که الگوریتم مشابهی را در پایتون اجرا کنیم و سلول به سلول را بدون استفاده از رویکرد بهینه سازی شده NumPy مقایسه کنیم، عملکرد به شدت کاهش می یابد.

4. بحث و معیار

کلاس ماژول PyGRASS برخی از ویژگی‌های مفید را اضافه می‌کند که با API اسکریپت پایتون قبلی در دسترس نبودند. این ویژگی‌ها هزینه زمانی دارند، زیرا نیاز به صادرات ماژول GRASS در XML، تجزیه XML و نمونه‌سازی شی، بررسی صحیح بودن همه پارامترها و سپس اجرا دارند. هزینه زمانی برای این عملیات حدود 0.2 ثانیه است، اما به طور کلی، زمان اجرای یک ماژول GRASS به زمان بسیار بیشتری نیاز دارد. بنابراین در بیشتر موارد می توانیم از این اتلاف زمان غافل شویم.

با توجه به رویکرد جدید معرفی شده توسط PyGRASS، عملکرد عمدتاً به ویژگی هایی بستگی دارد که استفاده می شود. برای مثال، به‌روزرسانی ویژگی ستون با مقدار مساحت با PyGRASS تقریباً به زمان مشابهی نیاز دارد، حدود 0.24 ثانیه برای PyGRASS و 0.26 ثانیه با استفاده از ماژول v.to.db.

با استفاده از کلاس RasterRow برای محاسبه مناطقی که یک شرط را برآورده می کنند، با ناحیه ای از 16000 سطر و 14000 ستون، اگر ردیف به عنوان آرایه NumPY استفاده شود، کمی سریعتر (27.42 ثانیه) از r.mapcalc (35.49 ثانیه) است:

با استفاده از ماژول r.mapcalc:

استفاده از کلاس PyGRASS RasterRow بدون استفاده از آرایه NumPy، اجرای را هفت برابر کندتر از استفاده از ماژول GRASS r.mapcalc می کند. زیر کد پایتون (992.5 ثانیه) گزارش شده است.

با استفاده از r.mapcalc (144.2 ثانیه):

مثال بالا نشان می دهد که جایگزین کردن یک ماژول GRASS موجود با یک ماژول جدید نوشته شده در PyGRASS راحت نیست، زیرا کاربر باید کد بیشتری بنویسد و به دلیل اینکه ماژول های اصلی GRASS معمولا سریعتر هستند. مزیت بزرگ استفاده از کتابخانه PyGRASS دسترسی شی گرا به عملکرد GRASS C-API است.

بدون نیاز به استخراج اطلاعات از رشته خروجی ماژول، در این نوع عملیات، کتابخانه PyGRASS در مقایسه با ماژول ها و با توابع موجود پایتون سریعتر است: به عنوان مثال، برای دریافت لیست نقشه های شطرنجی موجود در Mapset. با PyGRASS طول می کشد (608 ns).

استفاده از تابع Python list_grouped در هسته GRASS (0.1273 ثانیه) طول می کشد.

همان نتایج خوب با شی Region به دست می آید. با PyGRASS، (211 ns) طول می کشد.

استفاده از ناحیه تابع پایتون در هسته GRASS (0.1056 ثانیه) طول می کشد.

کتابخانه PyGRASS می تواند به جایگزینی تمام دستورات موجود در کتابخانه اسکریپت GRASS Python که نیاز به بسته بندی و تفسیر خروجی یک ماژول GRASS دارند کمک کند.

5. نتیجه گیری ها

تعداد فزاینده ای از نرم افزارهای GIS از زبان پایتون برای ارائه یک رابط برنامه نویسی قدرتمند استفاده می کنند. یک رابط کاربری آسان، اما قدرتمند، پایتون می تواند به بهره برداری موثر از قابلیت های یک نرم افزار GIS کمک کند. چنین رابطی می تواند به طور موثر برای ادغام GIS مختلف، ابزارهای آماری، مکانی و زبان های برنامه نویسی در یک GIS برای گسترش قابلیت های کلی آن استفاده شود.

کتابخانه PyGRASS تلاش می کند تا دیدگاه جدیدی را برای کاربران و دانشمندانی که از GRASS GIS استفاده می کنند، بگشاید. این یک رابط پایتون را فراهم می کند که قادر است با سادگی POSIX برای نوشتن رویه ها با ماژول های GRASS موجود، و همچنین یک رابط شی گرا قدرتمند برای مقابله و آزمایش با مشکلات GIS در سطح پایین تر، رقابت کند.

کلاس جدید Module که توسط PyGRASS معرفی شده است، یک رابط واحد برای همه ماژول‌های GRASS فراهم می‌کند و می‌تواند برای کار با خدمات پردازش وب (WPS)، زبان توصیف سرویس‌های وب (WSDL) و پروتکل دسترسی به اشیاء ساده (SOAP) یا سایر خدمات از راه دور گسترش یابد. خدمات اجرایی مفهوم طراحی کلاس Module امکان پیوند مستقیم ورودی ها و خروجی های ماژول های GRASS را برای ایجاد زنجیره های فرآیندی از جمله بررسی سازگاری، کنترل فرآیند و مدیریت خطا فراهم می کند.

API برنامه نویسی Python شی گرا جدید یک لایه انتزاعی را معرفی می کند که این امکان را برای کاربرانی که با C و GRASS C-API آشنایی ندارند، برای استفاده و دسترسی شفاف به توابع C کارآمد GRASS باز می کند. آزمایش‌های ما نشان می‌دهد که الگوریتم‌های پیاده‌سازی شده با PyGRASS از نظر عملکرد با یک پیاده‌سازی C معادل قابل مقایسه هستند. از این رو، رویکرد ما کتابخانه‌های زیرین GRASS C را به طور کارآمد می‌پوشاند. به خط کد بسیار کمتری برای پیاده‌سازی الگوریتم در PyGRASS نسبت به C نیاز دارد. علاوه بر این، نشان می‌دهد که نقاط قوت پایتون خاص، به عنوان مثال، رابط پایگاه داده پایتون، می‌تواند برای بهبود سرعت نسبت به پیاده‌سازی‌های خاص C در GRASS استفاده شود. کتابخانه PyGRASS برای ادغام روش های جدید یا ارث بردن از یک کلاس موجود برای گسترش عملکردهای GRASS طراحی شده است.

برخی از قابلیت های ارائه شده توسط PyGRASS در نرم افزارهای دیگر مانند Postgresql/Postgis، R، shapely و غیره نیز موجود است. با این حال، تغییر به آنها مستلزم تغییر محیط کاری GIS است. یعنی نصب، پیکربندی، یادگیری ابزارهای جدید و تبدیل از یک فرمت به فرمت دیگر. کتابخانه PyGRASS کاربران را مجبور به یادگیری و جابجایی بین زبان های مختلف (C، SQL، R، Python، BASH و غیره ) و ابزارها برای انجام کار خود نمی کند.

کتابخانه PyGRASS به مدل‌سازان و دانشمندان GIS اجازه می‌دهد تا از C-API GRASS، با یک رابط سطح بالا استفاده کنند، و ابزاری را فراهم می‌کند که آزادی رویکرد به مسئله GIS را از دیدگاهی متفاوت فراهم می‌کند. به این ترتیب، کاربران و دانشمندان می توانند ماژول های GRASS را با توابع و الگوریتم های GRASS C-API ترکیب کنند. بنابراین، PyGRASS می‌تواند رویکرد توسعه یک مدل جدید GIS را با استفاده از یک برنامه (GRASS) و یک زبان (Python) برای پوشش جنبه‌های مختلف GIS ساده‌سازی کند، بهره‌وری را افزایش داده و به دانشمندان زمین‌شناسی اجازه می‌دهد تا بر مطالعه آن تمرکز کنند. مشکلی که آنها انتخاب کرده اند و نه در مطالعه ابزارها و زبان های مورد استفاده.

علاوه بر این، کتابخانه PyGRASS می تواند به عنوان ابزاری برای تسهیل استفاده و ادغام با سایر نرم افزارها و کتابخانه های GIS/آماری (نه تنها منبع باز) استفاده شود. زبان مشترک بین نرم افزارهای مختلف و ساختار شی گرا باید ارتباطات و رویه/تبادل داده ها را آسان تر کند.

کتابخانه PyGRASS، همراه با چارچوب زمانی GRASS GIS، می‌تواند یک چارچوب جامع GIS مکانی-زمانی با کارایی بالا را برای GI-Scientists ارائه دهد.

به نظر می رسد PyGRASS برای استفاده در مطالعات موردی پیچیده، مانند نظارت بر کیفیت هوا از شبکه های حسگر بی سیم، و ایجاد سیستم های پشتیبانی تصمیم برای ارزیابی ارزیابی انرژی جنگلی پایدار، ایده آل است.

ضمیمه

برخی از نمونه‌های کوچک کد در زیر ارائه شده‌اند تا نشان دهند چگونه مدل‌سازان، دانشمندان و توسعه‌دهندگان می‌توانند با کتابخانه PyGRASS تعامل داشته باشند. اگر کد با >>> شروع شود، این نشان دهنده یک بخش تعاملی پایتون با ترمینال است. برای استفاده و آزمایش افزونه PyGRASS، خواننده باید آخرین نسخه توسعه GRASS7 را نصب کند. علاوه بر این، تمام نمونه‌های زیر از نقشه‌های موجود در مجموعه داده‌های نمایشی رایگان GRASS کارولینای شمالی ( http://grass.osgeo.org/sampledata/north_carolina/nc_basic_spm_grass7.tar.gz ) استفاده می‌کنند.

ماژول ها

فهرست 1. ورودی/خروجی مستقیم.
فهرست 2. نحو مشابه POSIX است.
فهرست 3. سازگاری با عقب.
فهرست 4. ماژول به عنوان یک شی.
لیست 5. اجرا و پایان.
فهرست 6. Stdin.

بردارها

لیست 7. کلاس برداری.
لیست 8. کلاس VectorTopo.
فهرست 9. یک نقشه برداری جدید بنویسید.

رسترها

لیست 10. کلاس RasterRow.
فهرست 11. یک نقشه شطرنجی جدید بنویسید.

GIS/GRASS

فهرست 12. یک نقشه شطرنجی جدید بنویسید.
فهرست 13. یک نقشه شطرنجی جدید بنویسید.

معیار

فهرست 14. با استفاده از PyGRASS، با افزودن مقدار شطرنجی در جدول ویژگی، یک نقشه نقاط برداری جدید بنویسید.
فهرست 15. یک نقشه نقاط برداری جدید بنویسید و با استفاده از C مقدار شطرنجی را در جدول ویژگی اضافه کنید.
لیست 16. با استفاده از کلاس RasterRow محاسبه کنید.
لیست 17. ماژول r.mapcalc را از پایتون فراخوانی کنید
 

منابع

  1. Foody، G. GIS: کاربردهای تنوع زیستی. Prog. فیزیک Geogr. 2008 ، 32 ، 223-235. [ Google Scholar ]
  2. نتلر، ام. بومن، MH; لاندا، م. Metz, M. GRASS GIS GIS منبع باز چند منظوره. محیط زیست مدل نرم افزار 2012 ، 31 ، 124-130. [ Google Scholar ]
  3. ساچلی، اس. زامبلی، پ. زاتلی، پ. Ciolli، M. Biomasfor – یک مدل جامع منبع باز برای ارزیابی انرژی زیستی جنگل پایدار. iForest 2013 . در مطبوعات. [ Google Scholar ]
  4. هوفیرکا، جی. Zlocha, M. مدل جدید تابش خورشیدی سه بعدی برای مدل های شهر سه بعدی. ترانس. GIS 2012 ، 16 ، 681-690. [ Google Scholar ]
  5. پریتونی، دی. تاتونی، سی. بیسی، ف. ماسرونی، ای. داکونتو، دی. لوناردی، س. گریمود، آی. توسی، جی. ارزیابی شاخص های کیلومتری فراوانی منبع باز. Ecol. به اطلاع رساندن. 2012 ، 7 ، 35-40. [ Google Scholar ]
  6. تاتونی، سی. ریزولی، اف. Pedrini، P. آیا داده‌های LiDAR می‌توانند مدل‌های مناسب زیستگاه پرندگان را بهبود بخشند؟ Ecol. مدل 2012 ، 245 ، 103-110. [ Google Scholar ]
  7. زامبلی، پ. لورا، سی. اسپینلی، آر. تاتونی، سی. ویتی، ا. زاتلی، پ. Ciolli، M. یک سیستم پشتیبانی تصمیم GIS برای مدیریت جنگل های منطقه ای برای ارزیابی در دسترس بودن زیست توده برای تولید انرژی های تجدید پذیر. محیط زیست مدل نرم افزار 2012 ، 38 ، 203-213. [ Google Scholar ]
  8. وتوراتو، دی. ژنلتی، دی. Zambelli، P. مقایسه فضایی عرضه انرژی تجدیدپذیر و تقاضای انرژی برای سکونتگاه‌های کم کربن. شهرها 2011 ، 28 ، 557-566. [ Google Scholar ]
  9. لی، ایکس. دی، ال. هان، دبلیو. ژائو، پی. Dadi، U. به اشتراک گذاری الگوریتم های علوم زمین در یک محیط وب سرویس گرا (مثال GRASS GIS). محاسبه کنید. Geosci. 2010 ، 36 ، 1060-1068. [ Google Scholar ]
  10. تاتونی، سی. سیولی، ام. فرتی، اف. Cantiani، MG نظارت بر الگوی مکانی و زمانی جنگل Paneveggio (شمال ایتالیا) از 1859 تا 2006. iForest 2010 ، 1 ، 72-80. [ Google Scholar ]
  11. زامبلی، پ. لورا، سی. سیولی، ام. اسپینلی، آر. تاتونی، سی. ویتی، ا. زاتلی، P. یک مدل FOSS4G برای تخمین روش‌های استخراج جنگل و در دسترس بودن زیست توده برای تولید انرژی‌های تجدیدپذیر، مجموعه مقالات FOSS4G، بارسلونا، اسپانیا، 6-9 سپتامبر 2010.
  12. اوکابه، ا. ساتوح، تی. Sugihara, K. یک روش تخمین چگالی هسته برای شبکه ها، روش محاسباتی آن و یک ابزار مبتنی بر GIS. بین المللی جی. جئوگر. Inf. علمی 2009 ، 23 ، 7-32. [ Google Scholar ]
  13. وتوراتو، دی. زامبلی، ص. برآورد پایداری انرژی در مقیاس محلی: رویکردی مبتنی بر ابزارهای تحلیلی و نقشه برداری نوآورانه و تحلیل چند معیاره، مجموعه مقالات چهل و پنجمین کنگره ISOCARP، پورتو، پرتغال، 18 تا 22 اکتبر 2009. صص 1-12.
  14. سیولی، ام. دی فرانچسکی، م. رئا، ر. ویتی، ا. زردی، د. Zatelli, P. توسعه و استفاده از ماژول های 2D و 3D GRASS برای شبیه سازی بادهای شیب دار حرارتی. ترانس. GIS 2004 ، 8 ، 191-209. [ Google Scholar ]
  15. Van Rossum, G. Python Library مرجع ; گزارش CS-R9524; Pub-CWI: آمستردام، هلند، 1995. [ Google Scholar ]
  16. جونز، ای. اولیفانت، تی. پترسون، پی. Community, S. SciPy: Open Source Scientific Tools for Python , در دسترس آنلاین: http://www.scipy.org در 7 مارس 2013 قابل دسترسی است.
  17. Varrazzo، D. Psycopg Community. آداپتور پایگاه داده Psycopg–PostgreSQL برای پایتون ، در دسترس آنلاین: http://initd.org/psycopg در 7 مارس 2013 قابل دسترسی است.
شکل 1. کلاس های ماژول، رستر و GIS.
شکل 2. کلاس برداری.
جدول 1. GRASS C API شامل 2698 تابع C است که از طریق کتابخانه ctypes در دسترس هستند و به 10 فیلد مختلف تقسیم می شوند. این داده ها از کد منبع رسمی GRASS مشتق شده است.
جدول 2. جدول با مقایسه پرکاربردترین نرم افزار GIS.
جدول 3. جدول با نتایج معیار، گزارش شده در ثانیه، با استفاده از گستره های محاسباتی مختلف و تعداد متفاوتی از نقاط برداری.

بدون نظر

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *