نظرة عامة على "المربّعات الثنائية الأبعاد"

مثال على خارطة الطريقمربّعات الخرائط هو مجرد تقسيم للعالم إلى شبكة مفهرسة. يتيح لك ذلك الوصول إلى بيانات الخريطة واستخدامها بكفاءة وديناميكية على مقاييس خرائط متعددة. تتيح لك واجهة Map Tiles API إمكانية الوصول إلى العديد من مجموعات البيانات الجغرافية الموضوعية، بما في ذلك البيانات التي ينظِّمها محرّك بحث Google:

  • مربعات صور خارطة الطريق بناءً على البيانات الطبوغرافية المتجهة مع تصميم الخرائط من Google.

  • التصوير تقويمي تم التقاطه بواسطة كل من كاميرات الأقمار الصناعية والكاميرات المحمولة لعرض صور من أعلى لأسفل (القدم) للأرض.

  • خرائط محيطة لتظليل التل.

تمت الإشارة إلى جميع مربّعات الخرائط الثنائية الأبعاد ومحاذاتها مع بعضها البعض. يتم اختيارها استنادًا إلى الامتداد الجغرافي لإطار العرض ومستوى التكبير/التصغير. تتراوح مستويات التكبير أو التصغير من صفر (لعرض العالم في مجمله) إلى 22 (لعرض الشوارع والمباني).

مظاهر الخريطة

يمكنك الحصول على مربعات خرائط لمظاهر الخرائط التالية.

مظهر الخريطة الوصف
خارطة الطريق الطرق والمباني ونقاط الاهتمام والحدود السياسية
القمر الصناعي صور فوتوغرافية تم التقاطها من الفضاء
التضاريس خريطة محيطة تعرض السمات الطبيعية، مثل النباتات

لطلب مربّعات الخرائط من API Tiles API، عليك أولاً طلب رمز مميّز للجلسة. يتتبع الرمز المميز للجلسة الحالة الحالية للخريطة وإطار العرض. عند إعداد الرمز المميّز للجلسة، يجب ضبط القيمة mapType لمطابقة مظهر الخريطة الذي تريده. بعد ذلك، عليك تضمين الرمز المميّز للجلسة في كل طلب من طلباتك إلى Map Tiles API.

طلبات معلومات إطار العرض

يحدد إطار العرض حجم المربّع الذي إطار المشهد العالمي. تطلب معلومات إطار العرض عرض تفاصيل حول مربعات الخرائط التي تشكل إطار العرض الحالي. سبب طلب معلومات إطار العرض هو التأكد من أنك تتجنب طلب الصور بمستويات تكبير/تصغير غير موجودة.

على سبيل المثال، تحتوي معظم المدن على صور عند مستوى التكبير/التصغير 22، ولكن ليس المحيط حيث سيتم عرض مربعات زرقاء عديمة الخصائص.

طلب إطار العرض هو طلب HTTPS GET بالنموذج التالي.

curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN&key=YOUR_API_KEY&zoom=zoom&north=north&south=south&east=east&west=west"

ويحتوي الطلب على الحقول التالية:

zoom
مستوى التكبير أو التصغير في إطار العرض
north وsouth وeast وwest
نقاط أقصى شمال وجنوب وشرق وغرب في إطار العرض، ويتم التعبير عنها بالدرجات. يجب أن يكون الشمال والجنوب في النطاق (-90,90)، بينما يجب أن يكون الشرق والغرب في النطاق (-180، 180). للتعبير عن الحدود التي تعبر خط الطول والعرض، يمكن أن يكون الغرب إيجابيًا (على سبيل المثال، 170) ويمكن أن يكون الشرق سالبًا (على سبيل المثال، -170). جميع المعلمات مطلوبة.

استجابات معلومات إطار العرض

توضّح استجابة إطار العرض المناطق التي تحتوي على صور ومستويات التكبير أو التصغير. تكون استجابة معلومات إطار العرض على النحو التالي.

{
  "copyright": "Map data ©2023",
  "maxZoomRects": [
    {
      "maxZoom": 19,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 9,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 14,
      "north": 84.375,
      "south": -84.375,
      "east": 180,
      "west": -180
    }, ...
  ]
}

يحتوي نص الاستجابة على الحقول التالية.

copyright
يحتوي على سلسلة تحديد مصدر يجب عرضها على خريطتك عند عرض خريطة الطريق ومربّعات القمر الصناعي. لمزيد من المعلومات، راجِع سياسات واجهة برمجة التطبيقات Map Tiles API.
maxZoomRect
يحتوي على مصفوفة من المستطيلات الحدودية التي تتداخل مع إطار العرض الحالي. يحتوي أيضًا على الحد الأقصى لمستوى التكبير/التصغير المتاح داخل كل مستطيل.

دوال إحداثيات المربّعات

الأدوات (الدوال البسيطة) متوفرة في معظم لغات البرمجة للتحويل من أزواج خطوط الطول/العرض إلى إحداثيات متجانبة بمستوى تكبير/تصغير محدد. يُرجى الاطّلاع على مثال رمز JavaScript التالي الذي يحوِّل أولاً من latLng إلى نقطة، ثم من نقطة إلى إحداثيات متجانبة.

var TILE_SIZE = 256;

function fromLatLngToPoint(latLng) {
  var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
  return {
    x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
    y: TILE_SIZE / 2 * (1 +  mercator / Math.PI)
  };
}

function fromLatLngToTileCoord(latLng, zoom) {
  var point = fromLatLngToPoint(latLng);
  var scale = Math.pow(2, zoom);

  return {
    x: Math.floor(point.x * scale / TILE_SIZE),
    y: Math.floor(point.y * scale / TILE_SIZE),
    z: zoom
  };
}