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

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

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

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

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

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

موضوعات الخريطة

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

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

لطلب مربّعات الخرائط من Map 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
يحتوي على سلسلة إحالة يجب عرضها على الخريطة عند عرض خارطة الطريق ومربّعات الأقمار الصناعية. لمزيد من المعلومات، يُرجى الاطّلاع على سياسات واجهة برمجة تطبيقات مربّعات الخرائط.
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
  };
}