您的位置:首页 > 移动开发 > IOS开发

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 地图 谷歌地图