MapGL 0.1.18

MapGL 0.1.18

Eugene TyutyuevAlexander Volokhin维护。



MapGL 0.1.18

  • Alexander Volokhin和Eugene Tyutyuev创建

2GIS iOS MapGL

Version

2GIS iOS MapGL是一个SDK,它允许您将2GIS地图添加到您的iOS应用程序中。它可以用来自定义界面中的地图,向地图添加自定义标记和标签,绘制路线和自定义形状,并突出地图上的各种对象,如建筑物、道路以及其他。

此SDK使用WebKit来渲染地图。如果您需要更本地的解决方案(例如,如果您不想在应用程序内显示网络内容),请查看iOS Native SDK

完整文档,包括更多使用示例和所有类和方法的高级描述,可以在docs.2gis.com/en/ios/webgl/maps/overview中找到。

获取访问密钥

使用此SDK需要API密钥来连接到2GIS服务器并检索地理数据。此API密钥对于SDK是唯一的,不能与其他2GIS SDK一起使用。要获取密钥,请联系我们 [email protected]

另外,如果您计划在地图上绘制路线,您还需要一个单独的密钥——一个路线API密钥,用于计算和显示最佳路线。要获取它,请填写partner.api.2gis.ru上的表格或通过[email protected]联系我们。

安装

2GIS iOS MapGL可以通过CocoaPods获取。要安装它,请在您的Podfile中添加以下行

pod 'MapGL'

使用

要运行示例应用,请打开HelloSDK.xcworkspace并在Example/HelloSDK/HelloVC.swift中指定您的API密钥

enum Constants {
    static let apiKey = "YOUR_MAPGL_KEY"
    static let directionsApiKey = "YOUR_DIRECTIONS_KEY"
}

创建地图控件

要显示地图,首先将一个MapView添加到您的界面中。MapView是从UIView继承而来的,因此您可以使用Storyboard、XIB或使用编程方式创建

let map = MapView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

然后,通过调用show()方法并传递您的API密钥来初始化控件。您还可以传递初始坐标和所需的缩放级别。有关选项的完整列表,请参阅API参考

例如,以下代码将在克里姆林宫周围显示莫斯科的地图

map.show(
    apiKey: "Your API key",
    center: CLLocationCoordinate2D(latitude: 55.7516, longitude: 37.6179),
    zoom: 16
)

kremlin

要在地图初始化后进行某些操作,您可以编写一个尾随闭包

map.show(apiKey: "Your API key") { _ in
    // closure body
}

添加标记

您可以在地图上添加任意数量的标记。要添加标记,请实例化类,并在地图初始化后将其对象传递给

map.show(apiKey: "Your API key") { _ in
    let marker = Marker(coordinates: CLLocationCoordinate2D(latitude: 55.7516, longitude: 37.6179))
    map.add(marker)
}

kremlin-marker

此外,您还可以更改标记的样式。您可以指定image(作为)和anchor(图像热点应位于的位置)。有关如何指定锚点的更多信息,请参阅API参考

anchor

let marker = Marker(
    coordinates: CLLocationCoordinate2D(latitude: 55.7516, longitude: 37.6179),
    image: UIImage(named: "pin")!,
    anchor: .bottom
)

要切换标记的可见性,您可以使用方法

marker.hide()
marker.show()

添加标签

您可以在地图上添加多个文本标签。要添加标签,通过指定坐标、标签文本、文字颜色(以UIColor的形式)和字体大小来实例化Label类。然后,将得到的对象传递给地图的add()方法。

map.show(apiKey: "Your API key") { _ in
    let label = Label(
        center: CLLocationCoordinate2D(latitude: 55.7517, longitude: 37.6179),
        text: "The Kremlin label",
        color: .white,
        fontSize: 14
    )
    map.add(label)
}

kremlin-label

要隐藏标签,可以使用hide()方法。要再次显示它,请使用show()方法。

label.hide()
label.show()

绘制自定义形状

除了图像标记和文本标签,您还可以在地图上绘制自定义形状,如线条、圆和多边形。对于每种形状,您需要指定坐标和颜色。另外,您还可以指定Z-order来在这些形状之间分层。

绘制线条

要在地图上绘制线条,请实例化Polyline类,并将得到的对象传递给地图的add()方法。

Polyline有两个类型的参数:线条点的坐标(CLLocationCoordinate2D数组)和最多三个PolylineStyle对象来修饰线条。

简单来说,线条可以由最多三条并列的子线条组成。每条子线由独立的参数修饰(style1用于最上方的子线,style2用于中间的子线,style3用于最下方的子线)。style2style3可以省略,以绘制没有子线的线条。

例如,为了在两点之间绘制简单的线条,您可以使用以下类似代码

let polyline = Polyline(
    points: [
        CLLocationCoordinate2D(latitude: 55.752164, longitude: 37.615487),
        CLLocationCoordinate2D(latitude: 55.751691, longitude: 37.621339)
    ],
    style1: PolylineStyle(color: .blue, width: 5)
)
map.add(polyline)

kremlin-line1

作为一个更复杂的例子,为了绘制由三点连接并具有三条子线的线条,您可以使用以下代码

let polyline = Polyline(
    points: [
        CLLocationCoordinate2D(latitude: 37.615104, longitude: 55.752375),
        CLLocationCoordinate2D(latitude: 37.618022, longitude: 55.752459),
        CLLocationCoordinate2D(latitude: 37.615189, longitude: 55.750829),
        CLLocationCoordinate2D(latitude: 37.617936, longitude: 55.750865)
    ],
    style1: PolylineStyle(color: .blue, width: 6),
    style2: PolylineStyle(color: .white, width: 10),
    style3: PolylineStyle(color: .black, width: 12)
)
map.add(polyline)

kremlin-line2

在这个例子中,有一条白色线条在蓝色线条下方绘制,一条黑色线条在白色线条下方绘制。它们共同创建了一条双线效果。

绘制圆

要在地图上画圆,请创建Circle类实例,并将其对象传递给地图的add()方法。

Circle类有几个参数。要指定圆的中心坐标和大小,分别指定center(坐标)和radius(单位:米)。要指定填充颜色,请使用fillColor(如UIColor)。要指定描边颜色和宽度,请使用strokeColorstrokeWidth。最后,要指定Z顺序,请使用z参数。

let circle = Circle(
    center: CLLocationCoordinate2D(latitude: 55.7516, longitude: 37.6179),
    radius: 100,
    fillColor: UIColor.blue.withAlphaComponent(0.2),
    strokeColor: .blue,
    strokeWidth: 2,
    z: 5
)
map.add(circle)

kremlin-circle

绘制多边形

要在地图上绘制多边形,请创建Polygon类实例,并将其对象传递给地图的add()方法。

Polygon有几个参数。要指定多边形顶点的坐标,请将points参数指定为一个包含CLLocationCoordinate2D的数组。要指定填充颜色,请使用fillColor(如UIColor)。要指定描边颜色和宽度,请使用strokeColorstrokeWidth。最后,要指定Z顺序,请使用z参数。

let polygon = Polygon(
    points: [
        CLLocationCoordinate2D(latitude: 55.7526, longitude: 37.6179),
        CLLocationCoordinate2D(latitude: 55.7506, longitude: 37.6161),
        CLLocationCoordinate2D(latitude: 55.7506, longitude: 37.6197)
    ],
    fillColor: UIColor.blue.withAlphaComponent(0.2),
    strokeColor: .blue,
    strokeWidth: 2,
    z: 5
)
map.add(polygon)

kremlin-polygon

处理触摸事件

要接收触摸坐标,可以在地图上注册点击监听器

map.mapClick = { coordinates in
    let latitude = coordinates.latitude
}

要获取被点击对象的ID(建筑、道路、标记、自定义形状等),可以实现可选方法MapViewDelegate协议

func mapView(_ mapView: MapView, didSelectObject object: MapObject) {
    let objectId = object.id
}

然后可以使用对象的ID在地图上突出显示该对象(见突出显示对象)。相同的ID也可以用于通过地点API获取对象的完整信息,因为所有API中的ID都是相同的。

突出显示对象

您可以为地图对象,如建筑、道路等,添加高亮显示。

要这样做,请调用setSelectedObjects()方法并将需要高亮的对象的ID数组传递给它。您可以通过向地图添加点击监听器来获取ID(见处理触摸事件部分)。

map.setSelectedObjects(["48231504731808815", "23520539192555249"])

highlight

要更改突出显示对象的列表,只需再次调用此方法,并传递新的ID数组。

要禁用高亮显示,将空数组传递给setSelectedObjects()方法

map.setSelectedObjects([])

路线

如果您有方向API密钥,您可以在地图上绘制路线。

要绘制路线,首先通过调用方向对象并传入您的密钥来创建一个makeDirections()方法。

let directions = map.makeDirections(with: "Your Directions API key")

然后,您可以调用showCarRoute()方法,并传递最多10个坐标的数组来计算和显示一条最佳路线。

directions.showCarRoute(points: [
    CLLocationCoordinate2D(latitude: 55.746069, longitude: 37.622074),
    CLLocationCoordinate2D(latitude: 55.747313, longitude: 37.615573)
])

route

要隐藏路线,调用clear()方法。

directions.clear()

授权

2GIS iOS MapGL受BSD 2-Clause "简化"授权许可。更多信息请参阅LICENSE文件。