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度
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度包含多少个像素,我们就可以随意按像素来移动地图。
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深入分析相关推荐
- Region相关算子
Region特征分为三部分 (1)基础特征:region面积,中心,宽高,左上角右下角坐标,等效椭圆长半轴短半轴方向,洞数及其面积,粗糙度,联通数,最大半径等. (2)开关特征:外接圆半径,内接圆半径 ...
- iOS 地图制作讲义
一.系统原生地图 1.什么是LBS LBS:基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,百度地图 2.定位原理 1.GPS定位 2. ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...
- 苹果自带地图进行定位
最近项目中遇到了关于地图定位的需求,考虑到用三方库的话项目会变大,还是用了官方自带的地图. 这是结果图: 一.CoreLocation.frame是iPhone SDK中用来检测用户位置的框架. 1. ...
- iOS 笔记 【经典】
MVC模式:(model+view+controller):是一种帮你把代码功能和显示划分出来的设计模式: model:较为底层的数据引擎,负责管理实体中所继承的数据: view:和用户交互界面: c ...
- MapKit 教程: 覆盖物
原文:MapKit Tutorial: Overlay Views 作者:Owen Brown 译者:kmyhy 更新说明:本教程由 Owen Brown 更新至 Xcode 9.iOS 11 和 S ...
- HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
hgroup <hgroup> 标签用于对网页或区段(section)的标题进行组合. <hgroup><h1>Welcome to my WWF</h1&g ...
- C#使用xpath简单爬取网站的内容
public static void Get(){// string xpathtrI = "//*[@id='classify-list']/dl/dd/a/cite/span/i&quo ...
- Orchard:处理1对多的关系
建立个人通讯内容时,从一个城市列表中下拉选择所在城市是非常普通的一个应用,这就是1-n的关系,本篇介绍Orchard如何支持1对多的关系.这里我们建立一个Address part,它将用在一个Cust ...
最新文章
- pandas之loc iloc ix
- 【报错笔记】数据类型转换时报错:Request processing failed;nested exception is java.lang.NumberFormatException:...
- Cordova - 彻底搞定IOS编译!
- matlab显示曲线图中某个点的坐标值
- UnixBench算分介绍
- mysql1241 错误,[Err] 1241 - Operand should contain 1 column(s)错误解析
- 成员变量与局部变量 java 1613807617
- java 获取网卡信息_java 使用 java.net.InterfaceAddress 获取网卡信息
- Vue+elementUI+springboot+mybatis demo教程(二)
- 设计灵感|见过如此吸睛的,单色调Banner设计么?
- [HDU1712]ACboy needs your help
- linux 常用压缩命令,Linux常用的压缩及解压缩命令
- leetcode 39. Combination Sum(回溯算法)
- 代码管理学:代码分堆
- 2.SQL之条件查询
- 深海泰坦x86_八代标压,深海泰坦X8Ti深度评测
- HRT:使用Huge Pages进行低延迟优化
- 只查看ett.txt文件(100行)内第20行到30行的内容
- 波士顿犯罪数据时空分析及可视化
- linux 磁盘io技术3------libaio使用介绍