إعداد خريطة

اختَر النظام الأساسي: Android iOS

يصف هذا الموضوع كيفية إعداد خريطة تمت إضافتها إلى أحد تطبيقات Android باستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لتطبيقات Android.

نظرة عامة

لقطة شاشة لخريطة Kyto مع ضبط إعدادات الخريطة. بعد إضافة خريطة إلى تطبيقك، يمكنك ضبط الإعدادات الأولية وإعدادات وقت التشغيل للخريطة. يجب ضبط الإعدادات الأولية استنادًا إلى ما إذا كنت قد أضفت حاوية الخريطة (SupportMapFragment أو MapView) بشكل ثابت أو ديناميكي. إذا تمت إضافة حاوية الخريطة بشكل ثابت، فيمكنك ضبط إعدادات الخريطة الأولية في ملف التخطيط. وإذا تمت إضافة هذه السمة بشكل ديناميكي، يمكنك ضبط الإعدادات الأولية في استدعاء OnCreate باستخدام كائن GoogleMapOptions.

للحصول على تفاصيل حول إضافة حاوية خريطة، راجع إضافة خريطة.

تشمل إعدادات الخريطة الأولية ما يلي:

وفي وقت التشغيل، يمكنك ضبط هذه الإعدادات وبعض إعدادات الإضافة عن طريق تعديل كائن GoogleMap في أداة معاودة الاتصال onMapReady. ويتم ضبط الإعدادات الإضافية من خلال طرق الفئة GoogleMap، مثل الإعدادات التي يتم من خلالها ضبط طبقة الزيارات والمساحة المتروكة في الخريطة.

مثال

في مثال الرمز أدناه ولقطة الشاشة أعلاه، تم ضبط الخريطة بالإعدادات التالية.

يتم ضبط الإعدادات الأولية في ملف التنسيق:

  • تفعيل عناصر التحكم في التكبير أو التصغير.
  • يمكنك تفعيل عناصر التحكّم في الإيماءات.
  • اضبط إمالة الخريطة على 30.

إعدادات بيئة التشغيل:

  • اجعل الكاميرا في منتصف كيوتو في اليابان.
  • تتيح هذه السياسة تفعيل نوع الخريطة المختلطة.
  • شغّل طبقة حركة المرور.

الإعدادات الأولية


<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:uiZoomControls="true"
    map:uiRotateGestures="true"
    map:cameraTilt="30" />
    

إعدادات بيئة التشغيل

package com.example.mapsetup;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    // Update the map configuration at runtime.
    @Override
    public void onMapReady(GoogleMap googleMap) {
        // Set the map coordinates to Kyoto Japan.
        LatLng kyoto = new LatLng(35.00116, 135.7681);
        // Set the map type to Hybrid.
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        // Add a marker on the map coordinates.
        googleMap.addMarker(new MarkerOptions()
                .position(kyoto)
                .title("Kyoto"));
        // Move the camera to the map coordinates and zoom in closer.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto));
        googleMap.moveCamera(CameraUpdateFactory.zoomTo(15));
        // Display traffic.
        googleMap.setTrafficEnabled(true);

    }
}

قبل البدء

قبل البدء، يمكنك إعداد مشروع وإضافة خريطة أساسية من خلال الخيارات التالية:

  • يمكنك إنشاء تطبيق باستخدام نموذج "خرائط Google" في "استوديو Android". يقوم نموذج الخرائط بتهيئة مشروعك تلقائيًا ويضيف خريطة أساسية. يتم استخدام جزء كحاوية للخريطة وتتم إضافته بشكل ثابت. ولمعرفة التفاصيل، يُرجى الاطّلاع على quickstart.

  • يمكنك ضبط مشروعك يدويًا لحزمة تطوير البرامج (SDK) وإضافة خريطة أساسية. يتيح لك ذلك استخدام أي نموذج Android وإضافة خريطة إلى تطبيق حالي.

إعداد الخريطة بعد إضافتها بشكل ثابت

يصف هذا القسم كيفية تعيين الحالة الأولية للخريطة إذا أضفتها بشكل ثابت إلى ملف التخطيط لديك.

تحدِّد حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل Android مجموعة من سمات XML المخصّصة للسمة SupportMapFragment أو MapView التي يمكنك استخدامها لضبط الحالة الأولية للخريطة مباشرةً من ملف التنسيق. تم تعريف السمات التالية في الوقت الحالي:

  • mapType — نوع الخريطة التي سيتم عرضها تشمل القيم الصالحة ما يلي: none وnormal وhybrid وsatellite وterrain.

  • cameraTargetLat وcameraTargetLng وcameraZoom وcameraBearing cameraTilt — الموضع الأولي للكاميرا يمكنك الاطّلاع على دليل الكاميرا وطرق العرض للحصول على التفاصيل.

  • uiZoomControls، uiCompass — لتحديد ما إذا كان سيتم عرض عناصر التحكم في التكبير/التصغير والبوصلة أم لا. يمكنك الانتقال إلى UiSettings للاطّلاع على التفاصيل.

  • uiZoomGestures وuiScrollGestures وuiRotateGestures وuiTiltGestures - يحدد هذا الإعداد ما إذا تم تفعيل إيماءات معيّنة. يمكنك الاطّلاع على UiSettings لمعرفة التفاصيل.

  • zOrderOnTop: يشير إلى ما إذا كان سطح عرض الخريطة سيُعرض أعلى نافذة الخريطة وعناصر التحكّم في الخريطة وأي عنصر في النافذة. راجِع SurfaceView.setZOrderOnTop(boolean) لمعرفة التفاصيل.

  • useViewLifecycle — صالحة فقط مع عنصر SupportMapFragment. لتحديد ما إذا كان يجب ربط دورة حياة الخريطة بعرض الجزء أو بالجزء نفسه. يمكنك الاطّلاع هنا على التفاصيل.

  • liteModetrue لتفعيل الوضع البسيط، وبخلاف ذلك، false.

  • mapColorScheme: تحدّد هذه السياسة نظام الألوان للخريطة العادية والتضاريس. تتضمن القيم light (تلقائي) وdark وfollow_system مما يعني استخدام إعداد النظام الحالي استنادًا إلى إعداد الجهاز لـ UI_NIGHT_MODE_MASK. لمزيد من المعلومات، يُرجى الاطّلاع على مخطط ألوان الخريطة.

من أجل استخدام هذه السمات المخصصة داخل ملف التنسيق، يجب تضمين بيان مساحة الاسم التالي. يمكنك اختيار أي مساحة اسم، وليس من الضروري أن تكون map:

xmlns:map="http://schemas.android.com/apk/res-auto"

يمكنك بعد ذلك إضافة السمات باستخدام بادئة map: إلى ملف التنسيق.

يعمل ملف التنسيق التالي على إعداد كائن SupportMapFragment بسمات خريطة مخصّصة. ويمكن تطبيق السمات نفسها على كائن MapView أيضًا.

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:name="com.google.android.gms.maps.SupportMapFragment"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"
  map:mapType="normal"
  map:mapColorScheme="dark"
  map:uiCompass="false"
  map:uiRotateGestures="true"
  map:uiScrollGestures="false"
  map:uiTiltGestures="true"
  map:uiZoomControls="false"
  map:uiZoomGestures="true"/>

إعداد الخريطة بعد إضافتها بشكل ديناميكي

يصف هذا القسم كيفية تعيين الحالة الأولية للخريطة في حالة إضافتها إلى تطبيقك بشكل ديناميكي.

إذا أضفت SupportMapFragment أو MapView بشكل ديناميكي، يمكنك ضبط الحالة الأولية للخريطة في كائن GoogleMapOptions. الخيارات المتوفرة هي نفس الخيارات المتوفرة في ملف التخطيط. يمكنك إنشاء GoogleMapOptions على النحو التالي:

Kotlin



val options = GoogleMapOptions()

      

Java


GoogleMapOptions options = new GoogleMapOptions();

      

ثم اضبطه على النحو التالي:

Kotlin



options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false)

      

Java


options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false);

      

لتطبيق هذه الخيارات عند إنشاء خريطة، يمكنك تنفيذ أحد الإجراءات التالية:

إعداد طبقة حركة المرور

يمكنك عرض بيانات حركة المرور على الخريطة عن طريق تمكين طبقة حركة المرور. يمكنك تفعيل طبقة حركة المرور وإيقافها من خلال استدعاء الطريقة setTrafficEnabled()، ويمكنك تحديد ما إذا كانت طبقة الزيارات مفعَّلة حاليًا من خلال استدعاء الطريقة isTrafficEnabled(). تعرض لقطة الشاشة التالية خريطة تم فيها تفعيل طبقة حركة المرور.

ضبط نوع الخريطة

لتحديد نوع الخريطة، يمكنك طلب الطريقة setMapType. على سبيل المثال، لعرض خريطة القمر الصناعي:

Kotlin



// Sets the map type to be "hybrid"
map.mapType = GoogleMap.MAP_TYPE_HYBRID

      

Java


// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

      

تقارن الصورة التالية بين أنواع الخرائط العادية والمختلطة وخرائط التضاريس:

مقارنة MapType

إعداد المباني الثلاثية الأبعاد

العديد من المدن، عندما يتم عرضها عن قرب، تحتوي على مبانٍ ثلاثية الأبعاد مرئية، كما هو الحال في الصورة أدناه لفانكوفر، كندا. يمكنك إيقاف المباني الثلاثية الأبعاد من خلال استدعاء الرمز GoogleMap.setBuildingsEnabled(false).

خريطة فانكوفر، كندا

ضبط إعدادات الخريطة الداخلية

في مستويات التكبير/التصغير العالية، تعرض الخريطة مخططات الطوابق للمساحات الداخلية مثل المطارات ومراكز التسوق ومتاجر البيع بالتجزئة الكبيرة ومحطات النقل العام. تُعرف مخططات المباني هذه بأنواع الخرائط "العادية" و"القمر الصناعي" (GoogleMap.MAP_TYPE_NORMAL وGoogleMap.MAP_TYPE_SATELLITE). ويتم تفعيلها تلقائيًا عند تكبير المستخدم، كما أنّها تتلاشى عند تصغير الخريطة.

إشعار الإيقاف النهائي: في إصدار مستقبلي، لن تتوفّر الخرائط الداخلية إلا على نوع الخريطة normal. واعتبارًا من ذلك الإصدار المستقبلي، لن تتم إتاحة الخرائط الداخلية على خرائط satellite أو terrain أو hybrid. حتى في الأماكن الداخلية، سيستمر isIndoorEnabled() في عرض القيمة التي تم ضبطها من خلال setIndoorEnabled() على النحو المعتاد. بشكل تلقائي، يتم ضبط setIndoorEnabled على true. ستتيح لك ملاحظات الإصدار معرفة عندما يصبح دعم الأماكن الداخلية غير متاح لأنواع الخرائط هذه.

مثال على الخريطة الداخلية

فيما يلي ملخص لوظائف الخرائط الداخلية في واجهة برمجة التطبيقات:

  • يمكنك إيقاف الخرائط الداخلية من خلال الاتصال GoogleMap.setIndoorEnabled(false). يتم تفعيل الخرائط الداخلية افتراضيًا. يتم عرض الخرائط الداخلية على خريطة واحدة في كل مرة. هذه هي الخريطة الأولى التي تتم إضافتها إلى تطبيقك تلقائيًا. لعرض الخرائط الداخلية على خريطة مختلفة، يمكنك إيقافها على الخريطة الأولى، ثم الاتصال بالرقم setIndoorEnabled(true) على الخريطة الثانية.
  • لإيقاف أداة اختيار المستوى التلقائي (أداة اختيار الطوابق)، يمكنك طلب GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false). لمزيد من التفاصيل، راجِع التفاعل مع الخريطة.
  • OnIndoorStateChangeListener: تحدّد هذه السمة المستمعين الذين يرصدون عندما يكون المبنى موضع التركيز أو يتم تفعيل مستوى في مبنى. لمعرفة التفاصيل، يُرجى الاطّلاع على التفاعل مع الخريطة.
  • getFocusedBuilding: لاسترداد المبنى الذي يتم التركيز عليه يمكنك بعد ذلك العثور على مستوى النشاط من خلال طلب الرقم IndoorBuilding.getActiveLevelIndex().
  • لا يؤثر تصميم الخريطة الأساسية على الخرائط الداخلية.

إعداد المساحة المتروكة للخريطة

يعرض هذا الفيديو مثالاً على المساحة المتروكة في الخريطة.

تم تصميم خريطة Google لملء المنطقة بالكامل التي يحددها عنصر الحاوية، عادة MapView أو SupportMapFragment. يتم تحديد عدة جوانب لكيفية ظهور الخريطة وتصرفها من خلال أبعاد حاويتها:

  • سيعكس هدف الكاميرا منتصف المنطقة المبطّنة.
  • يتم وضع عناصر التحكم في الخريطة بالنسبة إلى حواف الخريطة.
  • تظهر المعلومات القانونية، مثل بيانات حقوق الطبع والنشر أو شعار Google على طول الحافة السفلية من الخريطة.

يمكنك إضافة مساحة متروكة حول حواف الخريطة باستخدام GoogleMap.setPadding(). ستستمر الخريطة في ملء الحاوية بالكامل، لكن النص والتحكّم في تحديد الموضع وإيماءات الخريطة وحركات الكاميرا سيعمل كما لو تم وضعه في مساحة أصغر. وينتج عن ذلك التغييرات التالية:

  • ترتبط حركات الكاميرا عبر طلبات بيانات من واجهة برمجة التطبيقات أو الضغطات على الأزرار (مثل البوصلة أو موقعي الجغرافي أو أزرار التكبير/التصغير) بالمنطقة ذات المساحة المتروكة.
  • تعرض الطريقة getCameraPosition مركز المنطقة المبطّنة.
  • تعرض الطريقتان Projection وgetVisibleRegion المنطقة المغطاة.
  • تتم إزاحة عناصر تحكم واجهة المستخدم من حافة الحاوية بمقدار عدد محدد من وحدات البكسل.

يمكن أن تكون المساحة المتروكة مفيدة عند تصميم واجهات المستخدم التي تتداخل مع جزء من الخريطة. في الصورة التالية، أصبحت الخريطة محشوة على طول الحافتين العلوية واليمنى. سيتم عرض عناصر التحكم المرئية في الخريطة والنص القانوني على طول حواف المنطقة المساحية، كما سيتم عرضها باللون الأخضر، بينما ستستمر الخريطة في ملء الحاوية بالكامل كما هو موضح باللون الأزرق. في هذا المثال، يمكنك أن تطفو قائمة على الجانب الأيمن من الخريطة دون حجب عناصر التحكم في الخريطة.

المساحة المتروكة للخريطة

نظام ألوان الخريطة

بالنسبة إلى الخرائط من النوع "العادي" و"التضاريس"، يمكنك ضبط ألوان الخريطة ديناميكيًا على المظهر الداكن أو الفاتح أو لاستخدام إعداد النظام الحالي. على سبيل المثال، يمكنك زيادة تعتيم أو تعتيم نظام ألوان الخريطة بناءً على الوقت خلال اليوم أو الاستخدام الداخلي أو الخارجي للجهاز.

تستخدم الخريطة الوضع الفاتح بشكل تلقائي. تستند قيمة إعداد النظام الحالي إلى إعداد الجهاز في UI_NIGHT_MODE_MASK.

Kotlin

mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))

Java

mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));

يمكنك تبديل الألوان باستخدام الطريقة GoogleMap.setMapColorScheme() لضبط النمط الحالي على الوضع الداكن أو الوضع الفاتح أو اتّباع إعدادات النظام.

Kotlin

googleMap.setMapColorScheme(MapColorScheme.DARK)
googleMap.setMapColorScheme(MapColorScheme.LIGHT)
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)

Java

googleMap.setMapColorScheme(MapColorScheme.DARK);
googleMap.setMapColorScheme(MapColorScheme.LIGHT);
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);