Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Tangram ES untuk iOS dengan Amazon Location Service
Tangram ES
Gaya Tangram yang dibuat untuk bekerja dengan skema Tilezen sebagian
-
Bubble Wrap
- Gaya wayfinding berfitur lengkap dengan ikon bermanfaat untuk tempat menarik -
Cinnabar
— Tampilan klasik dan pilihan untuk aplikasi pemetaan umum -
Isi Ulang
— Gaya peta minimalis yang dirancang untuk hamparan visualisasi data, terinspirasi oleh gaya Toner mani oleh Stamen Design -
Tron
— Eksplorasi transformasi skala dalam bahasa visual TRON -
Walkabout
— Gaya yang berfokus pada luar ruangan yang sempurna untuk hiking atau keluar dan berkeliling
Panduan ini menjelaskan cara mengintegrasikan Tangram ES untuk iOS dengan Lokasi Amazon menggunakan gaya Tangram yang disebut Cinnabar. Sampel ini tersedia sebagai bagian dari repositori sampel Amazon Location Service di. GitHub
Sementara gaya Tangram lainnya paling baik disertai dengan ubin raster, yang menyandikan informasi medan, fitur ini belum didukung oleh Amazon Location.
penting
Gaya Tangram dalam tutorial berikut hanya kompatibel dengan sumber daya peta Lokasi Amazon yang dikonfigurasi dengan VectorHereContrast
gaya.
Membangun aplikasi: Inisialisasi
Untuk menginisialisasi aplikasi:
-
Buat proyek Xcode baru dari template App.
-
Pilih SwiftUI untuk antarmukanya.
-
Pilih aplikasi SwiftUI untuk Siklus Hidupnya.
-
Pilih Swift untuk bahasanya.
Membangun aplikasi: Tambahkan dependensi
Untuk menambahkan dependensi, Anda dapat menggunakan manajer dependensi, seperti: CocoaPods
-
Di terminal Anda, instal CocoaPods:
sudo gem install cocoapods
-
Arahkan ke direktori proyek aplikasi Anda dan inisialisasi Podfile dengan manajer CocoaPods paket:
pod init
-
Buka Podfile untuk menambahkan
AWSCore
danTangram-es
sebagai dependensi:platform :ios, '12.0' target 'Amazon Location Service Demo' do use_frameworks! pod 'AWSCore' pod 'Tangram-es' end
-
Unduh dan instal dependensi:
pod install --repo-update
-
Buka ruang kerja Xcode yang membuat CocoaPods :
xed .
Membangun aplikasi: Konfigurasi
Tambahkan kunci dan nilai berikut ke Info.plist untuk mengkonfigurasi aplikasi dan menonaktifkan telemetri:
Kunci | Nilai |
---|---|
AWSRegion | us-east-1 |
IdentityPoolId | us-timur- 1:54 f2ba88-9390-498d-aaa5-0d97fb7ca3bd |
MapName | ExampleMap |
Adegan URL | https://www.nextzen. org/carto/cinnabar-style/9/cinnabar-style.zip |
Membangun aplikasi: ContentView tata letak
Untuk merender peta, editContentView.swift
:
-
Tambahkan
MapView
yang membuat peta. -
Tambahkan
TextField
yang menampilkan atribusi.
Ini juga menetapkan titik pusat awal peta.
catatan
Anda harus memberikan tanda kata atau atribusi teks untuk setiap penyedia data yang Anda gunakan, baik pada aplikasi atau dokumentasi Anda. String atribusi disertakan dalam respons deskriptor gaya di bawahsources.esri.attribution
,sources.here.attribution
, dan kunci. source.grabmaptiles.attribution
Saat menggunakan sumber daya Lokasi Amazon dengan penyedia data, pastikan untuk membaca syarat dan ketentuan layanan
import SwiftUI import TangramMap struct ContentView: View { var body: some View { MapView() .cameraPosition(TGCameraPosition( center: CLLocationCoordinate2DMake(49.2819, -123.1187), zoom: 10, bearing: 0, pitch: 0)) .edgesIgnoringSafeArea(.all) .overlay( Text("© 2020 HERE") .disabled(true) .font(.system(size: 12, weight: .light, design: .default)) .foregroundColor(.black) .background(Color.init(Color.RGBColorSpace.sRGB, white: 0.5, opacity: 0.5)) .cornerRadius(1), alignment: .bottomTrailing) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Membangun aplikasi: Minta transformasi
Buat file Swift baru bernama AWSSignatureV4URLHandler.swift
berisi definisi kelas berikut untuk mencegat AWS permintaan dan menandatanganinya menggunakan Signature Version 4. Ini akan didaftarkan sebagai URL pawang di MapView
Tangram.
import AWSCore import TangramMap class AWSSignatureV4URLHandler: TGDefaultURLHandler { private let region: AWSRegionType private let identityPoolId: String private let credentialsProvider: AWSCredentialsProvider init(region: AWSRegionType, identityPoolId: String) { self.region = region self.identityPoolId = identityPoolId self.credentialsProvider = AWSCognitoCredentialsProvider(regionType: region, identityPoolId: identityPoolId) super.init() } override func downloadRequestAsync(_ url: URL, completionHandler: @escaping TGDownloadCompletionHandler) -> UInt { if url.host?.contains("amazonaws.com") != true { // not an AWS URL return super.downloadRequestAsync(url, completionHandler: completionHandler) } // URL-encode spaces, etc. let keyPath = String(url.path.dropFirst()) guard let keyPathSafe = keyPath.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { print("Invalid characters in path '\(keyPath)'; unsafe to sign") return super.downloadRequestAsync(url, completionHandler: completionHandler) } // sign the URL let endpoint = AWSEndpoint(region: region, serviceName: "geo", url: url) let requestHeaders: [String: String] = ["host": endpoint!.hostName] let task = AWSSignatureV4Signer .generateQueryStringForSignatureV4( withCredentialProvider: credentialsProvider, httpMethod: .GET, expireDuration: 60, endpoint: endpoint!, keyPath: keyPathSafe, requestHeaders: requestHeaders, requestParameters: .none, signBody: true) task.waitUntilFinished() if let error = task.error as NSError? { print("Error occurred: \(error)") } if let result = task.result { // have Tangram fetch the signed URL return super.downloadRequestAsync(result as URL, completionHandler: completionHandler) } // fall back to an unsigned URL return super.downloadRequestAsync(url, completionHandler: completionHandler) } }
Membangun aplikasi: Tampilan peta
Tampilan peta bertanggung jawab untuk menginisialisasi instance AWSSignatureV4Delegate
dan mengonfigurasi yang mendasarinyaMGLMapView
, yang mengambil sumber daya dan merender peta. Ini juga menangani penyebaran string atribusi dari sumber deskriptor gaya kembali ke. ContentView
Buat file Swift baru bernama MapView.swift
berisi struct
definisi berikut:
import AWSCore import TangramMap import SwiftUI struct MapView: UIViewRepresentable { private let mapView: TGMapView init() { let regionName = Bundle.main.object(forInfoDictionaryKey: "AWSRegion") as! String let identityPoolId = Bundle.main.object(forInfoDictionaryKey: "IdentityPoolId") as! String let mapName = Bundle.main.object(forInfoDictionaryKey: "MapName") as! String let sceneURL = URL(string: Bundle.main.object(forInfoDictionaryKey: "SceneURL") as! String)! let region = (regionName as NSString).aws_regionTypeValue() // rewrite tile URLs to point at AWS resources let sceneUpdates = [ TGSceneUpdate(path: "sources.mapzen.url", value: "https://maps.geo.\(regionName).amazonaws.com/maps/v0/maps/\(mapName)/tiles/{z}/{x}/{y}")] // instantiate a TGURLHandler that will sign AWS requests let urlHandler = AWSSignatureV4URLHandler(region: region, identityPoolId: identityPoolId) // instantiate the map view and attach the URL handler mapView = TGMapView(frame: .zero, urlHandler: urlHandler) // load the map style and apply scene updates (properties modified at runtime) mapView.loadScene(from: sceneURL, with: sceneUpdates) } func cameraPosition(_ cameraPosition: TGCameraPosition) -> MapView { mapView.cameraPosition = cameraPosition return self } // MARK: - UIViewRepresentable protocol func makeUIView(context: Context) -> TGMapView { return mapView } func updateUIView(_ uiView: TGMapView, context: Context) { } }
Menjalankan aplikasi ini menampilkan peta layar penuh dengan gaya yang Anda pilih. Sampel ini tersedia sebagai bagian dari repositori sampel Amazon Location Service di. GitHub