查看原文
其他

教程 | 10分钟入门Mapbox iOS SDK

Mapbox Mapbox 2019-06-01


Mapbox iOS SDK 是Mapbox针对 iOS 系统的矢量地图库。今天我们来教大家如何使用Cocoapod 来安装 Mapbox iOS SDK,并通过 Xcode 载入地图、改变地图样式(style)、添加一个几何图形(polygon)等操作。


开发工具:


  • Xcode 8.0 以上 (可以在 Mac App Store 中免费获取);

  • Swift 3.0 (Xcode 自带);

  • Cocoapod (没有安装可以在 Terminal 输入 sudo gem install cocoapods);

  • 一个Mapbox的访问Token(可在https://www.mapbox.com/studio/ 获得);



配置开发环境:


打开Xcode,依次点击 File ‣ New ‣ Project 创建新项目。找到 iOS 下的 Application 选项,选择Single View Application模板。 


将新项目命名为My First MapboxApp。Language选择Swift,Devices选择Universal。该步骤将引导你创建一个 iPhone/iPad 应用程序。 


完成后你就会看到你的项目一览:


设置您的access token


要在你的应用中显示 Mapbox 提供的地图,需要将你的access token 添加到该应用程序的 Info.plist 文件中(Info.plist 是一个文本文件,包含了你的应用的基础信息,如版本号、 APP名称等)。

设置步骤:

1. 在 Project navigator(左侧边栏中)找到Info.plist选项。 

2. 选中最开始的“Information Property List”一行,然后点击Editor ‣ Add Item。 

3. 将新插入行的 Key 设为 MGLMapboxAccessToken,并设置访问令牌的 Value。


Access token 是用来在和Mapbox服务器沟通时用来辨识当前用户的。


使用Cocoapod 导入Mapbox iOS SDK


Cocoapod 是一个在 iOS开发中用得比较多的依赖管理工具,当你的的项目用到很多第三方库的时候Cocoapod 可以帮你很好的管理它们。 你也不必去手动下载和配置SDK,Cocoapod会帮你完成90%的配置工作。

在 Project navigator(左侧边栏中),右击选择New File... ‣ Empty 然后键入Podfile。

Podfile 内容为:

platform :ios, '8.0' target ‘My First MapboxApp' do  pod 'Mapbox-iOS-SDK', '~> 3.6' end

打开Terminal, 把当前目录变到项目的根目录,然后键入命令:

pod install

Cocoapod 会下载然后配置好你的项目。完成后关掉Xcode,找到你的项目目录,打开

My First MapboxApp.xcworkspace 文件,这个文件就是Cocoapod帮你生成的项目文件。


使用代码添加地图


添加一个默认地图


我们的新开的项目里有一个ViewController.swift 的文件,这个文件是一个ViewController类,主要作用是来管理数据和视觉元素,在IOS开发中是很重要的一个角色。打开ViewController.swift, 在viewDidLoad 的方法下添加下列代码:

override func viewDidLoad() {    super.viewDidLoad()    let mapView = MGLMapView(frame: view.bounds)    mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]    mapView.setCenter(CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), zoomLevel: 9, animated: false)    view.addSubview(mapView) }

现在你已经成功添加了一个地图视图,那么我们来试试看。选择一个 iPhone 型号,然后点击左边的 Play 按钮进行测试。你应该可以看到下列效果:


改变地图样式地图


Mapbox最大的卖点就是可自定义地图,除了在Map Studio上面定制个性化的地图,我们的SDK也提供了几款漂亮的样式供您参考。SDK默认提供的以下样式:

  • StreetsStyle(街道)

  • OutdoorStyle(户外)

  • DarkStyle(暗色)

  • SatelliteStyle(卫星)

  • SatelliteStreetsStyle(卫星街道)

  • TrafficDayStyle(交通日)

  • TrafficNightStyle (交通夜)


下面的代码使用卫星街道样式:

override func viewDidLoad() {    super.viewDidLoad()    let mapView = MGLMapView(frame: view.bounds)    let streetStyle = MGLStyle.satelliteStreetsStyleURL()    mapView.styleURL = streetStyle    mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]    // Set the map’s center coordinate and zoom level.    mapView.setCenter(CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), zoomLevel: 12, animated: false)    view.addSubview(mapView) }

效果如下:


添加Polygon(多边形)


对于大多数用户来说,光一个地图是远远不够的,在地图上加入(annotation)注释和几何图形是必要的。下面我会简单介绍一下如何在Mapbox 地图上添加几何图形。


在代码中导入Mapbox framework:

import Mapbox

加入一个公共变量:

var mapView: MGLMapView!

在viewDidLoad中添加地图然后设置代理:

override func viewDidLoad() {    super.viewDidLoad()    mapView = MGLMapView(frame: view.bounds)    let streetStyle = MGLStyle.satelliteStreetsStyleURL()    mapView.styleURL = streetStyle    mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]    // Set the map’s center coordinate and zoom level.    mapView.setCenter(CLLocationCoordinate2D(latitude: 45.520486, longitude: -122.673541), zoomLevel: 11, animated: false)    view.addSubview(mapView)    mapView.delegate = self }

让当前类满足代理:

class ViewController: UIViewController, MGLMapViewDelegate

在viewDidAppear中开启几何图层:

override func viewDidAppear(_ animated: Bool) {    // Draw the polygon after the map has initialized    drawShape() } func drawShape() {    // Create a coordinates array to hold all of the coordinates for our shape.    var coordinates = [        CLLocationCoordinate2D(latitude: 45.522585, longitude: -122.685699),        CLLocationCoordinate2D(latitude: 45.534611, longitude: -122.708873),        CLLocationCoordinate2D(latitude: 45.530883, longitude: -122.678833),        CLLocationCoordinate2D(latitude: 45.547115, longitude: -122.667503),        CLLocationCoordinate2D(latitude: 45.530643, longitude: -122.660121),        CLLocationCoordinate2D(latitude: 45.533529, longitude: -122.636260),        CLLocationCoordinate2D(latitude: 45.521743, longitude: -122.659091),        CLLocationCoordinate2D(latitude: 45.510677, longitude: -122.648792),        CLLocationCoordinate2D(latitude: 45.515008, longitude: -122.664070),        CLLocationCoordinate2D(latitude: 45.502496, longitude: -122.669048),        CLLocationCoordinate2D(latitude: 45.515369, longitude: -122.678489),        CLLocationCoordinate2D(latitude: 45.506346, longitude: -122.702007),        CLLocationCoordinate2D(latitude: 45.522585, longitude: -122.685699)    ]    let shape = MGLPolygon(coordinates: &coordinates, count: UInt(coordinates.count))    mapView.addAnnotation(shape) }


实现代理方法,通过以下几个方法来控制几何图形的颜色与透明度:

func mapView(_ mapView: MGLMapView, alphaForShapeAnnotation annotation: MGLShape) -> CGFloat {    return 0.5 } func mapView(_ mapView: MGLMapView, strokeColorForShapeAnnotation annotation: MGLShape) -> UIColor {    return .white } func mapView(_ mapView: MGLMapView, fillColorForPolygonAnnotation annotation: MGLPolygon) -> UIColor {    return UIColor(red: 59/255, green: 178/255, blue: 208/255, alpha: 1) }


最终结果如下:


小结


通过以上步骤,我们已经用 Mapbox iOS SDK 创建了一个小的地图应用程序。


我们会同步更新操作指南,帮助您掌握 Mapbox 所有厉害的功能。下面的一些相关资源可以帮助你跟进 Mapbox 的更新动态:



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存