2014-01-13 101 views
2

我讀蘋果文檔難點理解MapKit座標系統

「A地圖點在所述墨卡托地圖投影的x和y值」 點是用一個UIView的座標系相關聯的圖形單元

Point和MKPoint在邏輯上有什麼區別? 我顯然需要CGPoint來在屏幕上顯示一些東西。 那麼爲什麼MapKit需要MKMapPoint呢?

回答

2

您的地理位置(座標)的CGPoint,無論是CGPointMKMapPoint結構發生存儲命名xy是無關的兩個浮點值的事實。

它們被賦予不同的名稱,因爲它們在邏輯上處理不同的座標系,變換,範圍和尺度。

二維世界地圖需要大的,固定的座標系統,使一個緯度和經度被轉換成一固定在地圖上而不管當前正在顯示在屏幕上什麼

MKMapPoint值的範圍很大,因爲它們需要以足夠高的分辨率(遠遠超出屏幕尺寸)來表示世界座標。

但是,您並不需要關心MKMapPoint的的實際值。有時,您可能需要將CLLocationCoordinate2D轉換爲MKMapPoint(或其他方式),但您不必擔心這些值,也不應該存儲它們(文檔建議不要這樣做,因爲內部投影計算將轉換爲二維投影的經緯度可能會在iOS版本之間發生變化)。

你的MKMapPoint的使用僅僅是你正在處理與地圖的2D投影的基礎獨立設備的屏幕尺寸或哪一部分的地圖的當前顯示上。


我顯然需要CGPoint顯示屏幕上的內容。

是的,但是在添加註釋或覆蓋圖時,您通常會處理CLLocationCoordinate2D值,並讓地圖視圖根據需要執行轉換。

2

MKMapPoint是一個地理點 - 投影轉換的經度和緯度。在屏幕上你有一些包含你的mapView的有界視圖。而你需要轉換你的MapView的

CLLocationCoordinate2D coord; 
coord.latitude = location.latitude.doubleValue; 
coord.longitude = location.longitude.doubleValue; 

MKMapPoint point = MKMapPointForCoordinate(coord); 

CGPoint cgpoint = [mapView convertCoordinate:coord toPointToView:mapView]; 
+0

我將經度/緯度(-68.062496 84.487590)轉換爲MKMapPoint = 83466652.564906 4613734.348645,然後CGPoint = 83466656.000000 4613734.500000。除了MKMapPoint支持CGPoint以外,還有大的價值本身83466656.00000。 CGPoint不應該在320到480之間的iPhone上使用? – jack

+0

地圖上的CGPoint取決於地圖的中心及其縮放。例如,你在屏幕上的紐約中心有一小塊gf地圖。那麼就屏幕座標而言,倫敦的地理位置將會很遠(320,480)。 – malex