يقدم هذا الفصل مقدمة حول كيفية تخزين بيانات المواقع الجغرافية في MongoDB. للاستفادة من وظائف استعلام المواقع الجغرافية في MongoDB، نحتاج أولاً إلى فهم كيفية تخزين بيانات المواقع الجغرافية.

تتكون بيانات المواقع الجغرافية بشكل رئيسي من نقاط وخطوط وأشكال هندسية.

يتم تعريف نقطة على الخريطة بإحداثيات خطوط الطول والعرض. تشكل عدة نقاط خطًا، ويمكن لعدة خطوط تشكيل أشكال مختلفة.

في التطبيقات العملية: يمكن تمثيل موقع متجر، "أين أنا؟"، "أين المدرسة؟" باستخدام الإحداثيات. يتطلب وصف مدى حرم جامعة أو مركز تسوق أشكال هندسية.

كائن GeoJSON

يستخدم MongoDB كائنات GeoJSON لتمثيل المعلومات المكانية الجغرافية.

تشمل الأنواع الشائعة لـ GeoJSON:

  • Point - تمثيل نقطة معينة
  • LineString - تمثيل خط
  • Polygon - تمثيل مضلع

يكون شكل تخزين كائنات GeoJSON في حقول MongoDB على النحو التالي:

<field>: { type: <geojson type> , coordinates: <coordinates> }

شرح:

  • - اسم الحقل
  • type - نوع GeoJSON
  • coordinates - مصفوفة من نقاط الإحداثيات. يختلف الشكل وفقًا لأنواع GeoJSON المختلفة.

مثال:

location: {
      type: "Point",  // نوع البيانات المكانية الجغرافية، في هذه الحالة، إنها نقطة إحداثيات
      coordinates: [-73.856077, 40.848447] // خطوط الطول والعرض
}

الشرح: يخزن حقل الموقع البيانات المكانية الجغرافية من نوع النقطة.

نقطة الإحداثيات (Point)

الشكل:

{ type: "Point", coordinates: [ longitude, latitude ] }

مثال:

{ type: "Point", coordinates: [ 40, 5 ] }

خط (LineString)

الشكل:

{ type: "LineString", coordinates: [ point1, point2, ...] }

مثال:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

مضلع (Polygon)

يمكن أن يتكون من خطوط واحد أو أكثر. الشكل:

{
  type: "Polygon",
  coordinates: [ 
		line1,
		line2,
		....
	]
}

ملاحظة: يجب أن تكون نقاط البداية والنهاية لكل قطعة خط متطابقة لتكوين شكل مغلق.

شكل يتكون من قطعة خط واحدة

{
  type: "Polygon",
  coordinates: [
  		[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] // نقاط الإحداثيات لقطعة الخط، لاحظ أن أول نقطة وآخر نقطة متطابقتان.
	]
}

شكل يتكون من عدة قطع خط

{
  type : "Polygon",
  coordinates : [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // قطعة خط 1
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]  // قطعة خط 2
  ]
}

فهرس المواقع الجغرافية

يدعم MongoDB نوعين من فهارس المواقع الجغرافية لتسريع استعلام بيانات GeoJSON.

2dsphere

هذا نوع فهرس هندسة كروية، وهذا يعني عند حساب المسافة بين نقطتين، فإن 2dsphere يعتبر الأرض ككرة.

مثال على إنشاء فهرس 2dsphere:

db.collection.createIndex( { location : "2dsphere" } )

ينشئ فهرسًا لحقل الموقع.

2d

هو نوع من أنواع الهندسة المستوية المستخدمة لحساب المسافة بين نقطتين كما لو كانتا على مستوى. مثال على إنشاء فهرس 2D:

db.collection.createIndex( { location : "2d" } )

ينشئ فهرسًا لحقل الموقع.

أنواع استعلام المواقع الجغرافية

استعلامات المواقع الجغرافية مرتبطة جميعًا بحسابات هندسية. فيما يلي أنواع الاستعلامات المدعومة من قبل MongoDB:

  • $geoIntersects - تستخدم لإيجاد المستندات التي تتقاطع مع شكل هندسي محدد.
  • $geoWithin - توافق المستندات الموجودة داخل منطقة هندسية محددة.
  • $near - تُستخدم عادةً للاستعلام عن المستندات الأقرب إلى نقطة إحداثيات محددة.

ملاحظة: لمزيد من المعلومات حول استعلامات المواقع الجغرافية، يرجى الرجوع إلى الفصول التالية.