pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
Translation pending
Field tool for site analysis: documenting buildings, tunnels, and routes with GPS and a heritage building layer — between the Freedom Bridge and the Martyrs Bridge, Baghdad.
AI translation
أداة ميدانية لتحليل الموقع: توثيق المباني والدرابين والمسارات مع GPS وطبقة مباني الحفاظ — بين جسر الأحرار وجسر الشهداء، بغداد.
DataJavaScript · PythonGitHub @mhmdTaqi-codeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
مسح السايت — أداة ميدانية لتحليل موقع الرصافة القديمة (بين جسر الشهداء وجسر الأحرار)
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
أداة ميدانية لتحليل الموقع بين جسر الشهداء وجسر الأحرار (بغداد): توثيق المباني والدرابين والمسارات بالـ GPS والصور، مع طبقة مباني الحفاظ.Read the full README ↗
أداة ميدانية لتحليل الموقع بين جسر الشهداء وجسر الأحرار (بغداد): توثيق المباني والدرابين والمسارات بالـ GPS والصور، مع طبقة مباني الحفاظ.
index.html, app.js, app.css — التطبيق (Leaflet + Geoman + Turf + JSZip، بدون build)data/heritage.geojson, data/buildings.geojson — كل مبنى بحدوده من رسم المخطط (138 مبنى حفاظ + 868 مبنى، الحوش فراغ داخلي)data/streets.geojson — شبكة الشوارع والدرابين: مساحة الشارع + محاور بالعرض والنوع والاسم (من OSM)tools/vectorize_plan.py — يولّد الطبقات أعلاه من data/plan.webp، والإسقاط الجغرافي من tools/fit.json (معايرة على بصمات المباني والصورة الجوية). نتيجة الفحص: tools/check_vectorize.pngdata/cad_*.geojson, data/context_buildings.geojson — من ملف CADMapper (DXF): مباني المحيط بارتفاعاتها، حواف الشوارع، النهر، الكنتور. التحويل tools/dxf_to_geojson.py (كتبه gpt-6-astra عبر Codex)، والإسقاط tools/cad_georef.json (مطابقة 91% مع مباني OSM)، والدمج tools/attach_cad.py. ارتفاع 3.0 م بملف CADMapper قيمة افتراضية = غير معروف.data/plan.webp + plan_corners.json — المخطط الأصلي كطبقة فوق الصورة الجويةdata/landmarks.geojson — معالم من OpenStreetMap (ODbL)البيانات الميدانية تنحفظ على جهاز كل شخص (IndexedDB) وتتزامن تلقائياً مع سحابة الفريق. ملفات ZIP للتصدير الاحتياطي ونقل البيانات عند الحاجة، وليست مطلوبة حتى تظهر الصور على جهاز ثانٍ.
ترتيب توليد البيانات: vectorize_plan.py ← dxf_to_geojson.py ← attach_cad.py ← enrich_buildings.py ← heritage_points.py ← pack_data.py ← build_places.py tools/places_osm.json tools/places_kb.json tools/places_extra.json (يطلّع ملفات data/*.json المضغوطة اللي يقراها الموقع). بعد أي تغيير بالبيانات أو الكود ارفع الرقم VERSION بـ sw.js و DATA_VERSION بـ app.js و ?v= بـ index.html.
الأداء والكاش: Service Worker يخزّن الموقع والبيانات والمكتبات (يفتح فوراً ويشتغل بدون نت، ويتحدّث بالخلفية)، وصور القمر الصناعي تنخزن لحد 4000 مربع.
تفاصيل المباني والأماكن: enrich_buildings.py يعطي كل مبنى: الاسم/الصنف من OSM إن وجد، الشارع اللي يطل عليه وعرضه، أقرب معلم، رقم البلوك، المحيط. data/places.json = 122 مكان (مواقع OSM) + وصف تاريخي وعلاقة بالسايت من tools/places_kb.json (كتبه gpt-6-astra، مع تصحيحات موثّقة بحقل corrections) + 7 محاور ربط ومثلث المتنبي. أوصاف الأماكن غير مدققة بالكامل — راجعوها قبل التقرير.
الوضعين:
data/heritage_points.json، نقطة لكل مجموعة مباني حفاظ ملتصقة، بدون حدود) + اللي يرسمه ويصوّره الفريق. حدود المبنى ترسم بالموقع من بطاقة النقطة («ارسم حدود المبنى») وتنحفظ كمضلع رصد مرتبط بالنقطة.الصور: تنحفظ بالتلفون نفسه (IndexedDB)، وترتفع تلقائياً إلى Google Drive بجودة أصلية أو مضغوطة حسب اختيار الراصد. المعاينات المصغّرة تنتقل أولاً حتى تظهر الصور بسرعة على بقية الأجهزة. واجهة الموقع ملفات ثابتة على GitHub Pages؛ «المزيد» يبين عدد الصور، المساحة، وحالة المزامنة.
مواقع الفريق (👥): كل واحد يختار يشارك موقعه. المواقع تنتقل عبر خوادم MQTT عامة مجانية (shiftr.io على 443، test.mosquitto.org، EMQX، HiveMQ — يتصل بالكل سوا حتى إذا شبكة سدّت منفذ يشتغل غيره) ومشفّرة من التلفون للتلفون (AES-GCM بمفتاح مشتق من كود السايت الثابت، PBKDF2). ماكو كروبات ولا أكواد ولا روابط انضمام: كل واحد يفتح الموقع يكون ويه الفريق ويشوف صور السايت كلها ويضيف ويحذف. سكربت Google يحمل نسخة احتياطية من المواقع (بالذاكرة المؤقتة، بدون قفل) إذا وكعت الخوادم العامة. الخادم ما يشوف غير topic مشفّر ونص مشفّر. لمن توقف المشاركة ينمسح موقعك من الخوادم، ولو انقطع التلفون فجأة الفريق يشوف «انقطع». المشاركة تشتغل والتطبيق مفتوح بس (قيود المتصفح).
المزامنة السحابية (☁️ Google Drive): cloud/Code.gs سكربت Google Apps Script ينحط بحساب Google مالك (مجاني) وينشر كـ Web app. الصور تنرفع لمجلد «مسح السايت» بـ Drive (كل مبنى بمجلد) والسجلات لجدول Google Sheets، وكل تلفون يسحب شغل الباقين (الأحدث يغلب، والحذف ينتقل). السكربت مفتوح للموقع (OPEN_ACCESS)، والتطبيق يستعمل سحابة السايت بس (TEAM_CLOUD_URL). الصور ما تنقرا إلا عبر السكربت. السعة = مساحة Drive حساب صاحب السكربت. الصور تنضغط قبل الرفع (WebP 1600px ≈ 0.2–0.4 MB بدل 3–5 MB).
المزامنة التلقائية: كل حفظ أو استيراد (ZIP/GeoJSON) يتزامن بنفسه، بدون زر. كل مزامنة تبدي بالأشياء الصغيرة: حذف الصور ← الصور المصغّرة ← السجلات ← سحب شغل الباقين، وبعدها ترفع الصور الأصلية وحدة وحدة. أثناء رفع الأصليات يتكرر الدفع والسحب كل دقيقة (وفوراً إذا انحفظ شي جديد)، فالفريق يشوف الشغل والمعاينات قبل ما يخلص رفع الأصليات. الصورة اللي يفشل رفعها تنعاد بعد 2، 4، 8… لحد 60 دقيقة وما تنترك أبداً، والحالة ما تكتب «✓ متزامن» إذا بقت صورة أو صورة مصغّرة أو سجل ما ارتفع. الشغل اللي انحفظ قبل أول مزامنة مع هالسحابة (نسخة قديمة من التطبيق بدون سحابة، أو استيراد) ينضاف للطابور مرة وحدة لكل سحابة وكل مسح (epoch): إذا الجهاز ما سحب من السحابة أبداً ينضاف كل سجل عليه مع الحذوفات، وإلا بس السجلات اللي بيها صور انحفظت على هذا الجهاز (فسجلات الفريق المنزّلة ما تنرفع من جديد). الطابور ما يغيّر حذف معلّق، والسجل يرتفع بتاريخ تعديله الأصلي، فإذا بالسحابة نسخة أحدث تبقى هي وتكسب الصور بس. الاستيراد ما يرجّع صورة أو عنصر محذوف.
الاختبارات: node --test tests/sync.test.js — يشغّل app.js الحقيقي بـ Node مع قاعدة بيانات بالذاكرة وسكربت سحابة وهمي بنفس قواعد cloud/Code.gs (بدون نت ولا مكتبات).
اختبار الحمل: 7 أشخاص يمشون سوا بالدرابين 150 ثانية → وصل 100% من المواقع، التأخير ≈ 0.1 ث؛ و20 شخص → 100% ونفس التأخير. 50 تلفون سوا على السكربت الحقيقي (2026-10-17): كل واحد يرسل موقعه كل ~12 ث عبر Google ويزامن كل دقيقة، 25 منهم يرفعون صورة 2–3 MB وسجل بنفس الوقت، و10 زوّار جدد يسحبون كل شي → 1192 طلب، صفر أخطاء، 25/25 صورة، 50/50 موقع؛ الموقع p95 1.8 ث، الصورة المصغّرة p50 2.6 ث، رفع الصورة ≈ 20 ث.
حتى يتحمل 50 شخص: المزامنة تقرا بس الصفوف اللي تغيّرت (عمود وقت المزامنة أولاً)، وأول مزامنة لتلفون جديد تجي بدون صور مصغّرة وتنسحب المصغّرات بدفعات 50 (thumbs، مخزّنة بالذاكرة المؤقتة للسكربت). القفل يغطي كتابة الصفوف بس (حذف الملفات بعد القفل، والمصغّرات والمواقع بدون قفل). أي خطأ مؤقت (قفل، ضغط على Google — رسائله بلغة صاحب السكربت) يرجع busy: true وما ينحسب على الصورة، والتلفون يعيد بعد تأخير عشوائي حتى ما يعيدون كلهم بنفس الثانية. معرّفات المجلدات تنقرا عبر الذاكرة المؤقتة (حصة Properties اليومية).