امروزه در اکثر برنامه ها ما مجبوریم از دادههای مکانی یا SpatialData برای پیشبرد اهداف خود استفاده و منطق برنامه را بر اساس این نوع داده ها پیاده سازی کنیم.ما با داده های مکانی میتوانیم امکاناتی نظیر یافتن نزدیک ترین کاربران به یک محل خاص و یا نمایش رانندگانی که وارد محدوده طرح ترافیک شده اند را به برنامه های خودمان اضافه کنیم. برای مثال اپلیکیشن های تاکسی یاب نظیر اسنپ و تپسی را در نظر بگیرید هنگامی که درخواست خود را در اپلیکیشن مسافر ثبت می کنیم با استفاده از داده های مکانی نزدیک ترین راننده ها به موقعیت مکانی ما را پیدا میکند و درخواست را به آنها ارسال میکند و ادامه ماجرا.
درکشور خودمان هم می بینیم که استارتاپ های خیلی زیادی بر اساس داده های مکانی و Location-base نظیر اسنپ , نت بار , چلیوری , الوپیک و... راه اندازی شده اند و تغیرات بزرگی در سبک زندگی مردم ایجاد کردهاند، و همه این ها بدون استفاده از داده های مکانی امکان پذیر نبودند.
در این مقاله ما به موارد زیر میپردازیم
- آشنایی با داده های مکانی
- معرفی سیستم Coordinate
- دسته بندی داده های مکانی
- معرفی DataType های Geometry و Geography
آشنایی با دادهای مکانی
داده مکانی به انواع اشیاء و داده ها یا عناصر فیزیکی موجود در یک فضای جغرافیایی اشاره دارد. مانند ساختمان ها، جاده ها ،کوه ها و یا دریاچه ها در سطح زمین. به طور کلی داده مکانی نشان دهنده مکان،اندازه و شکل یک شئ درسیاره زمین است.
معرفی سیستم Coordinates
یک سیستم مختصات جغرافیایی است که با استفاده از این سیستم موقعیت هر نقطه بر روی سطح کره زمین را با دو عدد میتوان مشخص کرد.که به این دو عدد طول جغرافیایی و عرض جغرافیایی یا Lat,Long گفته می شود. مقادیری که برای Long میتوانیم ثبت کنیم عدی از -180 تا 180 و برای Lat عددی از -90 تا 90 می باشد.
دسته بندی داده های مکانی
برای ذخیره سازی داده های مکانی شش نوع مختلف وجود دارد که با استفاده از این انواع داده ای هر شئ که روی کره زمین است را میتوان در بانک های اطلاعاتی ذخیره کرد.
- Point
- LineString
- Polygon
- MultiPoint
- MultiLineString
- MultiPolygon
Point
محل فیزیکی اشیاء را با نوع دادهای Point میتوان نمایش داد. به عنوان مثال محل یک سوپرمارکت در شهر تهران را با یک نقطه که دو عدد Lat,Long را دارد نمایش داده میشود.
LineString
جاده ها، خیابان ها، کوچه ها و برخی دیگر از موجودیت های روی کره زمین را با LineString یا مسیر میتوان نمایش داد.هر مسیر حداقل یک نقطه شروع و یک نقطه پایان دارد و در این بین نیز میتواند نقاط دیگری داشته باشد.برای مثال یک جاده از یک نقطه شروع و در یک نقطه خاتمه مییابد و پیچ خم های بین جاده را با نقاط میانی مشخص میکنیم.
Polygon
محدوده ی ساختمان ها، شهرها، استانها و هرکجا که محیط یا مساحت اهمیت داشت میتوانیم از نوع دادهای Polygon یا چند ضلعی استفادهکنیم.هر چند ضلعی از چندین نقطه تشکیل شده است که نقطه شروع و پایان آن دارای مختصات یکسانی است.
MultiPoint
در این دسته بندی میتوانیم چندین نقطه را با هم ذخیره کنیم، برای مثال رستورانی را در نظر بگیرید که دارای چندین شعبه میباشد.و ما برای ذخیره این رستوران چندین نقطه را مشخص میکنیم که نشان دهنده شعب این رستوران در سطح شهر است.
MultiLineString
در این دسته بندی میتوانیم چندین مسیر را ذخیره کنیم.به عنوان مثال یک آزاد راه را درنظر بگیرید یک مسیر رفت دارد و یک مسیر برگشت که برای ذخیره این دو باید دو مسیر متفاوت را ترسیم کنیم.
MultiPolygon
در این دسته نیز میتوانیم چندین محدوده را ذخیره کنیم.به عنوان مثال محدوده یک استان را مشخص میکنیم و محدوده شهرهای داخل استان نیز مشخص میشود.
انواع Data Type برای SpatialData
تا به امروز اکثر دیتابیس های موجود از داده های مکانی پشتیبانی می کنند.مایکروسافت هم در سال 2008 پشتیبانی از داده های مکانی را به SQL Server خود اضافه کرد.برای ذخیره سازی داده های مکانی در دیتابیس دو نوع دادهای موجود است.
- Geometry
- Geography
Geometry
در نوع داده ای geometry کره زمین یک سطح صاف به صورت دو بعدی در نظر گرفته میشود و انحنای کره زمین در نظر گرفته نمی شود که در این حالت فاصله بین دو نقطه یک خط مستقیم است.
Geography
این نوع دادههای مکانی را با استفاده از سیستم مختصات بیضوی نمایش میدهد.که برای محاسبات انحنای کره زمین نیز در نظر گرفته میشود.پس فاصله ی دو نقطه ای که با این نوع دادهای به دست میاوریم بیشتر از نوع دادهای geometry است زیرا انحنای کره زمین که بخشی از یک دایره است رو هم محاسبه کرده است.
تصویر زیر تفاوت geometry و geography را نشان میدهد.خطوط قرمز رنگ geography است که انحنای زمین را هم محاسبه می کند و خطوط مشکی geometry هستند که یک خط مستقیم را برای بدست آوردن فاصله دو نقطه را محاسبه میکنند.
برای ذخیره داده های مکانی از geometry استفاده کنیم یا geography ؟
اگر داده های که میخواهید با آنها کار کنید حداکثر فاصله آنها در حد یک یا چند شهر است بهتره که از نوع داده ای geometry استفاده کنید در غیر این صورت میتوانید از نوع داده ای geography استفاده کنید.ما در تیم نت بار به این دلیل که بیزینس اصلی ما بار برون شهری است و یک سفارش حمل بار ممکن است از جنوبی ترین نقطه ایران ثبت و درخواست ارسال به شمالی ترین نقطه ایران را داشته باشد از نوع داده geography استفاده کرده ایم.
چگونه از داده های مکانی (SpatialData) در EfCore استفاده کنیم؟
EFCore از نسخه 2.2 به بعد با استفاده از کتابخانه NetTopolohySuite از داده های مکانی پشتیبانی میکند. NetTopologySuite یک کتابخانه برای کار با داده های مکانی در فریم ورک Dot Net است.
این کتابخانه از نوع های داده ای geometry,geography و شش دسته بندی داده های مکانی که در همین مقاله به معرفی آنها پرداختیم پشتیبانی میکند.در قسمت بعدی به آموزش استفاده از این کتابخانه برای ذخیره سازی انواع دادهی مکانی در دیتابیس Sql Server با EFCore میپردازیم.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید