尚未检测到更新。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 اليومية).