تطبيقات سطح المكتب (Windows/macOS/Linux)
تطبيقات سطح المكتب (Windows · macOS · Linux)
المسار الرسمي لسطح المكتب هو حزمة الويب من Navvo (@navvo/maps-js): فهي تضمّ محرك العرض GL داخلها، بدون أي اعتماديات تشغيل، ولا تتواصل إلا مع https://navvo.io — لذا فإن أي غلاف سطح مكتب يستضيف عرض ويب (Electron أو Tauri أو WebView2 أو WKWebView) يحصل على المنصة كاملة: الخرائط الأساسية، الدبابيس، GeoJSON، طبقات حركة المرور/الحوادث/الطقس الحية، وكل استدعاءات NavvoServices.
يوجد نموذج Electron مصغّر قابل للتشغيل على docs.navvo.io/sdks (navvo-desktop-sample-0.1.0.tar.gz، مكتفٍ ذاتيًا — حزمة الويب مضمّنة داخله):
tar xzf navvo-desktop-sample-0.1.0.tar.gz && cd navvo-desktop-sample
npm install
# ضع مفتاحك (nvvo_…) في renderer.js → NAVVO_API_KEY
npm start
tiles، search، geocode، routing) — فملف سطح المكتب قابل للفحص مثل ملف الهاتف تمامًا.أساسيات Electron
النموذج ثلاثة ملفات. العملية الرئيسية (نافذة مُحصَّنة):
const { app, BrowserWindow } = require('electron');
app.whenReady().then(() => {
const win = new BrowserWindow({
width: 1280, height: 800,
webPreferences: { contextIsolation: true, nodeIntegration: false, sandbox: true },
});
win.loadFile('index.html');
});
صفحة العرض (ويب عادي — حزمة UMD تعرّف المتغيّر العام NavvoMaps):
<link rel="stylesheet" href="./node_modules/@navvo/maps-js/dist/navvo-maps.css" />
<script src="./node_modules/@navvo/maps-js/dist/navvo-maps.umd.js"></script>
<script>
const map = new NavvoMaps.Map({
container: 'map',
apiKey: 'nvvo_YOUR_KEY',
style: 'standard', // standard | positron | dark | satellite | terrain | 3d
center: [35.9106, 31.9539], // [lng, lat] — عمّان
zoom: 12,
});
map.addControl(new NavvoMaps.NavigationControl(), 'top-right');
const services = new NavvoMaps.NavvoServices({ apiKey: 'nvvo_YOUR_KEY' });
</script>
أحكم إغلاق الصفحة بسياسة CSP لا تسمح إلا بـ Navvo:
<meta http-equiv="Content-Security-Policy" content="
default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';
img-src 'self' data: blob:; connect-src 'self' https://navvo.io;
worker-src 'self' blob:; child-src blob:;" />
حزم التثبيت (electron-builder)
يشحن النموذج إعداد electron-builder جاهزًا (appId: io.navvo.desktop.sample):
npm run dist:win # Windows → مثبّت NSIS (.exe)
npm run dist:mac # macOS → .dmg (وقّع ووثّق للتوزيع)
npm run dist:linux # Linux → AppImage (أضف deb/rpm حسب الحاجة)
يجب بناء إصدارات macOS على macOS؛ أما مثبّتات Windows فيمكن بناؤها من أنظمة أخرى. لا تحتاج الخريطة أي صلاحيات نظام خاصة — فهي محتوى ويب عبر HTTPS فقط.
بديل Tauri (ملفات أصغر)
يعمل نفس index.html + renderer.js دون تغيير في Tauri الذي يستخدم عرض الويب الخاص بنظام التشغيل بدلًا من تضمين Chromium (تطبيقات بحجم ≈ 5–10 م.ب):
-
npm create tauri-app@latest(قالب vanilla) وانسخ الملفين إلىsrc/. - استبدل مسارات
./node_modules/@navvo/maps-js/dist/…بنسخ محلية منnavvo-maps.umd.jsوnavvo-maps.css(كلاهما متاح على docs.navvo.io/sdks). - اسمح بـ
https://navvo.ioفيsrc-tauri/tauri.conf.json← app.security.csp(connect-srcوimg-src). -
npm run tauri build← حزم أصلية.msi/.dmg/.deb/.AppImage.
أي حزمة لأي حالة سطح مكتب؟
| الحالة | استخدم |
|---|---|
| تطبيق سطح مكتب بخريطة ظاهرة | @navvo/maps-js داخل Electron/Tauri (هذا الدليل) |
| تطبيق macOS فقط مع قاعدة شيفرة iOS قائمة | حزمة iOS عبر مصمَّم لـ iPad (راجع دليل iOS) |
| أداة سطح مكتب/سطر أوامر بلا خريطة | حزم الخوادم — Node، Python، Go، Java |
@navvo/maps-js — لا تتعامل إلا مع أصناف Navvo ونقاط نهاية Navvo، ويجب أن يبقى إسناد © Navvo ظاهرًا.