راهنمای API تایل‌های Bing سرویس می‌مپس

دسترسی سریع و پایدار به تایل‌های Bing Maps با کش خودکار و محدودیت جغرافیایی ایران

دسترسی به تایل‌های Bing از طریق می‌مپس

سرویس می‌مپس تایل‌های Bing Maps را با کش خودکار و محدودیت جغرافیایی به ایران ارائه می‌دهد

چرا API Bing می‌مپس؟
  • 🇮🇷 محدود به ایران: تایل‌ها فقط برای محدوده ایران از Bing دریافت می‌شوند؛ خارج از ایران تایل سفید بدون درخواست به سرور
  • سرعت با کش: تایل‌های یک‌بار دریافت‌شده در کش ذخیره و در درخواست‌های بعدی از سرور داخلی سرو می‌شوند
  • 📦 کاهش درخواست به Bing: پس از کش شدن، دیگر نیازی به درخواست به سرورهای Bing نیست
  • 🔒 کلید اختیاری: می‌توانید با تنظیم BING_MAPS_KEY از Bing Maps Portal استفاده رسمی کنید
مزایای سرویس
  • سرور داخل کشور: سرو تایل از اینترنت داخلی
  • کش خودکار: ذخیره تایل‌ها و بازگردانی در درخواست‌های بعدی
  • لایه‌های جاده، ماهواره و ترکیبی: سازگار با استاندارد XYZ
  • پشتیبانی CORS: استفاده مستقیم از مرورگر و فریمورک‌های وب

ویژگی‌های کلیدی

کش، محدودیت ایران و سازگاری با کتابخانه‌های نقشه

⚡ کش و سرعت

تایل‌های داخل ایران یک‌بار از Bing دریافت و در کش ذخیره می‌شوند. درخواست‌های بعدی همان تایل از کش پاسخ داده می‌شوند و به Bing ارسال نمی‌شوند.

🇮🇷 محدودیت ایران

فقط تایل‌هایی که با محدوده جغرافیایی ایران تلاقی دارند از Bing گرفته می‌شوند. برای نواحی خارج از ایران یک تایل کاملاً سفید برگردانده می‌شود و هیچ درخواستی به Bing ارسال نمی‌شود.

🗺️ لایه‌های Bing

سه لایه در دسترس: road (نقشه جاده)، aerial (ماهواره)، hybrid (ترکیب ماهواره و برچسب‌ها). زوم از ۱ تا ۲۳.

💡 سازگاری

URL به صورت استاندارد XYZ ({z}/{x}/{y}) است و با Leaflet، OpenLayers و سایر کتابخانه‌های نقشه سازگار است.

نقطه پایانی API

آدرس و پارامترهای API تایل‌های Bing

نقطه پایانی دریافت تایل
URL:
https://memaps.ir/api/bing/{layer}/{z}/{x}/{y}.{ext}

Method:
GET

Content-Type:
image/png (لایه road) یا image/jpeg (لایه‌های aerial و hybrid)
پارامترهای URL:
پارامتر توضیح مثال
{layer} نوع لایه: road، aerial، hybrid road
{z} سطح زوم (۱ تا ۲۳) 10
{x} مختصات X تایل 512
{y} مختصات Y تایل 512
{ext} پسوند: png (برای road) یا jpg/jpeg (برای aerial و hybrid) png / jpg
مثال‌های URL:
// نقشه جاده
GET https://memaps.ir/api/bing/road/10/512/512.png

// ماهواره
GET https://memaps.ir/api/bing/aerial/10/512/512.jpg

// ترکیبی
GET https://memaps.ir/api/bing/hybrid/15/16384/16384.jpg

انواع لایه‌های Bing

سه لایه در دسترس با پسوند مناسب

🛣️ جاده (Road)

نقشه جاده با نام خیابان‌ها و مکان‌ها. پسوند: .png

.../bing/road/{z}/{x}/{y}.png
🛰️ ماهواره (Aerial)

تصاویر ماهواره‌ای. پسوند: .jpg

.../bing/aerial/{z}/{x}/{y}.jpg
🌐 ترکیبی (Hybrid)

ماهواره به همراه برچسب و نام مکان‌ها. پسوند: .jpg

.../bing/hybrid/{z}/{x}/{y}.jpg
🇮🇷 محدودیت جغرافیایی به ایران

سرویس تایل Bing می‌مپس فقط برای محدوده ایران از سرورهای Bing درخواست می‌زند:

  • اگر تایل با مرزهای ایران (تقریبی) تلاقی داشته باشد: از کش خوانده می‌شود یا در صورت نبود از Bing دریافت، کش و برگردانده می‌شود.
  • اگر تایل خارج از ایران باشد: یک تایل کاملاً سفید (۲۵۶×۲۵۶ پیکسل) برگردانده می‌شود و هیچ درخواستی به سرورهای Bing ارسال نمی‌شود.
این محدودیت باعث کاهش مصرف پهنای باند و رعایت استفاده معقول از سرویس Bing می‌شود و برای نقشه‌های متمرکز بر ایران کافی است.

مثال‌های عملی

استفاده با Leaflet و OpenLayers

Leaflet - نقشه جاده
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet"
          href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
</head>
<body>
    <div id="map" style="height: 400px;"></div>
    <script>
        var map = L.map('map').setView([35.6892, 51.3890], 10);

        L.tileLayer('https://memaps.ir/api/bing/road/{z}/{x}/{y}.png', {
            attribution: '© Bing via Memaps.ir',
            maxZoom: 23
        }).addTo(map);
    </script>
</body>
</html>
Leaflet - ماهواره و ترکیبی
var map = L.map('map').setView([35.6892, 51.3890], 10);

var roadLayer = L.tileLayer(
    'https://memaps.ir/api/bing/road/{z}/{x}/{y}.png',
    { attribution: '© Bing via Memaps.ir', maxZoom: 23 }
);
var aerialLayer = L.tileLayer(
    'https://memaps.ir/api/bing/aerial/{z}/{x}/{y}.jpg',
    { attribution: '© Bing via Memaps.ir', maxZoom: 23 }
);
var hybridLayer = L.tileLayer(
    'https://memaps.ir/api/bing/hybrid/{z}/{x}/{y}.jpg',
    { attribution: '© Bing via Memaps.ir', maxZoom: 23 }
);

roadLayer.addTo(map);
L.control.layers({
    'جاده': roadLayer,
    'ماهواره': aerialLayer,
    'ترکیبی': hybridLayer
}).addTo(map);
OpenLayers - Bing جاده
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet"
          href="https://cdn.jsdelivr.net/npm/ol@v7.4.0/ol.css">
    <script src="https://cdn.jsdelivr.net/npm/ol@v7.4.0/dist/ol.js"></script>
</head>
<body>
    <div id="map" style="height: 400px;"></div>
    <script>
        var layer = new ol.layer.Tile({
            source: new ol.source.XYZ({
                url: 'https://memaps.ir/api/bing/road/{z}/{x}/{y}.png',
                crossOrigin: 'anonymous'
            })
        });
        var map = new ol.Map({
            target: 'map',
            layers: [layer],
            view: new ol.View({
                center: ol.proj.fromLonLat([51.3890, 35.6892]),
                zoom: 10
            })
        });
    </script>
</body>
</html>
JavaScript - دریافت مستقیم
async function getBingTile(layer, z, x, y, ext) {
    ext = ext || (layer === 'road' ? 'png' : 'jpg');
    const url = `https://memaps.ir/api/bing/${layer}/${z}/${x}/${y}.${ext}`;
    const response = await fetch(url);
    if (response.ok) return await response.blob();
    return null;
}

getBingTile('road', 10, 512, 512);      // PNG
getBingTile('aerial', 10, 512, 512);    // JPG

سیستم کش خودکار

کش تایل‌های داخل ایران؛ درخواست‌های بعدی بدون تماس با Bing

نحوه کار

  1. بررسی محدوده ایران: اگر تایل خارج از ایران باشد، بلافاصله تایل سفید برگردانده می‌شود (بدون درخواست به Bing).
  2. بررسی کش: اگر تایل داخل ایران است، ابتدا وجود آن در کش بررسی می‌شود.
  3. بازگشت از کش: در صورت وجود در کش، همان فایل به کاربر برگردانده می‌شود.
  4. دریافت از Bing: در صورت نبود در کش، تایل از Bing دریافت، در کش ذخیره و به کاربر برگردانده می‌شود.
اطلاعات کش:
GET https://memaps.ir/api/bing/cache/info
خروجی شامل حجم کش، تعداد فایل و مسیر دایرکتوری کش است.
پشتیبانی از CORS

API تایل‌های Bing می‌مپس از CORS پشتیبانی می‌کند و می‌توانید مستقیماً از مرورگر استفاده کنید:

const img = document.createElement('img');
img.src = 'https://memaps.ir/api/bing/road/10/512/512.png';
img.crossOrigin = 'anonymous';
document.body.appendChild(img);