理解几何地图
在地图上你要怎么表示点的数据依赖于你想要怎么使用它们.Map Kit支持以下三种基础坐标来表示特定的地图上的点数据:
-
map coordinate(地图坐标):是一种用经纬度来表示的坐标.用
CLLocationCoordinate2D
结构.你可以用MKCoordinateSpan
和MKCoordinateRegion
结构来表示区域. -
map point(地图点):墨卡托地图投影上x和y的值.map point用于许多地图相关的计算,而不是地图坐标,因为它们简化了计算中涉及的数学。在你的app里,您主要在指定自定义地图叠加层的形状和位置时使用地图点。你可以用
MKMapPoint
结构来表示一个单独的map point.你可以用MKMapSize
和MKMapRect
结构来表示一个区域. -
Point是和坐标系统相关联的view对象上的平面单位.Map Point和Map Coordinates在显示自定义内容前都必须转成Points.用
CGPoint
结构表示一个单独的点,用CGSize
和CGRect
来表示一个区域.
坐标系统之间的转换
当你需要时你可以两种坐标系统之间进行转换,比如你要加自定义的覆盖物(overlays)(路线什么的).你要map coordinate转成map point
Convert from | Convert to | Conversion routines |
---|---|---|
Map coordinates | Points | convertCoordinate:toPointToView: (MKMapView),convertRegion:toRectToView: (MKMapView) |
Map coordinates | Map points | MKMapPointForCoordinate |
Map points | Map coordinates | MKCoordinateForMapPoint,MKCoordinateRegionForMapRect |
Map points | Points | pointForMapPoint: (MKOverlayRenderer),rectForMapRect: (MKOverlayRenderer) |
Points | Map coordinates | convertPoint:toCoordinateFromView: (MKMapView),convertRect:toRegionFromView: (MKMapView) |
Points | Map points | mapPointForPoint: (MKOverlayRenderer),mapRectForRect: (MKOverlayRenderer) |
把Map view加到用户界面上.
MKMapView
一个独立的用于展示地图数据的界面.它能提供展示地图数据,管理用户交互和托管自定义内容.决不要把MKMapView
作为父类.
你可以像用普通view
一样使用MKMapView
.任何加到MKMapView
上的子view都会以frame
固定住,不会随着地图一样滚动.如果你希望你到到地图上的view也随着地图滚动,你必须使用annotations
或overlays
(比如:导航的路线).
配置地图属性
MKMapView
类有多个你可以配置的属性.这些属性控制了一些重要的信息,比如当前显示的是哪部分的地图,是否显示3D内容,用户的交互是否允许.
设置地图的显示区域
MKMapView
的region
属性控制了地图的当前显示区域.当一个地图刚被创建时,它的显示区域通常是尽可能大的区域.
typedef struct {
CLLocationCoordinate2D center;
MKCoordinateSpan span;
} MKCoordinateRegion;
span
定义了多大的范围是可见的.它类似于矩形的宽和高,不过它是用度,分,秒来表示的.如果,你指定了一具特定的距离,可以用MKCoordinateRegionMakeWithDistance
来创建一个区域数据结构(用"米"来表示,而不是度).
你赋值给region
属性的值,通常和最终存在这个属性里的值是不一样的.
显示3D地图
一定要检查一下
pitchEnabled
属性,看一下是否支持3D.
一个camera对象用以下属性来定义一个3D地图的显示:
- Altitude(海拔).camera离地表的高度(以米计算).
- Pitch(斜度).0的pitch代表的是标准的2D地图,camera是垂直向下看.
- heading.camera的朝向.
- center.
.....