尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證مسح السايت — أداة ميدانية لتحليل موقع الرصافة القديمة (بين جسر الشهداء وجسر الأحرار)
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
أداة ميدانية لتحليل الموقع بين جسر الشهداء وجسر الأحرار (بغداد): توثيق المباني والدرابين والمسارات بالـ GPS والصور، مع طبقة مباني الحفاظ.檢視完整 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 اليومية).