اگر برنامه نویس هستید و از GIS یا سامانه اطلاعات جغرافیایی زیاد نمی دانید، این آموزش به شما کمک می کند برای استفاده از نقشه و داده های مکانی در نرم افزارهایتان دید مناسبی پیدا کنید. اگر هم یک برنامه نویس GIS هستید، این آموزش اطلاعات خوبی را در خصوص نحوه ذخیره سازی اطلاعات مکانی در پایگاه داده مکانی به شما یاد می دهد.
آن چه در این آموزش می آموزید
- با داده های جغرافیایی یا همان داده های مکانی آشنا می شوید
- با انواع روش های نمایش اطلاعات مکانی آشنا می شوید
- با دو نوع داده مکانی Geometry و Geography آشنا می شوید
داده مکانی چیست؟
داده های مکانی یا داده های جغرافیایی (به انگلیسی Geo Data یا Spatial Data)، همان مختصات های جغرافیایی هستند. هر مختصات، از یک طول یا X و یک عرض یا Y تشکیل شده که در سیستم اطلاعات جغرافیایی به آن ها، طول جغرافیایی یا Longitude و عرض جغرافیایی یا Latitude گفته می شود. هر مختصات جغرافیایی به یک محل مشخص روی کره زمین اشاره می کند.
آیا می دانید ؟
حدود 80% از داده هایی که انسان با آن ها سروکار دارد، دارای ماهیت جغرافیایی می باشند.
یعنی به نوعی می توان آن ها را به یک محل مشخص روی کره زمین نسبت داد. این داده ها به داده های جغرافیایی مشهور هستند. امروزه داده های جغرافیایی آن قدر اهمیت پیدا کرده اند که به چهارمین رکن تصمیم گیری تبدیل شده اند (برای اطلاعات بیشتر می توانید به نوشته سامانه اطلاعات جغرافیایی چیست رجوع کنید).
اگر یک برنامه نویس هستید، در بسیاری از نرم افزارها نیاز پیدا می کنید با این داده ها سروکار داشته باشید. لذا شما به عنوان یک برنامه نویس، نیاز دارید داده ها را به صورت مختصات جغرافیایی ذخیره کنید و هم چنین نیاز دارید بر روی این داده ها، تحلیل هایی را نیز انجام دهید. برای مثال ممکن است بخواهید یکی از کارهای زیر را انجام دهید:
- محاسبه فاصله بین دو نقطه
- محاسبه نزدیک ترین نقاط به نقطه ای دیگر
- محاسبه مختصات یک محدوده
- محاسبه طول یک مسیر
- و...
پس نیاز دارید تا روش مناسبی را برای ذخیره داده های مکانی و نیز کار با آنها انتخاب نمایید. درخواست های مشاوره که از سوی برنامه نویسان به صورت ماهیانه به دست تیم GISPlus می رسد، نشان داده که معمولا برنامه نویسان به روش های ابداعی و سلیقه ای این کار را انجام می دهند. برای مثال اکثر افراد، که نیاز داشته اند مختصات یک نقطه را ذخیره کنند، دو Field در یک Table با نام های Lon و Lat ایجاد کرده و مختصات آن نقطه را در این فیلدها ذخیره می کنند و اگر نیاز باشد عملیاتی روی داده های جغرافیایی انجام دهند، معمولا فرمول های ریاضی جهت انجام این نوع محاسبات را به کار می گیرند.
داستان ما و داده های مکانی را بخوانید
اجازه دهید داستان خودمان را برای شما بگویم. دقیقا به یاد دارم روزهایی در سال 1386 را که سامانه نقشه گردشگری برای شهر اصفهان ساخته بودیم.
در این سامانه نیاز بود که گردشگر بتواند یک محل را روی نقشه شهر اصفهان کلیک کند و مشخص نماید مثلا در شعاع یک کیلیومتری از این نقطه، هر رستوران یا جاذبه دیگری که مد نظرش است را ببیند. برای این کار، فرمول ریاضی نقطه در دایره را پیاده سازی کرده بودیم و یک دایره با شعاع مشخص شده ترسیم می کردیم و تک تک رکوردهای پایگاه داده را چک می کردیم که در این دایره قرار می گیرند یا خیر. یک پردازش سنگین روی Server انجام می شد. به مرور که بیشتر با پایگاه داده مکانی یا ژئودیتابیس آشنا شدیم و نیز با بلوغ بیشتر این پایگاه های داده، توانستیم هر مکان گردشگری را به عنوان یک نوع داده مکانی ذخیره نماییم و انجام چنین کاری تنها با فراخوانی یک تابع مکانی در پایگاه داده و با سرعت بسیار بالا، میسر شد.
با این مثال خواستیم، اشاره کنیم که چرا باید داده های مکانی را با نوع داده مکانی در پایگاه داده ذخیره کنیم. در ادامه به توضیحات بیشتری در خصوص نوع داده مکانی می پردازیم.
دسته بندی داده های مکانی
هر چیزی که بر روی سطح کره زمین قرار گرفته است، می تواند در یکی از دسته بندی های زیر در نظر گرفته شود:
- نقطه یا Point
- چندنقطه یا Multipoint
- مسیر یا LineString
- چندمسیر یا MultiLineString
- چندضلعی یا Polygon
- چندین چندضلعی یا MultiPolygon
نقطه
هر چیزی را می توان با یک نقطه نمایش داد. برای مثال، محل یک رستوران در شهر اصفهان می تواند با یک نقطه که دارای دو جز طول جغرافیایی و عرض جغرافیایی است، نمایش داده شود.
نقطه با دو جز شامل X و Y نمایش داده می شود.
(Point(X,Y
چندین نقطه
تصور کنید همان رستوران را که با یک نقطه نشان دادیم، دارای چندین شعبه در سطح شهر باشد. نوع چندین نقطه، همه این شعب را در یک موجودیت واحد درنظر می گیرد. مثلا می گوییم شعب رستوران اکبر جوجه کجا هستند؟ ما با یک رستوران به نام اکبر جوجه مواجه هستیم، اما از لحاظ جغرافیایی، این رستوران یک محل مشخص ندارد بلکه چنیدن محل در سطح شهر دارد.
چندین نقطه، با جفت هایی از دو جز شامل X و Y نمایش داده می شود.
(… , (MultiPoint( (X,Y) , (X,Y) , (X,Y
مسیر
برخی از موجودیت های روی کره زمین را می توان با یک خط یا مسیر نمایش داد. هر مسیر حداقل دارای یک نقطه ابتدا و یک نقطه پایانی است و می تواند دارای چندین نقطه میانی نیز باشد. برای مثال، یک خیابان در سطح شهر، می تواند یک مسیر باشد که از یک نقطه آغاز شده و به یک نقطه خاتمه می یابد. در این بین هر کجا که خیابان دارای انحنا یا تغییر زاویه بوده نیز یک نقطه در نظر می گیریم.
( (LineString( (X1,Y1) , (X2,Y2) ,… (Xn,Yn
چندین مسیر
تصور کنید همان خیابان را که با یک مسیر نشان دادیم، دارای چندین تکه در سطح شهر باشد. مثلا خیابان چهارباغ بالا در شهر اصفهان از لحاظ ترافیکی به صورت یک باند از میدان آزادی به سمت سی و سه پل و یک باند از سی و سه پل به سمت میدان آزادی می باشد. هر کدام از این باندها از لحاظ جریان ترافیک، یک مسیر مجزا می باشند. اما از لحاظ موجودیت اطلاعاتی که می خواهیم در پایگاه داده ذخیره کنیم، هر دوی این باندها، همان خیابان چهارباغ بالا می باشند. پس به عنوان یک چندین مسیر در نظر گرفته می شوند.
( … , (MultiLineString( (X1,Y1),(X2,Y2),…(Xn,Yn)) , ((X1,Y1),(X2,Y2),…(Xn, Yn
چندضلعی
برخی از موجودیت های روی کره زمین را می توان به صورت محدوده نمایش داد. مثلا وقتی می گوییم محدوده ساختمان بانک سپه، متوجه می شویم که این ساختمان در محلی واقع شده و دارای یک محدوده مشخص می باشد. این محدوده را می توان به صورت یک چندضلعی درنظر گرفت و رئوس آن را مشخص نمود. چندضلعی ها دارای محیط و مساحت هستند. پس در خصوص موجودیت های زمین، هرجا محدوده، محیط یا مساحت اهمیت پیدا کرد، می توان آن را به صورت چندضلعی در نظر گرفت. هر چندضلعی، حداقل دارای سه نقطه می باشد. البته به صورت واقعی، چند ضلعی دارای نقطه شروع، نقطه پایان و دو نقطه میانی است که نقطه شروع و پایان، عملا دارای یک مختصات یکسان هستند. مثلا محدوده یک استان در کشور، یک چندضلعی می باشد.
Polygon ((X1, Y1),(X2,Y2),(X3,Y3),…(Xn,Yn)) ((X1,…)(,Yn
چندین چندضلعی
تصور کنید همان محدوده استان را که با یک چندضلعی نشان دادیم، دارای چندین جزیره نیز باشد. برای مثال، استان هرمزگان در کشور ما دارای جزایر قشم، هرمز و… است. از لحاظ تقسیمات کشوری، همه این جزایر، همان استان هرمزگان هستند که هر کدام، محدوده مشخص به خود را دارند اما بین آن ها فاصله هایی وجود دارد. این گونه محدوده ها را که یک موجودیت واحد را نشان می دهند، می توان به صورت چندین چندضلعی در پایگاه داده ها درنظر گرفته و با آن ها به عنوان یک موجودیت واحد برخورد کرد.
MultiPolygon( ((X1, Y1),(X2,Y2),(X3,Y3),…(Xn,Yn)) ((X1, Y1),(X2,Y2),(X3,Y3),…(Xn,Yn))) ,…)(,Yn
انواع داده مکانی
در بخش پیش، داده های مکانی را دسته بندی کردیم و گفتیم که داده های مکانی در سه دسته کلی به صورت نقطه، خط و چندضلعی تقسیم می شوند. اگر می خواهید در یک سیستم اطلاعاتی با داده های مکانی کار کنید، می بایست این داده ها را ذخیره کنید تا بتوانید عملیات مورد نظر را روی آن ها انجام دهید. امروزه روش های مختلفی برای ذخیره و کار با داده های مکانی وجود دارد. یکی از این روش ها، استفاده از پایگاه داده ها می باشد. بیشتر پایگاه داده ها، توانایی کار با داده های مکانی را دارند. هنگامی که یک جدول در یک پایگاه داده مکانی (به انگلیسی GeoDatabase) می سازید و یک فیلد مکانی می خواهید به آن اضافه نمایید، با دو نوع داده یا Data Type مواجه هستید:
- نوع داده Geometry
- نوع داده Geography
نوع داده Geometry
دادههای مکانی Geometry، بر روی یک سطح صاف متصور میشوند.
کوتاهترین مسیر بین دو نقطه بر روی یک سطح صاف، یک خط مستقیم میباشد. این بدان معناست که محاسبات بر روی نوع داده مکانی Geometry، توسط دستگاه مختصات کارتزین و قواعد بردارها به راحتی قابل انجام است.
سیستم مختصات چیست؟
همان طور که در بخش قبل نیز اشاره کردیم، داده های مکانی دارای مختصات جغرافیایی می باشند که توسط این مختصات، هر داده قابل آدرس دهی و یافتن مکان معادل آن بر روی زمین است. برای این که بتوانیم مکان معادل یک مختصات را روی زمین به صورت دقیق پیدا کنیم، سیستم های مختصات مختلفی به وجود آمده است که توضیح آن ها در این نوشته آموزشی نمی گنجد و برای یادگیری بهتر می توانید کتابچه رایگان آشنایی با مبانی و مفاهیم GIS را بخوانید.
نوع داده Geometry، داده های مکانی را با استفاده از سیستم های مختصات اقلیدسی نمایش می دهد. این سیستم های مختصات، فقط به صورت دوبعدی و بر روی یک سطح صاف هستند و انحناهای کره زمین را در محاسبات، لحاظ نمی کنند.
نوع داده Geography
دادههای مکانی Geography، بر روی یک کره متصور میشوند.
کوتاهترین مسیر بین دو نقطه بر روی یک کره، یک منحنی میباشد که بخشی از یک دایره است. این بدان معناست که محاسبات بر روی نوع داده مکانی Geography، توسط محاسبات کره انجام میپذیرد که نسبت به محاسبات سطح صاف، دشوارتر میباشد. به دلیل همین دشواری در محاسبات، معمولا پایگاه داده های مکانی، تعداد توابع مکانی کمتری دارند که بر روی نوع Geography عمل می کنند.
نوع داده Geography، داده های مکانی را با استفاده از سیستم های مختصات بیضوی نمایش می دهد. این سیستم های مختصات، انحناهای کره زمین را در محاسبات، لحاظ می کنند.
برای این که بهتر تفاوت اصلی نوع داده Geometry و نوع داده Geography را تشخیص دهید به تصویر زیر دقت گنید.
می خواهیم فاصله بین توکیو و سانفرانسیسکو را محاسبه نماییم. در نوع داده Geometry، این فاصله به صورت یک خط مستقیم، محاسبه می شود. اما همان طور که می دانید، شکل زمین، تقریبا گرد است و در این فاصله زیاد، انحنای کره زمین نیز وجود دارد و برای بدست آوردن فاصله واقعی بین توکیو و سانفرانسیسکو می بایست انحناس زمین را نیز محاسبه نماییم. در نوع داده Geography این انحنا محاسبه می شود.
از Geometry استفاده کنیم یا از Geography؟
اگر دادههای شما مربوط به یک محدوده کوچک از کره زمین میباشند، بهتر است یک سیستم تصویر مناسب برای آنها انتخاب کرده و نوع داده مکانیGeometry را انتخاب نمایید، اما درصورتی که دادههای شما مربوط به محدوده وسیعی از کره زمین میباشند بهتر است از نوع داده مکانیGeography استفاده نمایید.
یک مثال
یکی از پروژه های GIS شرکت بهین رایانش آزاد، نقشه گردشگری شهرهای مختلف کشور بود. چون می خواستیم نقشه کل کشور را ذخیره کنیم و داده های گردشگری از کل ایران را داشته باشیم، در پایگاه داده مکانی که با PostgreSQL ایجاد کردیم، نوع مکانی Geography را انتخاب کردیم و سیستم مختصات جغرافیایی WGS 1984 لحاظ شد.
در یکی دیگر از پروژه های GIS شرکت بهین که Web GIS شهرداری بود و داده ها مربوط به سطح شهر شیراز بود، نوع داده Geometry با سیستم مختصات UTM انتخاب شد.
برای درک بهتر تفاوت نوع داده Geometry و نوع داده Geography، خوب است فیلم زیر را ببینید.
این فیلم بخشی از دوره آموزش استقرار Web GIS متن باز است که در شرکت ملی گاز ایران برگزار شده است.