iOS LocateMap(地图定位)~demo
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
/**
注意点: 1.看 GIF 效果图.
2.看连线视图的效果图.
3.看实现代码(直接复制实现效果).
*/
一、GIF 效果图:
二、连线视图的效果图:
图1:
图2:
三、实现代码:
=========================
===================================================
==========================
/**
注意点: 在视图上面输入经纬度-->不能超出一下范围
1.纬度为 南纬90-0-北纬90
2.经度为 西经180-本出子午线(0度)-东经180
*/
控制器1:
//
// ViewController.m
// LocateMap(地图定位)
//
// Created by 石虎 on 2017/7/4.
// Copyright © 2017年 shihu. All rights reserved.
//
#import "ViewController.h"
#import <MapKit/MapKit.h>//地图
#import <CoreLocation/CoreLocation.h>//定位
@interface ViewController ()<MKMapViewDelegate>
//纬度字段
@property (weak,nonatomic)IBOutletUITextField *latitudeField;
//经度字段
@property (weak,nonatomic)IBOutletUITextField *longitudeField;
//地图 VIew
@property (weak,nonatomic)IBOutletMKMapView *mapView;
//原位置
- (IBAction)goClicked:(UIButton *)sender;
@end
/**
纬度为南纬90-0-北纬90
经度为西经180-本出子午线(0度)-东经180
市界的地理坐标为:北纬39”26’至41”03’,东经115”25’至 117”30’。
北京天安门广场的经纬度(东经:116°23′17〃,北纬:39°54′27〃
北京市区坐标为:北纬39.9”,东经116. 3”。
各郊区、县的地理坐标为:
房山区,北纬 39. 6”,东经115.9”;
门头沟区,北纬39.6o”,东经115.9;
大兴县,北纬39.7”,东经116.3”;
通县,北纬39.8”,东经116.6”,
顺义县,北纬40.l”,东经116.6”;
平谷县,北纬40 1”,东经117.1”
昌平县,北纬40.2”,东经116.2”;
怀柔县,北纬40.3”,东经116.6”;
密云县,北纬40.3”,东经116 8”;
延庆县,北纬40.4”,东经115.9”。
纬度:37.7858
经度 -122.406
*/
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/**类型
MKMapTypeStandard = 0,可映射类型标准
MKMapTypeSatellite, 可映射类型卫星
MKMapTypeHybrid, 可映射类型混合(普通地图覆盖于卫星云图之上)
MKMapTypeSatelliteFlyover MK地图类型的国家立交桥(3D立体卫星)
MKMapTypeHybridFlyover MK地图型混合飞行(3D立体混合)
*/
//设置地图的显示风格,此处设置使用标准地图
self.mapView.mapType = MKMapTypeStandard;
// 设置地图可缩放
self.mapView.zoomEnabled =YES;
// 设置地图可滚动
self.mapView.scrollEnabled =YES;
// 设置地图可旋转
self.mapView.rotateEnabled =YES;
//设置显示用户当前位置
self.mapView.showsUserLocation =YES;
// 为MKMapView设置delegate
self.mapView.delegate =self;
//调用自己实现的方法设置地图的显示位置和显示区域
[self locateToLatitude:23.126272 longitude:113.395568];
NSLog(@"用户当前是否位于地图中:%d" ,self.mapView.userLocationVisible);
}
- (IBAction)goClicked:(id)sender
{
//关闭两个文本框的虚拟键盘
[self.latitudeField resignFirstResponder];
[self.longitudeField resignFirstResponder];
NSString* latitudeStr = self.latitudeField.text;
NSString* longtitudeStr = self.longitudeField.text;
//如果用户输入的经度、纬度不为空
if (latitudeStr !=nil && latitudeStr.length >0
&& longtitudeStr != nil && longtitudeStr.length >0)
{
// 调用自己实现的方法设置地图的显示位置和显示区域
[self locateToLatitude:latitudeStr.floatValue
longitude:longtitudeStr.floatValue];
}
}
#pragma mark - 显示位置和显示区域 --封装
- (void)locateToLatitude:(CGFloat)latitude longitude:(CGFloat)longitude
{
//设置地图中心的经、纬度
CLLocationCoordinate2D center = {latitude , longitude};
//也可以使用如下方式设置经、纬度
//center.latitude = latitude;
//center.longitude = longitude;
//设置地图显示的范围,
MKCoordinateSpan span;
//地图显示范围越小,细节越清楚
span.latitudeDelta = 0.01;
span.longitudeDelta = 0.01;
// 创建MKCoordinateRegion对象,该对象代表了地图的显示中心和显示范围。
MKCoordinateRegion region = {center,span};
//设置当前地图的显示中心和显示范围
[self.mapView setRegion:region animated:YES];
}
#pragma mark -MKMapViewDelegate(地图代理)
// MKMapViewDelegate协议中的方法,当MKMapView显示区域将要发生改变时激发该方法
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
NSLog(@"地图控件的显示区域将要发生改变!");
}
// MKMapViewDelegate协议中的方法,当MKMapView显示区域改变完成时激发该方法
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animatedx
{
NSLog(@"地图控件的显示区域完成了改变!");
}
// MKMapViewDelegate协议中的方法,当MKMapView开始加载数据时激发该方法
- (void) mapViewWillStartLoadingMap:(MKMapView *)mapView
{
NSLog(@"地图控件开始加载地图数据!");
}
// MKMapViewDelegate协议中的方法,当MKMapView加载数据完成时激发该方法
- (void) mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
NSLog(@"地图控件加载地图数据完成!");
}
// MKMapViewDelegate协议中的方法,当MKMapView加载数据失败时激发该方法
- (void) mapViewDidFailLoadingMap:(MKMapView *)mapView
withError:(NSError *)error
{
NSLog(@"地图控件加载地图数据发生错误,错误信息 %@!" , error);
}
// MKMapViewDelegate协议中的方法,当MKMapView开始渲染地图时激发该方法
- (void) mapViewWillStartRenderingMap:(MKMapView *)mapView
{
NSLog(@"地图控件开始渲染地图!");
}
// MKMapViewDelegate协议中的方法,当MKMapView渲染地图完成时激发该方法
- (void) mapViewDidFinishRenderingMap:(MKMapView *)mapView
fullyRendered:(BOOL)fullyRendered
{
NSLog(@"地图控件渲染地图完成!");
}
@end
谢谢!!!