خانه » ArcObjects

ArcObjects

آموزش ArcObjects: خواندن دیتافریم فعال در ArcMap

خواندن دیتافریم فعال در ArcMap
برای رسیدن از Document به DataFrame (که باز توی ArcObject نماد DataFrame هم کلاس Map هست) باید یه خصوصیت توی کلاس MXDocument پیدا کنیم که یه شی از کلاس Map رو برای ما برگردونه. به نماد بیضی شکل قرمز رنگ که براتون کشیدم دقت کنید دو تا خصوصیت رو داره نشون میده که اولی FocusMap هست که به DataFrame فعال در نرم افزار اشاره میکنه (هونطوری که میدونین همیشه تنها یک DataFrame میتونه در نرم افزار ArcGIS فعال باشه) و خصوصیت دوم Maps به مجموعه تمام DataFrameها در نرم افزار اشاره میکنه.
بنابراین برای اتصال به DataFrame فعال فقط کافیه از خصوصیت FocusMap (از اسم خصوصیت هم مشخصه) بصورت زیر استفاده کنیم. واسه اینکه اینترفیس IMap در فضای ویژوال استودیو هم قابل استفاده باشه باید فضای نام ESRI.ArcGIS.Carto رو به مجموعه فضای نام های موجود اضافه کنیم. و با دستور Using در قسمت بالای برنامه کلاس های موجود توی اون رو در دسترس قرار بدیم.
Using ESRI.ArcGIS.Carto

MXDocument ادامه مطلب »

آموزش ArcObjects: خواندن سند جاری در ArcMap

خواندن سند جاری در ArcMap
همون طوری که گفتم فایل های PDF محتوای dllهای نرم افزار رو در موقع نصب نشون میدن. در این فایل ها، کلاس ها در قالب (Object Model Diagram (OMDها نمایش داده شدن. در OMDها هر چیزی با یک نماد مشخص شده مثلاً کلاس ها بصورت مستطیل شکل، خصوصیات بصورت دمبل مانند و رفتارها بصورت فلش. واسه کار کردن با OMDها یک فایل چند صفحه ای برای دوستان گذاشتم. این فایل رو خوب و دقیق مطالعه کنین.
خوب میخوام مستقیم برم سر یه خورده کدنویسی. امیدوارم تا الان فایل هایی رو که گفتم خونده باشین چون خیلی واسه فهم ادامه مطالب مهم هست. واسه سفارشی کردن نرم افزار ArcGIS، نقطه شروع کار ما کلاس Application هست.
Application ادامه مطلب »

آموزش ArcObjects: مفاهیم ArcObjects

مفاهیم ArcObjects
 در واقع  مفهوم کلاس ها و شی ها با الهام از طبیعت به وجود اومدند. کلاس ها رو میتونین یک مدل فرض کنین که بتنهایی خودشون کاربردی و قابل استفاده نیستن اما اشیایی که ما با استفاده از این مدل ها می سازیم قابل لمس و استفاده هستن. برای اینکه واضح تر بگم یه مثال معروف رو براتون میزنم: فرض کنین یه تیکه خمیر شیرینی دارین و میخوایین شیرینی بپزین. برای پختن شیرینی های خوشگل نیاز به چندتا قالب مثلاً مثلث و مربع شکل داریم. خوب کاری که ما میکنیم اینه که قالب ها رو توی خمیر میزنیم بعدش تو فر میزاریم و شیرینی رو آماده میکنیم. خوب اگه تا الان فهمیدین کلاس و شی کجای این مثال بودن پس مطلب رو گرفتین. اگه نه عیبی نداره یکم بیشتر فکر کنین!
توی مثال بالا مدل های ما همون کلاس های ما بودن که به خودی خود شیرینی نیستن اما ما تونستیم از روی اونا شیرینی بسازیم. در واقع شیرینی های ما همون اشیاء ما هستن که وجود خارجی دارن و ما اونا رو می خوریم ( نه قالب های شیرینی (کلاس ها) رو). خوب اگه این مثال رو بیشتر باز کنیم میتونیم مفاهیمی مثل پنهان سازی، ارث بری و پلومورفیزم رو با هم ببینیم که خوب توضیح این موضوعات اینجا یه خورده طولانی میشه و از حوصله خواننده خارج. با خوندن یه کتابی که مفاهیم شی گرایی رو توضیح داده باشه میتونین این مفاهیم رو درک کنین.

خوب همینطوری که ما با یه الگو میتونیم هر تعداد شیرینی دلخواه بپزیم اینجا هم از یک کلاس هر تعداد شی که بخواییم میتونیم ایجاد کنیم. ۲ عنصر اصلی هر کلاس خصوصیات و متدها هستن که خصوصیت ها مشخصه های یک کلاس و متدها رفتار اون رو شبیه سازی میکنن. مثلا یک کلاس خودکار رو در نظر بگیرین خصوصیاتی مثل رنگ و … داره و رفتاری مثل نوشتن میشه براش تعریف کرد. البته کلاس ها مشخصه های دیگه هم دارن که مطالب بیشتر بمونه به عهده خودتون. طریقه ایجاد یک شی یا نمونه(Instance)  از یک کلاس هم با کلمه کلیدی new بصورت زیره:

;()Rectangle rect =new Rectangle

با این دستور ما شی rect رو تعریف و مقداردهی (Instantiate) کردیم. متد ()Rectangle هم سازنده پیش فرض کلاسه که همنام با کلاس هست. از این متد میتونیم برای مقدار دهی که متغیرهای یک کلاس هم استفاده کرد. توضیحات بیشتر راجع به کلاس ها و اشیا داخل فایل Getting Started with ArcObjects اومده که براتون گذاشتم.

خوب خود کلاس ها توی ArcObject سه نوع هستن:

۱-      Abstract Class: از این کلاس ها که ما نمیتونیم مثل دستور بالا با استفاده از کلمه new ازشون شی بسازیم. کلا بیشترین استفاده از این کلاس ها واسه پیاده سازی وراثت هست.

۲-      CoClass: از این کلاس ها  میتونیم با کلمه new شی بسازیم.

۳-      Class: که از این کلاس ها هم نمیشه مستقیماً شی ساخت ولی یک کلاس دیگه ای وجود داره که یه خصوصیت که  شی از این کلاس رو برمیگردونه یا یه شی داره که با استفاده از اون میتونیم یه شی از این کلاس بسازیم.

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

آموزش ArcObjects: کاربردهای ArcObjects

کاربردهای ArcObjects
بطور کلی ۴ هدف اصلی در استفاده از ArcObjectها وجود داره:
   – customize کردن (سفارشی کردن) نرم افزار ArcMap.
   – توسعه نرم افزارهای Desktop Applications (Standalone).
   – توسعه نرم افزارهای مبتنی بر تکنولوژی وب (Web Applications).
خوب می خواهم راجع به اولین کاربرد ArcObjectها یه خورده براتون بنویسم. همونطور که گفتم هدف ما از سفارشی کردن نرم افزار ArcMap، ایجاد چیدمان دلخواه از ابزارها و منوهای نرم افزار و یا اضافه کردن ابزارها و کامپوننت های نرم افزاری خودمون هست. در کل ۴ روش واسه سفارشی کردن نرم افزار ArcMap وجود داره:
   – سفارشی کردن با استفاده از پنجره Customize در نرم افزار ArcMap.
   – سفارشی کردن با استفاده از زبان اسکریپتی Python.
   – سفارشی کردن از طریق توسعه Add-ins Componentها.
   – سفارشی کردن از طریق توسعه Custom Componentها.

روش اول: توی این روش ما میتونیم نرم افزار ArcMap رو بدون نیاز به هیچگونه تجربه برنامه نویسی سفارشی کنیم. با استفاده از پنجره Customize میتونیم عنوان تمامی منوها و ابزارهای نرم افزار رو فارسی کرد، چیدمان اونها رو عوض کرد، به منوها یا نوارابزارها میتونیم ابزارهای خودمون رو اضافه کنیم حتی تمامی منوهای کلیک راست نرم افزار رو دستکاری کرد. باورتون میشه! چه قابلیت های جالبی وجود داره حتی بدون یک خط کد نویسی. اما راستش رو بخوایین این روش علیرغم ساده گیش خیلی کاربرد عملی واسه ما نداره. بهترین توجیه توی استفاده از این روش جابجا کردن منوها وابزارها و دم دست قرار دادن اونهاییکه بیشتر ازشون استفاده میکنیم (یجای اینکه هر سری اونها رو از جاهای مختلف و با کلی مراحل اونها رو پیدا میکنیم). توی سازمان ها یه مدیر GIS میتونه با سفارشی کردن یک نرم افزار و کپی کردن فایل Normal.mxt توی یه مسیر مشترک در شبکه بقیه نرم افزارهای ArcMap در سازمان رو به یک شکل سفارشی کنه. فقط کافیه بقیه کارکنان شرکت این فایل رو توی مسیر پیش فرض نرم افزار کپی کنن و نرم افزار رو یکبار باز و بسته کنن. تمامی تغییرات مورد نظر توی نرم افزار اونها براحتی اعمال میشه. و برای برگشتش هم کافیه فایل سالم رو دوباره تو همون مسیر کپی کرد و یا فایل قبلی رو حذف کرد. یه عکس از این قابلیت رو براتون میزارم:

 Customize ادامه مطلب »

آموزش ArcObjects

جستجوی توصیفی عوارض لایه های مکانی
در آموزش های قبلی تا خواندن جدول اطلاعات توصیفی و فیلدهای یک لایه پیش رفتیم. در این آموزش نحوه نوشتن Query برای جستجوی عوارض را یاد می گیریم. برای انجام یک پرس و جوی توصیفی از کلاس QueryFilter در فضای نام GeoDatabase استفاده می شود. در واقع ما تا الان بعنوان یک کاربر نرم افزار   ArcGIS، بدون آگاهی قبلی بارها بارها از این کلاس استفاده کرده ایم بعنوان مثال پنجره Selection By Attribute با استفاده از همین کلاس عوارض با مقادیر تعیین شده را برای ما یافته و انتخاب می کند که در آموزش های بعدی به نحوه انتخاب عوارض نیز می پردازیم. نحوه کار با این کلاس به این صورت است که همیشه با کلمه New از این کلاس یک نمونه یا شی ایجاد کرده و سپس شرط مورد نظر را تعیین می کنیم. دیاگرام زیر مکان کلاس را در فضای نام  GeoDatabase نشان می دهد:
QueryFilter ادامه مطلب »

آموزش ArcObjects

خواندن فیلد های یک لایه
به منظور خواندن لیست فیلدهای یک لایه مکانی کافیست از خصوصیت Fields کلاس Table استفاده نمود. این خصوصیت یک شی از کلاس Fields برمیگرداند که میتوان با استفاده از ساختارهای چرخشی از قبیل For آنرا پیمایش نموده و به تک تک فیلدها دسترسی پیدا نمود.
همانطور که در تصویر پایین مشاهده میکنید اینترفیس IFeatureClass از اینترفیس IObjectClass ارث بری میکند و اینترفیس IObjectClass نیز از اینترفیس IClass. بنابراین اینترفیس IFeatureClass می تواند تمامی متدها و خصوصیات دو اینترفیس دیگر را پیاده سازی کند این موضوع را براحتی میتوان در محیط VS فهمید بگونه ای که چنانچه جلوی یک شی از نوع اینترفیس IFeatureClass یک نقطه تایپ کنین نه تنها اعضای خود این اینترفیس بلکه تمامی اعضای دو اینترفیس دیگر از جمله Fields را که در دیاگرام متعلق به کلاس Table هست را نیز نمایش میدهد و این قانون ارث بری است.
1 ادامه مطلب »

آموزش ArcObjects

خواندن یک عارضه از طریق FID

برای دسترسی به جدول اطلاعات توصیفی یک لایه وکتوری و عوارض آن، باید از کلاس IFeatureLayer استفاده کرد این کلاس هم در فضای نام Carto قرار دارد و از کلاس Layer ارث بری می کند. رابطه ارث بری مابین کلاس های Layer و FeatureLayerBase این امکان QueryInterface را مابین این کلاس ها برای ما فراهم می کند. البته کلاس FeatureLayerBase بطور مستقیم از کلاس Layer ارث بری نمی کند و چندین کلاس این وسط وجود دارند اما چون که در نهایت تمامی این روابط از نوع ارث بری هست پس ما میتونیم بگیم رابطه بین این دو کلاس هم از نوع ارث بری هست و این همان دلیل کافی برای ما به منظور پرش از اینترفیس Ilayer به IfeatureLayerBase هست.

ادامه مطلب »

آموزش ArcObjects

خواندن یک لایه خاص با اندیسLayers

پس از خواندن دیتافریم فعال با استفاده از متد ()FocusMap، حالا نوبت به خواندن لایه ها میرسه. برای اینکار باید از خصوصیت Layer در کلاس Map که تا اینجا بهش رسیده بودیم استفاده کنیم. این خصوصیت یک اندیس رو بعنوان پارامتر ورودی گرفته و لایه متناظر با اون رو برمیگردونه. این اندیس در واقع شماره لایه ها  در دیتافریم فعال با شروع از صفر هست. این نکته رو دقت داشته باشین که تمامی اندیس ها در سی شارپ و ArcObjects همه از صفر شروع میشن یعنی اینکه اندیس اولین لایه صفر و دومین لایه یک و … . یک نکته خیلی مهم دیگه اینکه در کلاس های ArcObject، خصوصیت هایی که ورودی از هر نوعی دریافت میکنن در زبان سی شارپ باید قبل از نام خصوصیت موقع خواندن از کلمه کلیدی _get و موقع نوشتن از کلمه کلیدی _set استفاده کرد و بعد نام خود خصوصیت رو نوشت (البته در زبان VB.NET این امر لازم نیست). در مثال ما برای خواندن اولین لایه بصورت زیر عمل میکنیم که:

;(ILayer layer = map.get_Layer(0

ادامه مطلب »

آموزش ArcObjects

درس اول:
لزوم آشنایی با ArcObjects
سلام دوستان قصد دارم یه کم از دنیای ArcObjectها براتون بنویسم. راجع به اینکه چی هستن، چه استفاده ای میشه ازشون کرد و اینکه کلاً چه دنیای وسیع و جالبیه.قبل از اینکه بخوام شروع کنم اجازه میخوام از تمامی اساتید و دوستان خوبی و مهربونی مثل جناب آقای دکتر بابک میرباقری و مهندس عباس بیگی که منو تو این مسیر کمک کردن تشکر و قدردانی کنم. واقعا داشتن استادای خوب نعمت بزرگیه. و اینم بگم افراد زیاد دیگه ای توی ایران هستن که این مفاهیم رو بهتر از من بلدن اما با کسب اجازه از همه این عزیزان میخوام از تجربیات خودم برای بقیه کاربرانی که تازه توی این مسیر قدم برداشتن بگم امیدوارم که اگه توی مطالب ارائه شده اشکال و ایرادی مبینن یادآوری کنن.میخوام یه کم از تجربه چندیدن دوره تدریس برنامه نویسی با ArcObject براتون بگم اینکه یه کاربر عادی ArcGIS وقتی میخواد شروع به یاد گیری این مسیر بکنه معمولا دید صحیحی از اینکه ArcObjectها چیا هستن، چرا ما باید بعنوان یک کاربر نرم افزارهای مکانی شرکت ESRI اونا رو یاد بگیریم ، از کجا باید شروع کنیم و مسیر یادگیری رو چطور ادامه بدیم ندارن. خوب نمیخوام دلسردتون بکنم اما راستش مسیر زیادی تا یادگیری کامل این راه هست و نیاز به وقت و حوصله زیادی داره که خوب البته مسلما ما نیاز به یادگیری همه چیز نداریم هر کدوم از ما در حد توان و زمان خودمون میتونیم براش وقت بزاریم و به چیزایی که میخواییم برسیم.

خوب بطور طبیعی کاربران نرم ­افزار ArcGIS قبل از استفاده از این نرم ­افزار باید با ArcObjects آشنایی داشته باشن اما شناخت اولیه از نرم افزار ArcGIS میتونه کمک قابل توجهی در فهم برنامه نویسی با استفاده از ArcObjects بکنه لذا توصیه میشه علاقه مندان گرامی قبل از شروع یادگیری ArcObjectها با این نرم ­افزار آشنایی داشته باشن.

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

معمولا چند هدف اصلی در زمینه استفاده از ArcObjects مد نظر هست. فعلا میخوام در مورد معمولترین استفاده از اونها که همون سفارشی کردن نرم افزار ArcGIS هست براتون بنویسم. سفارشی کردن نرم افزار ArcGIS به این معنی که این نرم افزار رو هر طور که بخواهیم میتونیم تغییر بدیم و تنظیم کنیم این کارو میتونیم حتی بدون برنامه نویسی هم انجام بدیم. البته تغییرات با این روش در موارد اندکی نیاز ما رو برطرف میکنه و ما نیاز به کدنویسی در محیط های توسعه نرم افزار از قبیل VS.NET رو داریم. توی این روش دیگه دست ما کاملا باز هست و تقریبا به هر صورتی میتوانیم نرم افزار ArcGIS به دلخواه خودمان تغییر دهیم. از اضافه کردن فرم ها گرفته تا منوها و نوارابزارها و اکستنشن ها.

بسیاری اوقات ما نیازی به فروش یک نرم افزار نداریم بلکه میخوایم نیاز خودمون رو در انجام یکسری فرآیندهای تکراری که در کارهای روزمره با اونا برخورد می کنیم برطرف کنیم و یا حتی پا رو فراتر گذاشته و کارهایی که ArcMap قادر به انجام اونها نیست رو برنامه نویسی بکنیم. در کل میخوام اینو بگم که امروزه یادگیری ArcObjects برای هر متخصص کار با نرم افزارهای GISی مورد نیازه. چه افرادی که میخوان بطور تخصصی در زمینه برنامه نویسی در حیطه نرم افزارهای مکانی فعالیت کنن و چه اونهایی که میخوان کار خودشون رو بصورت حرفه ای تر و با صرف زمان و انرژی کمتر انجام بدن.