MKMapView的Span和Region深入分析
很多人在第一次開發iPhone應用遇到地圖庫的時候,都會有這樣一個問題,iOS庫中MKMapView沒有zoomLevel這樣的概念,替代 的是MKCoordinateSpan和MKCoordinateRegion,那他們究竟代表什么意思呢?如何使用呢?我上網搜索了好久,也沒有人說的 很明白,解釋的很詳細。
后來應用都上架了很久,才弄清楚這兩個結構體的真正含義。我們來先看看蘋果官方文檔的解釋。
大概意思就是region表示地圖中的一塊區域,它有兩個字段一個是center,就是這塊區域中心點的經緯度;另一個是span,看下面解釋。
大概意思就是span表示的是regoin的范圍。它有兩個字段一個是latitudeDelta,表示緯度范圍,南緯和北緯加一起應該有180 度,所以它的范圍應該是大于0度,小于等于180度;另一個是longitudeDelta,表示經度范圍,東經和西經加一起應該有360度,所以它的范 圍應該是大于0度,小于360度。
看完了上面的解釋其實還不是很理解,需要用代碼來驗證一下上面的解釋。那我就舉一個例子,讓地圖正好顯示中國地圖全部。
我們先來看看中國地圖的經緯度范圍,百度搜索“中國經緯度范圍”,得出如下結果。
我們去掉其中的分值,可以得到:
中國中心點的緯度是(3 + 53)/ 2 = 北緯28度
中國中心點的經度是(73 + 135)/ 2 = 東經104度
中國緯度跨度是53 - 3 = 50度
中國經度跨度是135 - 73 = 62度
?
view sourceprint? 1.MKCoordinateSpan span = MKCoordinateSpanMake(50, 62); 2.CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(28, 104); 3.MKCoordinateRegion regoin = MKCoordinateRegionMake(coordinate, span); 4.[self.mapView setRegion:regoin animated:YES];
模擬器的運行效果如下:
?
如上圖,正好顯示了中國整個地圖全景,但是和我們設定的值不是太一樣,中心點的值是沒問題,主要是 self.mapView.region.span.latitudeDelta= 74.330273,并不是我們預設的50度,這是因為中國地圖比較寬,而iPhone手機是豎條狀的,為了適應經度范圍,緯度范圍被放大了。
當理解了latitudeDelta和longitudeDelta這兩個值的含義后,就可以知道地圖當前顯示區域1度包含多少個像素,我們就可以隨意按像素來移動地圖。
?
view sourceprint? 01.CGFloat offsetXPixel = -50; // 讓地圖向右移動50像素 02.CGFloat offsetYPixel = 100; // 讓地圖向下移動100像素 03.? 04.// 一個緯度單位包含幾個像素 05.CGFloat pixelsPerDegreeLat = self.mapView.frame.size.height / self.mapView.region.span.latitudeDelta; 06.? 07.// 一個經度單位包含幾個像素 08.CGFloat pixelsPerDegreeLon = self.mapView.frame.size.width / self.mapView.region.span.longitudeDelta; 09.? 10.// 把要移動的像素值換算成度數 11.CLLocationDegrees offsetLonDegree = offsetXPixel / pixelsPerDegreeLon; 12.CLLocationDegrees offsetLatDegree = offsetYPixel / pixelsPerDegreeLat; 13.? 14.// 不改變map的span值,只移動coordiante,這樣地圖不會放大縮小,只是平移 15.CLLocationCoordinate2D coordinate = { 16.self.mapView.region.center.latitude + offsetLatDegree, 17.self.mapView.region.center.longitude + offsetLonDegree 18.}; 19.? 20.[self.mapView setCenterCoordinate:coordinate animated:YES];轉載于:https://www.cnblogs.com/shuxiachahu123/p/5050359.html
總結
以上是生活随笔為你收集整理的MKMapView的Span和Region深入分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 参观北京移动信息港森华易腾机房
- 下一篇: VirtualBox中出现UUID ha