يصف هذا الموضوع كيفية ضبط خريطة تمت إضافتها إلى تطبيق Android باستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط 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". يعمل نموذج "خرائط 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)
لتطبيق هذه الخيارات عند إنشاء خريطة، يمكنك تنفيذ أحد الإجراءين التاليين:
- إذا كنت تستخدم السمة
SupportMapFragment
، استخدِم طريقة المصنع الثابتةSupportMapFragment.newInstance(GoogleMapOptions options)
لإنشاء الجزء وتمريره في الإعدادات. - إذا كنت تستخدم
MapView
، استخدِم أداة الإنشاءMapView(Context, GoogleMapOptions)
ومرِّر الإعدادات.
إعداد طبقة الزيارات
يمكنك عرض بيانات حركة المرور على خريطتك عن طريق تفعيل طبقة حركة المرور. يمكنك تفعيل طبقة الزيارات وإيقافها عن طريق استدعاء طريقة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
المنطقة المبطّنة. - تتم إزاحة عناصر تحكم واجهة المستخدم من حافة الحاوية حسب عدد وحدات البكسل المحدد.
يمكن أن تكون المساحة المتروكة مفيدة عند تصميم واجهات المستخدم التي تتداخل مع جزء ما من الخريطة. في الصورة التالية، يتم إدراج الخريطة في الحواف العلوية والأيمن. سيتم عرض عناصر التحكم المرئية على الخريطة والنص القانوني على طول حواف المنطقة المتروكة، باللون الأخضر، في حين ستستمر الخريطة في ملء الحاوية بالكامل، المعروضة باللون الأزرق. في هذا المثال، يمكنك وضع قائمة عائمة على الجانب الأيمن من الخريطة بدون إخفاء عناصر التحكّم في الخريطة.