IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」IOS地图定位,标注地图,获取经纬度:一、使用MKMapView定位二、在地图上通过经纬度标注(大头针)项目源码:http://download.csdn.net/detail/swingpyzf/6569785最终效果图:打开应用程序会自动定位并且放大到自己的位置,然后在我的位置上显示自己的经纬度,通过填写经纬度可以放置大头针标

大家好,又见面了,我是你们的朋友全栈君。

IOS 地图定位,标注地图,获取经纬度:

一、使用MKMapView 定位

二、在地图上通过经纬度标注(大头针)

项目源码:http://download.csdn.net/detail/swingpyzf/6569785


最终效果图:

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」打开应用程序会自动定位并且放大到自己的位置,然后在我的位置上显示自己的经纬度,通过填写经纬度可以放置大头针标注。


一、获取自身的位置和经纬度


1、新建项目,将ios的提供位置服务和地图服务的库加入到项目中 点项目名->Build Phases点开Link Binary With Libraries

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」将CoreLocation和MapKit两个库加入到项目中,前者是ios的位置服务库,后者是操作MKMapView的库

2、新建UIViewController 控件布局和设置好关系属性。导入<CoreLocation/CoreLocation.h>和<MapKit/MapKit.h>

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」

还要让控制器类实现MKMapViewDelegate协议

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. #import <UIKit/UIKit.h>  
  2. #import <MapKit/MapKit.h>  
  3. #import <CoreLocation/CoreLocation.h>  
  4.   
  5. @interface MainViewController : UIViewController<MKMapViewDelegate,UITextFieldDelegate>  
  6.   
  7. //经度  
  8. @property (weak, nonatomic) IBOutlet UITextField *longitudeText;  
  9. //纬度  
  10. @property (weak, nonatomic) IBOutlet UITextField *latitudeText;  
  11. //地图  
  12. @property (weak, nonatomic) IBOutlet MKMapView *mapView;  
  13. //自己经度  
  14. @property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;  
  15. //自己纬度  
  16. @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;  
  17.   
  18. //放置标注Button  
  19. – (IBAction)annotationAction:(id)sender;  
  20.   
  21. @end  



3、MKMapView可以通过 setShowsUserLocation:YES这个方法来获取自己的位置,并且当地图更新自己的位置后会调用

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation的一个协议的委托方法,我要在这个方法里面试实现当地图位置更新后/获取自己位置后对地图进行放大。

首先在viewDidLoad方法里对让地图调用setShowsUserLocation方法来实现地图的定位,并且设置MapView的委托类。

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. – (void)viewDidLoad  
  2. {  
  3.     //设置MapView的委托为自己  
  4.     [self.mapView setDelegate:self];  
  5.       
  6.     //标注自身位置  
  7.     [self.mapView setShowsUserLocation:YES];  
  8.       
  9.     [super viewDidLoad];  
  10. }  

然后实现
-(
void
)mapView:(
MKMapView
 *)mapView didUpdateUserLocation:(
MKUserLocation
 *)userLocation方法:

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. //MapView委托方法,当定位自身时调用  
  2. -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{  
  3.     CLLocationCoordinate2D loc = [userLocation coordinate];      
  4.     //放大地图到自身的经纬度位置。  
  5.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250250);  
  6.     [self.mapView setRegion:region animated:YES];  
  7. }  

CLLocationCoordinate2D 是一个结构体记录经纬度,通过地图的获取的location来给其赋值。

运行一下程序地图载入的同时获得自身的位置,并且会自动放大到你所在的位置。

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」

调试位置:

模拟器在运行的时候,可以自定义的设置其自身所在的位置

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」

4、获取自身的经纬度显示在两个label上,还是在-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation方法里面实现,通过MKUserLocation这个类里面有经度和纬度的属性,直接拿出来显示在label上

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. //MapView委托方法,当定位自身时调用  
  2. -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{  
  3.     CLLocationCoordinate2D loc = [userLocation coordinate];  
  4.     //显示到label上  
  5.     self.longitudeLabel.text = [NSString stringWithFormat:@”%f”,loc.longitude];  
  6.       
  7.     self.latitudeLabel.text = [NSString stringWithFormat:@”%f”,loc.latitude];  
  8.       
  9.     //放大地图到自身的经纬度位置。  
  10.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250250);  
  11.     [self.mapView setRegion:region animated:YES];  
  12. }  



二、在地图上加上标注(大头针)

1、要给地图添加标注,就要自己实现一个标注类,这个类必须实现MKAnnotation协议,MKAnnotation有个必须要定义的属性

CLLocationCoordinate2D coordinate;

新建一个 MyPoint类继承自NSObject类并且实现<MKAnnotation>协议然后定义下列属性:

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. #import <Foundation/Foundation.h>  
  2. #import <MapKit/MapKit.h>  
  3.   
  4.   
  5. @interface MyPoint : NSObject <MKAnnotation>  
  6.   
  7. //实现MKAnnotation协议必须要定义这个属性  
  8. @property (nonatomic,readonly) CLLocationCoordinate2D coordinate;  
  9. //标题  
  10. @property (nonatomic,copyNSString *title;  
  11.   
  12. //初始化方法  
  13. -(id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString*)t;  
  14.   
  15. @end  



在.m文件里实现init方法

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. #import “MyPoint.h”  
  2.   
  3. @implementation MyPoint  
  4.   
  5. -(id)initWithCoordinate:(CLLocationCoordinate2D)c andTitle:(NSString *)t{  
  6.     self = [super init];  
  7.     if(self){  
  8.         _coordinate = c;  
  9.         _title = t;  
  10.     }  
  11.     return self;  
  12. }  
  13.   
  14. @end  



以上就是一个简单的标注类了。

2、回到ViewController类中在button按钮关联的- (IBAction)annotationAction:(id)sender方法中实现标注:

首先通过UITextField所填写的经纬度创建一个CLLocation类,然后赋值给CLLocationCoordinate2D:

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. //创建CLLocation 设置经纬度  
  2.     CLLocation *loc = [[CLLocation alloc]initWithLatitude:[[self.latitudeText text] floatValue] longitude:[[self.longitudeText text] floatValue]];  
  3.     CLLocationCoordinate2D coord = [loc coordinate];  


创建MyPoint实例最后调用MKMapView的addAnnotation方法将MyPoint的实例加入到标注中:- (IBAction)annotationAction:(id)sender中的实现:

[objc] 
view plain
copy
print
?
在CODE上查看代码片
派生到我的代码片

  1. //放置标注  
  2. – (IBAction)annotationAction:(id)sender {  
  3.     //创建CLLocation 设置经纬度  
  4.     CLLocation *loc = [[CLLocation alloc]initWithLatitude:[[self.latitudeText text] floatValue] longitude:[[self.longitudeText text] floatValue]];  
  5.     CLLocationCoordinate2D coord = [loc coordinate];  
  6.     //创建标题  
  7.     NSString *titile = [NSString stringWithFormat:@”%f,%f”,coord.latitude,coord.longitude];  
  8.     MyPoint *myPoint = [[MyPoint alloc] initWithCoordinate:coord andTitle:titile];  
  9.     //添加标注  
  10.     [self.mapView addAnnotation:myPoint];  
  11.       
  12.     //放大到标注的位置  
  13.     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(coord, 250250);  
  14.     [self.mapView setRegion:region animated:YES];  
  15. }  

另外还可以使用[self.mapView addAnnotations:NSArray]这个方法,这个方法的参数是一个数组对象,可以同时给地图上添加多个标注。

3、最后运行程序填入经纬度,就能给地图加上标注了。

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152816.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RCU 机制_NRPS作用机制

    RCU 机制_NRPS作用机制《RCU是什么?》第一部分概述Read-copyupdate(RCU)是一种2002年10月被引入到内核当中的同步机制。通过允许在更新的同时读数据,RCU提高了同步机制的可伸缩性(scalability)。相对于传统的在并发线程间不区分是读者还是写者的简单互斥性锁机制,或者是哪些允许并发读但同时不允许写的读写锁,RCU支持同时一个更新线程和多个读线程的并发。R…

    2025年5月26日
    5
  • centos安装python环境

    centos安装python环境centos安装python环境查看系统自带版本查看系统自带版本位置下面介绍安装Python3的方法下载python包解压安装包创建软链接升级pip测试python3由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。查看系统自带版本输入Python命令,查看可以得知是Python2.7.5版本查看系统自带版本位置whichpython一般是位于/usr/bin/python目录下。下面介绍安装Python3的方法

    2022年6月29日
    37
  • js的链表排序_排序js

    js的链表排序_排序jsjs链表的排序链表数据交换的心得假如通过两个地址进行交换节点内容时,也应当将我们的next来进行交换赋值,或者可以不改动我们的next,通过定义数据的中间量来将我们的数据进行改变通过while循环找到我们想要交换的节点sersort(){letp=this.head;letpp=p;…

    2022年10月11日
    3
  • 信道估计算法_时域信道估计算法

    信道估计算法_时域信道估计算法信道估计算法目前我所涉及的是短波宽带无线信道下的接收端的处理,包括捕获、同步、信道估计及信道均衡,还有译码。百度百科里是这样解释这种信道的:短波通信发射电波要经电离层的反射才能到达接收设备,通信距离较远,是远程通信的主要手段。由于电离层的高度和密度容易受昼夜、季节、气候等因素的影响,所以短波通信的稳定性较差,噪声较大。因此在仿真的时候,着重仿真的是系统在加了噪声、多径、衰落情况下的接收端的性能。在接

    2025年8月6日
    5
  • idea创建java项目_使用IDEA创建java项目(hello word)

    idea创建java项目_使用IDEA创建java项目(hello word)前提:已安装好jdk,配置好环境变量。我使用的是java8首先在自己的D盘下建一个文件夹,用来存放我们待会新建的项目,我创建了IdeaProject:1,第一步打开idea2,第二步选择创建java项目,并选择自己的jdk(我自己本地已经配置了所以有),没有可以点击new去自己的安装目录下找,一般默认安装C:\ProgramFiles\Java,然后选择next下一步3,第三步将“Creat…

    2022年7月9日
    63
  • Python优秀开源项目Rich源码解析

    Python优秀开源项目Rich源码解析这篇文章对优秀的开源项目Rich的源码进行解析,OMG,盘他。为什么建议阅读源码,有两个原因,第一,单纯学语言很难在实践中灵活应用,通过阅读源码可以看到每个知识点的运用场景,印象会更深,以后写代码的时

    2022年7月5日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号