إعداد خريطة

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

يوضّح هذا الموضوع كيفية ضبط خريطة تمت إضافتها إلى تطبيق Android باستخدام حزمة تطوير البرامج (SDK) لتطبيق "خرائط Google" لنظام التشغيل Android.

نظرة عامة

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

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

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

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

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

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

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

  • uiZoomControls وuiCompass: لتحديد ما إذا كان سيتم عرض عناصر التحكّم في التكبير/التصغير وال Kompass يُرجى الاطّلاع على UiSettings لمعرفة التفاصيل.

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

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

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

  • liteMode - true لتفعيل الوضع البسيط، و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);

      

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

أقلمة خريطتك

عند إضافة MapView أو SupportMapFragment إلى تطبيقك، تظهر العناصر النصية يتم عرضها على الخريطة باللغة المناسبة حسب جهاز المستخدم الإعدادات والموقع الجغرافي. يمكنك حصر اللغات التي يستخدمها تطبيقك على مجموعة فرعية من كل اللغات المتاحة، من خلال إضافة عنصر resConfigs إلى Gradle الملف. ويُعدّ ذلك مفيدًا لإزالة اللغات غير المستخدَمة، كما يساعد في تقليل حجم ملف ثنائي تطبيقك. على سبيل المثال:

defaultConfig {
    resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}

اطّلِع على مزيد من المعلومات عن أقلمة تطبيق Android.

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

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

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

  • حركات الكاميرا عبر طلبات بيانات من واجهة برمجة التطبيقات أو الضغطات على الأزرار (على سبيل المثال، البوصلة، "الموقع الجغرافي" وأزرار التكبير/التصغير) نسبية إلى المنطقة ذات المساحة المتروكة.
  • تعرض الطريقة 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);

ضبط لون الخلفية

عند العمل في الوضع الداكن أو التبديل بين طرق عرض الخريطة، قد يكون من المفيد ضبط لون خلفية الخريطة التلقائي. ويمكن تحقيق ذلك من خلال تعيين سمة خيارات الخريطة backgroundColor.

Kotlin

private val googleMapOptions: GoogleMapOptions =
    GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

Java

private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

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