שכבות-על של קרקע הן שכבות-על של תמונה שקשורות לקואורדינטות של קווי אורך ורוחב, ולכן הן זזות כשגוררים את המפה או מגדילים או מקטינים אותה.
דוגמאות קוד
במאגר ApiDemos ב-GitHub יש דגימה שמדגימה שכבות-על של קרקע:
- GroundLayerDemoActivity – Java: תכונות ושכבות-על של שכבת-על ב-Java
- GroundLayerDemoActivity – Kotlin: תכונות ושכבות-על של קרקע ב-Kotlin
מבוא
שכבת-על של קרקע היא תמונה הקבועה במפה. בניגוד לסמנים, שכבות-על של קרקע ממוקמות על פני השטח של כדור הארץ ולא על המסך, כך שהסיבוב, ההטיה או הזום של המפה ישפיעו על הכיוון של התמונה. שכבות-על של קרקע שימושיות כשרוצים לתקן תמונה אחת באזור אחד במפה. אם רוצים להוסיף תמונות נרחבות שמכסות חלק גדול מהמפה, כדאי להשתמש בשכבת-על של משבצות.
הוספת שכבת-על
כדי להוסיף אובייקט GroundOverlay
, צריך ליצור אובייקט GroundOverlayOptions
שמגדיר גם תמונה וגם מיקום. אפשר לציין הגדרות נוספות שישפיעו על המיקום של התמונה במפה. אחרי שמגדירים את האפשרויות הנדרשות, מעבירים את האובייקט ל-method GoogleMap.addGroundOverlay()
כדי להוסיף את התמונה למפה. השיטה addGroundOverlay()
מחזירה אובייקט GroundOverlay
. כדאי לשמור על ההפניה לאובייקט הזה אם רוצים לשנות אותו מאוחר יותר.
שלב אחר שלב:
- יצירת אובייקט
GroundOverlayOptions
חדש - יש לציין את התמונה כ-
BitmapDescriptor
. - מגדירים את מיקום התמונה באחת מהשיטות הזמינות:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
- מגדירים מאפיינים אופציונליים כמו
transparency
, לפי הצורך. - צריך להתקשר אל
GoogleMap.addGroundOverlay()
כדי להוסיף את התמונה למפה.
הדוגמה הבאה ממחישה איך להוסיף שכבת-על של קרקע לאובייקט GoogleMap
קיים.
Java
LatLng newarkLatLng = new LatLng(40.714086, -74.228697); GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f); map.addGroundOverlay(newarkMap);
Kotlin
val newarkLatLng = LatLng(40.714086, -74.228697) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f) map.addGroundOverlay(newarkMap)
אם רוצים לשנות או להסיר שכבת-על של קרקע אחרי שמוסיפים אותה למפה, צריך לשמור על האובייקט GroundOverlay
. תוכלו לשנות את שכבת-העל בשלב מאוחר יותר על ידי ביצוע שינויים באובייקט זה.
Java
// Add an overlay to the map, retaining a handle to the GroundOverlay object. GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);
Kotlin
// Add an overlay to the map, retaining a handle to the GroundOverlay object. val imageOverlay = map.addGroundOverlay(newarkMap)
הסרת שכבת-על
אתם יכולים להסיר שכבת-על של קרקע באמצעות השיטה GroundOverlay.remove()
.
Java
imageOverlay.remove();
Kotlin
imageOverlay?.remove()
שינוי שכבת-על
תוכלו לשנות את תמונת שכבת-העל של פני השטח לאחר הוספת המפה למפה באמצעות השיטה GroundOverlay.setImage(BitmapDescriptor)
.
Java
// Update the GroundOverlay with a new image of the same dimension imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));
Kotlin
// Update the GroundOverlay with a new image of the same dimension // Update the GroundOverlay with a new image of the same dimension imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
השיטה setImage()
תחליף את התמונה הקיימת בתמונה אחרת בעלת אותם מימדים.
הצבת שכבת-על של קרקע
יש שתי דרכים לציין את המיקום של שכבת-העל של הקרקע:
- שימוש ב-
LatLng
כדי למרכז את שכבת-העל, ובמידות במטרים כדי לציין את גודל התמונה. - שימוש ב-
LatLngBounds
לציון הפינות הצפון-מזרחיות והדרום-מערבית של התמונה.
עליכם לציין את המיקום של שכבת העל של פני השטח לפני ההוספה למפה.
שימוש במיקום כדי למקם תמונה
כשאתם מוסיפים את התמונה, אתם צריכים לציין LatLng שאליו יוצמד העוגן ואת הרוחב של שכבת-העל (במטרים). ברירת המחדל של anchor
היא מרכז התמונה. אפשר לספק את הגובה של שכבת-העל (במטרים). אם לא תספקו את הגובה של שכבת-העל, היא תחושב אוטומטית כדי לשמור על הפרופורציות של התמונה.
הקוד הבא מציב תמונה במיקום 40.714086, -74.228697
ברוחב 8.6 ק"מ ובגובה 6.5 ק"מ. התמונה מעוגנת בפינה הימנית התחתונה.
Java
GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0, 1) .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);
Kotlin
val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0f, 1f) .position(LatLng(40.714086, -74.228697), 8600f, 6500f)
שימוש בתמונה מסוג LatLngBounds כדי למקם תמונה
צריך לספק LatLngBounds
שמכיל את התמונה. השדה LatLngBounds
מגדיר את הצפון-מזרחי ואת הפינות הדרום-מערביות של התמונה. כשהתמונה מוקטנת במפה, היא מסתובבת כך שתתאים לגבולות התמונה. אם הגבולות לא תואמים ליחס הגובה-רוחב המקורי, התמונה תוטה.
הקוד הבא מציב תמונה במפה. הפינה הדרום-מערבית שלה משויכת ל-40.712216,-74.22655
, והפינה שלה בצפון מזרח גובלת ב-40.773941, -74.12544
.
Java
LatLngBounds newarkBounds = new LatLngBounds( new LatLng(40.712216, -74.22655), // South west corner new LatLng(40.773941, -74.12544)); // North east corner GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds);
Kotlin
val newarkBounds = LatLngBounds( LatLng(40.712216, -74.22655), // South west corner LatLng(40.773941, -74.12544) // North east corner ) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds)
שיוך נתונים לשכבת-על של קרקע
אפשר לקרוא ל-GroundOverlay.setTag()
כדי לאחסן אובייקט נתונים שרירותי עם שכבת-על של קרקע, ולאחזר את אובייקט הנתונים באמצעות GroundOverlay.getTag()
.
דוגמת הקוד הבאה מאחסנת תיאור של מחרוזת עם שכבת-על של קרקע:
Java
GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(new LatLng(-33.873, 151.206), 100) .clickable(true)); sydneyGroundOverlay.setTag("Sydney");
Kotlin
val sydneyGroundOverlay = map.addGroundOverlay( GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(LatLng(-33.873, 151.206), 100f) .clickable(true) ) sydneyGroundOverlay?.tag = "Sydney"
הנה כמה דוגמאות לתרחישים שבהם כדאי לאחסן ולאחזר נתונים עם שכבות-על של קרקע:
- ייתכן שהאפליקציה שלכם מספקת שכבות-על שונות של קרקע, ואתם רוצים להתייחס אליהן באופן שונה כשהמשתמש לוחץ עליהן.
- יכול להיות שאתם מתכתבים עם מערכת שיש לה מזהי רשומות ייחודיים, שבהם שכבות-העל מייצגות רשומות ספציפיות במערכת הזו.
- נתוני שכבת-העל עשויים לציין עדיפות כדי לקבוע את אינדקס ה-z עבור שכבת-העל.
ניהול אירועי שכבת-על קרקעיים
כברירת מחדל, לא ניתן ללחוץ על שכבות-על של קרקע. אפשר להפעיל ולהשבית את הקליקביליות על ידי חיוג אל GroundOverlay.setClickable(boolean)
.
תוכלו להשתמש ב-OnGroundOverlayClickListener
כדי להאזין לאירועים בלחיצה על שכבת-על של קרקע שניתן ללחוץ עליה. כדי להגדיר את ה-listener הזה במפה, צריך להתקשר אל GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
.
בכל פעם שמשתמש לוחץ על שכבת-על של קרקע, מתקבל התקשרות חוזרת onGroundOverlayClick(GroundOverlay)
.