Bentuk

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Pilih platform: Android iOS JavaScript

Maps SDK for iOS menawarkan beberapa cara sederhana untuk menambahkan bentuk ke peta Anda. Bentuk berikut ini telah didukung:

  • Polyline adalah serangkaian segmen garis terhubung yang dapat membentuk bentuk apa pun yang Anda inginkan dan bisa digunakan untuk menandai jalur dan rute pada peta.
  • Poligon adalah bentuk tertutup yang dapat digunakan untuk menandai area pada peta.
  • Lingkaran adalah proyeksi lingkaran yang akurat secara geografis pada permukaan Bumi.

Anda bisa memodifikasi penampilan setiap bentuk dalam beberapa cara.

Polyline

Polyline memungkinkan Anda menggambar garis pada peta. Objek GMSPolyline mewakili urutan lokasi yang diurutkan, dan ditampilkan sebagai serangkaian segmen garis. Anda dapat menetapkan warna polyline dengan GMSStrokeStyle.

Untuk membuat polyline, Anda harus menetapkan jalurnya dengan membuat objek GMSMutablePath yang sesuai dengan dua titik atau lebih. Setiap CLLocationCoordinate2D mewakili titik di permukaan bumi. Segmen garis digambar di antara titik sesuai dengan urutan Anda menambahkannya ke jalur. Anda dapat menambahkan titik ke jalur dengan metode addCoordinate: atau addLatitude:longitude:.

Swift

let path = GMSMutablePath()
path.add(CLLocationCoordinate2D(latitude: -33.85, longitude: 151.20))
path.add(CLLocationCoordinate2D(latitude: -33.70, longitude: 151.40))
path.add(CLLocationCoordinate2D(latitude: -33.73, longitude: 151.41))
let polyline = GMSPolyline(path: path)
      

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addCoordinate:CLLocationCoordinate2DMake(-33.85, 151.20)];
[path addCoordinate:CLLocationCoordinate2DMake(-33.70, 151.40)];
[path addCoordinate:CLLocationCoordinate2DMake(-33.73, 151.41)];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
      

Menambahkan polyline

  1. Buat objek GMSMutablePath.
  2. Tetapkan titik di jalur dengan metode addCoordinate: atau addLatitude:longitude:.
  3. Buat instance objek GMSPolyline baru menggunakan jalur sebagai argumen.
  4. Tetapkan properti lain, seperti strokeWidth dan strokeColor, sesuai keinginan.
  5. Tetapkan properti map dari GMSPolyline.
  6. Polyline akan muncul pada peta.

Cuplikan kode berikut menambahkan persegi panjang ke peta:

Swift

let rectanglePath = GMSMutablePath()
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))

let rectangle = GMSPolyline(path: path)
rectangle.map = mapView
      

Objective-C

GMSMutablePath *rectanglePath = [GMSMutablePath path];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];

GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
rectangle.map = mapView;
      

Polyline persegi panjang

Menghapus polyline

Anda dapat menghapus polyline dari peta dengan menetapkan properti map GMSPolyline ke nil. Atau, Anda dapat menghapus semua overlay (termasuk polyline dan bentuk lainnya) saat ini di peta dengan memanggil metode GMSMapView clear.

Swift

mapView.clear()
      

Objective-C

[mapView clear];
      

Menyesuaikan polyline

Objek GMSPolyline menyediakan beberapa properti untuk mengontrol tampilan garis. Ini mendukung opsi berikut:

strokeWidth
Lebar seluruh baris, dalam titik layar. Default-nya adalah 1. Lebarnya tidak diskalakan jika peta di-zoom.
geodesic
Saat YES, render tepi polyline ini sebagai geodesi. Segmen geodesi mengikuti jalur terpendek sepanjang permukaan Bumi dan dapat muncul sebagai garis melengkung pada peta dengan proyeksi Mercator. Segmen non-geodesi digambar sebagai garis lurus pada peta. Nilai defaultnya adalah NO.
spans
Digunakan untuk menentukan warna satu atau beberapa segmen polyline. Properti span adalah array objek GMSStyleSpan. Menetapkan properti spans adalah cara yang lebih disukai untuk mengubah warna polyline.
strokeColor
Objek UIColor yang menentukan warna polyline. Nilai defaultnya adalah blueColor. Properti strokeColor akan diabaikan jika spans ditetapkan.

Cuplikan berikut menambahkan polyline tebal dari Melbourne ke Perth, dengan interpolasi geodesi.

Swift

let path = GMSMutablePath()
path.addLatitude(-37.81319, longitude: 144.96298)
path.addLatitude(-31.95285, longitude: 115.85734)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 10.0
polyline.geodesic = true
polyline.map = mapView
      

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeWidth = 10.f;
polyline.geodesic = YES;
polyline.map = mapView;
      

Untuk memodifikasi polyline setelah ditambahkan ke peta, pastikan untuk mempertahankan objek GMSPolyline.

Swift

polyline.strokeColor = .blue
      

Objective-C

polyline.strokeColor = [UIColor blueColor];
      

Mengubah warna polyline

Polyline digambar sebagai serangkaian segmen pada peta. Anda dapat mengubah warna segmen individual, atau seluruh baris, dengan properti spans. Meskipun properti ini memberi Anda kontrol mendetail atas pewarnaan polyline, ada beberapa kemudahan yang memudahkan penerapan satu gaya ke seluruh baris.

Cuplikan di bawah ini menggunakan metode spanWithColor: untuk mengubah warna seluruh baris menjadi merah.

Swift

polyline.spans = [GMSStyleSpan(color: .red)]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
      

Atau, jika sudah memiliki akses ke objek GMSStrokeStyle, Anda dapat menggunakan metode spanWithStyle:.

Swift

let solidRed = GMSStrokeStyle.solidColor(.red)
polyline.spans = [GMSStyleSpan(style: solidRed)]
      

Objective-C

GMSStrokeStyle *solidRed = [GMSStrokeStyle solidColor:[UIColor redColor]];
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed]];
      

Sebelum versi 1.7 Maps SDK for iOS, satu properti strokeColor tersedia untuk menetapkan seluruh warna GMSPolyline. Properti spans lebih diprioritaskan daripada strokeColor.

Swift

polyline.strokeColor = .red
      

Objective-C

polyline.strokeColor = [UIColor redColor];
      

Gaya

Jika aplikasi Anda menerapkan warna guratan yang sama beberapa kali, sebaiknya tentukan gaya yang dapat digunakan kembali. Gaya polyline ditentukan menggunakan objek GMSStrokeStyle. Gaya guratan dapat berupa warna solid atau gradien dari satu warna ke warna lain. Setelah membuat gaya, Anda dapat menerapkannya ke GMSStyleSpan dengan metode spanWithStyle:.

Swift

// Create two styles: one that is solid blue, and one that is a gradient from red to yellow
let solidBlue = GMSStrokeStyle.solidColor(.blue)
let solidBlueSpan = GMSStyleSpan(style: solidBlue)
let redYellow = GMSStrokeStyle.gradient(from: .red, to: .yellow)
let redYellowSpan = GMSStyleSpan(style: redYellow)
      

Objective-C

// Create two styles: one that is solid blue, and one that is a gradient from red to yellow
GMSStrokeStyle *solidBlue = [GMSStrokeStyle solidColor:[UIColor blueColor]];
GMSStyleSpan *solidBlueSpan = [GMSStyleSpan spanWithStyle:solidBlue];
GMSStrokeStyle *redYellow =
    [GMSStrokeStyle gradientFromColor:[UIColor redColor] toColor:[UIColor yellowColor]];
GMSStyleSpan *redYellowSpan = [GMSStyleSpan spanWithStyle:redYellow];
      

Gaya span akan berlanjut hingga akhir polyline, atau hingga gaya baru ditetapkan. Anda dapat mengubah warna seluruh baris dengan menetapkan properti spans polyline ke satu GMSStyleSpan Cuplikan di bawah ini menunjukkan cara menerapkan gradien ke seluruh panjang polyline.

Swift

polyline.spans = [GMSStyleSpan(style: redYellow)]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:redYellow]];
      

Mengubah warna segmen garis individual

Jika Anda ingin menata gaya setiap segmen polyline satu per satu, Anda dapat melakukannya dengan membuat array objek GMSStyleSpan, dan meneruskannya ke properti spans. Secara default, setiap item dalam array akan menetapkan warna segmen garis yang sesuai. Jika lebih banyak elemen dalam array daripada segmen di garis, elemen tambahan akan diabaikan. Jika lebih sedikit elemen dalam array, GMSStyleSpan akhir akan mendeskripsikan warna untuk sisa baris.

Anda dapat menggunakan blok warna dan/atau polyline gradien untuk menunjukkan perubahan di sepanjang polyline Anda seperti ketinggian atau kecepatan. Cuplikan di bawah ini menetapkan warna dua segmen pertama polyline ke merah, dan sisa garisnya adalah gradien dari merah ke kuning.

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: redYellow)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed],
                   [GMSStyleSpan spanWithStyle:solidRed],
                   [GMSStyleSpan spanWithStyle:redYellow]];
      

Anda dapat menggunakan metode spanWithStyle:segments: untuk menetapkan gaya beberapa segmen sekaligus. Misalnya, kode berikut setara dengan yang di atas. Panjang segmen GMSStyleSpan akhir akan selalu diabaikan karena gaya akan digunakan untuk menjelaskan sisa baris.

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed, segments:2),
  GMSStyleSpan(style: redYellow, segments:10)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2],
                   [GMSStyleSpan spanWithStyle:redYellow segments:10]];
      

Segmen pecahan

Segmen juga bisa ditetapkan sebagai nilai pecahan. Ini akan menerapkan gaya ke jumlah pecahan segmen, yang berpotensi menyebabkan pemisahan segmen tunggal. Setiap GMSStyleSpan dimulai tepat setelah segmen sebelumnya: pada contoh di bawah, warna abu-abu akan dimulai dari 1⁄2 hingga segmen kedua dan berlanjut ke 1⁄2 hingga segmen ketiga.

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed, segments: 2.5),
  GMSStyleSpan(color: .gray),
  GMSStyleSpan(color: .purple, segments: 0.75),
  GMSStyleSpan(style: redYellow)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2.5],
                   [GMSStyleSpan spanWithColor:[UIColor grayColor]],
                   [GMSStyleSpan spanWithColor:[UIColor purpleColor] segments:0.75],
                   [GMSStyleSpan spanWithStyle:redYellow]];
      

Menambahkan pola warna berulang ke polyline

Jika ingin menambahkan pola ke polyline, Anda dapat menggunakan metode utilitas GMSStyleSpans di GMSGeometryUtils. Metode GMSStyleSpans menerima dua array yang menentukan pola berulang. Satu array menetapkan gaya yang harus diulang, dan yang lainnya menentukan interval pengulangan. Jika digunakan bersama-sama, Anda dapat membuat pola yang dapat diterapkan ke seluruh polyline, berapa pun durasinya atau jumlah segmen yang tersedia.

Misalnya, cuplikan kode di bawah ini menentukan polyline dengan pola alternatif hitam dan putih. Panjangnya diperlakukan sebagai meter di sepanjang garis rhumb (di Mercator, ini adalah garis lurus) karena jenisnya ditetapkan sebagai kGMSLengthRhumb.

Swift

let styles = [
  GMSStrokeStyle.solidColor(.white),
  GMSStrokeStyle.solidColor(.black)
]
let lengths: [NSNumber] = [100000, 50000]
polyline.spans = GMSStyleSpans(
  polyline.path!,
  styles,
  lengths,
  GMSLengthKind.rhumb
)
      

Objective-C

NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]],
                    [GMSStrokeStyle solidColor:[UIColor blackColor]]];
NSArray *lengths = @[@100000, @50000];
polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
      

Poligon

Poligon mirip dengan polyline karena terdiri dari serangkaian koordinat dalam urutan yang berurutan. Namun, bukannya dibuat terbuka, poligon didesain untuk mendefinisikan region solid dalam loop tertutup. Poligon ditentukan di Maps SDK for iOS oleh class GMSPolygon.

Anda dapat menambahkan GMSPolygon ke peta dengan cara yang sama seperti menambahkan GMSPolyline. Pertama, tentukan jalurnya dengan membuat objek GMSMutablePath yang sesuai dan menambahkan titik ke objek tersebut. Titik-titik ini akan membentuk garis luar poligon. Setiap CLLocationCoordinate2D mewakili titik di permukaan bumi. Segmen garis digambar di antara titik sesuai dengan urutan Anda menambahkannya ke jalur.

Menambahkan poligon

  1. Buat objek GMSMutablePath.
  2. Tetapkan titik di jalur dengan metode addCoordinate: atau addLatitude:longitude:. Titik-titik ini akan membentuk garis luar poligon.
  3. Buat instance objek GMSPolygon baru menggunakan jalur sebagai argumen.
  4. Tetapkan properti lain, seperti strokeWidth, strokeColor, dan fillColor, seperti yang diinginkan.
  5. Tetapkan poligon ke objek GMSMapView dengan menetapkan properti GMSPolygon.map.
  6. Poligon muncul di peta.

Cuplikan kode berikut menambahkan persegi panjang ke peta.

Swift

// Create a rectangular path
let rect = GMSMutablePath()
rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))

// Create the polygon, and assign it to the map.
let polygon = GMSPolygon(path: rect)
polygon.fillColor = UIColor(red: 0.25, green: 0, blue: 0, alpha: 0.05);
polygon.strokeColor = .black
polygon.strokeWidth = 2
polygon.map = mapView
      

Objective-C

// Create a rectangular path
GMSMutablePath *rect = [GMSMutablePath path];
[rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)];

// Create the polygon, and assign it to the map.
GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect];
polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
polygon.strokeColor = [UIColor blackColor];
polygon.strokeWidth = 2;
polygon.map = mapView;
      

Anda dapat menyesuaikan tampilan poligon baik sebelum menambahkannya ke peta maupun setelah ditambahkan ke peta.

Menghapus poligon

Hapus poligon dengan menetapkan properti GMSPolygon.map ke nil dan melepaskan layer dari induknya.

Swift

 polygon.map = nil
 polygon.layer.removeFromSuperLayer()

Objective-C

 polygon.map = nil;
 [polygon.layer removeFromSuperlayer];
 

Lingkaran

Selain class GMSPolygon generik, Maps SDK for iOS juga menyertakan GMSCircle, sehingga Anda dapat menggambar lingkaran di permukaan bumi dengan mudah.

Untuk membuat lingkaran, Anda harus menetapkan dua properti berikut:

  • position sebagai CLLocationCoordinate2D.
  • radius dalam meter.

Sebuah lingkaran kemudian didefinisikan sebagai serangkaian titik di permukaan Bumi yang berjarak radius meter dari center yang diberikan. Karena cara proyeksi Mercator yang digunakan oleh Maps API akan merender bola pada permukaan yang datar, ini akan tampak sebagai lingkaran hampir sempurna pada peta saat berada di dekat ekuator, dan akan tampak semakin bukan-melingkar (pada layar) saat lingkaran bergerak menjauh dari ekuator.

Menambahkan lingkaran

Cuplikan kode berikut menambahkan lingkaran ke peta:

Swift

let circleCenter = CLLocationCoordinate2D(latitude: 37.35, longitude: -122.0)
let circle = GMSCircle(position: circleCenter, radius: 1000)
circle.map = mapView
      

Objective-C

CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0);
GMSCircle *circle = [GMSCircle circleWithPosition:circleCenter
                                         radius:1000];
circle.map = mapView;
      

Anda dapat menyesuaikan tampilan lingkaran baik sebelum menambahkannya ke peta maupun setelah ditambahkan ke peta.

Menyesuaikan lingkaran

Anda dapat menentukan warna dan lebar guratan khusus dengan mengubah properti GMSCircle. Ini mendukung opsi berikut:

fillColor
Objek UIColor yang menentukan warna interior lingkaran. Default-nya adalah transparan.
strokeColor
Objek UIColor yang menentukan warna garis batas lingkaran. Nilai defaultnya adalah blackColor.
strokeWidth
Ketebalan garis luar lingkaran, dalam titik layar. Default-nya adalah 1. Ketebalan tidak diskalakan jika peta di-zoom.

Cuplikan berikut menambahkan lingkaran merah tebal dengan interior merah semi-transparan.

Swift

circle.fillColor = UIColor(red: 0.35, green: 0, blue: 0, alpha: 0.05)
circle.strokeColor = .red
circle.strokeWidth = 5
      

Objective-C

circle.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
circle.strokeColor = [UIColor redColor];
circle.strokeWidth = 5;
      

Membuat poligon kosong

Anda dapat menggabungkan beberapa jalur dalam satu objek GMSPolygon untuk membuat bentuk yang kompleks, seperti cincin yang diisi, atau donat (dengan bidang poligon yang muncul di dalam poligon sebagai bentuk terpisah). Bentuk kompleks adalah komposisi dari beberapa jalur.

Buat poligon dengan jalur yang menentukan bidang terbesar yang dicakup oleh poligon. Kemudian, tentukan properti holes poligon sebagai array dari satu atau beberapa objek GMSPath, yang menentukan lubang dalam poligon.

Jika jalur yang lebih kecil sepenuhnya tertutup oleh jalur yang lebih besar, jalur tersebut akan tampak seperti telah dipotong.

Contoh kode berikut membuat poligon dengan dua lubang:

Swift

let hydeParkLocation = CLLocationCoordinate2D(latitude: -33.87344, longitude: 151.21135)
let camera = GMSCameraPosition.camera(withTarget: hydeParkLocation, zoom: 16)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.animate(to: camera)

let hydePark = "tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD"
let archibaldFountain = "tlvmEqq|y[NNCXSJQOB[TI"
let reflectionPool = "bewmEwk|y[Dm@zAPEj@{AO"

let hollowPolygon = GMSPolygon()
hollowPolygon.path = GMSPath(fromEncodedPath: hydePark)
hollowPolygon.holes = [GMSPath(fromEncodedPath: archibaldFountain)!, GMSPath(fromEncodedPath: reflectionPool)!]
hollowPolygon.fillColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.2)
hollowPolygon.strokeColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
hollowPolygon.strokeWidth = 2
hollowPolygon.map = mapView
      

Objective-C

CLLocationCoordinate2D hydeParkLocation = CLLocationCoordinate2DMake(-33.87344, 151.21135);
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:hydeParkLocation
                                                           zoom:16];
mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

NSString *hydePark = @"tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD";
NSString *archibaldFountain = @"tlvmEqq|y[NNCXSJQOB[TI";
NSString *reflectionPool = @"bewmEwk|y[Dm@zAPEj@{AO";

GMSPolygon *hollowPolygon = [[GMSPolygon alloc] init];
hollowPolygon.path = [GMSPath pathFromEncodedPath:hydePark];
hollowPolygon.holes = @[[GMSPath pathFromEncodedPath:archibaldFountain],
                  [GMSPath pathFromEncodedPath:reflectionPool]];
hollowPolygon.fillColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.2];
hollowPolygon.strokeColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
hollowPolygon.strokeWidth = 2;
hollowPolygon.map = mapView;