إعداد خريطة

اختَر النظام الأساسي: 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". يعمل نموذج "خرائط Google" تلقائيًا على إعداد مشروعك وإضافة خريطة أساسية. يتم استخدام الجزء كحاوية للخريطة وتتم إضافته بشكل ثابت. لمعرفة التفاصيل، يمكنك الاطّلاع على البدء السريع.

  • إعداد مشروعك يدويًا لحزمة تطوير البرامج (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. تحدد ما إذا كانت دورة حياة الخريطة مرتبطة بعرض الجزء أو الجزء نفسه. انقر هنا للاطّلاع على التفاصيل.

  • liteMode - true لتفعيل الوضع البسيط، أو false.

لاستخدام هذه السمات المخصّصة ضمن ملف التنسيق، يجب أن تتضمن تعريف مساحة الاسم التالي. يمكنك اختيار أي مساحة اسم، وليس بالضرورة أن تكون 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:uiCompass="false"
  map:uiRotateGestures="true"
  map:uiScrollGestures="false"
  map:uiTiltGestures="true"
  map:uiZoomControls="false"
  map:uiZoomGestures="true"/>

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

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

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

لغة Java


GoogleMapOptions options = new GoogleMapOptions();

      

Kotlin


val options = GoogleMapOptions()

      

بعد ذلك، يمكنك ضبطها على النحو التالي:

لغة Java


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

      

Kotlin


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

      

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

إعداد طبقة الزيارات

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

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

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

لغة Java


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

      

Kotlin


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

      

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

مقارنة نوع الخريطة

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

عند عرض العديد من المدن عن قُرب، ستظهر مبانٍ ثلاثية الأبعاد، حيث يمكن عرضها في الصورة التالية لمدينة فانكوفر بكندا. يمكنك إيقاف المباني الثلاثية الأبعاد من خلال الاتصال 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 المنطقة المبطّنة.
  • تتم إزاحة عناصر تحكم واجهة المستخدم من حافة الحاوية حسب عدد وحدات البكسل المحدد.

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

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