IOS开发 地图定位 使用
2014-09-17 20:11
411 查看
本文小白 仅供提醒
IOS地图的使用情况问题
1 创建地图 地图定位
map = [[MKMapViewalloc]initWithFrame:self.view.bounds];
//
只读属性 火星地图 -
火星坐标
map.showsUserLocation =YES;
//
标准地图
map.mapType =MKMapTypeStandard;
[self.viewaddSubview:map];
//
地图定位
locationManager = [[CLLocationManageralloc]
init];
locationManager.delegate =self;
//要求CLLocationManager对象返回全部结果
[locationManagersetDistanceFilter:kCLDistanceFilterNone];
//要求CLLocationManager对象的返回结果尽可能的精准
[locationManagersetDesiredAccuracy:kCLLocationAccuracyBest];
[locationManagerstartUpdatingLocation];
2. 本人困扰的问题 火星坐标与实际的坐标关系
火星坐标 : 谷歌地图
地图坐标 实际的位置
火星坐标不能转到实际坐标 (不知道原因啊)
以下是实际坐标转火星坐标
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface WGS_84 :NSObject
//判断是否已经超出中国范围
+(BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location;
//转GCJ-02
+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc;
@end
#import "WGS-84.h"
const double a =
6378245.0;
const double ee =
0.00669342162296594323;
const double pi =
3.14159265358979324;
@implementation WGS_84
+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc
{
CLLocationCoordinate2D adjustLoc;
if([selfisLocationOu
e713
tOfChina:wgsLoc]){
adjustLoc = wgsLoc;
}else{
double adjustLat = [selftransformLatWithX:wgsLoc.longitude
-105.0 withY:wgsLoc.latitude -35.0];
double adjustLon = [selftransformLonWithX:wgsLoc.longitude
-105.0 withY:wgsLoc.latitude -35.0];
double radLat = wgsLoc.latitude /180.0 *
pi;
double magic =
sin(radLat);
magic =1 -
ee * magic * magic;
double sqrtMagic =
sqrt(magic);
adjustLat = (adjustLat *180.0) / ((a * (1 -ee))
/ (magic * sqrtMagic) * pi);
adjustLon = (adjustLon *180.0) / (a / sqrtMagic *cos(radLat) *
pi);
adjustLoc.latitude = wgsLoc.latitude + adjustLat;
adjustLoc.longitude = wgsLoc.longitude + adjustLon;
}
return adjustLoc;
}
//判断是不是在中国
+(BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location
{
if (location.longitude <72.004 || location.longitude
>137.8347 || location.latitude <0.8293 || location.latitude >55.8271)
return
YES;
return
NO;
}
+(double)transformLatWithX:(double)x withY:(double)y
{
double lat = -100.0 +2.0 * x +
3.0 * y +0.2 * y * y +
0.1 * x * y +0.2 *
sqrt(abs(x));
lat += (20.0 *sin(6.0 * x *pi) +
20.0 *sin(2.0 * x *pi)) *
2.0 /3.0;
lat += (20.0 *sin(y *
pi) +40.0 *
sin(y /3.0 *
pi)) *2.0 /
3.0;
lat += (160.0 *sin(y /
12.0 *pi) +
3320 *sin(y *
pi /30.0)) *
2.0 /3.0;
return lat;
}
+(double)transformLonWithX:(double)x withY:(double)y
{
double lon =
300.0 + x +2.0 * y +
0.1 * x * x +0.1 * x * y +
0.1 *sqrt(abs(x));
lon += (20.0 *sin(6.0 * x *pi) +
20.0 *sin(2.0 * x *pi)) *
2.0 /3.0;
lon += (20.0 *sin(x *
pi) +40.0 *
sin(x /3.0 *
pi)) *2.0 /
3.0;
lon += (150.0 *sin(x /
12.0 *pi) +
300.0 *sin(x /
30.0 *pi)) *
2.0 /3.0;
return lon;
}
@end
//CLLocationManager委托方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
*)locations{
//得到newLocation
CLLocation *loc = [locations
objectAtIndex:0];
//判断是不是属于国内范围
if (![WGS_84isLocationOutOfChina:[loc
coordinate]]) {
//转换后的coord
coord = [WGS_84transformFromWGSToGCJ:[loc
coordinate]];
}
}
// 定位后,移动到当前位置
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation
*)newLocation fromLocation:(CLLocation *)oldLocation {
[locationManagerstopUpdatingLocation];
NSString *strLat = [NSStringstringWithFormat:@"%.4f",newLocation.coordinate.latitude];
NSString *strLng = [NSStringstringWithFormat:@"%.4f",newLocation.coordinate.longitude];
NSLog(@"Lat: %@ Lng: %@", strLat, strLng);
coord =
CLLocationCoordinate2DMake(newLocation.coordinate.latitude,newLocation.coordinate.longitude);
float zoomLevel =
0.02;
MKCoordinateRegion region =MKCoordinateRegionMake(coord,MKCoordinateSpanMake(zoomLevel,
zoomLevel));
[map setRegion:[mapregionThatFits:region]
animated:YES];
[selfcreateAnnotationWithCoords:coord];
}
IOS地图的使用情况问题
1 创建地图 地图定位
map = [[MKMapViewalloc]initWithFrame:self.view.bounds];
//
只读属性 火星地图 -
火星坐标
map.showsUserLocation =YES;
//
标准地图
map.mapType =MKMapTypeStandard;
[self.viewaddSubview:map];
//
地图定位
locationManager = [[CLLocationManageralloc]
init];
locationManager.delegate =self;
//要求CLLocationManager对象返回全部结果
[locationManagersetDistanceFilter:kCLDistanceFilterNone];
//要求CLLocationManager对象的返回结果尽可能的精准
[locationManagersetDesiredAccuracy:kCLLocationAccuracyBest];
[locationManagerstartUpdatingLocation];
2. 本人困扰的问题 火星坐标与实际的坐标关系
火星坐标 : 谷歌地图
地图坐标 实际的位置
火星坐标不能转到实际坐标 (不知道原因啊)
以下是实际坐标转火星坐标
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface WGS_84 :NSObject
//判断是否已经超出中国范围
+(BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location;
//转GCJ-02
+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc;
@end
#import "WGS-84.h"
const double a =
6378245.0;
const double ee =
0.00669342162296594323;
const double pi =
3.14159265358979324;
@implementation WGS_84
+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc
{
CLLocationCoordinate2D adjustLoc;
if([selfisLocationOu
e713
tOfChina:wgsLoc]){
adjustLoc = wgsLoc;
}else{
double adjustLat = [selftransformLatWithX:wgsLoc.longitude
-105.0 withY:wgsLoc.latitude -35.0];
double adjustLon = [selftransformLonWithX:wgsLoc.longitude
-105.0 withY:wgsLoc.latitude -35.0];
double radLat = wgsLoc.latitude /180.0 *
pi;
double magic =
sin(radLat);
magic =1 -
ee * magic * magic;
double sqrtMagic =
sqrt(magic);
adjustLat = (adjustLat *180.0) / ((a * (1 -ee))
/ (magic * sqrtMagic) * pi);
adjustLon = (adjustLon *180.0) / (a / sqrtMagic *cos(radLat) *
pi);
adjustLoc.latitude = wgsLoc.latitude + adjustLat;
adjustLoc.longitude = wgsLoc.longitude + adjustLon;
}
return adjustLoc;
}
//判断是不是在中国
+(BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location
{
if (location.longitude <72.004 || location.longitude
>137.8347 || location.latitude <0.8293 || location.latitude >55.8271)
return
YES;
return
NO;
}
+(double)transformLatWithX:(double)x withY:(double)y
{
double lat = -100.0 +2.0 * x +
3.0 * y +0.2 * y * y +
0.1 * x * y +0.2 *
sqrt(abs(x));
lat += (20.0 *sin(6.0 * x *pi) +
20.0 *sin(2.0 * x *pi)) *
2.0 /3.0;
lat += (20.0 *sin(y *
pi) +40.0 *
sin(y /3.0 *
pi)) *2.0 /
3.0;
lat += (160.0 *sin(y /
12.0 *pi) +
3320 *sin(y *
pi /30.0)) *
2.0 /3.0;
return lat;
}
+(double)transformLonWithX:(double)x withY:(double)y
{
double lon =
300.0 + x +2.0 * y +
0.1 * x * x +0.1 * x * y +
0.1 *sqrt(abs(x));
lon += (20.0 *sin(6.0 * x *pi) +
20.0 *sin(2.0 * x *pi)) *
2.0 /3.0;
lon += (20.0 *sin(x *
pi) +40.0 *
sin(x /3.0 *
pi)) *2.0 /
3.0;
lon += (150.0 *sin(x /
12.0 *pi) +
300.0 *sin(x /
30.0 *pi)) *
2.0 /3.0;
return lon;
}
@end
//CLLocationManager委托方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
*)locations{
//得到newLocation
CLLocation *loc = [locations
objectAtIndex:0];
//判断是不是属于国内范围
if (![WGS_84isLocationOutOfChina:[loc
coordinate]]) {
//转换后的coord
coord = [WGS_84transformFromWGSToGCJ:[loc
coordinate]];
}
}
// 定位后,移动到当前位置
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation
*)newLocation fromLocation:(CLLocation *)oldLocation {
[locationManagerstopUpdatingLocation];
NSString *strLat = [NSStringstringWithFormat:@"%.4f",newLocation.coordinate.latitude];
NSString *strLng = [NSStringstringWithFormat:@"%.4f",newLocation.coordinate.longitude];
NSLog(@"Lat: %@ Lng: %@", strLat, strLng);
coord =
CLLocationCoordinate2DMake(newLocation.coordinate.latitude,newLocation.coordinate.longitude);
float zoomLevel =
0.02;
MKCoordinateRegion region =MKCoordinateRegionMake(coord,MKCoordinateSpanMake(zoomLevel,
zoomLevel));
[map setRegion:[mapregionThatFits:region]
animated:YES];
[selfcreateAnnotationWithCoords:coord];
}
相关文章推荐
- iOS定位服务与地图开发(5)---使用程序外地图之调用iOS 6苹果地图
- IOS使用内置地图,定位应用开发
- iOS定位服务与地图开发(7)---使用本地化的百度地图
- iOS定位服务与地图开发(6)---使用程序外地图之调用谷歌Web地图
- Android Map Api 使用和开发(2) 定位我的位置、地图弹出泡泡、通过经纬度获取地址
- Android Map Api 使用和开发(2) 定位我的位置、地图弹出泡泡、通过经纬度获取地址
- IOS开发学习笔记(十六)——使用地理位置及地图(上篇)
- IOS 地图定位,标记位置,获取经纬度,MKMapView的使用
- IOS之地图和定位应用开发
- 转载 Android Map Api 使用和开发 定位我的位置、地图弹出泡泡、通过经纬度获取地址 浮动搜索框 ,通过地址名称获取经纬度和详细地址并定位
- IOS之地图和定位应用开发
- IOS开发学习笔记(十七)——使用地理位置及地图(中篇)
- Delphi for iOS开发指南(12):在iOS Device中使用地理定位
- IOS之地图和定位应用开发
- IOS开发学习笔记(十八)——使用地理位置及地图(下篇)
- Android Map Api 使用和开发(2) 定位我的位置、地图弹出泡泡、通过经纬度获取地址
- ios使用地图定位记录运动轨迹
- iOS 地图开发与定位
- iOS 6 开发---开发定位服务的App-在地图上标注位置
- iOS开发之地图和定位应用开发