IOS开发 地图定位 使用

本文小白 仅供提醒

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([selfisLocationOutOfChina: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];

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值