مقالات باگتو

استفاده از داده های مکانی در EFCore  -قسمت اول : آشنایی با داده های مکانی
استفاده از داده های مکانی در EFCore -قسمت اول : آشنایی با داده های مکانی

 

امروزه در اکثر برنامه­ ها ما مجبوریم از داده­های مکانی یاSpatialDataبرای پیشبرد اهداف خود استفاده و منطق برنامه را بر اساس این نوع داده­ ها پیاده سازی کنیم.ما با داده های مکانی میتوانیم امکاناتی نظیر یافتن نزدیک ترین کاربران به یک محل خاص و یا نمایش رانندگانی که وارد محدوده طرح ترافیک شده اند را به برنامه های خودمون اضافه کنیم. برای مثال اپلیکیشن­ های تاکسی­ یاب نظیر اسنپ و تپسی را در نظر بگیرید هنگامی که درخواست خود را در اپلیکیشن مسافر ثبت می­کنیم با استفاده از داده­ های مکانی نزدیک ترین راننده ها به موقعیت مکانی ما را پیدا می­کند و درخواست را به آنها ارسال میکند و ادامه ماجرا.

 درکشور خودمون هم می­بینیم که استارت آپ­ های خیلی زیادی بر اساس داده­های مکانی وLocation-baseنظیر اسنپ , نت بار , چلیوری , الوپیک و... راه اندازی شده ­اند و تغیرات بزرگی در سبک زندگی مردم ایجاد کرده­اند، و همه این ها بدون استفاده از داده های مکانی امکان پذیر نبودند.

در این مقاله ما به موارد زیر میپردازیم

  1. آشنایی با داده های مکانی
  2. معرفی سیستمCoordinate
  3. دسته بندی داده های مکانی
  4. معرفیDataTypeهایGeometry وGeography

آشنایی با داده­ی مکانی

داده مکانی به انواع اشیاء و داده ها یا عناصر فیزیکی موجود در یک فضای جغرافیایی اشاره دارد. مانند ساختمان ها، جاده­ ها ،کوه ها و یا دریاچه ­ها در سطح زمین. به طور کلی داده مکانی نشان دهنده مکان،اندازه و شکل یک شئ درسیاره زمین است.

معرفی سیستمCoordinates 

یک سیستم مختصات جغرافیایی است که با استفاده از این سیستم موقعیت هر نقطه بر روی سطح کره زمین را با دو عدد میتوان مشخص کرد.که به این دو عدد طول جغرافیایی   و عرض جغرافیایی یاLat,Long   گفته می­شود. مقدایری که برای  Longمیتوانیم ثبت کنیم عدی از-180تا180 و برایLat عددی از-90تا90 می­باشد.

 

 

 coordinate  سیستم مختصات جغرافیایی

دسته بندی داده های مکانی

برای ذخیره سازی داده ­های مکانی شش نوع مختلف وجود دارد که با استفاده از این انواع داده ای هر شئ که روی کره زمین است را می­توان در بانک های اطلاعاتی ذخیره کرد.

  • Point

  • LineString

  • Polygon

  • MultiPoint

  • MultiLineString

  • MultiPolygon

 

  1. Point   

محل فیزیکی اشیاء را با نوع داده­ایPoint می­توان نمایش داد. به عنوان مثال محل یک سوپرمارکت در شهر تهران را با یک نقطه که دو عددLat,Long را دارد نمایش داده می­شود.

 

point

 

  1. LineString

جاده­ ها، خیابان­ ها، کوچه­ ها  و برخی دیگر از موجودیت­ های روی کره زمین را باLineString  یا مسیر می­توان نمایش داد.هر مسیر حداقل یک نقطه شروع و یک نقطه پایان دارد و در این بین نیز میتواند نقاط دیگری داشته باشد.برای مثال یک جاده از یک نقطه شروع  و در یک نقطه خاتمه می­یابد و پیچ خم ­های بین جاده را با نقاط میانی مشخص میکنیم.

LineString in Spatial Data

 

 

  1. Polygon

محدوده­ ی ساختمان ها، شهرها، استان­ها و هرکجا که محیط یا مساحت اهمیت داشت میتوانیم از نوع داده­ایPolygon یا چند ضلعی استفادهکنیم.هر چند ضلعی از چندین نقطه تشکیل شده است که نقطه شروع و پایان آن دارای مختصات یکسانی است.

  1. MultiPoint

در این دسته بندی می­توانیم چندین نقطه را با هم ذخیره کنیم، برای مثال رستورانی را در نظر بگیرید که دارای چندین شعبه می­باشد.و ما برای ذخیره این رستوران چندین نقطه را مشخص می­کنیم که نشان دهنده شعب این رستوران در سطح شهر است.

  1. MultiLineString

در این دسته بندی می­توانیم چندین مسیر را ذخیره کنیم.به عنوان مثال یک آزاد راه را درنظر بگیرید یک مسیر رفت دارد و یک مسیر برگشت که برای ذخیره این دو باید دو مسیر متفاوت را ترسیم کنیم.

 

 

  1. 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 می­پردازیم.

تگ‌ها
اشتراک

0 نظرات