日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MKMapView的Span和Region深入分析

發布時間:2024/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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深入分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。