MKMapView 边界

Posted

技术标签:

【中文标题】MKMapView 边界【英文标题】:MKMapView Bounds 【发布时间】:2019-06-11 18:19:47 【问题描述】:

我要从 Google 地图转到 Apple 地图。 Google 地图能够根据东北和西南坐标更新相机,如下所示:

let bounds = GMSCameraUpdate.fit(GMSCoordinateBounds(northEastSouthWestBounds), with: .zero)
self.mapView.moveCamera(bounds)

我知道我可以使用setVisibleMapRect(_:animated:),它接受MKMapRect。我真正的问题是如何根据东北坐标(CLLocation)和西南坐标(CLLocation)创建MKMapRect

【问题讨论】:

看看这段MapKit 文档。看起来heading 是您要修改的属性。 感谢您的回复,但我相信heading 指的是别的东西。地图正北的度数偏移 你是对的。误读了你的问题。 @fhipllipe 答案就是你要找的。​​span> 【参考方案1】:

根据您的坐标构造一个MKMapRect 并将其传递给setVisibleMapRect(_:animated:)setVisibleMapRect(_:edgePadding:animated:)

从不同点类型的数组创建MKMapRect

import MapKit

extension Array where Element == CLLocationCoordinate2D 
    func mapRect() -> MKMapRect? 
        return map(MKMapPoint.init).mapRect()
    


extension Array where Element == CLLocation 
    func mapRect() -> MKMapRect? 
        return map  MKMapPoint($0.coordinate) .mapRect()
    


extension Array where Element == MKMapPoint 
    func mapRect() -> MKMapRect? 
        guard count > 0 else  return nil 

        let xs = map  $0.x 
        let ys = map  $0.y 

        let west = xs.min()!
        let east = xs.max()!
        let width = east - west

        let south = ys.min()!
        let north = ys.max()!
        let height = north - south

        return MKMapRect(x: west, y: south, width: width, height: height)
    

【讨论】:

我想这是我真正的问题,应该更新我的帖子。如何从边界创建 MKMapRect? 什么是“界限”?是MKMapPoint 的数组还是CLLocationCoordinate2D 的数组? 我已更新答案以返回需要使用 MKMapPoint 的正确值。 非常感谢!这就是我一直在寻找的。​​span>

以上是关于MKMapView 边界的主要内容,如果未能解决你的问题,请参考以下文章

MKMapView 区域在 iOS7 中方向更改后损坏

MKMapView中心坐标不准确

MKMapView 和响应者链

MKMapView 的圆角

在 MKMapView 中释放缓存

加载 MKMapView 时崩溃