آخر تحديث: 2026-11-04

GeoParquet vs. GeoJSON: Which GIS Format Is Best for Large Datasets?

GeoParquet مقابل GeoJSON: أي تنسيق GIS أفضل للمجموعات الكبيرة من البيانات؟

إذا سبق لك محاولة فتح ملف GeoJSON بحجم 2 جيجابايت في QGIS أو تحميل ملف حدود مضلع يحتوي على ملايين الصفوف إلى خريطة تفاعلية، فأنت بالفعل تعرف الشعور المتدني لشاشة متجمدة وتعطل بسبب نفاد الذاكرة.

لأكثر من عقد من الزمن، كان GeoJSON هو اللغة المشتركة العالمية لرسم الخرائط على الويب. إنه شفاف، سهل القراءة للبشر، ومدعوم مباشرةً من قبل تقريبًا كل مكتبة رسم خرائط ويب وواجهة برمجة تطبيقات REST على الإنترنت.

مع ذلك، تبدو سير عمل نظم المعلومات الجغرافية الحديثة مختلفة جذريًا عما كانت عليه في عام 2008. اليوم، يتعامل المتخصصون في الجغرافيا المكانية بانتظام مع جيغابايت (أو تيرابايت) من بيانات تتبع حركة إنترنت الأشياء، ومخططات مباني على مستوى الدولة، وأقنعة تقسيم مستخرجة من الأقمار الصناعية، وشبكات مناخية عالية التردد.

عند تطبيقه على مجموعات بيانات بهذا الحجم، لا يبطئ GeoJSON فحسب—بل يخلق اختناقات كاملة في بنى البيانات.

نقدم GeoParquet، امتداد جغرافي مفتوح ومُعيَّر لـ Apache Parquet تحت حاضنات اتحاد الجغرافيا المفتوح (OGC).

في هذا الدليل الشامل، نقارن بين GeoParquet و GeoJSON من حيث الهندسة المعمارية، كفاءة التخزين، معدل القراءة/الكتابة، جاهزية السحابة، وراحة المطورين للإجابة على سؤال حاسم: أي تنسيق يجب أن تختاره للمجموعات الكبيرة من البيانات؟


1. الهندسة الهيكلية: النص مقابل العمود الثنائي

لفهم لماذا تعمل هذه الصيغ بشكل مختلف على نطاق واسع، عليك النظر تحت الغطاء إلى كيفية تمثيل كل منها لقيم الإحداثيات والبيانات الوصفية الجدولية.

+--------------------------------------------------------------+
| مقياس التقييم |
| **تنسيق البيانات** |
| **تمثيل الهندسة** |
| **نسبة الضغط** |
| **إسقاط العمود** |
+--------------------------------------------------------------+
                               VS
+--------------------------------------------------------------+
| **دفع المتنبئ المكاني** |
| **تخزين سحابي كائن (S3/GCS)** |
| **قابلية القراءة البشرية** |
| **دعم المتصفح الويب** |
| **الهيئة المعيارية** |
+--------------------------------------------------------------+

GeoJSON: موجه حسب الصفوف، JSON مشفر كنص

يمثل GeoJSON البيانات كمصفوفة من كائنات JSON. كل ميزة على حدة تكرر صراحةً مفاتيح السمات إلى جانب مصفوفة من الأعداد العشرية المشفرة كسلاسل نصية:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": { "county": "Travis", "state": "TX", "pop_density": 1845.2 },
      "geometry": {
        "type": "Point",
        "coordinates": [-97.74306, 30.26715]
      }
    }
  ]
}

نظرًا لأن GeoJSON يعتمد على النص:

  • مخططات متكررة: أسماء الحقول مثل "properties"، "type"، و "coordinates" تتكرر ملايين المرات، مما يزيد من حجم الملف الخام.
  • تحويل مكلف من نص إلى عدد عائم: يجب على وحدة المعالجة المركزية تحليل أحرف النص ("-", "9", "7", ".", "7"...) إلى أعداد عائمة بدقة مزدوجة 64‑بت وفق معيار IEEE قبل تنفيذ أي عملية مكانية.
  • متطلبات قراءة أحادية: يجب على محللات JSON القياسية استيعاب الملف بالكامل في الذاكرة لإنشاء نموذج كائن المستند (DOM). قراءة سمة واحدة تتطلب تحليل كل ميزة على حدة.

GeoParquet: موجه حسب الأعمدة، بيانات مشفرة ثنائيًا

يبني GeoParquet مباشرةً على Apache Parquet، حيث يخزن الجداول المكانية عمودًا بعمود بدلاً من صف بصف.

السمات مثل county تُخزن في كتل متجاورة، مما يسمح بتقنيات ضغط متقدمة مثل ترميز الطول المتسلسل (RLE)، وتعبئة البتات، وضغط القاموس. تُعتمد بيانات الهندسة بصيغة Well-Known Binary (WKB)، مصحوبة ببيانات تعريف JSON مدمجة توضح أنظمة الإسناد المكاني (CRS)، ومربعات الإحاطة، وأنواع الهندسة.

نظرًا لأن GeoParquet ثنائي وعمودي:

  • صفر تكلفة تحليل الإحداثيات: تُخزن الهندسات مباشرةً بصيغة ثنائية، متجاوزةً عمليات التحويل المكلفة من السلسلة إلى عدد عشري.
  • دفع الإسقاط إلى الأسفل: إذا كان سير العمل اللاحق يحتاج فقط إلى أعمدة county و pop_density، فإن القارئ يجلب فقط إزاحات البايت تلك من القرص أو S3، متجاوزًا تمامًا عمود الهندسة.
  • تقسيم مجموعات الصفوف: تقسم ملفات Parquet السجلات إلى “Row Groups” مستقلة (غالبًا من 100,000 إلى 1,000,000 صف لكل مجموعة) مع إحصاءات الحد الأدنى/الأقصى لكل عمود.

2. مقارنة مباشرة: المقاييس الأساسية

Evaluation MetricGeoJSONGeoParquet
Data FormatPlain-text JSON (UTF-8)Binary columnar (Apache Parquet)
Geometry RepresentationNested arrays of coordinate stringsStandardized Well-Known Binary (WKB)
Compression RatioPoor (requires gzip/bzip2 to reduce)Exceptional (native Zstd, Snappy, Gzip)
Column Projection❌ No (entire record must be parsed)✅ Yes (fetch only the columns you need)
Spatial Predicate Pushdown❌ No (requires full scan)✅ Yes (using bounding box metadata)
Cloud Object Storage (S3/GCS)❌ Poor (must download full file)✅ Cloud-native (supports HTTP range requests)
Human Readability✅ Direct viewing in text editors❌ Requires CLI, GIS app, or code
Web Browser SupportNative JavaScript (JSON.parse)Requires WebAssembly (e.g., duckdb-wasm, parquet-wasm)
Standardization BodyIETF (RFC 7946)OGC (Open Geospatial Consortium standard)

3. كفاءة التخزين ومعايير حجم الملفات

عند التوسع من آلاف إلى ملايين السجلات، تتسع الفروقات في التخزين بشكل كبير.

في المعايير القياسية التي تستخدم سجلات مكانية مفتوحة واقعية (مثل مخططات مباني OpenStreetMap، حدود US Census TIGER، وسجلات AIS العالمية للسفن)، يحقق GeoParquet بانتظام تخفيضات في التخزين تتراوح بين 70% إلى 85% مقارنةً بـ GeoJSON الخام، ويتفوق على .geojson.gz بنسبة إضافية تتراوح بين 20% إلى 40%.

لماذا GeoParquet أصغر بكثير؟

  1. ترميز القاموس: يتم فهرسة السمات النصية المتكررة (مثل رموز الولايات، تصنيفات استخدام الأراضي) إلى مؤشرات عددية صغيرة بدلاً من تخزينها بشكل متكرر كسلاسل طويلة.
  2. إحداثيات ثنائية مضغوطة: نقطة ثنائية الأبعاد في GeoJSON تحتاج تقريباً إلى 30 إلى 45 بايت من نص ASCII ([-122.4194155, 37.7749295]). في WKB، يتطلب زوج الإحداثيات نفسه بالضبط 16 بايت.
  3. خوارزميات ضغط حديثة: تقوم Zstandard (Zstd) وSnappy بضغط مصفوفات البايت العمودية بشكل أكثر فعالية بكثير من ما يمكن لضغط Gzip القياسي ضغط النص المتداخل القائم على الصفوف.

4. أداء الاستعلام وسير العمل السحابي الأصلي

العامل الفارق الأكبر للمجموعات البيانات الكبيرة ليس التخزين فقط—إنه زمن استجابة الاستعلام واستخدام الذاكرة.

1. قراءات انتقائية عبر إسقاط الأعمدة

تخيل مجموعة بيانات parcels وطنية بحجم 15 جيجابايت تحتوي على 60 سمة (أسماء المالكين، معرفات الضرائب، تاريخ الصكوك، رموز التخطيط، وحدود متعددة المضلع المعقدة).

  • في GeoJSON: إذا كنت تريد حساب متوسط قيمة العقار المقدرة لكل رمز بريدي، يجب على محرك التحليل الخاص بك تنزيل وتحليل جميع الـ15 جيجابايت، بما في ذلك ملايين رؤوس الحدود المعقدة.
  • في GeoParquet: محركات التحليل مثل DuckDB، Apache Sedona، Polars، أو AWS Athena تقرأ فقط أعمدة zip_code و assessed_value. بدلاً من نقل 15 جيجابايت، يقوم محركك بتنزيل وفحص أقل من 80 ميجابايت.

2. طلبات نطاق HTTP على التخزين السحابي

يعمل GeoParquet بسلاسة كـ تنسيق جغرافي سحابي أصلي.

نظرًا لأن ملفات Parquet تخزن الإزاحات الداخلية والبيانات الوصفية في تذييل الملف، يمكن لمكتبات العميل إصدار طلبات HTTP GET Range: bytes=... إلى مخازن الكائنات السحابية مثل Amazon S3، Google Cloud Storage، أو Azure Blob Storage. بدلاً من تنزيل ملف متعدد الجيجابايت بالكامل، يقرأ العميل التذييل، يحدد الإزاحات الدقيقة للبايت حيث توجد السجلات ذات الصلة، ويقوم بتنزيل فقط الجزئيات المطلوبة.

Client (DuckDB / Python / QGIS)
       │
       ├── 1. Read footer metadata (HTTP Range Request) ───► Cloud Storage (S3 / GCS)
       │                                                              │
       ◄── 2. Returns column offsets & row-group stats ───────────────┘
       │
       ├── 3. Read ONLY requested column chunks & ranges ─────────────►
       │                                                              │
       ◄── 4. Fast binary stream (minimal I/O & egress) ──────────────┘

5. نظام البرمجيات البيئي ودعم الأدوات

تاريخيًا، كان الميزة الأساسية لـ GeoJSON هي دعم الأدوات الشاملة. بينما لا يزال ذلك صحيحًا لبيئات المتصفح، نضج نظام GeoParquet بسرعة:

  • Desktop GIS: دعم القراءة/الكتابة الأصلي في QGIS 3.28+، ArcGIS Pro، و GDAL/OGR 3.5+.
  • Analytical Engines & Languages: قدرات قراءة/كتابة متجهة سريعة عبر Python (GeoPandas, pyarrow)، R (sf)، DuckDB (من خلال الامتداد المكاني)، Apache Sedona، و Snowflake.
  • Big Data Pipelines: تكامل أصلي عبر Apache Spark، Trino، Presto، و Databricks.
  • Client-Side Web Maps: مكتبات WebAssembly خفيفة الوزن (مثل parquet-wasm و duckdb-wasm) تسمح الآن للمتصفحات بالاستعلام عن ملفات GeoParquet مباشرة على أجهزة العميل دون خادم وسيط GIS مخصص.

6. مصفوفة اتخاذ القرار العملية: متى تستخدم أي منها؟

                                Dataset Size & Use Case
                                           │
             ┌─────────────────────────────┴─────────────────────────────┐
             ▼                                                           ▼
     Under 50–100 MB                                              Over 100 MB
(API payloads, simple maps)                                (Data warehousing, big data)
             │                                                           │
             ▼                                                           ▼
      Use **GeoJSON**                                            Use **GeoParquet**
• Direct Mapbox/Leaflet integration                        • High compression ratios
• Human-readable inspection                                • Sub-second analytical queries
• Standard REST API responses                              • Direct S3/GCS HTTP range reads

اختر GeoJSON إذا:

  • مجموعة البيانات الخاصة بك أقل من 50 ميغابايت إلى 100 ميغابايت.
  • أنت تُعيد استجابات حمولة خفيفة من واجهة برمجة تطبيقات REST إلى عملاء الواجهة الأمامية.
  • أنت تبني خرائط ويب خفيفة الوزن باستخدام Leaflet أو MapLibre أو Mapbox GL JS دون طبقات ترجمة وسيطة.
  • أنت بحاجة إلى تحرير يدوي سريع أو فحص في محرر شفرة أو نص قياسي.

اختر GeoParquet إذا:

  • تتجاوز مجموعة البيانات الخاصة بك 100 ميغابايت، أو تحتوي على مئات الآلاف من الميزات المكانية المعقدة.
  • أنت تخزن الأصول المتجهية في تخزين سحابي ككائن (S3، GCS، MinIO، Azure Blob).
  • أنت تقوم بتشغيل تحليلات SQL المكانية، هندسة الميزات، أو خطوط أنابيب التعلم الآلي باستخدام Python أو DuckDB أو Spark أو Databricks.
  • أنت تريد تقليل تكاليف التخزين، تجنب رسوم خروج الشبكة، وإزالة تعطل الذاكرة.

7. مثال على الهجرة: تحويل GeoJSON إلى GeoParquet

تحويل الأصول المكانية الحالية إلى GeoParquet يتطلب فقط بضع أسطر من الشيفرة.

باستخدام بايثون (GeoPandas)

import geopandas as gpd

# 1. Read the legacy GeoJSON file
gdf = gpd.read_file("large_boundaries.geojson")

# 2. Write directly to GeoParquet using modern Zstandard compression
gdf.to_parquet("large_boundaries.parquet", compression="zstd")

باستخدام GDAL / OGR (CLI)

ogr2ogr -f Parquet \
  -oo LCO:COMPRESSION=ZSTD \
  large_boundaries.parquet \
  large_boundaries.geojson

استخدام DuckDB

INSTALL spatial;
LOAD spatial;

-- Direct convert via SQL
COPY (
  SELECT * FROM ST_Read('large_boundaries.geojson')
) TO 'large_boundaries.parquet' 
WITH (FORMAT PARQUET, COMPRESSION 'ZSTD');

8. الملخص: الحكم على مجموعات البيانات الكبيرة

بالنسبة لمجموعات البيانات الصغيرة ونقاط النهاية الويب المباشرة، يظل GeoJSON تنسيقًا موثوقًا وخاليًا من المتاعب.

مع ذلك، بالنسبة لمجموعات البيانات الكبيرة، GeoParquet يتفوق بموضوعية في كل فئة تشغيلية. فهو يقدم بصمات ملفات أصغر، عبء تخزين أقل بشكل كبير، قراءات مكانية شبه فورية، وتكامل أصلي مع مستودعات البيانات السحابية الحديثة.

إذا كانت خطوط أنابيبك الجغرافية تتألم تحت وزن ملفات GeoJSON الضخمة، فإن التحول إلى GeoParquet هو أحد أكثر تحسينات البنية التحتية فعالية التي يمكنك القيام بها.


الأسئلة المتكررة (FAQ)

س1. هل GeoParquet معيار GIS معترف به رسميًا؟ نعم، GeoParquet هو معيار مفتوح رسمي يتم صيانته تحت إشراف اتحاد الجغرافيا المفتوح (OGC).

س2. هل يمكنني عرض ملف GeoParquet مباشرةً في مكتبات رسم الخرائط على الويب مثل Leaflet أو Mapbox GL JS؟ على الرغم من أنه لا يتم تحليله أصلاً مثل GeoJSON، يمكنك عرض GeoParquet في المتصفحات باستخدام حزم WebAssembly مثل parquet-wasm أو عن طريق تحويل الملفات إلى بلاطات متجهية (PMTiles/MVT) عند الاستيعاب.

س3. هل يدعم GeoParquet أنظمة إسناد إحداثيات متعددة (CRS)؟ نعم، على عكس GeoJSON (الذي يقتصر بشكل صارم على WGS 84 / EPSG:4326 وفقًا لـ RFC 7946)، يسمح GeoParquet بتعريفات CRS مخصصة مباشرةً داخل بياناته الوصفية المدمجة.

Q4. كيف يقارن GeoParquet بـ FlatGeobuf لمجموعات البيانات المكانية الكبيرة؟ FlatGeobuf مُحسّن لتدفق الميزات المكانية مباشرة إلى خرائط الويب التفاعلية باستخدام فهرسة R-Tree المكانية، بينما تم تصميم GeoParquet للتحليلات العمودية عالية الأداء، والضغط، وتخزين بحيرات البيانات الضخمة.

Q5. هل يمكنني فتح ملفات GeoParquet داخل برامج GIS المكتبية مثل QGIS؟ نعم، تدعم الإصدارات الحديثة من QGIS (الإصدار 3.28 وما فوق) السحب والإفلات، العرض، وتنسيق ملفات GeoParquet دون الحاجة إلى إضافات طرف ثالث.

انظر أيضًا

تنسيقات ملفات GIS على FileFormat.com

أفضل 5 تنسيقات ملفات GIS لخرائط Google

أخبار تنسيقات الملفات

منتديات تنسيقات الملفات