
استفاده از داده های مکانی در EFCore -قسمت اول : آشنایی با داده های مکانی
امروزه در اکثر برنامه ها ما مجبوریم از دادههای مکانی یا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 میپردازیم.
جدیدترین ویدئوهای آموزشی
در بخش TV باگتو، آموزش های کوتاه و جدید را مشاهده نمایید
برای ارسال نظر باید وارد حساب کاربری خود شوید
ورود به حساب کاربری ثبت نام
با تشکر؛ عالی بود.