أنواع البيانات المكانية
النقاط والخطوط والمضلعات في SQL
أنواع البيانات المكانية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
ما المقصود بالبيانات المكانية؟
تصف البيانات المكانية المواقع والأشكال والمساحات في العالم الحقيقي. وبخلاف الرقم أو السلسلة النصية العاديين، تحمل القيمة المكانية دلالة هندسية — كنقطة على خريطة، أو مقطع طريق، أو حدود دولة.
PostGIS هو امتداد لـ PostgreSQL يضيف أنواع بيانات ودوال مكانية قوية، فيحوّل قاعدة بياناتكم إلى نظام معلومات جغرافية (GIS) متكامل.
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;نوع GEOMETRY
النوع المكاني الأساسي في PostGIS هو geometry. وهو يخزّن الأشكال في فضاء إحداثيات مسطح (إقليدي). ويمكنكم تحديد نوع فرعي مثل POINT أو LINESTRING أو POLYGON كقيد عند إنشاء عمود.
يخبر تحديد SRID (معرّف المرجع المكاني) إلى جانب النوع الفرعي PostGIS بنظام الإحداثيات الذي تستخدمه بياناتكم.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);إدراج POINT
يمثل POINT موقعًا واحدًا بإحداثيي X (خط الطول) وY (خط العرض). وتحول الدالة ST_GeomFromText سلسلة نصية بتنسيق Well-Known Text (WKT) إلى قيمة هندسية.
يمثل SRID 4326 نظام الإحداثيات WGS 84 المستخدم في أجهزة GPS حول العالم.
INSERT INTO locations (name, geom)
VALUES
('Eiffel Tower', ST_GeomFromText('POINT(2.2945 48.8584)', 4326)),
('Big Ben', ST_GeomFromText('POINT(-0.1246 51.5007)', 4326)),
('Colosseum', ST_GeomFromText('POINT(12.4922 41.8902)', 4326));
SELECT name, ST_AsText(geom) AS wkt FROM locations;نوع LINESTRING
يمثل LINESTRING تسلسلًا مرتبًا من نقطتين أو أكثر متصلة بمقاطع مستقيمة. وهو مناسب لتمثيل الطرق والأنهار وأي معلم خطي.
يمثل كل زوج من الأرقام في WKT رأسًا واحدًا (خط الطول وخط العرض). ويخزّن PostGIS المسار كاملًا كقيمة هندسية واحدة.
CREATE TABLE roads (
id SERIAL PRIMARY KEY,
name TEXT,
path geometry(LINESTRING, 4326)
);
INSERT INTO roads (name, path)
VALUES (
'High Street',
ST_GeomFromText(
'LINESTRING(-0.125 51.500, -0.120 51.502, -0.115 51.505)',
4326
)
);
SELECT name, ST_Length(path) AS length_degrees FROM roads;نوع POLYGON
يعرّف POLYGON مساحة مغلقة. وحدّه الخارجي عبارة عن حلقة — أي LINESTRING مغلق تكون فيه النقطتان الأولى والأخيرة متطابقتين. ويمكن أن يحتوي المضلع أيضًا على حلقات داخلية (ثقوب) لتمثيل مساحات مثل بحيرة داخل متنزه.
يجب إغلاق جميع الحلقات: كرروا الإحداثي الابتدائي في النهاية.
CREATE TABLE zones (
id SERIAL PRIMARY KEY,
name TEXT,
area geometry(POLYGON, 4326)
);
INSERT INTO zones (name, area)
VALUES (
'Central Park Approx',
ST_GeomFromText(
'POLYGON((-73.9817 40.7681, -73.9580 40.7681,
-73.9580 40.7964, -73.9817 40.7964,
-73.9817 40.7681))',
4326
)
);
SELECT name, ST_Area(area) AS area_sq_deg FROM zones;GEOGRAPHY أم GEOMETRY
يوفر PostGIS عائلتين من الأنواع المكانية: يستخدم geometry مستوى ديكارتيًا مسطحًا، بينما يمثّل geography الأرض على هيئة إهليلج منحني.
استخدموا geography عندما تحتاجون إلى مسافات دقيقة في العالم الحقيقي بالمتر عبر مناطق واسعة. واستخدموا geometry عند العمل ضمن نظام إحداثيات مسقط محلي أو عند الحاجة إلى أقصى أداء.
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name TEXT,
geog geography(POINT, 4326)
);
INSERT INTO cities (name, geog) VALUES
('New York', ST_GeogFromText('POINT(-74.0060 40.7128)')),
('London', ST_GeogFromText('POINT(-0.1278 51.5074)'));
-- Distance in metres using geography
SELECT
a.name AS from_city,
b.name AS to_city,
ROUND(ST_Distance(a.geog, b.geog)::NUMERIC) AS distance_m
FROM cities a, cities b
WHERE a.name = 'New York' AND b.name = 'London';Well-Known Text (WKT) وWKB
يمكن تمثيل البيانات المكانية بتنسيقين قياسيين. تنسيق Well-Known Text (WKT) مقروء للبشر: POINT(2.29 48.86). أما Well-Known Binary (WKB) فهو تمثيل ثنائي مضغوط يُستخدم داخليًا ولنقل البيانات.
يوفر PostGIS الدالتين ST_AsText وST_AsBinary للتحويل بين التخزين الداخلي وهذين التنسيقين.
SELECT
name,
ST_AsText(geom) AS wkt,
ST_AsEWKT(geom) AS ewkt,
encode(ST_AsBinary(geom), 'hex') AS wkb_hex
FROM locations
LIMIT 2;MULTIPOINT وMULTILINESTRING وMULTIPOLYGON
يدعم PostGIS أيضًا أنواع multi-geometry التي تجمع عدة أشكال من النوع نفسه في قيمة واحدة. ويفيد ذلك عندما يتكوّن معلم واحد في العالم الحقيقي من أجزاء منفصلة — مثل أرخبيل ممثل على هيئة MULTIPOLYGON.
تعمل جميع الدوال المكانية القياسية بالطريقة نفسها مع الأشكال المتعددة.
SELECT ST_AsText(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS multi_poly;
SELECT ST_NumGeometries(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS part_count;GEOMETRYCOLLECTION
يُعد GEOMETRYCOLLECTION أكثر الأنواع المكانية عمومية — إذ يمكنه احتواء مزيج من النقاط والخطوط والمضلعات في قيمة واحدة. وتفيد هذه المرونة عندما قد تحتوي مجموعة البيانات على أنواع هندسية غير متجانسة مخزنة في العمود نفسه.
يمكنكم استخراج الأعضاء الفردية باستخدام ST_GeometryN.
SELECT ST_AsText(
ST_GeomFromText(
'GEOMETRYCOLLECTION(
POINT(1 1),
LINESTRING(0 0, 1 1, 2 2),
POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))
)'
)
) AS collection;
SELECT ST_AsText(
ST_GeometryN(
ST_GeomFromText(
'GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 1 1))'
),
1
)
) AS first_member;الفهارس المكانية باستخدام GIST
يجب على الاستعلامات المكانية التي تتحقق من الاحتواء أو القرب مقارنة هندسة كل صف — مما قد يؤدي إلى فحص ملايين الأشكال. ويسرّع فهرس GIST ذلك بدرجة كبيرة من خلال فهرسة المربعات المحيطة بالهندسات، مما يسمح لـ PostgreSQL بتجاوز الصفوف التي لا يمكن أن تطابق إطلاقًا.
أنشئوا دائمًا فهرس GIST على أعمدة geometry أو geography التي تستعلمون عنها باستمرار.
-- Create a GIST index on a geometry column
CREATE INDEX idx_locations_geom
ON locations
USING GIST (geom);
-- PostgreSQL will now use the index for spatial operators
EXPLAIN ANALYZE
SELECT name
FROM locations
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(2.3 48.9)', 4326),
1.0
);قراءة خصائص geometry
يوفر PostGIS دوال وصول لاستخراج الخصائص من أي هندسة. وتُرجع ST_X وST_Y إحداثيات النقطة، وتُرجع ST_SRID معرّف المرجع المكاني، بينما تُرجع ST_GeometryType اسم النوع الفرعي.
تُعد هذه الدوال أساسية لفحص البيانات المكانية والتحقق من صحتها.
SELECT
name,
ST_X(geom) AS longitude,
ST_Y(geom) AS latitude,
ST_SRID(geom) AS srid,
ST_GeometryType(geom) AS geom_type,
ST_IsValid(geom) AS is_valid
FROM locations;تحقق سريع
اختبروا مدى فهمكم لأنواع البيانات المكانية في PostGIS.
مراجعة الدرس
استكشفتم في هذا الدرس أنواع البيانات المكانية الأساسية التي يوفرها PostGIS. وتعلمتم أن POINT وLINESTRING وPOLYGON هي الأنواع الفرعية الأساسية الثلاثة لـ geometry، وأن الأشكال المتعددة (MULTIPOINT وMULTILINESTRING وMULTIPOLYGON) وGEOMETRYCOLLECTION الشامل تغطي الأشكال الأكثر تعقيدًا.
ورأيتم الفرق بين النوع المسطح geometry والنوع الإهليلجي geography، وكيفية الاختيار بينهما. ويتيح Well-Known Text (WKT) قراءة القيم المكانية وكتابتها كسلاسل نصية مقروءة للبشر، بينما تحافظ فهارس GIST على سرعة الاستعلامات المكانية على نطاق واسع. وتتيح دوال الوصول مثل ST_X وST_SRID وST_GeometryType فحص أي قيمة هندسية مباشرةً في SQL.
الأسئلة الشائعة
هل درس «أنواع البيانات المكانية» مجاني؟
نعم — نص درس «أنواع البيانات المكانية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنواع البيانات المكانية»؟
النقاط والخطوط والمضلعات في SQL تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أنواع البيانات المكانية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أنواع البيانات المكانية
- المسافة وأقرب الجيران
- الربط المكاني والاحتواء
- الفهارس المكانية (GiST)