הסתרת תכונות המפה באמצעות שינוי הסגנון

בחירת פלטפורמה: Android iOS JavaScript

בנוסף לשינוי הסגנון של התכונות במפה, אפשר גם להסתיר אותן לגמרי. בדוגמה הזו נסביר איך להסתיר במפה נקודות עניין עסקיות (POI) ואת הסמלים של התחבורה הציבורית.

אפשר לעצב רק את סוג המפה kGMSTypeNormal.

החלת סגנונות על המפה

כדי להחיל סגנונות מפה מותאמים אישית על מפה, צריך להפעיל את GMSMapStyle(...) כדי ליצור מכונה של GMSMapStyle, ולהעביר כתובת URL של קובץ JSON מקומי או מחרוזת JSON שמכילה הגדרות של סגנונות. מקצים את המכונה GMSMapStyle לנכס mapStyle של המפה.

באמצעות קובץ JSON

בדוגמאות הבאות מוצגת קריאה לפונקציה GMSMapStyle(...) והעברת כתובת URL של קובץ מקומי:

בדוגמת הקוד הבאה, הפרויקט מכיל קובץ בשם style.json:

Swift

import GoogleMaps

class MapStyling: UIViewController {

  // Set the status bar style to complement night-mode.
  override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
  }

  override func loadView() {
    let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 14.0)
    let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)

    do {
      // Set the map style by passing the URL of the local file.
      if let styleURL = Bundle.main.url(forResource: "style", withExtension: "json") {
        mapView.mapStyle = try GMSMapStyle(contentsOfFileURL: styleURL)
      } else {
        NSLog("Unable to find style.json")
      }
    } catch {
      NSLog("One or more of the map styles failed to load. \(error)")
    }

    self.view = mapView
  }
}
      

Objective-C

#import "MapStyling.h"
@import GoogleMaps;

@interface MapStyling ()

@end

@implementation MapStyling

// Set the status bar style to complement night-mode.
- (UIStatusBarStyle)preferredStatusBarStyle {
  return UIStatusBarStyleLightContent;
}

- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                          longitude:151.20
                                                               zoom:12];
  GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView.myLocationEnabled = YES;

  NSBundle *mainBundle = [NSBundle mainBundle];
  NSURL *styleUrl = [mainBundle URLForResource:@"style" withExtension:@"json"];
  NSError *error;

  // Set the map style by passing the URL for style.json.
  GMSMapStyle *style = [GMSMapStyle styleWithContentsOfFileURL:styleUrl error:&error];

  if (!style) {
    NSLog(@"The style definition could not be loaded: %@", error);
  }

  mapView.mapStyle = style;
  self.view = mapView;
}

@end
      

כדי להגדיר את אפשרויות הסגנון, מוסיפים קובץ חדש לפרויקט בשם style.json ומדביקים את הצהרת הסגנון הבאה בפורמט JSON כדי להסתיר נקודות עניין עסקיות (POI) וסמלי תחבורה ציבורית:

שימוש במשאב מחרוזת

בדוגמאות הבאות מוצגת קריאה ל-GMSMapStyle() והעברת משאב מחרוזת:

Swift

class MapStylingStringResource: UIViewController {

  let MapStyle = "JSON_STYLE_GOES_HERE"

  // Set the status bar style to complement night-mode.
  override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
  }

  override func loadView() {
    let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 14.0)
    let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)

    do {
      // Set the map style by passing a valid JSON string.
      mapView.mapStyle = try GMSMapStyle(jsonString: MapStyle)
    } catch {
      NSLog("One or more of the map styles failed to load. \(error)")
    }

    self.view = mapView
  }
}
      

Objective-C

@implementation MapStylingStringResource

// Paste the JSON string to use.
static NSString *const kMapStyle = @"JSON_STYLE_GOES_HERE";

// Set the status bar style to complement night-mode.
- (UIStatusBarStyle)preferredStatusBarStyle {
  return UIStatusBarStyleLightContent;
}

- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                          longitude:151.20
                                                               zoom:12];
  GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView.myLocationEnabled = YES;

  NSError *error;

  // Set the map style by passing a valid JSON string.
  GMSMapStyle *style = [GMSMapStyle styleWithJSONString:kMapStyle error:&error];

  if (!style) {
    NSLog(@"The style definition could not be loaded: %@", error);
  }

  mapView.mapStyle = style;
  self.view = mapView;
}

@end
      

הצהרת הסגנון הבאה מסתירה נקודות עניין עסקיות (POI) וסמלי תחבורה ציבורית. מדביקים את מחרוזת הסגנון הבאה כערך של המשתנה kMapStyle:

הצהרות בסגנון JSON

במפות עם עיצוב נעשה שימוש בשני מושגים כדי להחיל צבעים ושינויים אחרים בסגנון על המפה:

  • בוררים מציינים את הרכיבים הגיאוגרפיים שאפשר לשנות את הסגנון שלהם במפה. אלה כוללים כבישים, פארקים, גופי מים ועוד, וגם את התוויות שלהם. הבוררים כוללים תכונות ורכיבים, שמצוינים כמאפייני featureType ו-elementType.
  • סגנונות הם מאפייני צבע וחשיפה שאפשר להחיל על רכיבי המפה. הם מגדירים את הצבע המוצג באמצעות שילוב של ערכי גוון, צבע ובהירות/גמא.

תיאור מפורט של אפשרויות העיצוב של JSON זמין בחומר העזרה בנושא עיצוב.

אשף העיצוב של Maps Platform

אפשר להשתמש באשף העיצוב של פלטפורמת מפות Google כדרך מהירה ליצור אובייקט עיצוב בפורמט JSON. ב-SDK של מפות ל-iOS יש תמיכה באותן הצהרות סגנון כמו ב-JavaScript API של מפות.

דוגמאות קוד מלאות

המאגר ApiDemos ב-GitHub כולל דוגמאות שממחישות את השימוש בסגנון.