בדף הזה מתואר כלי העזר למיפוי חום שזמין בכלי העזר לאנגלית עבור SDK של מפות ל-iOS. מפות חום שימושיות לייצוג ההתפלגות הצפיפות של נקודות נתונים במפה.
הסרטון הזה מתאר את השימוש במפות חום כחלופה לסמנים, נדרש מספר גדול של נקודות נתונים במפה על הנתונים.
מפות חום מקלות על הצופים להבין את ההתפלגות והיחס העוצמה של נקודות נתונים במפה. במקום להציב סמן בכל אחד מהכרטיסים המיקום, מפות חום משתמשות בצבע כדי לייצג את התפלגות הנתונים.
בדוגמה הבאה, הצבע האדום מייצג אזורים שבהם יש ריכוז גבוה של כוחות המשטרה בוויקטוריה, אוסטרליה.
אם עדיין לא הגדרתם את הספרייה, עליכם לפעול לפי ההגדרה מדריך לפני שקוראים את שאר הדף הזה.
הוספת מפת חום פשוטה
כדי להוסיף מפת חום למפה, צריך מערך נתונים שכולל
את הקואורדינטות של כל מיקום מעניין. קודם כל, יוצרים
מופע של GMUHeatmapTileLayer
, הגדרת הנכס map
ל-GMSMapView
.
צריך לבצע את הפעולה הזו בפונקציה viewDidLoad()
של האפליקציה, כדי לוודא שהמפה הבסיסית
נטען לפני העבודה עם מפת החום. לאחר מכן מעבירים אוסף של
GMUWeightedLatLng
אובייקטים למכונה GMUHeatmapTileLayer
.
חברת התשתיות מספקת את המחלקה GMUHeatmapTileLayer
, שמקבלת
אוסף של GMUWeightedLatLng
אובייקטים. הוא יוצר את תמונות המשבצת עבור
רמות שונות של מרחק תצוגה, בהתאם לאפשרויות הרדיוס, ההדרגתיות והאטימות
צוין.
בדיקה מפורטת יותר של השלבים:
- יוצרים מכונה של
GMUHeatmapTileLayer
, מגדירים את הנכסmap
GMSMapView
(ניתן לעשות זאת בפונקציהviewDidLoad()
של האפליקציה). - צריך להעביר אוסף של
GMUWeightedLatLng
אובייקטים אל מופע אחד (GMUHeatmapTileLayer
). - קוראים לפונקציה
GMUHeatmapTileLayer.map
, מעבירים את תצוגת המפה.Swift
class Heatmap: UIViewController { private var mapView: GMSMapView! private var heatmapLayer: GMUHeatmapTileLayer! override func viewDidLoad() { super.viewDidLoad() heatmapLayer = GMUHeatmapTileLayer() heatmapLayer.map = mapView } // ... func addHeatmap() { // Get the data: latitude/longitude positions of police stations. guard let path = Bundle.main.url(forResource: "police_stations", withExtension: "json") else { return } guard let data = try? Data(contentsOf: path) else { return } guard let json = try? JSONSerialization.jsonObject(with: data, options: []) else { return } guard let object = json as? [[String: Any]] else { print("Could not read the JSON.") return } var list = [GMUWeightedLatLng]() for item in object { let lat = item["lat"] as! CLLocationDegrees let lng = item["lng"] as! CLLocationDegrees let coords = GMUWeightedLatLng( coordinate: CLLocationCoordinate2DMake(lat, lng), intensity: 1.0 ) list.append(coords) } // Add the latlngs to the heatmap layer. heatmapLayer.weightedData = list } }
Objective-C
@implementation Heatmap { GMSMapView *_mapView; GMUHeatmapTileLayer *_heatmapLayer; } - (void)viewDidLoad { [super viewDidLoad]; _heatmapLayer = [[GMUHeatmapTileLayer alloc] init]; _heatmapLayer.map = _mapView; } // ... - (void) addHeatmap { // Get the data: latitude/longitude positions of police stations. NSURL *path = [NSBundle.mainBundle URLForResource:@"police_stations" withExtension:@"json"]; NSData *data = [NSData dataWithContentsOfURL:path]; NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSMutableArray<GMUWeightedLatLng *> *list = [[NSMutableArray alloc] init]; [json enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSDictionary *item = (NSDictionary *)obj; CLLocationDegrees lat = [(NSNumber *) [item valueForKey:@"lat"] doubleValue]; CLLocationDegrees lng = [(NSNumber *) [item valueForKey:@"lng"] doubleValue]; GMUWeightedLatLng *coords = [[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(lat, lng) intensity:1.0]; [list addObject:coords]; }]; // Add the latlngs to the heatmap layer. _heatmapLayer.weightedData = list; } @end
בדוגמה הזו, הנתונים מאוחסנים בקובץ JSON, police_stations.json
.
הנה חֶלֶץ מהקובץ:
[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]
התאמה אישית של מפת החום
למפת החום יש כמה מאפיינים שניתן להתאים אישית. אפשר להגדיר את האפשרויות כאשר
יצירה ראשונית של מכונת GMUHeatmapTileLayer
, או בכל שלב אחר על ידי
הגדרת ערך חדש לאפשרות הזו.
אלו האפשרויות הזמינות:
רדיוס: גודל הטשטוש הגאוס שהוחל על מפת החום, מבוטא בפיקסלים. ערך ברירת המחדל הוא 20. המספר צריך להיות בין 10 ל-50. כדאי להשתמש
GMUHeatmapTileLayer.radius
כדי להגדיר את הרדיוס.הדרגתיות: טווח צבעים שבהם מפת החום משתמשת כדי ליצור את הצבע במפה, מהעוצמה הנמוכה ביותר לגבוהה ביותר. נוצר
GMUGradient
באמצעות מערך מספר שלם שמכיל את הצבעים, ומערך צף שמציין את נקודת ההתחלה של כל צבע, כאחוז מהעוצמה המקסימלית. ומבוטאת בתור שבר מ-0 עד 1. צריך לציין רק צבע אחד עבור הדרגתיות של צבע אחד, או לפחות שני צבעים עבור צבע הדרגתי. מפת הצבעים נוצרת באמצעות אינטרפולציה בין הצבעים האלה. להדרגתיות המוגדרת כברירת מחדל יש שני צבעים. הפרמטרcolorMapSize
מגדיר את מספר השלבים בשיפוע. מספרים גדולים יותר יובילו לתוצאה חלקה יותר הדרגתי, בעוד שמספרים קטנים יותר יספקו מעברים חדים יותר שדומים בתרשים קו מתאר. יש להשתמש ב-GMUHeatmapTileLayer.gradient
כדי להגדיר את ההדרגתיות.אטימות: זוהי האטימות של כל השכבה של מפת החום והטווחים מ-0 ל-1. ערך ברירת המחדל הוא 0.7. משתמשים ב-
GMUHeatmapTileLayer.opacity
כדי להגדיר את ערך אטימוּת.
לדוגמה, יוצרים Gradient
:
Swift
let gradientColors: [UIColor] = [.green, .red] let gradientStartPoints: [NSNumber] = [0.2, 1.0] heatmapLayer.gradient = GMUGradient( colors: gradientColors, startPoints: gradientStartPoints, colorMapSize: 256 )
Objective-C
NSArray<UIColor *> *gradientColors = @[UIColor.greenColor, UIColor.redColor]; NSArray<NSNumber *> *gradientStartPoints = @[@0.2, @1.0]; _heatmapLayer.gradient = [[GMUGradient alloc] initWithColors:gradientColors startPoints:gradientStartPoints colorMapSize:256];
כדי לשנות את האטימות של מפת חום קיימת:
Swift
heatmapLayer.opacity = 0.7
Objective-C
_heatmapLayer.opacity = 0.7;
עדכון של אפשרות קיימת
כדי לעדכן אפשרות שכבר הוגדרה, מבצעים את השלבים הבאים:
- מעדכנים את האפשרות לערך הרצוי.
- התקשרו אל
GMUHeatmapTileLayer.clearTileCache()
.
שינוי מערך הנתונים
כדי לשנות את מערך הנתונים שעליו מבוססת מפת החום:
- מעדכנים את איסוף הנתונים. שימוש ב-
GMUHeatmapTileLayer.weightedData
, העברה מערך שלGMUWeightedLatLng
. - התקשרו אל
GMUHeatmapTileLayer.clearTileCache()
.
הסרה של מפת חום
כדי להסיר מפת חום, צריך להפעיל את הפקודה GMUHeatmapTileLayer.map
ולהעביר את nil
.
Swift
heatmapLayer.map = nil
Objective-C
_heatmapLayer.map = nil;
צפייה באפליקציית ההדגמה
כדי לראות דוגמה נוספת להטמעת מפת חום, אפשר לעיין
HeatmapViewController
באפליקציית ההדגמה שנשלחת עם ספריית השירותים.
במדריך ההגדרה מוסבר איך
להריץ את אפליקציית ההדגמה.