你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> ISO GPS定位,坐標轉換以及如何顯示

ISO GPS定位,坐標轉換以及如何顯示

編輯:IOS開發綜合

這個寫的公共類叫做:GPScombineClass類主要展示GPS位置的定位,GPS坐標的獲取,然後從手機坐標轉換成火星坐標,繼而在需要的情況下,由火星轉百度 ,百度轉火星的詳細算法;


在GPScombineClass.h中


#import

#import

#import "CSqlite.h"

#import

@interface GPScombineClass : NSObject{

CLLocationManager *locationManager;

CSqlite *m_sqlite;

UILabel *m_locationName;

MKMapView *mainMapView;

@public CLLocationCoordinate2D baidulocation;

CLLocationCoordinate2D deleeverLocation;

}

-(void)OpenGPSmapView;

//在地圖上放上自己的位置--外接接口

-(void)setMyMapPonitByMKMapView:(MKMapView *)MyMap;

@end

@interface POI : NSObject {

CLLocationCoordinate2D coordinate;

NSString *subtitle;

NSString *title;

}


@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;

@property (nonatomic,retain) NSString *subtitle;

@property (nonatomic,retain) NSString *title;


-(id) initWithCoords:(CLLocationCoordinate2D) coords;


@end


在GPScombineClass.m中


#import "GPScombineClass.h"


const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

@implementation GPScombineClass

-(void)OpenGPSmapView{

m_sqlite = [[CSqlite alloc]init];

[m_sqlite openSqlite];

if ([CLLocationManager locationServicesEnabled]) { // 檢查定位服務是否可用

locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = self;

locationManager.distanceFilter=0.5;

locationManager.desiredAccuracy = kCLLocationAccuracyBest;

[locationManager startUpdatingLocation]; // 開始定位

}

NSLog(@"GPS 啟動");

}


// 定位成功時調用

- (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

fromLocation:(CLLocation *)oldLocation

{

CLLocationCoordinate2D mylocation = newLocation.coordinate;//手機GPS

mylocation = [self zzTransGPS:mylocation];///轉換成火星GPS

deleeverLocation=mylocation;

baidulocation=[self hhTrans_bdGPS:mylocation];//轉換成百度地圖

/*

//顯示火星坐標

[self SetMapPoint:mylocation MKMapView:mainMapView];

/////////獲取位置信息

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks,NSError *error)

{

if (placemarks.count >0 )

{

CLPlacemark * plmark = [placemarks objectAtIndex:0];

NSString * country = plmark.country;

NSString * city = plmark.locality;

NSLog(@"%@-%@-%@",country,city,plmark.name);

self->m_locationName.text =plmark.name;

NSLog(@"%@",self->m_locationName);

}

NSLog(@"%@",placemarks);

}];

//[geocoder release];

*/

}

// 定位失敗時調用

- (void)locationManager:(CLLocationManager *)manager

didFailWithError:(NSError *)error {

NSLog(@"定位失敗");

}


//把手機GPS坐標轉換成火星坐標 (google坐標)

-(CLLocationCoordinate2D)zzTransGPS:(CLLocationCoordinate2D)yGps

{

int TenLat=0;

int TenLog=0;

TenLat = (int)(yGps.latitude*10);

TenLog = (int)(yGps.longitude*10);

NSString *sql = [[NSString alloc]initWithFormat:@"select offLat,offLog from gpsT where lat=%d and log = %d",TenLat,TenLog];

NSLog(sql);

sqlite3_stmt* stmtL = [m_sqlite NSRunSql:sql];

int offLat=0;

int offLog=0;

while (sqlite3_step(stmtL)==SQLITE_ROW)

{

offLat = sqlite3_column_int(stmtL, 0);

offLog = sqlite3_column_int(stmtL, 1);

}

yGps.latitude = yGps.latitude+offLat*0.0001;

yGps.longitude = yGps.longitude + offLog*0.0001;

return yGps;

}

//在地圖上放上自己的位置--外接接口

-(void)setMyMapPonitByMKMapView:(MKMapView *)MyMap{

//顯示火星坐標

[self SetMapPoint:deleeverLocation MKMapView:MyMap];

MyMap=mainMapView;

}

//在地圖上放上自己的位置

-(void)SetMapPoint:(CLLocationCoordinate2D)myLocation MKMapView:(MKMapView *)mapView

{

// POI* m_poi = [[POI alloc]initWithCoords:myLocation];

//

// [mapView addAnnotation:m_poi];

MKCoordinateRegion theRegion = { {0.0, 0.0 }, { 0.0, 0.0 } };

theRegion.center=myLocation;

[mapView setZoomEnabled:YES];

[mapView setScrollEnabled:YES];

theRegion.span.longitudeDelta = 0.01f;

theRegion.span.latitudeDelta = 0.01f;

[mapView setRegion:theRegion animated:YES];

}


//把火星坐標轉換成百度坐標

-(CLLocationCoordinate2D)hhTrans_bdGPS:(CLLocationCoordinate2D)fireGps

{

CLLocationCoordinate2D bdGps;

double huo_x=fireGps.longitude;

double huo_y=fireGps.latitude;

double z = sqrt(huo_x * huo_x + huo_y * huo_y) + 0.00002 * sin(huo_y * x_pi);

double theta = atan2(huo_y, huo_x) + 0.000003 * cos(huo_x * x_pi);

bdGps.longitude = z * cos(theta) + 0.0065;

bdGps.latitude = z * sin(theta) + 0.006;

return bdGps;

}

#pragma mark 顯示商品信息

#pragma mark

-(void)showPurchaseOnMapByLocation:(CLLocationCoordinate2D)baiduGPS MKMapView:(MKMapView *)myMapView{

CLLocationCoordinate2D googleGPS;

googleGPS=[self hhTrans_GCGPS:baiduGPS];//轉換為百度

[self SetPurchaseMapPoint:googleGPS MKMapView:myMapView];

}

//把百度地圖轉換成谷歌地圖--火星坐標

-(CLLocationCoordinate2D)hhTrans_GCGPS:(CLLocationCoordinate2D)baiduGps

{

CLLocationCoordinate2D googleGps;

double bd_x=baiduGps.longitude - 0.0065;

double bd_y=baiduGps.latitude - 0.006;

double z = sqrt(bd_x * bd_x + bd_y * bd_y) - 0.00002 * sin(bd_y * x_pi);

double theta = atan2(bd_y, bd_x) - 0.000003 * cos(bd_x * x_pi);

googleGps.longitude = z * cos(theta);

googleGps.latitude = z * sin(theta);

return googleGps;

}


-(void)SetPurchaseMapPoint:(CLLocationCoordinate2D)myLocation MKMapView:(MKMapView *)mapView

{

POI* m_poi = [[POI alloc]initWithCoords:myLocation];

[mapView addAnnotation:m_poi];

MKCoordinateRegion theRegion = { {0.0, 0.0 }, { 0.0, 0.0 } };

theRegion.center=myLocation;

[mapView setZoomEnabled:YES];

[mapView setScrollEnabled:YES];

theRegion.span.longitudeDelta = 0.01f;

theRegion.span.latitudeDelta = 0.01f;

[mapView setRegion:theRegion animated:YES];}


@end



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved