很多人在第一次开发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深入分析相关推荐

  1. Region相关算子

    Region特征分为三部分 (1)基础特征:region面积,中心,宽高,左上角右下角坐标,等效椭圆长半轴短半轴方向,洞数及其面积,粗糙度,联通数,最大半径等. (2)开关特征:外接圆半径,内接圆半径 ...

  2. iOS 地图制作讲义

    一.系统原生地图 1.什么是LBS LBS:基于位置的服务   Location Based Service 实际应用:大众点评,陌陌,微信,百度地图 2.定位原理 1.GPS定位        2. ...

  3. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...

  4. 苹果自带地图进行定位

    最近项目中遇到了关于地图定位的需求,考虑到用三方库的话项目会变大,还是用了官方自带的地图. 这是结果图: 一.CoreLocation.frame是iPhone SDK中用来检测用户位置的框架. 1. ...

  5. iOS 笔记 【经典】

    MVC模式:(model+view+controller):是一种帮你把代码功能和显示划分出来的设计模式: model:较为底层的数据引擎,负责管理实体中所继承的数据: view:和用户交互界面: c ...

  6. MapKit 教程: 覆盖物

    原文:MapKit Tutorial: Overlay Views 作者:Owen Brown 译者:kmyhy 更新说明:本教程由 Owen Brown 更新至 Xcode 9.iOS 11 和 S ...

  7. HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav

    hgroup <hgroup> 标签用于对网页或区段(section)的标题进行组合. <hgroup><h1>Welcome to my WWF</h1&g ...

  8. C#使用xpath简单爬取网站的内容

    public static void Get(){// string xpathtrI = "//*[@id='classify-list']/dl/dd/a/cite/span/i&quo ...

  9. Orchard:处理1对多的关系

    建立个人通讯内容时,从一个城市列表中下拉选择所在城市是非常普通的一个应用,这就是1-n的关系,本篇介绍Orchard如何支持1对多的关系.这里我们建立一个Address part,它将用在一个Cust ...

最新文章

  1. pandas之loc iloc ix
  2. 【报错笔记】数据类型转换时报错:Request processing failed;nested exception is java.lang.NumberFormatException:...
  3. Cordova - 彻底搞定IOS编译!
  4. matlab显示曲线图中某个点的坐标值
  5. UnixBench算分介绍
  6. mysql1241 错误,[Err] 1241 - Operand should contain 1 column(s)错误解析
  7. 成员变量与局部变量 java 1613807617
  8. java 获取网卡信息_java 使用 java.net.InterfaceAddress 获取网卡信息
  9. Vue+elementUI+springboot+mybatis demo教程(二)
  10. 设计灵感|见过如此吸睛的,单色调Banner设计么?
  11. [HDU1712]ACboy needs your help
  12. linux 常用压缩命令,Linux常用的压缩及解压缩命令
  13. leetcode 39. Combination Sum(回溯算法)
  14. 代码管理学:代码分堆
  15. 2.SQL之条件查询
  16. 深海泰坦x86_八代标压,深海泰坦X8Ti深度评测
  17. HRT:使用Huge Pages进行低延迟优化
  18. 只查看ett.txt文件(100行)内第20行到30行的内容
  19. 波士顿犯罪数据时空分析及可视化
  20. linux 磁盘io技术3------libaio使用介绍

热门文章

  1. 好程序员分享大势所趋 HTML5成Web开发者最关心的技术
  2. PCA原理分析和意义(一)
  3. Java并发编程—锁的基本概念
  4. MyBatis入门HelloWorld,注解实现
  5. P1772 [ZJOI2006]物流运输 最短路+DP
  6. linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)
  7. QuickSort简解(分治思想) By ACReaper
  8. rabbitmq的相关知识
  9. 【BZOJ2118】墨墨的等式【循环节做法】
  10. Linux SSH基础