افزودن Shapefile به ArcGIS از طریق برنامه نویسی ArcObjects

برنامه AddFeatureClass یک داده برداری با فرمت shapefile را به نقشه فعال اضافه می کند. برنامه زیر مشابه عملکرد دکمه Add Data در ArcMap را انجام می دهد. با انجام تغییرات اندک، این برنامه می تواند برای اضافه کردن coverage یا geodatabase feature class به نقشه فعال نیز به کار رود.

کتابخانه های موردنیاز: ArcMapUI، Carto، Geodatabase، DataSourcesFile، DataSourcesGDB

رابط های کلیدی: IMxDocument، IMap، IWorkspaceFactory، IFeatureWorkspace، IFeatureLayer، IFeatureClass

اعضای کلیدی: FocusMap، OpenFromFile، OpenFeatureClass، FeatureClass، Name، AliasName، AddLayer

کاربرد: برای اجرای این برنامه ابتدا یک button در محیط ویژوال استودیو ایجاد کنید. (با اجرای ویژوال استودیو و انتخاب New Project و سپس در بخش Visual Basic و زیرمجموعه ArcGIS، گزینه Desktop Addin و سپس ArcMap Addin را انتخاب کنید. در ادامه در صفحه Add-in Components، گزینه button را انتخاب کرده و تنظیمات آن را انجام دهید.) در رویداد OnClick() آن برنامه زیر را وارد کرده و آن را اجرا کنید. این برنامه دیتاست emidastrm را به نقشه فعال اضافه می کند.

 

این برنامه در ابتدا نمونه ای از کلاس ShapefileWorkspaceFactory را ایجاد کرده و آن را به متغیر pWorkspaceFactory تخصیص می دهد. در ادامه، کد از متد OpenFromFile که از طریق رابط IWorkspaceFactory قابل دستیابی است استفاده می کند. چون کلاس ShapefileWorkspaceFactory رابط IWorkspaceFactory را پیاده سازی کرده است، پس منطقی است که می توانیم این متد را به سادگی فراخوانی کنیم، چرا که ما قبلا نمونه ای از کلاس ShapefileWorkspaceFactory را ایجاد کرده ایم. نتیجه فراخوانی این متد شیئی است که از رابط IWorkspace پشتیبانی می کند. حال یک تغییر رابط از رابط IWorkspace به رابط IFeatureWorkspace انجام می دهیم تا بتوانیم از متد OpenFeatureClass (که در رابط IFeatureWorkspace) موجود است برای بازکردن یک feature class استفاده کنیم.

در اینجا یک نکته حائز اهمیت است. چون رابط IFeatureWorkspace در سلسله مراتب رابط ها زیر رابط IWorkspace قرار می گیرد (که بدین معناست که IFeatureWorkspace نوعی از IWorkspace است) پس این رابط تمام خصوصیات رابط بالای خود یعنی رابط IWorkspace را به ارث می برد. پس ما با خیال راحت می توانیم دو خط اخیر برنامه را در یک خط به شکل زیر خلاصه کنیم:

 

حال که به رابط IFeatureWorkspace دست پیدا کردیم می توانیم از متد OpenFeatureClass این رابط برای بازکردن یک داده برداری استفاده کنیم (Feature class به معنای داده برداری است). داده برداری ما در اینجا emidastrm است که پس از اجرای متد فوق با متغیر pFeatureClass به آن ارجاع داده می شود. حال قصد داریم این داده برداری را به نقشه فعال اضافه کنیم. اما چگونه؟

در ابتدا باید یک لایه برداری (Feature Layer) ایجاد کنیم که داده برداری ما را دربربگیرد. قبلا گفته شد که لایه نمایش گرافیکی یک دیتاست است، پس برای این که یک دیتاست را نمایش دهیم باید آن را درون یک لایه قرار دهیم. پس از ایجاد لایه برداری، خصیصه FeatureClass آن را مساوی pFeatureClass قرار می دهیم تا داده برداری ما درون لایه جدید قرار گیرد. در خط بعدی نام لایه را تنظیم می کنیم، که در این مورد از نام اصلی دیتاست استفاده کرده ایم. شما می توانید به جای آن، هر نامی را که دوست دارید برای لایه های خود قرار دهید.

در انتها، لایه خود را به محیط ArcMap اضافه می کنیم. با استفاده از عبارت کلیدی My.ArcMap.Application به Application موجود (که در این مورد ArcMap است) دسترسی پیدا می کنیم. عبارت My.ArcMap.Application را به خاطر بسپارید، چرا که در مدل برنامه نویسی Add-in همیشه از این عبارت برای دسترسی به فضای در حال اجرای نرم افزار استفاده می شود(چه نرم افزار ArcMap باشد و چه ArcCatalog یا ArcScene یا ArcGlobe). خصیصه Document این شیء سند نقشه بازشده در نرم افزار را برمی گرداند. پس از دستیابی به سند نقشه، از خصیصه FocusMap آن برای دستیابی به نقشه فعال در این سند استفاده می کنیم. این خصیصه شی Map که رابط IMap را پیاده سازی می کند برمی گرداند. رابط IMap نیز دارای متد AddLayer است که برای افزودن هر نوع لایه ای به نقشه کاربرد دارد.

حال دیگر لایه ما به نقشه فعال اضافه شده است. کافی است صفحه را مجدد بارگذاری (Refresh) کنیم تا این لایه نمایش داده شود. این کار از طریق فراخوانی متد Refresh در رابط IActiveView که زیر مجموعه شی MxDocument است انجام می پذیرد.


نکته: در هر سند نقشه حداقل یک شی PageLayout و یک شی Map وجود دارد (که تعداد اشیاء Map می تواند بیش از یکی هم باشد). هر دو شی Map و PageLayout رابط IActiveView را پیاده سازی می کنند. این رابط برای مدیریت پنجره اصلی نرم افزار و عملیات نمایش در این پنجره به کار می رود.

از محیط نرم افزار ArcMap به یاد دارید که در پایین صفحه چهار دکمه به عنوان Data View، Layout View، Refresh و Pause قرار دارد که از طریق منوی View هم قابل دسترس هستند. دکمه اول صفحه نمایش لایه های حاضر در نقشه فعال را برای ما نمایش می دهد (یعنی صفحه ای که اکثرا با آن کار می کنیم). دکمه دوم صفحه Layout را نمایش می دهد که برای انجام تنظیمات قبل از چاپ نقشه استفاده می شود. دکمه سوم صفحه حاضر را مجددا بارگذاری می کند. دکمه چهارم نیز برای توقف عملیات نمایش صفحه حاضر استفاده می شود (احتمالا چون حجم داده ها بالا بوده و نمایش آن ها مدت زیادی طول می کشد).

صفحه Layout نمایشگر شی PageLayout و صفحه Data View نیز محیط نمایش نقشه فعال (شی Map) است. هردوی این صفحات و عملیات نمایش در آن ها توسط رابط IActiveView کنترل می شود. متد Refresh این رابط پرکاربردترین متد آن است که برای بارگذاری مجدد صفحه حاضر استفاده می شود. از دیگر کاربردهای این رابط، سوئیچ بین Data View و Layout View است. برای مثال برای فعال کردن صفحه Layout از کد زیر استفاده می شود:

pMxDoc.ActiveView = pMxDoc.PageLayout


با انجام یک تغییر کوچک می توان برنامه AddFeatureClass را برای افزودن یک دیتاست برداری که درون یک ژئودیتابیس (geodatabase) قرار دارد به کار برد. این feature class می تواند مستقل (Standalone) بوده یا بخشی از یک feature dataset باشد. برای نمونه، فرض کنید یک ژئودیتابیس با نام emida.mdb داریم که یک دیتاست برداری به نام emidastrum در آن وجود دارد. برای افزودن این دیتاست برداری به نقشه فعال، تغییر زیر باید در برنامه AddFeatureClass انجام شود:

 

AccessWorkspaceFactory کلاسی است که برای دسترسی به ژئودیتابیس های محلی کاربرد دارد. در این حالت، مسیر ژئودیتابیس (یعنی emida.mdb) را وارد کرده ایم. هر دیتاست درون ژئودیتابیس، چه مستقل باشد و چه بخشی از یک feature dataset، دارای نام منحصر به فردی است که در متد OpenFeatureClass از آن نام می توان برای بازکردن آن دیتاست استفاده کرد.

نکته: تا اینجای کار احتمالا تا حدودی مفهوم workspace را دریافته اید. مجددا به متد OpenFromFile دقت کنید. در هر دو مورد بالا، محل قرارگیری دیتاست را به این متد معرفی می شد. در مورد اول که فایلی با فرمت shapefile داشتیم این محل یک فولدر بود و در مورد دوم این محل یک ژئودیتابیس. پس در اینجا می رسیم به تعریف workspace: Workspace نگهدارنده ای است برای انواع دیتاست های مکانی و غیرمکانی، ازقبیل دیتاست های برداری، دیتاست های رستری، جداول. درحالت کلی سه نوع Workspace وجود دارد:

  1. FileSystemWorkspace : که همانطور که از نام آن بر می آید نگهدارنده دیتاست هایی است که به صورت فایل برروی هارد ذخیره شده اند. Shapefile، تصاویر رستر با فرمت های مختلف مثل .TIF و جداول از این دست هستند.

  2. LocalDatabaseWorkspace: نگهدارنده ژئودیتابیس های فایلی (File Geodatabase) و ژئودیتابیس های محلی (Personal Geodatabase) است.

  3. RemoteDatabaseWorkspace: نگهدارنده دیتاست هایی است که برروی پایگاه داده هایی مثل SQL Server، Oracle و … ذخیره شده اند.

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

مطالب مرتبط

نظر بدهید

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