顯示地圖

weixin_34393428發表於2017-04-18

理解幾何地圖

在地圖上你要怎麼表示點的資料依賴於你想要怎麼使用它們.Map Kit支援以下三種基礎座標來表示特定的地圖上的點資料:

  • map coordinate(地圖座標):是一種用經緯度來表示的座標.用CLLocationCoordinate2D結構.你可以用MKCoordinateSpanMKCoordinateRegion結構來表示區域.
  • map point(地圖點):墨卡托地圖投影上x和y的值.map point用於許多地圖相關的計算,而不是地圖座標,因為它們簡化了計算中涉及的數學。在你的app裡,您主要在指定自定義地圖疊加層的形狀和位置時使用地圖點。你可以用MKMapPoint結構來表示一個單獨的map point.你可以用MKMapSizeMKMapRect結構來表示一個區域.
  • Point是和座標系統相關聯的view物件上的平面單位.Map PointMap Coordinates在顯示自定義內容前都必須轉成Points.用CGPoint結構表示一個單獨的點,用CGSizeCGRect來表示一個區域.

座標系統之間的轉換

當你需要時你可以兩種座標系統之間進行轉換,比如你要加自定義的覆蓋物(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也隨著地圖滾動,你必須使用annotationsoverlays(比如:導航的路線).

配置地圖屬性

MKMapView類有多個你可以配置的屬性.這些屬性控制了一些重要的資訊,比如當前顯示的是哪部分的地圖,是否顯示3D內容,使用者的互動是否允許.

設定地圖的顯示區域

MKMapViewregion屬性控制了地圖的當前顯示區域.當一個地圖剛被建立時,它的顯示區域通常是儘可能大的區域.

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.

.....

相關文章